find命令不僅能幫助我們在數目眾多的文件中快速找到滿足條件的文本,我們還能通過find處理動作對查找到的文件進行進一步的處理。
一、find的特點:
遍歷查找,因此查找速度略慢
精確查找
實時查找
二、find用法:
find [OPTION]… [ 查找路徑] [ 查找條件] [ 處理動作]
查找路徑:指定具體目標路徑;默認為當前目錄
查找條件:指定的查找標準,可以文件名、大小、類型、權限等標準進行
處理動作:對符合條件的文件做操作,默認輸出至屏幕
三、find查找條件:
1、根據文件名查找:
-name “文件名”: 文件支持glob通配符
-iname “文件名”: 查找時忽略文件名大小寫
-inum “文件inode號”: 根據文件inode號碼查找
-links “鏈接數” :查找具有指定連接數的文件
-regex “pattern” :查找匹配”pattern”的文件,支持正則表達式
例(1)、查找當前目錄下以sum開頭的文件
2、根據屬主、屬組查找
-user username : 查找屬主為指定用戶的文件
-uid userid: 查找uid為指定id的文件
-group groupname: 查找屬組為指定組的文件
-gid groupid: 查找gid為指定gid的文件
-nouser:查找沒有屬主的文件
-nogroup: 查找沒有屬組的文件
例(2)、查找系統中屬主為hadoop的文件
3、根據文件類型查找:
-type filetype:
f: 普通文件
d: 目錄文件
l: 符號鏈接文件
s : 套接字文件
b: 塊設備文件
c: 字符設備文件
p: 管道文件
例(3)、 查找/etc/目錄下的連接文件
4、組合條件:如果要查找滿足不止一個特定條件的文件,就需要將這些條件組合起來。條件的組合有以下形式:
與:-a
或:-o
非:-not, !
同時,組合條件遵循德摩根定律:
(非A) 且 (非B ) = 非(A 或 B) !A -a !B = !(A -o B)
(非A) 或 (非B ) = 非(A 且 B) !A -o !B = !(A -a B)
例(4)、找出/tmp 目錄下,屬主不是root ,文件名不是以p開頭的文件 ,用德摩根定律實現兩種查找方式。
第一種:
第二種:
5、根據文件大小來查找
-size [+|-]nunit:
常用的單位有k、M、G
-size 6k: 查找的文件大小等于6k的文件,它的范圍為(5K, 6k]
-size -6k:查找文件大小小于6k的文件,它的范圍為[0,5k]
-size +6K:查找文件大小大于6k的文件,它的范圍為(6,∞),不包含6k。
6、根據時間戳查找
以“天”為單位;
-atime [+|-]n,
n: [n,n+1):比如查找第7天被訪問過的文件,-atime 7查找范圍為[7,8)
+n: [n+1, ∞ ]:查找7天前被訪問過的文件,-atime +7查找范圍為[8, ∞)
-n: [0,n):查找7天之內被訪問過的文件,-atime -7查找范圍為[0,7),0表示現在
-mtime
-ctime
以“分鐘”為單位:
-amin
-mmin
-cmin
7、根據權限查找
-perm [/|-]mode:
mode : 精確權限匹配
/mode:任何一類(u,g,o) 對象的權限中只要能一位匹配即可,或關系,+ 從centos7 開始淘汰
-mode:每一類對象都必須同時擁有指定權限,與關系。
0表示不關注
例:匹配所有用戶只要寫權限的文件,find -perm 222
匹配任何一類用戶有寫權限的文件,find -perm +222
匹配所有用戶都要寫權限的文件,find -perm -222
匹配其他用戶有寫權限的文件,find -perm -002
四、處理動作
print :默認的處理動作,顯示至屏幕;
-ls :類似于對查找到的文件執行“ls -l” 命令
-delete :刪除查找到的文件;
-fls file :查找到的所有文件的長格式信息保存至指定文件中
-ok COMMAND {} \; 對查找到的每個文件執行由COMMAND 指定的命令;對于每個文件執行命令之前,都會交互式要求用戶確認
-exec COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令
{}: 用于引用查找到的文件名稱自身
注:find 傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令。
有些命令不能接受過多參數,此時命令執行可能會失敗,下面方式可規避此問題
find | xargs COMMAND
五、示例
1、查找/var目錄下屬主為root,且屬組為mail的所有文件
find /var -user root -a -group mail
2、查找/var目錄下不屬于root、lp、gdm的所有文件
find /var ! \( -user root -o -user lp -o -user gdm \) -ls
3、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件
find /var -mtime -7 -a ! \( -user root -o -user postfix \) | xargs stat
4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件
find / \( -nouser -o -nogroup \) -a -atime -7 -ls
5、查找/etc目錄下大于1M且類型為普通文件的所有文件
find /etc/ -size +1M -ls
6、查找/etc目錄下所有用戶都沒有寫權限的文件
find /etc ! -perm +222 -ls
7、查找/etc目錄下至少有一類用戶沒有執行權限的文件
find /etc/ ! -perm -111 -ls
8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件
find /etc/init.d/ -perm -111 -a -perm -002
原創文章,作者:M20-1鐘明波,如若轉載,請注明出處:http://www.www58058.com/36091
find命令是筆試中常見的考點,同時find的處理動作也是很重要的,希望課后能多加練習,熟練掌握。
@馬哥教育:好的