1. 程式人生 > >locate、find命令使用總結

locate、find命令使用總結

一、簡介

   在linux系統中存在"一切皆檔案"的說法,這就足以說明檔案的重要性,因此查詢檔案也是我們必須要掌握的技能。這時候熟練使用locate、find命令也就顯得至關重要。尤其是find命令常用於日常工作中如安裝完某個軟體之後要檢視這些軟體的安裝配置路徑,或是需要按指定條件直接查詢我們需要操作的檔案。因此更需要熟練掌握此命令。

二、用法詳解

locate:模糊查詢命令,查詢的是linux系統每天特點時間自動索引備份到系統資料庫中的檔案。

優點:查詢檔案速度快

缺點:查詢到的結果不是實時結果(必要時,可手動執行updatedb命令索引檔案到資料庫,但是相當耗時。)

格式:locate [OPTION]… PATTERN…

屬於模糊非實時查詢,只要查詢路徑包含關鍵字即會顯示出查詢結果,效果如下圖:

blob.png

find:通過遍歷指定的目標目錄查詢檔案,可以根據檔名稱、日期、大小、許可權進行檔案實時查詢

優點:查詢到的結果保證是實時結果

缺點:查詢速度不如locate快

格式:

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

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path…] [expression]

查詢路徑:預設為當前路徑

查詢條件:預設為指定路徑下的所有檔案

處理動作:預設為顯示到螢幕中

查詢條件:

1、-name "檔名":支援使用globbing(*,?,[],[^])

例:按檔名查詢命令為:find / -name "rpm",如下圖:

blob.png

2、-iname 不區分檔名大小寫

例:按檔名不區分大小寫查詢命令為:find /-iname"rpm",如下圖:

blob.png

3、-user 根據屬主查詢檔案

例:按屬主查詢檔案命令為:find /tmp -user lxx,如下圖:

blob.png

4、-group 根據屬組查詢檔案

例:按屬主查詢檔案命令為:find /tmp -group lxx,如下圖:

blob.png

5、-uid 根據uid查詢檔案

例:按uid查詢檔案命令為:find /tmp -uid 502 -ls,如下圖:

blob.png

6、-gid 根據gid查詢檔案

例:按gid查詢檔案命令為:find /tmp -gid 

502 -ls,如下圖:

blob.png

7、查詢沒有屬主的檔案

例:查詢沒有屬主的檔案命令為:find /tmp -nouser -ls,如下圖:

blob.png

8、查詢沒有屬組的檔案

例:查詢沒有屬組的檔案命令為:find /tmp -nogroup -ls,如下圖:

blob.png

9、組合查詢條件

與(所有條件必須同時滿足,-a預設可省):-a 查詢條件1 -a 查詢條件2 -a …

或(滿足其中一個條件即可):-o 查詢條件1 -o 查詢條件2 -o …

非(不滿足指定條件的才可以): -not,! 

    -not 查詢條件

注:-a優先順序高於-o優先順序

例:查詢條件,包含centos檔案並且沒有屬組的檔案,命令為:

find /tmp/ -name "*centos*" -a -nogroup -ls 等價於 

find /tmp/ -name "*centos*" -nogroup -ls

如下圖:

blob.png

例:查詢條件,包含centos檔案並且沒有屬組的檔案,命令為:

find /tmp/ -name "*centos*" -o -nogroup  (注意此處不能加-ls命令,會有問題),如下圖:

blob.png

例:查詢條件,查詢屬主不是root用的檔案,命令為

find /tmp/ -not -user root -ls 或 find /tmp/ !-user root -ls如下圖:

blob.png

find複雜邏輯處理公式:

非A 且 非B = 非(A或B)

非A 或 非B = 非(A且B)

例:find /tmp/ -not -name "*.txt" -a -not -name "*.out" 等價於 find /tmp/ -not \( -name "*.txt" -o -name "*.out" \)   

注:小括號因為比較特殊,所以此處需轉義

10、根據檔案型別查詢

命令格式:-type TYPE:根據檔案型別查詢

引數說明:

    -f:普通檔案

    -d: 目錄檔案

    -l: 符號連結檔案

    -b: 塊裝置檔案

    -c: 字元裝置檔案

    -p: 命令名管道檔案

    -s: 套接字檔案

示例如下圖:

blob.png

11、根據檔案大小查詢

命令格式:-size[+|-]#UNIT:

常用單位:k,M,G

#UNIT: #-1 < x <= #   如1.1k,1.9k,2k等都算作2k檔案

如下圖:

blob.pngblob.png

-#UNIT:x <= #-1 如-2k:1k,0.9k等都符合條件,但是1.1k-1.9k就不符合條件

如下圖:

blob.png

+#UNIT:x > # 如+2k:2.1k,3.1k都符合條件,不包含2k本身。

如下圖:

blob.png

12、根據時間戳查詢
 a.以為單位進行查詢

    訪問時間:-atime:[+|-] 

修改時間-mtime:[+|-]  

改變時間:-ctime:[+|-]

計算公式如下:

      #: # <= x <= #+1

     -#:x < #

+#:x >= #+1

例:查詢3天前的檔案(大於等於3並且小於4),如下圖:

blob.png

b.以分鐘為單位進行查詢
 訪問時間:-amin:[+|-] 

   修改時間:-mmin:[+|-]  

改變時間:-cmin:[+|-]

例:查詢5分鐘之內訪問過的檔案,如下圖:

blob.png

13、根據許可權查詢

命令格式:-perm[+|-]MODE

          MODE:與MODE精確匹配,示例如下圖:

          blob.png

         +MODE:任何一類使用者的許可權只要能包含對其指定的任何一位許可權即可,例如555(r-xr-xr-x)這種情況無論屬主屬主其他使用者只要擁有r或x任何一種許可權即可匹配,示例如下圖:

blob.png

         -MODE:每一類使用者的許可權都包含對其指定的所有許可權即可,例如222(-w- -w- -w-)這種情況無論屬主屬主其他使用者必須都包含寫許可權才能匹配,示例如下圖:

blob.png

14、處理動作

引數說明:

     -print:預設動作,列印至螢幕

     -ls:顯示找到的檔案的詳細屬性

     -exec COMMAND {} \;    注:find配合-exec時如果要刪除檔案,執行後不確認直接刪除(所有命令都不提醒)

     -ok COMMAND {} \;     注:find配合-ok時如果要刪除檔案,執行後需確認後才會刪除(其他命令也會提醒)

-exec示例如下圖:

blob.png

注意:find命令會一次性找到所有符合條件的檔案,並一同傳遞給後面的命令,但有些命令不能接受過長的引數。解決辦法:

find|xargs COMMAND,如下圖:

blob.png

補充:實現查詢檔案後給檔案改名,如下圖:

引數說明:-i 選項告訴 xargs 用每項的名稱替換 {}

-t 選項指示 xargs 先列印命令,然後再執行(想詳細瞭解xargs命令執行過程可以加此引數)

blob.png