我們知道系統里面常常會有一些忘記刪除的長時間不用而且確實沒有用處的文件,如果不去處理,這些無用的文件會越來越多,浪費許多系統資源。在不知道文件名的情況下,很難去檢查某一目錄下到底是哪些文件長時間沒有被訪問,同時刪除這些文件。我們今天就介紹一款非常實用的工具來完成這一工作————tmpwatch
tmpwatch 是什么
tmpwatch 能夠循環地刪除指定目錄下指定時間內沒有被訪問的文件,這一命令常常用于清理臨時文件目錄,比如 /tmp
或者 /var/tmp
這類目錄。
它只清除指定目錄下的空目錄、普通文件和符號鏈接文件,也不會影響其他目錄,而且會避開那些屬于root用戶的系統相關關鍵文件的。
默認設置下,tmpwatch
命令依據文件的 atime
(access time)而非 mtime
(modify time)來刪除文件。如果你想改變它的刪除依據,可以在使用這個命令時加上你想修改的參數。
注意:千萬不要在根目錄底下運行 tmpwatch
或者 tmpreaper
命令,因為系統可沒有任何機制阻止你在根目錄下運行此命令。
怎樣在 Linux 上安裝 tmpwatch
各種 Linux 發行版本的安裝命令都有些略微差別,具體的安裝方法見下文。
如果你的 Linux 發行版本是 REHL/CentOS 6 的話,可以使用 yum
命令來安裝 tmpwatch,示例如下:
$ sudo yum install -y tmpwatch
如果你使用的 Linux 發行版本是 Debian 或者 Ubuntu ,則需要使用 apt
或者 apt-get
命令來安裝 Tmpreaper,示例如下:
$ sudo apt-get install tmpreaper
如果你使用的是 openSUSE,則應使用 zypper
命令安裝 tmpwatch:
$ sudo zypper install -y tmpwatch
如果 Linux 發行版本是 Fedora,則應使用 dnf
命令安裝 tmpwatch:
$ sudo dnf install -y tmpwatch
說明:在以 Debian 為基礎的 Linux 系統,是用 tmpreaper
命令代替 tmpwatch
的,若你使用的系統是以 Debian 為基礎的Linux 版本,則將下文的示例中的 tmpwatch
換為 tmpreaper
即可。
tmpwatch
命令的關鍵選項和參數
atime
(File Last Access Time):文件最后一次被訪問的時間;
mtime
(File Last Modify Time):文件內容最后一次被修改的時間;
ctime
(File Last Change Time):文件元數據最后一次被修改的時間,即文件相關屬性被修改的時間,多數情況下 mtime 和 ctime 值相同,但是諸如文件所有者、權限、所屬組這類不涉及內容的屬性被修改時則只會影響 ctime;
dirmtime
(Directory Last modification time):目錄最后一次被修改的時間。
這些時間參數用來設置刪除文件的條件閾值:
d
:單位為天;
h
:單位為小時;
m
:單位為分鐘;
s
:單位為秒。
用 tmpwatch
命令刪除一段時間內沒有被訪問的文件
如前所述,tmpwatch
命令的默認選項是 atime
,而默認的單位參數則是 h
,所以如果你確實要按以小時為單位計算的訪問時間來刪除文件,那么你不用加任何特殊的選項或則參數后綴,可以直接是用這個命令。如下例所示,即為刪除 /tmp
目錄下過去5小時內沒有被訪問的文件:
下面這個示例是刪除 /home/daygeek/Downloads
目錄下過去十小時內沒有修改過內容的文件,注意,如果要按 mtime
來刪除文件,需要在命令中加上 -m
的選項:
# tmpwatch -m 10 /home/daygeek/Downloads
刪除以其他單位計算的某段時間內沒有被訪問的文件
如果你要以天為單位,則需要加上 d
的后綴,如下為刪除30天內沒有被訪問的文件:
# tmpwatch 30d /home/daygeek/Downloads
刪除一段時間內未被使用的所有文件
如果你想不僅僅刪除普通文件、符號鏈接文件、空目錄文件,而是想刪除指定目錄下某段時間內沒有被訪問的所有文件,則需要加上選項 -a
,如下為刪除指定目錄下12小時未被修改內容的所有文件:
將某些目錄排除在刪除操作外
如下命令可以讓那些十小時內沒有被修改過內容的目錄不被刪除:
# tmpwatch -am 10 --nodirs /home/daygeek/Downloads
將特定路徑排除在刪除操作外
下面的命令刪除 /home/daygeek/Downloads
目錄下所有十小時內沒有修改內容的文件,但是 /home/daygeek/Downloads/Movies
路徑下卻不受影響,即該路徑下十小時內沒修改的文件也不會被刪除:
# tmpwatch -am 10 --exclude=/home/daygeek/Downloads/Movies /home/daygeek/Downloads
將特定格式的文件排除在刪除操作外
下面所示的命令為刪除指定文件下的所有10小時內未被改動的文件,除了 pdf
格式的文件:
# tmpwatch -am 10 --exclude-pattern='*.pdf' /home/daygeek/Downloads
預演 tmpwatch
的效果
下面這條命令即是對 tmpwatch
的功能效果進行預演:
# tmpwatch -t 5h /home/daygeek/Downloads
用 tmpwatch
設置一個定時任務周期性地執行刪除操作
要完成這個任務,會在 /etc/cron.daily/tmpreaper
目錄下留下一個 cronjob
文件,這個文件是按照 /etc/timereaper.conf
的設定工作的,你可以按自己的需求設置它。
如下所示的設置,能在每天上午10點時刪除指定目錄下,十五天沒被訪問的文件:
# crontab -e
0 10 * * * /usr/sbin/tmpwatch 15d /home/daygeek/Downloads
到此這篇關于tmpwatch命令清除舊文件的方法的文章就介紹到這了,更多相關tmpwatch刪除舊文件內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!