前言:查找,要會!《Mr.Robot》
----------------------------------------------------
一.find使用:
格式:find [options] [查找路徑] [查找條件] [處理動作]
查找路徑:默認爲當前目錄
查找條件:默認爲查找指定路徑下的所有文件
處理動作:默認爲顯示
查找條件:
-name "文件名稱": 支持使用globbing
*
?
[]
[^]
find /etc -name "*passwd"
-iname "文件名稱":查找時不區分字符大小寫
find / -iname "*.log"
-user UserName: 根據屬主查找
-group GroupName: 根據屬組查找
-uid UID
-gid GID
-nouser:查找沒有屬主的文件;
-nogroup: 查找沒有屬組的文件;
組合條件:
-a: 與,同時滿足 (可以省略!)
-o: 或,
-not, !:非,取反
非A,並且 非B: 非(A或B)
-not ( -user hadoop -o -iname "*.txt" )
非A,或 非B: 非(A且B)
-type: 根據文件類型查找
f: 普通文件
d: 目錄
b: 塊設備
c: 字符設備
l: 符號鏈接文件
p: 命名管道
s: 套接字
-size: 根據文件大小查找
-size [+|-]#Unit
例如:-size +2M
常用單位:k, M, G
#: (#-1)<x<=#
根據時間戳查找:
以天爲單位(time):
-atime [+|-]#
+: 表示(#+1)天之外被訪問過;
-: 表示#天之內被訪問過;
無符號:表示短於(#+1)> x >=#天的時間段被訪問過;
-mtime
-ctime
以分鐘爲單位(min):
-amin [+|-]#
-mmin
-cmin
根據權限查找:
-perm [+|-]MODE
MODE:精確匹配
+MODE: 任何一類用戶的任何一位權限匹配;常用於查找某類用戶的某特定權限是否存在;
-MODE: 每類用戶的指定要檢查的權限位都匹配;
文件權限:644
-perm 600: 否
-perm +222:
-perm +002
-perm -444
find / -type f -perm +001
練習:
1、查找/var/目錄屬主爲root且屬組爲mail的所有文件;
# find /var/ -user root -a -group mail
2、查找/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 \)
3、查找/etc/目錄下最近一週內其內容修改過的,且不屬於root或hadoop的文件;
# find /etc/ -mtime -7 -a -not -user root -a -not -user hadoop
# find /etc/ -mtime -7 -a -not \( -user root -o -user hadoop \)
4、查找當前系統上沒有屬主或屬組,且最近1個月內曾被訪問過的文件;
# find / \( -nouser -o -nogroup \) -a -atime -30
5、查找/etc/目錄下大於1M且類型爲普通文件的所有文件;
# find /etc/ -size +1M -a -type f
6、查找/etc/目錄所有用戶都沒有寫權限的文件;
# find /etc/ -not -perm +222
所有都沒有:相反:任何一個有
所有都有:相反:至少有一個沒有
7、查找/etc/目錄下至少有一類用戶沒有寫權限;
# find /etc/ -not -perm -222
8、查找/etc/init.d/目錄下,所有用戶都有執行權限且其它用戶有寫權限的文件;
# find /etc/init.d/ -perm -113
處理動作:
-print:打印在標準輸出上;
-ls:以長格式輸出各文件信息;
-exec COMMAND {} \; :對查找到的文件執行指定的命令
-ok COMMAND {} \; : 交互式的-exec;
find把查找到的所有文件一次性地傳遞給-exec所指定的命令
find | xargs COMMAND
總結:find [查找路徑] [查找條件] [動作]
-name, -iname, -user, -group, -uid, -gid, -nouser, -nogroup, -size, -type, -atime, -perm
-exec, -ok, -ls
| xargs COMMAND
find補充材料(摘自互聯網):
find與xargs
在使用find命令的-exec選項處理匹配到的文件時, find命令將所有匹配到的文件一起傳遞給exec執行。但有些系統對能夠傳遞給exec的命令長度有限制,這樣在find命令運行幾分鐘之後,就會出現 溢出錯誤。錯誤信息通常是“參數列太長”或“參數列溢出”。這就是xargs命令的用處所在,特別是與find命令一起使用。
find命令把匹配到的文件傳遞給xargs命令,而xargs命令每次只獲取一部分文件而不是全部,不像-exec選項那樣。這樣它可以先處理最先獲取的一部分文件,然後是下一批,並如此繼續下去。
在有些系統中,使用-exec選項會爲處理每一個匹配到的文件而發起一個相應的進程,並非將匹配到的文件全部作爲參數一次執行;這樣在有些情況下就會出現進程過多,系統性能下降的問題,因而效率不高;
而使用xargs命令則只有一個進程。另外,在使用xargs命令時,究竟是一次獲取所有的參數,還是分批取得參數,以及每一次獲取參數的數目都會根據該命令的選項及系統內核中相應的可調參數來確定。