find命令技巧總結

1、文件查找命令find和locate對比數據庫

    在Linux中find命令是一個強大的文件查找命令,使用find查找一個文件至關方便。惟一不足的是,find命令是對指定路徑下的文件實時查找,因此對系統的資源消耗較大。若是對於文件的查找不需要太精確,則可使用locate命令。相對於find命令,locate命令則是在一個存儲了文件信息的數據庫中查找文件,優勢是速度快,缺點是查找出來的文件可能已不存在於當前系統,而且功能沒有find那麼強大。
ide

locate命令格式:ui

locate 文件名
#若是搜索不到文件,則多是文件不存在或數據庫尚未生成
#生成數據庫可使用命令
updatedb

find命令格式:spa

find [查找路徑] [查找條件] [處理動做]


2、find經常使用參數3d

一、按用戶查找文件blog

-name: 指定文件名查找,支持文件名通配符
-iname: 指定文件名查找,不區分大小寫
-user: 根據文件屬主查找
-group: 根據文件屬組查找
#在用戶被刪除,但用戶文件存在時使用 -user不能查找出文件,此時能夠用UID
-uid: 根據UID查找
-gid: 根據GID查找
-nouser: 查找沒有屬主的文件
-nogroup: 查找沒有屬組的文件

說明:一般使用格式資源

find /tmp/ -name *.txt #文件名後綴是.txt的全部文件
find /tmp/ -user root #用戶root的全部文件
find /tmp/ -nouser root #用戶不是root的全部文件
find /tmp/ -nouser root -gid 500 #用戶不是root且組ID爲500的文件


二、組合條件查找get

-a: 與,兩邊條件必須同時知足
-o: 或,兩邊條件有一個知足便可
-not: 非,條件取反

說明:find命令的組合條件查找看起來簡單,其實挺複雜的,這裏面隱含了德摩根定律的運用。it

德摩根定律:io

非(P 且 Q)=(非 P)或(非 Q)
非(P 或 Q)=(非 P)且(非 Q)

find組合條件的用法範例:

(1)、假如我要查找系統上/tmp/test/目錄下屬主爲root且文件名爲.txt結尾的文件。

wKioL1MRtpXzvt8rAAD8jvwYPDU874.jpg

因而可知,find命令不寫組合條件默認爲 -a (與)


(2)、查找系統上/tmp/test/目錄下屬主不爲root且文件名爲不以.txt結尾的文件。

當前目錄全部文件:

wKioL1MRt-_DNQ0DAAFgKO6ultY388.jpg

使用find查找的三種方式:

wKioL1MRuEvyKvQNAAGqJ_SGMQ4970.jpg

第一種方式:使用-not和-a把兩條件組合起來查找。

第二種方式:由於find默認爲使用-a組合多條件,因此把-a去掉查找到的結果也是同樣的。

第三種方式:根據偉大的德摩根定律,把兩個條件的非(-not)提出來,有點相似於學校學的因式分解,-not提出來後,加上括號把兩條件組合,這裏要注意的是,括號要加斜線轉義,而且括號裏的「與」要變成「或」,若是是「或」則要變成「與」。


三、根據文件類型查找

-type: 根據文件類型查找
#如下爲經常使用類型
    f: 普通文件
    d: 目錄
    b: 塊設備
    c: 字符設備
    l: 符號連接文件
    p: 命名管道
    s: 套接字文件

例如:查找/dev/目錄下以sd開頭的塊設備文件

find /dev/ -type b -name "sd[a-z][0-9]"

wKioL1MRumnwIJXdAACCCvFLQ4g461.jpg


四、根據文件大小查找

-size: 根據文件大小查找
#經常使用單位: k, M, G,size後面的數字可接+|-分別表明不一樣意義
#例:-size +2M

說明:-size參數帶加減號分別帶表三種狀況

