/tmp 경로의 경우 임시로 쓰는 공간으로는 알고 있었지만
무엇때문에, 언제 삭제되는지 정확히 알고 있지 못하였다.
그래서 문득 궁금해진 김에 찾아보았다.
찾아보니 Centos6 는 아래 패키지에 의해 매일 주기적으로 삭제가 발생한다.
설치 되어 있는지 확인해 보자. [root@abc/tmp]# rpm -qa tmpwatch
해당 패키지가 어떤 경로에 설치되었을까?
[root@abc/tmp]# rpm -ql tmpwatch
|
다음과 같이 cron.daily 의 생성된 파일 내용을 보면
flags 의 값은 atime,ctime,mtime 을 기준으로 삭제를 판단한다는 내용으로 보인다.
자세한 옵션은 man 페이지를 참고하면 된다.
[root@abc/tmp]# man tmpwatch
[root@abc/tmp]# vi /etc/cron.daily/tmpwatch
#! /bin/sh |
위와 같이 매일 한 번씩, atime/mtime/ctime 기준으로 10일 이상된 파일을 삭제하는 것으로 보이며
/var/tmp 의 경우는 보관기간이 30일로 더 긴 것으로 나온다.
테스트는 다음과 같이 임시파일을 /tmp 아래에 만들고
[root@abc/tmp]# touch -t 1912312000 index.html
해당 스크립트에 flag 에서 c를 제거해 준다. (ctime 은 기본적으로 수정이 안 되는듯)
/etc/cron.daily/tmpwatch
그리고 직접 구동을 해본다.
[root@abc/tmp]# sh /etc/cron.daily/tmpwatch
10일 이상되었으니 index.html 파일이 삭제되면 정상이다.
삭제될 파일 정보를 미리 알고 싶다면 /usr/sbin/tmpwatch --test 옵션을 주어 실행하면 된다.
위 스크립트에 추가하여 구동해 보면 아래와 같이 리스트가 나오고
실제로 파일은 삭제되지 않는다.
... removing directory /tmp/ev-user-management/.git/objects/pack if empty ...
|
여담으로 ctime은 아래와 같은 방식으로 하면 원하는 날짜로 변경?이 가능하나
시스템 시간을 바꾸게되므로 개발서버가 아닌 이상 쓰지 말도록 하자;;
[root@abc/tmp]# NOW=$(date) && date -s "2017-08-15 21:30:11" && touch file.txt && date -s "$NOW"
그 외에 centos7 은 systemd 로 변경되면서 경로가 바뀌었다.
아래파일은 삭제할 규칙? 에 대해 정의된 파일이고
/usr/lib/tmpfiles.d/tmp.conf
(해당 폴더에는 삭제 외의 생성을 하는 규칙도 있다. 예로 /var/run 하위의 pid 파일을 생성할 디렉터리를 만들기 위한 어플리케이션의 설정 파일도 존재한다.)
아래는 해당 데몬과 언제 삭제가 진행될지에 대한 내용이다.
/usr/lib/systemd/system/systemd-tmpfiles-clean.service
/usr/lib/systemd/system/systemd-tmpfiles-clean.timer
기본적으로 매일 1회씩 동작하게 위 파일에 설정이 되어있다.
기타 옵션에 대한 설명은 다음과 같이 man 페이지를 참고하면 되겠다.
[root@abc/tmp]# man tmpfiles.d
만약 원치않게 파일이 삭제되었을 경우
확률적이지만 복구를 시도하고 싶으면 아래 글을 참고하면 되겠다.
참고사이트 :
https://www.thegeekdiary.com/how-to-disable-auto-deletion-of-the-files-in-tmp-and-var-tmp-directories-in-centos-rhel-56/
https://unix.stackexchange.com/questions/480614/can-tmpfiles-d-remove-files-based-on-time-only-but-not-at-boot