Linux下find命令在目錄結構中搜索文件,並執行指定的操作。
Linux下find命令提供了相當多的查找條件,功能很強大。由於find具有強大的功能,所以它的選項也很多,其中大部分選項都值得我們花時間來了解一下。即使系統中含有網絡文件系統( NFS),find命令在該文件系統中同樣有效,只你具有相應的權限。 在運行一個非常消耗資源的find命令時,很多人都傾向於把它放在後臺執行,因爲遍歷一個非常大的文件系統可能會花費很多的時間(這裏是指30G字節以上的文件系統)。
1.命令格式:
find PATH [options][action]
2.命令功能:
用於在文件樹種查找文件,並作出相應的處理(可能訪問磁盤)
3.選項與參數:
1.與時間有關的選項:共有 -atime , -ctime , -mtime ,以 -mtime爲例
-mtime n : n爲數字,意義爲在 n 天之前的 [ 一天之內 ] 被更動過內容的檔案;
-mtime +n : 列出在 n 天之前(不含n天本身)被更動過內容的檔案檔名;
-mtime -n : 列出在 n 天之內(含n天本身)被更動過內容的檔案檔名;
-newer file : file 爲一個存在的檔案,列出比 file 還要新的檔案檔名;
舉例1:
#find / -mtime 0
0 表示目前時間,所以,從現在開始到24小時前,有變動過內容的檔案都會被列出來!如果是三天之前的24小時內,則被表示爲 # find / -mtime 3
舉例2:
#find /etc -newer /etc/passwd
-newer 用在分辨兩個檔案之間的新舊關係是很有用的!
我們現在知道 atime ,ctime ,mtime 的意義,如果你想找出一天內被更改過的文件名,可以用舉例1 的做法,但如果我想要找出『 4 天內被更改過的檔案檔名』呢?那可以使用『find /var -mtime -4 』。那如果是『 4 天前的那一天』就用『find /var -mtime 4 』。有沒有加上『 +, -』差別很大!我們可以用簡單的圖示來說明一下
find相關的時間參數的意義
圖中最右邊爲目前的時間,越往左邊則代表越早前的時間軸啦。由圖我們可以清楚的知道:
+4 代表大於等於 5 天前的檔名:ex> find /var -mtime +4
-4 代表小於等於4 天內的檔名:ex> find /var -mtime -4
4 則是代表 4-5 那一天檔名:ex> find /var -mtime 4
2.與使用者或組名有關的參數:
-uid n : n 爲數字,這個數字是用戶的賬號ID,即UID,
這個UID是記錄在 /etc/passwd 裏面與賬號名稱對應的數字。
-gid n : n 爲數字,這個數字是組名的ID,即GID,
這個GID是記錄在 /etc/group 裏面
-uesr name : name 爲使用者賬號名稱
-group name : name 爲組名
-nouser : 尋找檔案的擁有者不存在 /etc/passwd 的人
-nogroup : 尋找檔案的擁有羣組不存在與 /etc/group 的檔案
當你自行安裝軟件時,很可能改軟件的屬性中並咩有檔案擁有者,這是可能的!在這個時候,就可以使用 -nouser 和 -nogroup 搜尋。
舉例3:
#find /home -user zyn
搜尋 /home 下屬於zyn 的檔案
舉例4:
#find / -nouser
找到系統不屬於任何人的檔案
如果你將系統裏的某個賬號刪除了,但該賬號已經在系統裏面建立很多檔案時,就可能發生無主孤魂的檔案訊在,此時你就可以用 -nouser 來找出該類型的檔案並刪除了。
3.與檔案權限及名稱有關的參數:
- name filename : 搜尋文件名爲 filename 的檔案;
-size [ +- ] SIZE : 搜尋比 SIZE 還要大或小的檔案,這個 SIZE 的規格有:c 代表byte ,k 代表 1024bytes, 所以,要找比50KB 還要打的檔案,就是 [ -size + 50K ];
-type TYPE : 搜尋檔案的類型爲 TYPE 的,類型主要有:一般正規檔案(f), 裝置檔案 (b,c),目錄(d),連接檔案(l),scoket(s),及 FIFO (p)等屬性。
-perm mode : 搜尋檔案權限 【剛好等於】 mode 的檔案,這個mode 爲類似 chmod 的屬 性值,舉例: -rwsr-xr-x ,即4755,
-perm -mode : 搜尋檔案權限【必須要全部囊括 mode的權限】的檔案,舉例:要搜尋
-rwxr--r-- ,即0744的檔案,使用 -perm -0744,當一個檔案的權限爲
-rwsr-xr-x ,即4755時,也會被列出來,因爲 -rwsr-xr-x 的屬性已經囊括了 -rwsr-xr-x 的屬性了。
-perm +mode : 搜尋檔案權限【包括任意mode的權限】的檔案, 舉例:搜尋 -rwxr-xr-x , 即 -perm +755 時,但一個文件屬性爲 -rw------- 也會被列出來,因爲他 有-rw-------的屬性存在!
舉例5:
#find /-name passwd
找出檔名爲passwd 的這個檔案
舉例6:
#find /var -type s
找出 /var 目錄下,文件類型爲scoket的檔名有哪些?
舉例7:
#find /-perm +7000
搜尋檔案中含有SUID 或 SGID 或 SBIT 屬性的
所謂7000 就是 ---s--s--t ,那麼只要有s或者t的就列出來, -7000 就是要含有---s--s--t 三個權限
4.額外可進行的動作:
-exec command : command 爲其他指令,-exec 後面可再接額外的指令來處理搜尋到的 結果。
-print : 將結果打印到屏幕上,這個動作是預設動作!
舉例8:
#find /-perm +7000 -exec ls -l{} \;
將上個例子找到的檔案使用 ls -l 列出來
ls -l 就是額外的指令,指令不支持命令別名,所以不能用 ll
舉例9:
#find / -size +1000k
找出大於1MB的檔案
find的特殊功能就是能夠進行額外的動作(action),我們將例8用途來說明一下;
{}代表的是有find找到的內容,如上圖所示,find結果會被放到{} 位置中
-exec一直到 \; 是關鍵詞,代表find額外動作的開始(-exec)到結束(\;),在這中間的就是find 指令內的額外動作,在本例中就是【 ls -l{} 】.
因爲【 ;】在bash下是有特殊意義的,因此利用反斜槓來跳脫。