我們知道Linux系統里面常常會有一些忘記洗掉的長時間不用而且確實沒有用處的檔案,如果不去處理,這些無用的檔案會越來越多,浪費許多系統資源,在不知道檔案名的情況下,很難去檢查某一目錄下到底是哪些檔案長時間沒有被訪問,同時洗掉這些檔案,我們今天就介紹一款非常實用的工具來完成這一作業————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小時內沒有被訪問的檔案:
# tmpwatch 5 /tmp
下面這個示例是洗掉 /home/daygeek/Downloads 目錄下過去十小時內沒有修改過內容的檔案,注意,如果要按 mtime 來洗掉檔案,需要在命令中加上-m 的選項:
# tmpwatch -m 10 /home/daygeek/Downloads
洗掉以其他單位計算的某段時間內沒有被訪問的檔案
如果你要以天為單位,則需要加上 d 的后綴,如下為洗掉30天內沒有被訪問的檔案:
# tmpwatch 30d /home/daygeek/Downloads
洗掉一段時間內未被使用的所有檔案
如果你想不僅僅洗掉普通檔案、符號鏈接檔案、空目錄檔案,而是想洗掉指定目錄下某段時間內沒有被訪問的所有檔案,則需要加上選項 -a,如下為洗掉指定目錄下12小時未被修改內容的所有檔案:
# tmpwatch -am 12 /tmp
將某些目錄排除在洗掉操作外
如下命令可以讓那些十小時內沒有被修改過內容的目錄不被洗掉:
# 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 -e0 10 * * * /usr/sbin/tmpwatch 15d /home/daygeek/Downloads
關于 tmpwatch 命令的介紹就到這里了,希望本篇文章對各位讀者能有幫助,關于這個命令,你如果還有什么疑問或者其他想法,歡迎留言討論
本文由博客一文多發平臺 OpenWrite 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/253764.html
標籤:Linux
下一篇:DBA知道這17條Linux命令
