/ tmp의 디렉토리가 삭제되지 않도록 방지


10

나는 종종 /tmp임시 파일 (예를 들어, 먼저 다운로드를 원하는 사이트의 PDF 등)을 저장하기 위해 Linux 컴퓨터 의 디렉토리를 사용하며 종종 내 사용자 이름으로 디렉토리를 만듭니다. 그러나 시작할 때마다 (모든 파일 포함) 삭제됩니다. 이제는 넣을 수 /var/tmp있지만 모든 내용을 삭제하고 디렉토리 자체를 유지하기를 원합니다. 그래서:

tmp
 |- me # this should stay
 |  |- foo1 # this should be deleted...
 |  |- bar1 # ...and this as well
 |- other stuff...

이것을 할 수있는 방법이 있습니까? 권한이 있거나 특별한 구성이 있습니까?


1
이 문제를 해결하기 위해 필요에 따라 "test & mkdir"에 대한 코드를 쉘의 로그인 파일에 넣을 수 있습니다.
Jeff Schaller

3
/tmptmpfs파일 시스템 일 가능성이 높습니다 . 이러한 파일은 실제로 삭제되지 않습니다. 그들은 단순히 RAM에 저장되고 재부팅시 손실됩니다. 그렇기 때문에 "부팅하거나 로그인 할 때 다시 생성"하는 대답을 얻을 수 있습니다.
MSalters

답변:


4

한 가지 해결책은 @rebootcron 작업 을 사용하는 것입니다.

@reboot mkdir -p "/tmp/$USER"

이것을 crontab에 추가 crontab -e하면 컴퓨터가 부팅 될 때마다 실행됩니다.

또는 사용

mkdir -p "/tmp/$USER"

쉘의 시작 파일에.

어느 경우 든 사용하고 싶을 수도 있습니다

TMPDIR=/tmp/$USER
export TMPDIR

해당 디렉토리를 기본 임시 디렉토리로 사용하려는 경우 쉘의 시작 파일에


a) 모든 사용자를위한 디렉토리를 생성하고 b) '콜드'시작에서도 트리거합니까?
Linux4win

1
@ Linux4win이 답변은 단일 사용자의 요구를 해결합니다. 이것이 질문을 표현한 방식이기 때문입니다. 컴퓨터가 어떻게 부팅되는지 (핫, 콜드 또는 미지근한)는 중요하지 않지만 최대 절전 모드에서 다시 시작할 때 (부팅되지 않기 때문에) 트리거되지 않습니다.
Kusalananda

어떤 이유로 @reboot mkdir -p "/tmp/$USER"crontab의 끝에 추가 하면 아무것도하지 않고 실행하는 동안 mkdir -p "/tmp/$USER"실제로 디렉토리를 만듭니다. 두번째 /tmp프로그램은 다른 프로그램을 통해 액세스 할 필요가 있고 매번 쉘을 실행하는 것은 다소 성가신 일이기 때문에 저에게는 효과가 없습니다 .
Linux4win

@ Linux4win @rebootcron 작업이 디렉토리를 생성하지 않습니까? cron 데몬에서 오류 메시지가 포함 된 이메일을 계정으로 전송하고 있습니까?
Kusalananda

글쎄 ... 어쩌면 내가 구성하지 않았기 때문에 mail? 아니면 필요하지 않습니까?
Linux4win

14

나는 이것을 위해 사용 pam-tmpdir합니다 : 그것은 로그인 할 때 사용자 개인 임시 디렉토리를 만듭니다. 설정하려면 추가

session optional pam_tmpdir.so

적절한 PAM 서비스에; 데비안 기반 시스템에서 libpam-tmpdir패키지를 설치하면 이 작업을 수행하거나에 라인을 추가 할 수 있습니다 /etc/pam.d/common-session. 다음 번에 당신은 당신이 아래에 디렉토리를 찾을 수 있습니다, 로그인 /tmp/user사용자 ID로하고, TMP그리고 TMPDIR적절하게 설정합니다.


7
적절한 PAM 서비스가 무엇인지, 어떻게 라인을 추가 할 수 있는지 설명해 주시겠습니까? 어떤 파일을 편집해야합니까?
terdon

2

systemd가있는 시스템을 실행하지 않고 systemd-tmpfiles를 사용하여 정리를 관리하는 경우 해당 시스템을 사용하여 디렉토리를 구성해야합니다.

전체 문서 는 다음과 같습니다 . /etc/tmpfiles.d/something.conf다음과 같은 내용 으로 만들면 원하는 것을 얻을 수 있습니다 .

d     /tmp/your_username   0750 your_user your_group  - -

1

주석에서 지적했듯이 /tmp일시적이고 파일을 삭제해도 놓치지 않을 파일을위한 것입니다. 당신이 무언가의 중간에 있고 기계가 재부팅되면, 거기에 기록 한 모든 것이 사라지고 다시 시작해야합니다. 즉, 그 파일은 결국 임시적이지 않을 수 있습니다.

기가 바이트가 많은 공간에서 시작하여 수년 동안 내 홈 디렉토리에 임시 디렉토리를 유지했으며, 오래되고 구겨진 파일을 제거하려면 주기적 정리가 필요하다는 것을 알았습니다. 그 프로세스 이후에 떠난 대부분의 시간은 몇 주가 채 걸리지 않았으므로 이제는 매일 실행되는 크론 작업으로 정리합니다.

find $HOME/tmp -depth -mtime +30 -print0 | xargs -0 -r rm -rf

반 임시로 다운로드하거나 생성하는 모든 항목이 거기에 있으며 시스템은 내가 남긴 모든 항목을 정리합니다. 영구적 인 집이 필요한 모든 것은 크론 작업이 제거되기 오래 전에 도착합니다.


mkdir a a/b; touch a/b/c. 이제 30 일이 만료 될 때까지 기다리십시오. 삭제 c하면이 업데이트 b됩니다 (추가 30 일을 기다려야 함). a삭제시 와 마찬가지로 b. 둘째, 파일을 b만들지 만 a30 일 동안 만지지 않으면 a디렉토리가에 rm -rf나타나고 최근 파일이 지워집니다 b.
roaima

find "$HOME"/tmp -mtime +30 -type f -delete; find "$HOME/tmp" -depth -mmin +60 -type d -exec rmdir {} + 2>/dev/null나를 위해
일함
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.