find命令詳解


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參數意味着執行刪除動作時,不進行交互式詢問


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM