1. 程式人生 > >Linux 常用命令之——檔案搜尋命令find、locate、which、whereis、grep

Linux 常用命令之——檔案搜尋命令find、locate、which、whereis、grep

一、命令名稱:find

命令所在路徑:/bin/find

執行許可權:所有使用者

語法: find  [搜尋範圍] [匹配條件]

$find /etc -name init           -name          在某路徑下根據檔名稱搜尋檔案

$find /etc -iname ?init*                             -iname  在某路徑下根據根據檔名稱不區分大小寫模糊搜尋

$find /etc -size 204800     -size  或者 +size    表示檔案大小小於或大於多少的檔案,去掉 + -表示精確查詢檔案大寫為多大的檔案

$find /etc -cmin -5            -cmin  檔案屬性change  查詢距現在不超過5分鐘內檔案屬性被修改的檔案

$find /etc -amin -5                                         -amin       訪問時間access  查詢距現在訪問時間不超過5分鐘的檔案

$find /etc -mmin -5                                     -mmin      檔案內容modify  查詢距現在訪問時間不超過5分鐘檔案內容被修改的檔案

功能描述:檔案搜尋

最常用的選項操作範例:

1、根據檔案或目錄名稱搜尋(精確搜尋和模糊匹配搜尋)

$ find /etc -name init        在目錄/etc中查詢檔案init

注:如果只知道檔名稱的部分,可以通過佔位符的方式進行拼接搜尋,規則為:

* 號表示匹配任意個字元

?號表示匹配單個字元

例如:

1) $ find /etc -name  *init*      表示在目錄/etc中查詢檔名稱 含有init 的檔案

2) $ find /etc -name init*   表示在目錄/etc中查詢檔名稱 以init 開頭的檔案

3) $find /etc -name  init?   表示在目錄中查詢檔名稱以 init開頭,且後面跟一個字元(或者說五個字元,前四個字元是init) 的檔案

4) $ find /etc -name ?init  表示在目錄/etc中查詢檔名稱以 init結尾的檔案

2、根據檔名或目錄,不區分檔名稱中大小寫進行搜尋

$find  /etc -iname init                 -iname 不區分檔名稱大小寫

注:如果不確定檔案的大小寫,可以用 -iname 選項代替-name

例項:

1) $ find /etc -iname init  會查找出/etc目錄中 檔名稱為init的檔案或者 INIT 檔案或者 Init檔案等等

3、根據檔案大小進行搜尋

$find  /    -size +n    在根目錄下查詢大於n資料塊個單位大小的檔案   

  +n  大於   -n 小於 n等於    

特別注意: 這裡的n表示的是一個數字,單位是資料塊,資料塊和平常普通看到的檔案大小的單位位元組有所區別,

      資料塊和位元組以及kb的換算關係為:  1個數據塊 = 512位元組 =0.5k

例項:

1) $ find / -size +204800    這裡表示在根目錄下搜尋檔案大小大於100MB的檔案

2) $ find  /etc -size -163840 -a -size -204800               在/etc下查詢大於80MB 小於100MB的檔案

   特別補充!!!: -a 選項表示兩個條件同時滿足,a可理解為and

                                  -o 選項表示兩個條件滿足任意一個即可,o可理解為or

3) $ find /etc -name inittab -exec ls -l {} \;                    在/etc 下查詢inittab檔案並顯示其詳細資訊

   特別補充!!!: -exec/-ok 命令 {} \;        對搜尋結果執行操作

   特別注意連線符-exec 表示執行完前面命令後繼續執行後面的命令

          -ok 表示執行完前面的命令結束後,系統會詢問是否執行後面的命令

   上述命令特別注意後面的 大括號符號和反斜槓以及分號結尾符,該符號為固定內容

  例如:$ find /home -usr shenchao -ok rm {} \;   表示將/home目錄下所有者為shenchao的所有檔案刪除,刪除前提醒是否刪除確認

4、根據檔案或目錄所有者(一般為檔案或目錄的建立者)搜尋

$find  /home -usr  shenchao  在根目錄下查詢所有者為shenchao的檔案

5、根據檔案或目錄的所屬組進行搜尋

$find  /home -group  meinv   在根目錄下查詢使用者組為meinv組的檔案

