find命令是一種實時查找工具,通過遍歷指定的路徑完成文件查找
工作特點:
由於是遍歷指定路徑,所以相對locate而言,它的查找速度略慢
精確查找,與locate不同的是,find是遍歷指定路徑,而不是通過數據庫查找
實時查找,不需要向locate一樣,定期更新數據庫
在查找的同時,只能搜索到用戶具備讀取和執行權限的文件
語法:
find [option]……[查找路徑] [查找條件] [處理動作]
查找路徑:指定具體路徑;默認為當前目錄
查找條件:指定的查找標准,可以文件名、大小、類型、權限等標准進行,默認為找出指定路徑下的所有文件
處理動作:對符合條件的文件做操作,默認輸出到屏幕
查找條件可以分為以下幾類:
一、按搜索層級進行搜索
選項:-maxdepth level #最大搜索目錄深度
-mindepth level #最小搜索目錄深度
舉例:搜索ifcfg-ens33
上圖中,當沒有加maxdepth層級選項時,默認將所有的同名的文件路徑輸出到了屏幕。
由於上圖中指定以/為路徑查找,所以/的文件為第一級,而/root/ifcfg-en33則為第二級,/etc/sysconfig/network-scripts/ifcfg-ens33則為第四級
二、通過文件名查找文件
-name “文件名稱” #通過文件名查找文件,支持通配符
舉例:查找以.sh為后綴的文件
上圖中用通配符*表示所有任意字符
三、通過inode號查找文件
-inum inode號 #通過inode號查找文件
舉例:通過該inode號查找文件
查找相同inode號的文件
-samefile 文件名 #查找和該文件inode號相同的文件
舉例:查找和hello文件的inode號相同的文件
四、查找指定鏈接數的文件
-links n #查找鏈接數為n的文件
舉例:查找鏈接數為3的文件
五、模式匹配文件路徑,而不是文件名
-regex 正則表達式 #通過正則表達式匹配文件路徑,而不是文件名
舉例:查找/root/passwd
六、按屬主、屬組、UID、GID查找
1、按照屬主、屬組
-user username #查找屬組為username的文件
-group groupname #查找屬組為groupname的文件
舉例:查找/home下屬主為wander的文件
同樣也可以用查找屬組為wander的文件
2、按UID或者GID查找文件
-uid Userid #查找uid為Userid的文件
-gid Groupid #查找gid為Groupid的文件
舉例:查找/home下UID為1005的文件
gid和上圖的用法一致
3、查找沒有屬主或屬組的文件
-nouser #查找沒有屬主的文件
-nogroup #查找沒有屬組的文件
查找/home下沒有屬主的文件
七、上圖中的屬主位為數字表示用戶已經被刪除,即沒有了屬主
同樣查找沒有屬組的文件和上圖用法一樣
通過文件類型查找
-type TYPE #查找文件類型為TYPE的文件
f #普通文件
d #目錄文件
l #符號鏈接文件
s #套接字文件
b #塊設備文件
c #字符設備文件
p #管道文件
舉例:查找/root下的目錄文件
上圖中我們結合maxdepth參數只查找第一級的內容
八、查找空文件或空目錄
-empty #空文件或目錄
舉例:查找/root下的空目錄
上圖中,結合maxdepth和type參數使用查找空目錄,如果是查找空文件則使用:
find /root -maxdepth 1 -type f -empty #將文件類型改為f普通文件
九、組合條件查找
-a :與即and的意思
-o :或即or的意思
-not或者! :非
舉例:查找/root下的空文件或者空目錄
舉例:查找/root下文件類型為普通文件,且內容為空的文件
舉例:查找/root下文件類型為普通文件,但是內容不為空的文件
十、不區分大小寫查找
-iname filename #查找文件時,不區分大小寫
舉例:不區分大小寫查找links.sh
十一、按照文件大小查找文件
-size [+|-]#UNIT #通過文件大小查找文件,常用單位k,M,G,c(byte)
size的范圍指定如下:
6k #表示范圍是:(6-1)k<size=6k
+6k #表示的范圍是:6k<size
-6k #表示的范圍是:0k<<size<<(6-1)k
舉例:分別執行查找范圍為6k、+6k、-6k的命令
十二、按時間戳查找文件
time #以“天”為單位
min #以“分鍾”為單位
-atime TIME #表示查找文件的時間戳范圍是:小於TIME+1天,大於等於TIME天
-atime +TIME #表示查找文件的時間戳范圍是:TIME大於等於TIME+1天
-atime -TIME #表示查找文件的時間戳范圍是:TIME大於等於0小於TIME天
舉例:按時間戳查找文件
第一條命令查找文件的時間戳范圍是:文件的創建時間大於21分鍾的文件
第二條命令查找文件的時間戳范圍是:文件的創建時間小於20分鍾的文件
同樣atime、mtime、ctime、amin、mmin等使用方法通上
十三、按文件權限查找文件
-perm #通過權限查找文件
-perm mode #精確匹配mode權限
-perm /mode #任何一類(用戶權限、組權限、其他權限)對象中,只要有一項匹配,即表示符合匹配規則
-perm -mode #每一類對象中,都必須同時擁有指定的權限
0 #表示匹配規則時,不予關注
權限匹配規則:將權限以二進制展開,與mode進行匹配,如展開的二進制位數值為0,則表示不需要進行規則匹配,如為1則需要進行規則匹配
舉例:-perm /mode
文件權限為:003 二進制展開為:00,00,11
mode權限為:222 二進制展開為:10,10,10
上圖中,屬主和屬組的權限和mode都不匹配,其他權限和mode中的其他權限,進行二進制展開,因為mode其他權限的二進制為10,最后一位為0,則不需要去進行匹配,只匹配為1
的位,而文件權限中的其他權限的二進制為11,所以第二位1和mode的第二位1匹配成功。從而匹配了權限規則
舉例:-perm -mode
此處和/mode一樣,文件權限展開二進制為:111,111,111
mode權限展開二進制為:011,011,011
去掉0的權限位,文件權限和mode權限匹配
十四、find的處理文件的動作
-print #默認動作,意為將查找結果輸出到屏幕
-ls #對查找到的文件執行ls -l命令
-delete #對找到的文件執行刪除操作
-ok command {} \; #對找到的文件執行后面命令的操作,會交互式詢問用戶是否執行該命令
-exec command {} \; #對找到的文件執行后面命令的操作,不會交互式詢問用戶是否執行命令
舉例:對找到的文件進行添加bak后綴的操作
上圖中{}意為找到的結果,即time文件
使用-exec參數意味着執行刪除動作時,不進行交互式詢問