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結尾的文件。
因而可知,find命令不寫組合條件默認爲 -a (與)
(2)、查找系統上/tmp/test/目錄下屬主不爲root且文件名爲不以.txt結尾的文件。
當前目錄全部文件:
使用find查找的三種方式:
第一種方式:使用-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]"
四、根據文件大小查找
-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)而後用這三種方式查找,結果以下:
(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 < #
以下圖所示:
六、根據權限查找
-perm: 根據某類或某個權限查找
說明:-perm能夠指定u、g、o三個權限位的權限來查找文件,也能夠帶上加減號使用。
-perm 644: 當不帶符號時,表示的是精確匹配三個權限,只處爲精確匹配 644 。
-perm +644: 當帶有加號時,表示的是任何一類用戶的任何一位權限匹配便可,經常使用於查找某類用戶的某特定權限是否存在。此處能夠匹配:u=r|w 或者 g=r 或者 o=r
-perm -644: 表示每類用戶的任何一位權限匹配,每類用戶的指定要檢查的權限位都匹配。此處能夠匹配:64四、744
以下圖所示:
四個文件權限分別是 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命令顯示詳情。
三、-exec後面接的是命令名,能夠把查找到的數據傳給後面的命令執行。
說明:上圖對查找到的文件傳給後面的cat命令執行,兩個花括號做佔符,表明的是前面的文件的文件名,花括號後面接反斜線分號。
四、-ok和-exec是同樣的,不一樣的是若是執行的操做是需要交互式詢問用戶時,-ok會在對文件執行前會先詢問用戶。
五、|xargs和-exec也是執行用戶自定義的命令,不一樣的是find是把查詢到的結果無論多少一次性所有傳給-exec執行,而對於xargs則是逐條傳遞。第二個不一樣點是,-exec能夠引用結果文件的文件名,而xargs則不能夠,因此各有各的用處。