6、查詢某個時間段內或外被修改過屬性或者內容的檔案:

例項:

1)$ find /etc -cmin -5    查詢/etc目錄中距現在5分鐘內檔案屬性被修改過的檔案

2) $ find  /etc -amin -10 查詢/etc目錄中距現在10分鐘內被訪問過的檔案

3) $ find /etc -mmin -30 查詢/etc目錄中距現在30分鐘內檔案內容被修改過的檔案

7、根據檔案型別進行查詢,檔案型別包括: 檔案- f ;       目錄-d ;      軟連結檔案-l

例項:

1) $ find /etc -name init*  -a  -type d     表示查找出/etc目錄下名稱以init開頭 並且 檔案型別為目錄的 所有目錄

2)$ find /etc -name init* -a -type  f      表示查找出/etc目錄下名稱以init 開頭 並且 檔案型別為檔案的 所有檔案

8、根據檔案i節點進行查詢

例項;

1)$ find . -inum 31531 -exec rm {} \;   表示在當前目錄下查詢並刪除i節點為31531開始的檔案

2)如何確定一個檔案是否有硬連結?

方法步驟: 先查詢該檔案的屬性資訊,確定該檔案的 i 節點,然後在該檔案所在的分割槽,搜尋 i 節點為該數字的檔案

所用原理: 一個檔案的硬連結和檔案本身一定在同一個分割槽內

命令:

其他檔案搜尋命令

二、檔案搜尋命令:locate

命令名稱:locate

命令所在路徑:/usr/bin/locate

執行許可權:所有使用者

語法:locate  檔名

功能描述:在檔案資料庫中查詢檔案,不是實時檔案

範例:$ locate inittab

搜尋快的原因:該命令直接搜尋自己的檔案庫,而不是像其他搜尋某個磁碟

locate命令的缺點:非實時查詢命令;可以使用updatedb命令強制更新資料庫,以使用locate搜尋命令

                                 對部分目錄中的檔案不進行收錄,比如/tmp

以上命令類似於windows中的工具everything

三、更精確的檔案搜尋命令:which

命令名稱:which

命令所在路徑:/usr/bin/which

執行許可權:所有使用者

語法:which 命令

功能描述:搜尋命令所在目錄及別名資訊,通過獲取命令所在路徑,可基本判斷該命令的使用許可權範圍,比如,在sbin目錄下的,說明只有root使用者才有許可權使用;

範例: $ which ls

             $which cp

            $ which rm

四、更精確的檔案搜尋命令:whereis

命令名稱;whereis

命令所在路徑:/usr/bin/whereis

執行許可權:所有使用者

語法:whereis [命令名稱]

功能描述:搜尋命令所在目錄及幫助文件路徑

範例:$  whereis ls

注意:which 和whereis 命令是用於搜尋 命令 所在路徑的資訊,which可查詢命令的路徑和別名資訊,whereis命令可查詢命令的路徑和幫助文件所在的路徑。通過路徑是否在/sbin目錄下,可確認是否只有root許可權可用。通過幫助文件路徑,可以幫助查詢該命令更多資訊

五、檔案搜尋命令:grep  

命令名稱:grep

命令所在路徑:/bin/grep

執行許可權:所有使用者

語法:grep -iv  [指定字串]  [檔案]

                     -i  不區分大小寫

                     -v  排除指定字串

功能描述:在檔案中搜尋字串的行並輸出,搜尋某個檔案內的某些字串所在一行的資訊

範例:# grep mysql /root/install.log    表示查詢/root目錄下,install.log檔案中 myssql 字串所在行資訊

 注意:該命令也被稱為檔案搜尋命令,但是該命令與find  which  whereis等命令不同,

以上命令是在Linux系統中,查詢某個檔案的屬性等資訊,是為了找到檔案,而grep命令

是為了在某個確定的檔案中查詢某些字串等的資訊。

即  find      locate 用於在大量目錄中查詢某個檔案

 而 which  whereis 用於在大量目錄中查詢某個命令的路徑

而 grep                  用於在某個檔案中搜索某個字串

總結:-i 不區分大小寫的選項在 find  locate grep等多個命令中作用共通

     在Linux很多配置檔案中,有很多的# 開頭的行,表示註釋資訊