警告:放在 Linux 的 /tmp 目錄下的檔案與目錄,預設是會被自動清理的。

若是不知道或沒注意到這個特性而把重要檔案暫時放在 /tmp 目錄下,可能會發生慘案的。

在 RHEL\CentOS\Fedora 作業系统家族中,是由 tmpwatch 程式來處理的,安裝的檔案參考下列指令的查詢結果:

1
2
3
4
5
6
7
8
9
10
11
[root@bestlong.idv.tw ~]# rpm -ql tmpwatch
/etc/cron.daily/tmpwatch
/usr/bin/tmpwatch
/usr/sbin/tmpwatch
/usr/share/doc/tmpwatch-2.9.17
/usr/share/doc/tmpwatch-2.9.17/COPYING
/usr/share/doc/tmpwatch-2.9.17/ChangeLog
/usr/share/doc/tmpwatch-2.9.17/NEWS
/usr/share/doc/tmpwatch-2.9.17/README
/usr/share/man/man8/tmpwatch.8.gz
[root@bestlong.idv.tw ~]#

因為設定了 /etc/cron.daily/tmpwatch 所以會由 cron 服務每日定時執行一次,看一下程式碼內容:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@bestlong.idv.tw ~]# cat /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_*' 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
[root@bestlong.idv.tw ~]#

可以看到指令中有 10d /tmp 的部份,簡單的解釋就是超過 10 天沒有存取的就會被清理。想進一步了解請服用 man tmpwatch 可以增進知識。

身為系統管理者,如果不喜歡或不需要系統自動清理的功能,可以將 /etc/cron.daily/tmpwatch 內容清空,讓程式變成空包彈,也可以直接刪除或更直接將 tmpwatch 整個移除。