-size 2M : 並非精確查找文件大小爲 2M的文件,而是表示區間是 1M-2M 大小的文件,(#-1) < x < #

-size +2M : 表示查找大於2M的文件,x > #

-size -2M : 並非精確查找文件小於 2M的文件,而是表示區間是 0M-(2-1)M 大小的文件,0 < x < (#-1)


例如:分別新建六個以自身大小爲名字後綴爲.out的文件,0.out(0M)、1.5.out(1.5M)、2.out(2M)、2.5.out(2.5M)、3.out(3M)、3.5.out(3.5M)而後用這三種方式查找,結果以下:

wKioL1MRxVfQE0PCAAHzvl6VRAE350.jpg

(1)、find -size 2M: 查找的結果是兩個文件,居然還有一個1.5M的文件,這是正常的,由於這次搜索的區間是:(2-1)M < x < 2M

(2)、find -size -2M: 查找的結果是一個0k的文件,居然沒有把那個1.5M的文件搜索出來,由於這次搜索的區間是:0 < x < (2-1)M

(3)、find -size +2M: 查找出了全部大於2M的且不等於2M的文件,由於這次搜索的區間就是大於2M的文件:x > 2M


五、根據時間戳查找

#以天爲單位
-atime: 查找某天範圍內被訪問過的文件
-mtime: 查找某天範圍內被修改過的文件
-ctime: 查找某天範圍內元數據被修改過的文件
#以分鐘爲單位
-amin: 查找某分鐘範圍內被訪問過的文件
-mmin: 查找某分鐘範圍內被修改過的文件
-cmin: 查找某分鐘範圍內元數據被修改過的文件

說明:這六個參數也能夠帶加減號使用。

以-atime爲例:

-atime 2: 並非精確到2天,而是表示區間在過去2天至3一內:#天< x < (#+1)天

-atime +2: 表示的是大於2+1天訪問過:x > (#+1)天

-atime -2: 表示的是2天以內:0< x < #

以下圖所示:

wKioL1MR2mLgc8nhAABlAKCraWw235.jpg



六、根據權限查找

-perm: 根據某類或某個權限查找

說明:-perm能夠指定u、g、o三個權限位的權限來查找文件,也能夠帶上加減號使用。

-perm 644: 當不帶符號時,表示的是精確匹配三個權限,只處爲精確匹配 644 。

-perm +644: 當帶有加號時,表示的是任何一類用戶的任何一位權限匹配便可,經常使用於查找某類用戶的某特定權限是否存在。此處能夠匹配:u=r|w 或者 g=r 或者 o=r

-perm -644: 表示每類用戶的任何一位權限匹配,每類用戶的指定要檢查的權限位都匹配。此處能夠匹配:64四、744

以下圖所示:

wKiom1MR3ueRaAqvAAGJGDC399Q137.jpg

四個文件權限分別是 a.txt(744)、b.txt(644)、c.txt(444)、d.txt(244)

(1)、find -perm 644:查找結果爲精確查的644權限文件。

(2)、find -perm +644: 查找結果是全部。此處就算是200、400也能被匹配出。所以加號經常使用來查找某類用戶的特定權限是否存在。

(3)、find -perm -644: 查找結果是 64四、744


3、find命令的處理動做

經常使用處理動做:

-print: 打印在標準輸出上
-ls: 以長格式輸出各文件信息,至關於ls -l
-exec COMMAND {} \; : 對查找到的文件執行指定的命令
-ok COMMANE {} \; : 和上面的區別是,至關於交互式的-exec,對文件的執行會先詢問用戶;
#find把查找到的全部文件一次性地傳遞給 -exec 所指定的命令,命令後面接花括號做佔位符,且佔位符兩邊必須有空格,空格後接反斜線加分號。格式:-exec ls {} \;
|xargs COMMAND:把查找結果逐條傳給xargs 後面的命令執行

一、find命令的默認處理動做就是-print,打印數據。

二、-ls則至關於把查找到的數據經過ls命令顯示詳情。

wKiom1MR5tWxbdMmAAFbZH3bdZc345.jpg


三、-exec後面接的是命令名,能夠把查找到的數據傳給後面的命令執行。

wKiom1MR4knxrzJTAAKthZvZ6LY828.jpg

說明:上圖對查找到的文件傳給後面的cat命令執行,兩個花括號做佔符,表明的是前面的文件的文件名,花括號後面接反斜線分號。


四、-ok和-exec是同樣的,不一樣的是若是執行的操做是需要交互式詢問用戶時,-ok會在對文件執行前會先詢問用戶。

五、|xargs和-exec也是執行用戶自定義的命令,不一樣的是find是把查詢到的結果無論多少一次性所有傳給-exec執行,而對於xargs則是逐條傳遞。第二個不一樣點是,-exec能夠引用結果文件的文件名,而xargs則不能夠,因此各有各的用處。

wKioL1MR5l2gtCL-AACzC0Ozrd8452.jpg

相關文章
相關標籤/搜索