linux入門(二):find指令的用法
我們知道,Linux下find命令可以在目錄中搜索指定檔案,並進行相應的操作。find命令提供了相
當強大的查詢條件,功能很強大。所以今天我們來分析一下find的用法。與which和whereis不同的是
find在查詢檔案的時候是真正的在遍歷所有的檔案,如果find沒有找到你所需要的目標的話,那系統中
一定不存在你所需要的檔案,因此find在使用的時候會比其他的查詢指令更詳盡一些,當我們在執行一
個很消耗資源的find指令的時候,人們傾向於將其放在後臺執行,因為遍歷一個大的檔案系統可能需要
很長時間。
命令格式
find pathname -options[-print -exe -ok ...]
命令功能
在檔案樹中查詢檔案,並進行相應操作(可能訪問磁碟)。
命令引數
pathname:find命令查詢的搜尋路徑,例如用.來表示當前目錄,/表示根目錄
-print:將查詢後匹配的檔案 並將其輸出到標準輸出上
-exe:查詢一個匹配檔案並執行該引數給出的shell命令,相應的命令形式為‘command’{ } \ ;注意{ }和\之間的空格
-ok:與-exe的作用相同,只不過以一種更安全的模式來執行,每次執行命令之前否會詢問,讓使用者選擇是否要執行
命令選項
-name:按照檔名來查詢
-perm:按照檔案許可權來查詢
-prune:使用這一選項可以使find不在當前指定的目錄中查詢
-user:按照檔案所屬使用者來查詢
-group:按照檔案所述使用者組來查詢
-mtime -n/+n:按照檔案的修改時間來查詢,-n表示檔案修改時間距離現在n天以內,+n表示檔案修改時間距離現在n天以外,find命令裡面還有-atime,-ctime,作用都與-mtime
-nogroup:查詢無效所屬組的檔案,即該檔案在etc/group中不存在
-nouser:查詢無效所屬使用者的檔案,即該檔案在etc/passwd中不存在
-newer file1 !file2:查詢修改時間比file1新但是比file2舊的檔案
-type:按照檔案型別來查詢:
b-塊裝置檔案
c-字元裝置檔案
d-目錄檔案
l-符號連結檔案
f-普通檔案
p-管道檔案
-size [n]:[c] 查詢檔案大小為n塊的檔案,帶有c時表示檔案大小以位元組計
-depth:表示查詢檔案時,先在當前目錄中查詢,再在當前目錄的子目錄中查詢
(1)按照-name來查詢
①、不管當前的搜尋路徑是什麼,當我們要在自己的根目錄下來搜尋某個檔案,可以用~來代表整個根目錄,下面來看個栗子:
其中find ~ -name “fuxin” -print 這一條命令是按照檔名來搜尋檔名為fuxin的檔案,並將
②、當我們在當前目錄及其子目錄下搜尋目標檔案的時候,我們可以用.來代替當前目錄,如下:
其輸出,注意這裡的檔名要用雙引號。
③、當我們想在當前目錄中尋找一個檔名以小寫字母開頭的檔案,可以用
ind . -name "[a-z]*" -print,示例如下:
同理大寫字母只需要將a-z改成A-Z就可以了
④、當我們想在查詢home目錄中的檔案,可以用:
find ~ -name "*" -print 或find . -print,示例如下:
由於檔案太多我這裡只截了一部分,剩下的大家可以自己操作試試。
(2)按照-perm來查詢
寫在前面:我們知道一個檔案的許可權管理有三類人:user,gorup,other,執行事件的屬性有讀,寫,執行,三類,如果一類人用一位八進位制來表示的話,我們可以用三位八進位制數來表示一個檔案的許可權。舉個例子先~
如上圖所示,對於檔案fuxin來說,對於user來說的許可權為讀寫操作,對應的八進位制為7,而對於group來說讀寫操作,對應的八進位制為7,對於other來說許可權為讀操作,對應的八進位制為5,所以檔案fuxin的許可權為775,這樣的方式表示一個檔案的許可權就很方便了。
①、如果在當前目錄下查詢許可權為XXX的檔案,可以用:
find . -perm XXX -print,例子如下:
當我們要查詢一個檔案的三類人的許可權是一樣的檔案時,例如777,可以講八進位制前面加一個槓,如-007,表示777,示例如下:
(3)如何在查詢一個檔案的時候避開某個目錄?
例如:在目錄dir1下查詢不在目錄dir2下的檔案
find test -path "dirt/dir2" -prune -o -print
說明:
find [-path ..] [expression]
在路徑列表的後面的是表示式
-path "test" -prune -o -print 是 -path "test" -a -prune -o -print 的簡寫表示式按順序求值, -a 和 -o 都是短路求值,與 shell 的 && 和 || 類似如果
-path "test" 為真,則求值 -prune , -prune 返回真,與邏輯表示式為真;否則不求值 -prune,與邏輯表示式為假。如果 -path "test" -a -prune 為假,則求值 -print ,-print返回真,或邏輯表示式為真;否則不求值 -print,或邏輯表示式為真。
這個表示式組合特例可以用偽碼寫為:
if -path "test" then
-prune
else
(4)使用-user和-nouser選項
①按檔案所屬主查詢,-user
例:在home目錄下查詢所屬主為user1的檔案,可以用:
find ~ -user fuxin -print
這檔案太多我只截了一部分,以實際操作為準。
同理如果在其他目錄裡查詢一個檔案,只需要將pathname改成其他路徑就好了。
②、查詢屬主帳戶已經被刪除的檔案,可以使用-nouser選項。
例:在/home目錄下查詢所有的這類檔案,命令:find /home -nouser -print
(5)使用-group和-nogroup選項
①、與-user和-nouser一樣,-group和-nogroup是針對檔案所屬組的,若要在home目錄下查詢使用者組為fuxin的檔案,命令:
find ~ -group fuxin -print
②、要在某個目錄裡查詢無效所屬組的檔案可以用-nogroup,指令:
find pathname -nogroup -print
(6)使用-mtime -n +n選項
在系統根目錄下查詢距離今日1日時間的檔案
find / -mtime -1 -print
(7)使用-newer file1! file2,查詢某個比檔案file1新且比file2舊 的檔案
例如:在home中查詢一個比test1新比test2舊的檔案
find ~ -newer test1! test2 -print
(8)使用-type選項
在某個目錄下查詢檔案型別為d的檔案:
find ~ -type d -print
(9)-size選項,查詢長度為n塊的檔案(1塊等於512位元組)
如果要在home下查詢長度為10000位元組的檔案:
find ~ -size 10000c -print
如果要在home下查詢長度為10000塊的檔案
find~ -size 10000 -print
(10)-depth選項
在使用find命令時,可能希望先匹配所有的檔案,再在子目錄中查詢。使用depth選項就可以使find命令這樣做。這樣做的一個原因就是,當在使用find命令向磁帶上備份檔案系統時,希望首先備份所有的檔案,其次再備份子目錄中的檔案。
在根目錄中查詢一個檔名為file的檔案
find / -name "file" -depth -print
以上便是find常見指令的用法啦,寫了好久,希望大家能夠為我指出不足之處共同進步,謝謝啦!
本文出自 “福大馨” 部落格,轉載請與作者聯絡!