WHEREIS

/tmp 경로의 경우 임시로 쓰는 공간으로는 알고 있었지만

무엇때문에, 언제 삭제되는지 정확히 알고 있지 못하였다.

그래서 문득 궁금해진 김에 찾아보았다.

 

 

찾아보니 Centos6 는 아래 패키지에 의해 매일 주기적으로 삭제가 발생한다.

 

설치 되어 있는지 확인해 보자.

[root@abc/tmp]# rpm -qa tmpwatch 
tmpwatch-2.9.16-6.el6.x86_64

 

해당 패키지가 어떤 경로에 설치되었을까?

 

[root@abc/tmp]# rpm -ql tmpwatch  
/etc/cron.daily/tmpwatch 
/usr/bin/tmpwatch 
/usr/sbin/tmpwatch 
/usr/share/doc/tmpwatch-2.9.16 
/usr/share/doc/tmpwatch-2.9.16/COPYING 
/usr/share/doc/tmpwatch-2.9.16/ChangeLog 
/usr/share/doc/tmpwatch-2.9.16/NEWS 
/usr/share/doc/tmpwatch-2.9.16/README 
/usr/share/man/man8/tmpwatch.8.gz

 

다음과 같이 cron.daily  의 생성된 파일 내용을 보면

flags 의 값은 atime,ctime,mtime  을 기준으로 삭제를 판단한다는 내용으로 보인다.

 

자세한 옵션은  man 페이지를 참고하면 된다.

[root@abc/tmp]#  man tmpwatch   

[root@abc/tmp]# vi /etc/cron.daily/tmpwatch

 

#! /bin/sh
flags=-umc

/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
-x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
-X '/tmp/hsperfdata_*' -X '/tmp/.hdb*lock' -X '/tmp/.sapstartsrv*.log' \
-X '/tmp/pymp-*' 10d /tmp
/usr/sbin/tmpwatch "$flags" 30d /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
    if [ -d "$d" ]; then
/usr/sbin/tmpwatch "$flags" -f 30d "$d"
    fi
done

 

위와 같이 매일 한 번씩, 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
removing directory /tmp/ev-user-management/.git/objects if empty
removing directory /tmp/ev-user-management/.git if empty
removing directory /tmp/ev-user-management if empty
removing file /tmp/file.txt
removing directory /tmp/jobs/openssl/.git/objects/pack if empty
removing directory /tmp/jobs/openssl/.git/objects if empty
removing directory /tmp/jobs/openssl/.git if empty
removing directory /tmp/jobs/openssl if empty
removing directory /tmp/jobs/ngtcp2/.git/objects/pack if empty
removing directory /tmp/jobs/ngtcp2/.git/objects if empty
removing directory /tmp/jobs/ngtcp2/.git 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://lklingling.tistory.com/entry/testdisk-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%ED%8C%8C%EC%9D%BC-%EB%B3%B5%EC%9B%90-Linux

 

참고사이트 : 

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

https://www.thegeekdiary.com/centos-rhel-67-why-the-files-in-tmp-directory-gets-deleted-periodically/

https://www.thegeekdiary.com/centos-rhel-7-how-tmpfiles-clean-up-tmp-or-var-tmp-replacement-of-tmpwatch/

https://qastack.kr/server/377348/when-does-tmp-get-cleared

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band
loading