/ tmp 내부의 폴더가 정리되지 않도록하려면 어떻게합니까?


12

이 질문은 내 개발자 랩톱의 Ubuntu 14.10에 관한 것입니다.

/tmp거기에 임시 물건을 넣는 데 응용 프로그램에서 사용 하는 폴더 가 있습니다. 이 응용 프로그램은 일반적으로 내 homedir에 임시 폴더를 만들고 나중에 삭제합니다. 어떤 이유로 homedir이 암호화되면 작동하지 않습니다. 대신에 나는 /tmp/foo홈 디렉 내부에 심볼릭 링크를 만들었습니다 . 내 응용 프로그램에서 거기에 쓰고 임시 하위 폴더로 만들 수 있습니다.

이제 /tmp/foo컴퓨터를 재부팅 할 때마다 삭제됩니다. 지금까지는 재부팅 후 폴더를 수동으로 다시 만들었습니다. 이제 / tmp 디렉토리는 어떻게 정리됩니까? 에서 배웠 습니다. 그렇게하는 직업이 있다는 것입니다.

나는 보았지만 /etc/init/mounted-tmp.conf내 bashfu와 특히 findfu는 내가 원하는 것을하기에 충분하지 않습니다. 해당 파일에서 발췌 한 내용은 다음과 같습니다.

   EXCEPT='! -name .
            ! ( -path ./lost+found -uid 0 )
            ! ( -path ./quota.user -uid 0 )
            ! ( -path ./aquota.user -uid 0 )
            ! ( -path ./quota.group -uid 0 )
            ! ( -path ./aquota.group -uid 0 )
            ! ( -path ./.journal -uid 0 )
            ! ( -path ./.clean -uid 0 )
            ! ( -path "./...security*" -uid 0 )'

   # Remove all old files, then all empty directories
   find . -depth -xdev $TEXPR $EXCEPT ! -type d -delete
   find . -depth -xdev $DEXPR $EXCEPT -type d -empty -delete

내가하고 싶은 것은 내부의 모든 것을 삭제 /tmp/foo하지만 /tmp/foo자체 는 삭제 하지 않는 조건을 추가하는 것입니다. 어떻게해야합니까?


/tmp/foo디렉토리 나 파일이?
terdon

디렉토리. 안에 파일이 있습니다.
simbabque

mkdir /tmp/foo바로 추가하지 end script않습니까?
Hagen von Eitzen

참고로 (이미 알고있을 수도 있음) : 14.10은 2015 년 7 월 EOL에 도달하므로 가능한 빨리 Vivid로 업그레이드해야합니다.
Léo Lam

답변:


20

/etc/init/mounted-tmp.confmountall패키지의 일부이므로 해당 패키지의 모든 업데이트 및 제안 된 변경 사항이 되돌려집니다.

$ sudo dpkg -S /etc/init/mounted-tmp.conf 
mountall: /etc/init/mounted-tmp.conf

대신, 파일 시스템 계층 표준 (FHS)에 따라 ;

/ tmp 관련 :

프로그램은 / tmp의 파일 또는 디렉토리가 프로그램 호출간에 보존된다고 가정해서는 안됩니다.

에 관해서 는 / var / tmp를 :

/ var / tmp 디렉토리는 시스템 재부팅 사이에 보존되는 임시 파일이나 디렉토리가 필요한 프로그램에 사용 가능합니다. 따라서 / var / tmp에 저장된 데이터는 / tmp의 데이터보다 영구적입니다.

따라서 기호 링크를 /var/tmp대신 사용하도록 변경해야합니다 /tmp.


3
망치가있을 때의 전형적인 예는 모든 것이 못처럼 보입니다.
WernerCD

@WernerCD 당신이 의미하는 바를 자세히 설명해 주시겠습니까? /var/tmp좋은 생각이 아니라고 말하는가 ?
simbabque

6
당신이 가진 모든 망치 때 ... - If a person is familiar with ... a certain, single instrument, they may have a confirmation bias to believe that it is the answer to/involved in everything.나는 영업 이익은 뭔가를 / tmp 디렉토리를 사용하는가에 사용되는 의미가 아니라고 말하는거야 - 유지의 자신의 문제에 망치로 / tmp를 사용 TMP-하지만 -하지 - 꽤 -tmp 물건. / var / tmp는 재부팅 사이에 보관해야하므로 정답입니다.
WernerCD

8

