標籤:linux find命令
find
作用:通過遍曆指定起始路徑下的檔案系統層級結構完成檔案的尋找。
工作特性:尋找速度慢;精確尋找;事實尋找;
使用方法:find [尋找起始路徑] [尋找條件] [處理動作]
尋找起始路徑:指定具體搜尋目標起始路徑;預設為目前的目錄;
尋找條件:指定的尋找標準,可以根據檔案名稱、大小、類型、從事關係、許可權等等標準進行;預設為找出制定路徑下的所有檔案;
處理動作:對符合尋找條件的檔案做出的操作,例如刪除等操作;預設為輸出至標準輸出;
尋找條件:
運算式:由選項和測試組成
根據檔案名稱尋找:
-name “pattern”
-iname "pattern"
支援glob風格的萬用字元非Regex中的 *, ?, [], [^]
-regex pattern:基於Regex模式尋找檔案,匹配是整個路徑,而非其名;
根據檔案從屬關係尋找:
-user USERNAME:尋找屬主指定使用者的所有檔案;
-group GRPNAME:尋找屬組指定組的所有檔案;
-uid UID:尋找屬主指定的UID的所有檔案;
-gid GID:尋找屬組指定的GID的所有檔案;
-nouser:尋找沒有屬主的檔案;
-nogroup:尋找沒有屬組的檔案;
例:尋找/var目錄下屬主為root,且屬組為mail的所有檔案或目錄;
find /var -user root -a -group mail -ls
例:尋找/usr目錄下不屬於root, bin或hadoop的所有檔案或目錄;用兩種方法;
find /usr -not -user root -a -not -user bin -a -not -user hadoop
find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls
根據檔案的類型尋找:
-type TYPE:
f: 普通檔案
d: 目錄檔案
l:符號連結檔案
b:塊裝置 檔案
c:字元裝置檔案
p:管道檔案
s:通訊端檔案
例: find 路徑 -type 檔案類型
組合測試:
與:-a, 預設組合邏輯;(同時滿足相關條件)
或:-o (滿足條件之一即可)
非:-not, ! (取反)
例:find 路徑 條件1 -a 條件2 (尋找條件1和條件2必須同時滿足)
根據檔案的大小尋找:
-size [+|-]#UNIT
常用單位:k, M, G
#UNIT:(#-1, #] 等於#
-#UNIT:[0,#-1] 小於#
+#UNIT:(#, oo) 大於#
例:find 路徑 -size #k (找出檔案大小為#k的檔案)
例:尋找/etc目錄下大於1M且類型為普通檔案的所有檔案;
find /etc -size +1M -type f -exec ls -lh {} \;
根據時間戳記尋找:
以“天”為單位:
-atime [+|-]# 最近訪問時間
#:[#, #-1)
-#:(#, 0]
+#:(oo, #-1]
-mtime 最近修改時間
-ctime 最近變更時間
以“分鐘”為單位:
-amin
-mmin
-cmin
例:尋找/etc目錄下最近一周內其內容修改過,且屬主不是root使用者也不是hadoop使用者的檔案或目錄;
find /etc -mtime -7 -a -not -user root -a -not -user hadoop -ls
例:尋找當前系統上沒有屬或屬組,且最近一周內曾被訪問過的檔案或目錄;
find / \( -nouser -o -nogroup \) -atime -7 -ls
根據許可權尋找:
-perm [/|-]mode
mode:精確許可權匹配;
/mode:任何一類使用者(u,g,o)的許可權中的任何一位(r,w,x)符合條件即滿足;
9位許可權之間存在“或”關係;
-mode:每一類使用者(u,g,o)的許可權中的每一位(r,w,x)同時符合條件即滿足;
9位許可權之間存在“與”關係;
例:尋找/etc目錄下所有使用者都沒有寫入權限的檔案;
find /etc -not -perm /222 -type f -ls
例: 尋找/etc目錄至少有一類使用者沒有執行許可權的檔案;
find /etc -not -perm -111 -type f -ls
例:尋找/etc/init.d/目錄下,所有使用者都有執行許可權,且其它使用者有寫入權限的所有檔案;
find /etc -perm -113 -type f -ls
處理動作:
-print:輸出至標準輸出;預設的動作;
-ls:類似於對尋找到的檔案執行“ls -l”命令,輸出檔案的詳細資料;
-delete:刪除尋找到的檔案;
-fls /PATH/TO/SOMEFILE:把尋找到的所有檔案的長格式資訊儲存至指定檔案中;
-ok COMMAND {} \; :對尋找到的每個檔案執行由COMMAND表示的命令;每次操作都由使用者進行確認;
-exec COMMAND {} \; :對尋找到的每個檔案執行由COMMAND表示的命令;
注意:find傳遞尋找到的檔案路徑至後面的命令時,是先尋找出所有合格檔案路徑,並一次性傳遞給後面的命令;
但是有些命令不能接受過長的參數,此時命令執行會失敗;另一種方式可規避此問題: find | xargs COMMAN
安全上下文
1 、進程以冒使用者的身份運行; 進程是發起此進程使用者的代理,因此以此使用者的身份和許可權完成所有操作;
2、許可權匹配模型:
一 判斷進程的屬主,是否為被訪問的檔案屬主;如果是則應用屬主的許可權;否則查看被訪問檔案有沒有專門的定義給使用者的訪問存取控制清單;如果有則應用;否則進入第二步;
二 判斷進程的屬主,是否屬於被訪問的檔案屬組;如果是,則應用屬組的許可權;否則查看被訪問檔案屬組有沒有專門定義給使用者的存取控制清單;否則進入第三步;
三 應用other的許可權;
Centos 之find詳解