1. 程式人生 > >linux入門(二):find指令的用法

linux入門(二):find指令的用法

   j_0055.gif我們知道,Linux下find命令可以在目錄中搜索指定檔案,並進行相應的操作。find命令提供了相

當強大的查詢條件,功能很強大。所以今天我們來分析一下find的用法。與which和whereis不同的是

find在查詢檔案的時候是真正的在遍歷所有的檔案,如果find沒有找到你所需要的目標的話,那系統中

一定不存在你所需要的檔案,因此find在使用的時候會比其他的查詢指令更詳盡一些,當我們在執行一

個很消耗資源的find指令的時候,人們傾向於將其放在後臺執行,因為遍歷一個大的檔案系統可能需要

很長時間。

  1. 命令格式

    find pathname -options[-print -exe -ok ...]

  2. 命令功能

    在檔案樹中查詢檔案,並進行相應操作(可能訪問磁碟)。

  3. 命令引數

    pathname:find命令查詢的搜尋路徑,例如用.來表示當前目錄,/表示根目錄

    -print:將查詢後匹配的檔案 並將其輸出到標準輸出上

    -exe:查詢一個匹配檔案並執行該引數給出的shell命令,相應的命令形式為‘command’{ } \ ;注意{ }和\之間的空格

    -ok:與-exe的作用相同,只不過以一種更安全的模式來執行,每次執行命令之前否會詢問,讓使用者選擇是否要執行

  4. 命令選項

    -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來查詢

①、不管當前的搜尋路徑是什麼,當我們要在自己的根目錄下來搜尋某個檔案,可以用~來代表整個根目錄,下面來看個栗子: 

wKiom1c2_O7SCxTfAAAbnSMHQy4601.png

其中find ~ -name “fuxin” -print 這一條命令是按照檔名來搜尋檔名為fuxin的檔案,並將

②、當我們在當前目錄及其子目錄下搜尋目標檔案的時候,我們可以用.來代替當前目錄,如下:

其輸出,注意這裡的檔名要用雙引號。

wKioL1c3Am3DP_bDAAAgucPSAxY027.png 

③、當我們想在當前目錄中尋找一個檔名以小寫字母開頭的檔案,可以用

ind . -name "[a-z]*" -print,示例如下

wKiom1c3Av3BokwIAACIinsdJNs020.png

同理大寫字母只需要將a-z改成A-Z就可以了

④、當我們想在查詢home目錄中的檔案,可以用:

find ~ -name "*" -print 或find . -print,示例如下:

wKioL1c3BlLTw2iOAADUE2ZYuUw470.png

由於檔案太多我這裡只截了一部分,剩下的大家可以自己操作試試

(2)按照-perm來查詢

寫在前面:我們知道一個檔案的許可權管理有三類人:user,gorup,other,執行事件的屬性有讀,寫,執行,三類,如果一類人用一位八進位制來表示的話,我們可以用三位八進位制數來表示一個檔案的許可權。舉個例子先~

wKioL1c3CBKycYycAAAv0iTsEsE582.png

如上圖所示,對於檔案fuxin來說,對於user來說的許可權為讀寫操作,對應的八進位制為7,而對於group來說讀寫操作,對應的八進位制為7,對於other來說許可權為讀操作,對應的八進位制為5,所以檔案fuxin的許可權為775,這樣的方式表示一個檔案的許可權就很方便了。

①、如果在當前目錄下查詢許可權為XXX的檔案,可以用:

find . -perm XXX -print,例子如下:

wKiom1c3CNmjprPbAAAVfTPzZFQ387.png

當我們要查詢一個檔案的三類人的許可權是一樣的檔案時,例如777,可以講八進位制前面加一個槓,如-007,表示777,示例如下:

wKioL1c3Cr2iPLOFAAAeh6j61vM013.png

(3)如何在查詢一個檔案的時候避開某個目錄?

例如:在目錄dir1下查詢不在目錄dir2下的檔案

find test -path "dirt/dir2" -prune -o -print

wKioL1c3DQKxOkFRAAAlawl17tU320.png

說明:

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  

-print

(4)使用-user和-nouser選項

①按檔案所屬主查詢,-user

例:在home目錄下查詢所屬主為user1的檔案,可以用:

find ~ -user fuxin -print

wKioL1c3Dl3jGjAPAADdcdUPIBs109.png

這檔案太多我只截了一部分,以實際操作為準。

同理如果在其他目錄裡查詢一個檔案,只需要將pathname改成其他路徑就好了。

②、查詢屬主帳戶已經被刪除的檔案,可以使用-nouser選項。

例:在/home目錄下查詢所有的這類檔案,命令:find /home -nouser -print

(5)使用-group和-nogroup選項

①、與-user和-nouser一樣,-group和-nogroup是針對檔案所屬組的,若要在home目錄下查詢使用者組為fuxin的檔案,命令:

find ~ -group fuxin -print

wKiom1c3E4LCQxz7AADgwvAWOf0564.png②、要在某個目錄裡查詢無效所屬組的檔案可以用-nogroup,指令:

find pathname -nogroup -print

(6)使用-mtime -n +n選項

在系統根目錄下查詢距離今日1日時間的檔案

find / -mtime -1 -print

wKiom1c3FdrAscB7AADV5ScruG4128.png同理要在目錄中查詢n日之前的目錄,將-n改為+n即可。

(7)使用-newer file1! file2,查詢某個比檔案file1新且比file2舊 的檔案

例如:在home中查詢一個比test1新比test2舊的檔案

find ~ -newer test1! test2 -print

(8)使用-type選項

在某個目錄下查詢檔案型別為d的檔案:

find ~ -type d -print

wKiom1c3GqTwCeBQAAD5UIvZXIw859.png當查詢不同型別的檔案只需要改變檔案型別就行了。

(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

wKiom1c3HhuRL4liAACMorOy5UM068.png

以上便是find常見指令的用法啦,寫了好久,希望大家能夠為我指出不足之處共同進步,謝謝啦!j_0046.gif

本文出自 “福大馨” 部落格,轉載請與作者聯絡!