귀하의 질문에 대한 대답은 엄격 /var/tmp하지 않지만 재부팅을 통해 정리되지 않으므로 더 적합한 위치를 찾을 수 있습니다. 짧은 시간 후에 자동으로 버리지 않아야하는 임시 파일 용으로 설계되었습니다.

그러나 종종 내가하는 일은 집에서 원하지 않는 임의의 것을 저장하기 위해 / opt 아래에 폴더를 만드는 것입니다. 그것은 주 운영 체제가 통제하지 않는 것들을 놓기에 적합한 장소입니다.


이것이 올바른 생각입니다. / tmp가 원하는 작업을 수행하지 않으면 정보를 다른 곳에 저장하십시오. 사용 가능한 공간이 있으면 다른 드라이브에도 저장하십시오. 필요한 결과를 얻을 수있는 유일한 방법이 아니라면 Linux (및 다른 프로그래머)가 특정 방식으로 기대하는 사항을 혼동하지 마십시오.
Joe

6

이렇게 :

EXCEPT='! -name .
            ...
            ! ( -path "./foo" )'

   # Remove all old files, then all empty directories
   ...
   find /tmp/foo/* -depth -xdev $TEXPR -delete

예:

$ cd /tmp/foo/
$ mkdir 1 2 3
$ touch 3 4 5
$ find /tmp/foo/* -depth -xdev $TEXPR -delete
$ ls /tmp/foo/
$

사용자 aap에 동의합니다. tmp 파일 인 경우 디렉토리를 다시 작성하여 사용 된 소프트웨어에서이를 처리하거나 제거되지 않은 tmp 파일이 아닌 경우 다른 디렉토리를 사용해야합니다.


실제로 작동하지 않습니다. find수동으로 실행할 때 명령이 예상대로 작동 하는 동안 디렉토리는 편집 후에도 여전히 제거됩니다 /etc/init/mounted-tmp.conf. 여기에 다른 일이있는 것 같습니다.
terdon

wth. 흠. 그것은 첫 번째 줄에 결함이 있음을 의미해야합니다. 아마 그것은 상대적이어야합니까 (?)
Rinzwind

@terdon yes / tmp /와 관련이 있어야합니다.
Rinzwind

나는 내가, 다양한 순열을 시도 포함, 그렇게 생각하지 않습니다 -path ./foo, 심지어 -name '*foo*'그들 중 누구도 (우분투 서버 14.04에서) 일했다. 나는 그것이 올바른 파일이 아니라고 생각하며 우리는 잘못된 곳을 찾고 있습니다. 당신이 제안하는 것이 작동 해야하지만 , 그것은 보이지 않습니다.
terdon

0

미래 가치를 가진 파일을 가지고 / tmp 디렉토리에 쓰는 것이 좋지 않습니다 (다른 사람들이 제안한대로 / var / tmp가 더 나은 곳입니다). 즉, 당신은 chattr에서 촬영을 원할 수도 있습니다. 응용 프로그램을 종료 한 후 종료하기 전에 실행해야합니다. 이 작업으로 인해 해당 디렉토리에 아무 것도 쓰지 못하게됩니다 .

/tmp/foo/ddmmyy/.001_immute_me chattr + i /tmp/foo/ddmmyy/.001_immute_me를 터치합니다


임시 디렉토리를 원한다면 어떻게 유용합니까?
simbabque

-1

이것을 실행하십시오 :

echo "if [ ! -e /etc/foo/ ]; then mkdir /etc/foo/; fi; rm -rf /etc/foo/*" > /bin/foodel; sudo chmod 755 /bin/foodel 

그런 다음 이것을 / etc / inittab에 추가 하십시오. 여기를보십시오 : inittab 파일은 어디에 있습니까? :

foo:2345:boot:/bin/foodel

부팅시 / etc / foo가 없으면 부팅 한 다음 비 웁니다.

이것은 bash 로그인에서 동일하게 수행됩니다.

echo "/bin/foodel" >> ~/.bashrc

우분투 버전 14는를 사용하지 않습니다 /etc/inittab. 매뉴얼 페이지에 명확하고 분명하게 명시되어 있습니다.
JdeBP 2016 년

* facepalm * 죄송합니다. @JdeBP, 이것은 4 가지 버전의 리눅스를 저글링 한 후에 일어나는 일입니다. 그는 어딘가에 askubuntu.com/questions/34308/where-is-inittab-file
Daniel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.