1. 程式人生 > >linux中的檔案搜尋命令

linux中的檔案搜尋命令

一、locate命令

是在後臺數據庫中按檔名搜尋(也只能按檔名搜尋),搜尋速度較快

這個資料庫的目錄,不同的linux發行版不同,在centos6.10中,這個資料庫的目錄為:/var/lib/mlocate/mlocate.db

這個資料庫預設一天一更新,所以一般新建的檔案,如果不手動更新該資料庫,在該天內是無法使用locate命令來檢視檔案位置的,更新該資料庫的命令為:updatedb                                         # 需要使用root許可權才能生效

另外locate搜尋是一種類似於模糊搜尋:

還有在/etc/updatedb.conf配置檔案中會過濾掉一些搜尋路徑,即在那些路徑中的檔案用locate命令無法搜尋,例項如下:

二、whereis及which命令

這兩個命令用來搜尋命令的路徑(也遵循/etc/updatedb.conf配置檔案的篩選規則)

whereis 命令名                                   #搜尋命令所在路徑及幫助文件所在位置
選項:
-b:只查詢可執行檔案
-m:只查詢幫助檔案

which 命令名                                       #查詢命令是否存在,以及命令的存放位置在哪兒

      在centos7.0中能夠找到cd命令的路徑,6.10中沒有。

linux中要想使某個命令在任何目錄下都能執行,可以像windows一樣將該命令的路徑新增到環境變數PATH下:

其中,各個搜尋路徑是用冒號分隔的。


三、find命令

find命令是用來在給定的目錄下查詢符合給定條件的檔案

  find [OPTIONS] [查詢起始路徑] [查詢條件] [處理動作]

一、OPTIONS引數

    -P、-L、-H:控制軟連線的對待方式,用的不多。不介紹了

二、查詢路徑

    就是個目錄路徑,相對和絕對都可以。

三、查詢條件

(一)、根據名稱查詢

-name "PATERN"

-iname "PATERN" :不區分名稱字母大小寫

如果要根據萬用字元進行模糊查詢,需要查詢的檔名要用引號括起來(雙引號與單引號均可以)

linux中的常用萬用字元有:

*表示匹配任意內容

?表示匹配任意一個字元

[]表示匹配任意一箇中括號內的字元

(二)、根據檔案從屬關係查詢:

        -user USERNAME:查詢屬主指定使用者的所有檔案;

        -group GRPNAME:查詢屬組指定組的所有檔案;

        -uid UID:查詢屬主指定的UID的所有檔案;

        -gid GID:查詢屬組指定的GID的所有檔案;

                           -nouser:查詢沒有屬主的檔案;

        -nogroup:查詢沒有屬組的檔案;

(一般來自Windows中的檔案及linux系統核心的檔案比如資料夾/sys及/proc下的檔案一般有沒有屬主和屬組的檔案,這兩部分的檔案不要隨便刪除,其餘的沒有屬主的檔案可以看做垃圾檔案,可以刪除)

(三)、根據檔案的型別查詢:

      -type:根據不同的檔案型別篩選

f 普通檔案
d 目錄檔案
l 符號連結檔案
b 塊裝置檔案
c 字元裝置檔案
p 管道檔案
s 套接字檔案

(四)、 根據時間戳查詢:

按照atime(檔案的最後訪問時間)、mtime(檔案的最後修改時間)、ctime(檔案最後改變時間)三個變數來查詢:以天為單位,

find /var/log/ -mtime +10
#查詢10天前修改的檔案

(五)、按檔案大小搜尋

find 路徑  -size 檔案大小(單位為:k,M,G)

其中+2M表示大於2M的檔案,-2M表示小於2M的檔案,2M表示等於2M的檔案

多條件查詢:

find /etc -size +20k -a -size -50k    #查詢/etc/目錄下,大於20KB並且小於50KB的檔案

-a表示and  邏輯與,兩個條件都滿足

-o表示邏輯或,兩個條件滿足一個即可

find /etc -size +20k -a -size -50k -exec ls -lh {} \;

#    查詢/etc/目錄下,大於20KB並且小於50KB的檔案,並且顯示詳細資訊

#    -exec COMMAND {} \;   對查詢到的每個檔案執行由COMMAND表示的命令;

(六)按檔案的inode結點號來查詢檔案

find 路徑 -inum 檔案的inode節點號

注意:查詢目錄時,所羅列的檔案號(ls -li命令)列出的是目錄下的檔案或資料夾的inode號。

(七)根據檔案的許可權來查詢

find 路徑 -perm mode      #實現的是精確匹配

find 路徑 -perm -mode     #完全包含此mode時才可以匹配(轉換為許可權字元r,w,x後再比較)

find 路徑 -perm /mode     #任何一位匹配即可(即所有者,所屬組,其他人許可權中的一位)

例項:

首先準備幾個檔案

首先來看:find ./ -perm 664

可見這是一種精確匹配,需要所有者,所屬組,其他人三者相對應的位置的許可權數字或者說許可權字母完全對應一致才行

再來看find ./ -perm -660

可見,只要檔案許可權包含所有者及所屬組均可讀可寫即可匹配,從上面的許可權字母也很容易看出(rw-rw-r--包含rw-rw----),從許可權數字來看(664包含660)

再來看find ./ -perm /660

“-perm /mode”和“-perm -mode”之間的區別就好理解了。“-perm /mode”要求所匹配的許可權之間是“或”的關係,“-perm -mode”則要求所匹配的許可權之間是“與”的關係。也就是說,“-perm /660”表示所有者或所屬組任何一個具有寫許可權就可以,而“-perm -660”則表示所有者和所屬組必須同時具有寫許可權。

詳細內容請參考:

對find命令按許可權查詢的進一步理解

四、grep命令

grep [選項] 字串 檔名     # 在檔案中匹配符合條件的字串
選型:
        -i: 忽略大小寫
        -v: 排除指定字串

grep是在檔案中查詢符合條件的字串,而不是尋找檔案,grep是包含匹配,不像find的那樣的完全匹配。

另外,grep命令常結合linux管道原理進行二次查詢操作,如下所示:

find命令與grep命令的區別

  • find命令:在系統當中搜尋符合條件的檔名,如果需要匹配,使用萬用字元匹配,萬用字元是完全匹配。
  • grep命令:在檔案當中搜尋符合條件的字串,如果需要匹配,使用正則表示式進行匹配,正則表示式時包含匹配