find基礎知識
檔案查找:在檔案系統上查找符合條件的檔案的過程;
檔案查找指令:locate, find
locate: 非實時查找工具;依賴于事先建構的索引;索引的建構是在系統較為空閑時自動進行(周期性任務);手動更新此資料庫(updatedb);查找速度快;模糊查找;
find:實時查找;查找速度略慢;精确查找;
find指令:
find [option]... [查找路徑] [查找條件] [處理動作]
查找路徑:預設為目前路徑;
查找條件:指定的查找标準,可以根據檔案名、大小、屬主屬組、類型等進行;預設為找出指定路徑下的所有檔案;
處理動作:對符合條件的檔案做什麼操作;預設為輸出至螢幕;
查找條件:
根據檔案名進行查找:
-name "檔案名稱": 支援使用glob(*, ?, []);
-iname "檔案名稱":不區分字元大小寫,支援使用glob
-regex "pattern":以pattern比對整個檔案路徑字元串,而不僅僅是檔案名稱
根據屬主、屬組查找:
-user username: 查找屬主為指定使用者的檔案
-group groupname:
-uid userid: 查找檔案的屬主指定uid的檔案;
-gid groupid:
-nouser: 查找沒有屬主的檔案;
-nogroup:查找沒有屬組的檔案;
根據檔案類型進行查找:
-type type
type類型有:
f: 普通檔案
d: 目錄
l: 符号連結
b: 塊裝置
c: 字元裝置
p: 命名管道
s: 套接字
組合查找條件:
與條件:-a
或條件:-o
非條件:-not, !
根據檔案大小來查找:
-size [+|-]num
機關:k, m, g
+num:(num,+oo] 查找的值如果設為x(下同), 範圍為:x>=num
num:(num-1, num] 範圍為:num-1<=x<num
-num:[0,num-1] 範圍為:0<x<num-1
根據時間戳:
以“天”為機關
-atime(最近通路時間)
+num:[num+1, +00] 範圍為:x>num+1
num:[num,num+1) 範圍為num<x<=num+1
-num:[0,num) 範圍為0<x<=num
注意:這項要和-size取值範圍一定要差別開來,很容易混淆.
-mtime(最近檔案修改時間)
-ctime(最近檔案屬性修改時間)
根據權限:
-perm [/|-]mode
mode: 精确權限比對
/mode:任何一類對象(u,g,o)的任何一位權限符合條件即可;隐含或條件;
-mode:為每一類對象指定的每一位權限都必須同時存在方為符合條件;隐含與條件;
處理動作:
-print: 預設處理動作
-ls:類似于對查找到的每個檔案做"ls -l"的操作;
-delete: 删除查找到的檔案;
-fls /path/to/somefile:查找到的檔案的詳細路徑資訊儲存至指定檔案中;
-ok command {} \;
對每個檔案執行指定的指令之前需要使用者事先确認;
-exec command {} \;
無需使用者确認;
實戰
1、查找/var目錄屬主為root,且屬組為mail的所有檔案;
解答: find /var -user root -a -group mail
2、查找/usr目錄下不屬于root、bin或hadoop的所有檔案;
解答: find /usr -not \( -user root -o -user bin -o -user hadoop \)
3、查找/etc目錄下最近一周内其内容修改過,且屬主不為root或hadoop的所有檔案;
解答: find /etc -mtime -7 -a -not \( -user root -o -user hadoop \)
4、查找目前系統上沒有屬主或屬組,且最近一周内曾被通路過的所有檔案;
解答: find / \( -nouser -o -nogroup \) -a -atime -7
5、查找/etc目錄下大于20k且類型為普通檔案的的所有檔案;
解答: find /etc -size +20k -a -type f
6、查找/etc目錄下所有使用者都沒有寫權限的檔案;
解答: find /etc -not -perm /222
7、查找/etc目錄下至少有一類使用者沒有執行權限的檔案;
解答: find /etc -not -perm -111
8、查找/etc/init.d目錄下,所有使用者都有執行權限,且其它使用者擁有寫權限的檔案;
解答:find /etc/init.d -perm -111 -a -perm -002