如何使用 Tmpwatch/Tmpreaper 刪除舊檔案

2020-06-05 09:18:00

你可能忘記了刪除計算機上某個目錄中不再需要的檔案的操作。這可能是“下載”或任何其他目錄。它可能已經增長了一段時間。

即便有足夠的儲存空間,你也應該刪除它們,因為這會在列出檔案時降低系統速度。同樣,當一個目錄中有成千上萬個檔案時,它可能很會很臃腫。

當你不知道要檢查的檔名時,很難在特定目錄中找到檔案。

我們可以通過結合使用 find 命令和一些組合來做到這一點,我們過去已經寫過一篇文章。

今天,我們將向你展示如何在 Linux 上使用 Tmpwatch 程式來實現這一目標。

什麼是 tmpwatch

tmpwatch 會在指定目錄中遞回刪除指定時間段內未被存取的檔案。通常,它用於自動清除臨時檔案系統目錄,例如 /tmp/var/tmp

它只會刪除空目錄、常規檔案和符號連結。它不會切換到其他檔案系統,並避開了屬於根使用者的 lost+found 目錄。

預設情況下,tmpwatch 會根據檔案的 atime(存取時間)而不是 mtime(修改時間)刪除檔案。

你可以在 tmpwatch 命令中新增其他引數來更改這些行為。

警告: 請不要在 / 中執行 tmpwatchtmpreaper,因為該程式中沒有防止這種情況的機制。

如何在 Linux 上安裝 tmpwatch

可以在官方倉庫中按以下方式安裝 tmpwatch

對於 RHEL/CentOS 6 系統,請使用 yum 命令安裝 tmpwatch

$ sudo yum install -y tmpwatch

對於 Debian 和 Ubuntu 系統,請使用 apt 命令apt-get 命令 安裝 tmpreaper

$ sudo apt-get install tmpreaper

對於 openSUSE 系統,請使用 zypper 命令 安裝 tmpwatch

$ sudo zypper install -y tmpwatch

對於 Fedora 系統,請使用 dnf 命令 安裝 tmpwatch

$ sudo dnf install -y tmpwatch

請注意: 如果你使用的是基於 Debian 的系統,請使用 tmpreaper 而不是 tmpwatch。所有範例都可以如預期工作。

了解關鍵選項和引數

  • atime(檔案上次存取時間):顯示命令或指令碼等任意進程最後一次存取檔案中資料的時間。
  • mtime(檔案上次修改時間):顯示修改檔案內容或儲存檔案的時間。除非是更改檔案屬性,否則大多數情況下 ctimemtime 會相同。
  • ctime(檔案上次更改時間):顯示檔案後設資料更改時間。這意味著更改檔案屬性的時間(如所有權或組等)。
  • dirmtime(目錄的上次修改時間):顯示目錄的上一次修改時間。

時間引數定義刪除檔案的閾值。

  • d – 天
  • h – 小時
  • m – 分鐘
  • s – 秒

如何使用 tmpwatch 命令刪除一段時間未存取的檔案

正如我在本文開頭所說,tmpwatch 預設根據檔案存取時間(atime)來刪除檔案。另外,由於小時是預設引數,因此如果使用小時單位,那麼無需在時間上新增字尾。

例如,執行以下命令以遞迴方式刪除過去 5 個小時未存取的檔案。

# tmpwatch 5 /tmp

執行以下命令刪除最近 10 個小時未修改的檔案。如果要使用修改時間(mtime)來刪除檔案,那麼需要在 tmpwatch 命令中新增 -m 選項。

# tmpwatch -m 10 /home/daygeek/Downloads

如何使用 tmpwatch 命令刪除超過 “X” 天未存取的檔案

如果要使用天數刪除檔案,那麼需要新增字尾 d。以下範例刪除了 30 天以上的檔案。

# tmpwatch 30d /home/daygeek/Downloads

如何使用 tmpwatch 命令刪除一段時間內未存取的所有檔案

以下命令將基於修改時間(mtime)刪除所有型別的檔案,而不僅僅是常規檔案、符號連結和目錄。

# tmpwatch -am 12 /tmp

如何在 tmpwatch 中排除目錄

以下命令將刪除過去 10 個小時未修改的所有檔案,並排除目錄。

# tmpwatch -am 10 --nodirs /home/daygeek/Downloads

如何在 tmpwatch 中排除特定路徑

以下命令將刪除過去 10 個小時未被修改的所有檔案,除了下面排除的資料夾。

# tmpwatch -am 10 --exclude=/home/daygeek/Downloads/Movies /home/daygeek/Downloads

如何在 tmpwatch 中排除特定模式

以下命令將刪除過去 10 小時未被修改的所有檔案,除了滿足下面列出的模式的檔案。

# tmpwatch -am 10 --exclude-pattern='*.pdf' /home/daygeek/Downloads

如何讓 tmpwatch 命令空執行

如果要空執行,請執行以下命令。

# tmpwatch -t 5h /home/daygeek/Downloads

如何設定 cronjob 來使用 tmpwatch 定期刪除檔案

預設情況下,它在 /etc/cron.daily/tmpreaper 目錄下有一個 cronjob 檔案。該 cronjob 根據位於 /etc/timereaper.conf 中的組態檔工作。你可以根據需要自定義檔案。

它每天執行一次,並刪除 7 天之前的檔案。

另外,如果你希望常規執行某項操作,那麼可以根據需要手動新增一個 cronjob。

# crontab -e0 10 * * * /usr/sbin/tmpwatch 15d /home/daygeek/Downloads

上面的 cronjob 將在每天上午 10 點刪除早於 15 天的檔案。