似乎困擾幾乎所有文件系統(Unix及其他文件系統)的問題之一就是文件不斷日積月累。幾乎沒有人抽出時間來清理不再使用的文件,結果文件系統變得凌亂不堪,到處是價值不大或值得懷疑的文件,以至於確保文件順暢運行、得到合理備份以及易於管理就成了一個永恆的挑戰。
我見過有助於鼓勵所有那些殘留數據的用戶應對這個問題的一種方法就是,對文件集合創建一份摘要報告或“概況”(profile),報告諸多信息,比如文件數量,那些文件中最舊、最新、最大的文件;以及統計誰擁有那些文件。要是有人認識到50個萬文件組成的集合含有的文件其年限沒一個在五年以下,他們很可能放手大膽地刪除這些文件,或者至少將它們加以歸檔和壓縮。基本問題是,龐大的文件集合讓人不知所措,大多數人害怕可能不小心刪除了重要的文件。要是有辦法描述文件集合的特點,就有助於表明內容的性質,並且鼓勵那些愛好收集文件的人清理一下。
當我在Unix上准備制作一份文件系統摘要報告時,幾個Unix命令輕松提供了一些非常有用的統計數字。想統計目錄中的文件數量,你可以使用查找命令,就像這樣。
- $ find . -type f | wc -l
- 187534
找到最舊文件和最新文件要復雜一點,不過仍相當容易。在下列命令中,我們再次使用查找命令來查找文件,顯示了采用年-月-日格式的數據,這種格式可以按文件年限來進行排序,然後顯示該列表中最靠前、因而最舊的文件。
在第二個命令中,我們如出一轍,不過輸出最後一行、因而是最新的文件。
- $ find -type f -printf '%T+ %p\n' | sort | head -n 1
- 2006-02-03+02:40:33 ./skel/.xemacs/init.el
- $ find -type f -printf '%T+ %p\n' | sort | tail -n 1
- 2015-07-19+14:20:16 ./.bash_history
%T(文件日期和時間)和%p(文件名稱和路徑)參數以及printf命令讓這項操作得以順利執行。
如果我們看一下主目錄,無疑會發現歷史文件是最新文件,那不可能是非常值得關注的信息片段。你可以忽略那些文件,只要對它們進行“un-grepping”操作,你也可以忽略以點開始的所有文件,如下所示。
- $ find -type f -printf '%T+ %p\n' | grep -v "\./\." | sort | tail -n 1
- 2015-07-19+13:02:12 ./isPrime
找到最大的文件需要使用%s(大小)參數,我們加入了文件名稱(%f),因為那是我們希望報告顯示的內容。
- $ find -type f -printf '%s %f \n' | sort -n | uniq | tail -1
- 20183040 project.org.tar
想總結文件所有權,就使用%u(用戶)
- $ find -type f -printf '%u \n' | grep -v "\./\." | sort | uniq -c
- 180034 shs
- 7500 jdoe
如果你的文件系統還記錄上一次訪問日期,那麼顯示文件在一段時期(比如說兩年多)內沒有訪問可能非常有用。這讓你的檢查人員可以深入了解那些文件的價值,這點很重要。上一次訪問參數(%a)可以這樣使用:
- $ find -type f -printf '%a+ %p\n' | sort | head -n 1
- Fri Dec 15 03:00:30 2006+ ./statreport
當然了,如果最近訪問的那個文件又是很久以前的文件,這可能會引起還要大的反應。
- $ find -type f -printf '%a+ %p\n' | sort | tail -n 1
- Wed Nov 26 03:00:27 2007+ ./my-notes
通過創建一個摘要報告,顯示文件日期范圍、最大文件、文件用戶以及最早和最新訪問時間,從而大致了解文件系統或龐大目錄裡面的內容,這有助於表明文件集合有多新、多重要,還能幫助文件用戶確定是不是該清理一下了。
原文標題:Handy commands for profiling your Unix file systems