檔案查找:按照檔案名或檔案屬性來搜尋檔案;
locate
模糊查找:
基于專用的資料庫進行查找,資料庫應該事先建立,并且定期更新;
可以使用updatedb指令手動更新locate資料庫;
查找速度非常快,查找精确到非常有限;
find
精确查找:
查找精度高,速度略慢;
在指定的位置進行檔案名或檔案屬性的周遊掃描;強烈不建議對根目錄進行find操作;
實時查找;
使用find指令隻能搜尋目前使用者具有讀取和執行權限的目錄;
find指令:
find - search for files in a directory hierarchy
find [OPTIONS...] [查找路徑] [查找條件] [處理動作]
查找路徑:預設為目前工作目錄,可以指定具體的目錄路徑;
查找條件:進行本次搜尋的标準,可以是檔案名、檔案大小、檔案類型、檔案權限等等;預設是指定目錄中的所有檔案;
處理動作:對于符合條件的檔案進行某個處理操作;預設将查找結果輸出到顯示器;
根據檔案名查找:
-name 檔案名稱,支援使用Globbing,(*, ?, [], [^])
-iname 檔案名稱,忽略字母大小寫,支援使用Globbing,(*, ?, [], [^])
根據檔案的inode編号查找:
-inum inode編号:通過給定的inode編号查找對應的檔案名及路徑;
-samefile name:通過給定的檔案名查找對應的inode編号,進而确定所有具有該inode編号的檔案名及路徑;
-links n:查找連結數為n的所有檔案;
根據正規表達式查找:
-regex pattern:以pattern比對整個檔案路徑字元串,而不僅僅是給定檔案的名稱;
根據檔案的屬主和屬組進行查找:
-user uname:根據屬主為指定使用者的使用者名進行查找
-uid UID:根據屬主為某個UID進行查找
-group gname:
-gid GID:
-nogroup:在檔案的屬組上沒有組對應的組名;
-nouser:在檔案的屬主上沒有使用者對應的使用者名;
根據檔案的類型查找:
-type 檔案類型:
b:塊裝置
c:字元裝置
d:目錄檔案
f:普通檔案
l:符号連結檔案
p:管道檔案
s:套接字檔案
-xtype 檔案類型:符号連結檔案的比對需要配合其他的選項;
根據時間戳進行查找:
以天為機關:
-atime [+|-]n:根據通路時間查找
-ctime [+|-]n:根據改變時間查找
-mtime [+|-]n:根據修改時間查找
n:[n,n+1)
+n:[n+1,+∞)
-n:[now,n)
以分鐘為機關:
-amin [+|-]n
-cmin [+|-]n
-mmin [+|-]n
例子:
5-28-11-18
-mtime -3
5-25-11-18
-mtime 3
5-24-11-18
-mtime +3
根據檔案的大小進行查找:
-size [+|-]n[cwbkMG]
n:(n-1,n]
-n:[0,n-1]
+n:(n,+∞)
find -size +2k
目前目錄下所有大于2KB的檔案;
find -size 2k
目前目錄下所有1KB-2KB之間的檔案;
find -size -2k
目前目錄下所有小于1KB的檔案;
組合條件:
-a:邏輯與,預設可以省略;
-o:邏輯或
-not, !:邏輯非
邏輯組合條件遵循德摩根定律:
非(A 與 B) == 非A 或 非B
非(A 或 B) == 非A 與 非B
根據權限查找:
-perm [/|-]mode
mode:精确比對指定的權限
/mode:隐含了邏輯或的關系,任何一個權限位的權限中隻要能有一個權限比對,即可滿足條件;
-mode:隐含了邏輯與的關系,每一個權限位的權限中都必須同時包含指定權限位,才能滿足條件;
所有都有 取反 任意一個沒有
! ( a與b與c ) = !a 或 !b 或 !c
所有都沒有 取反 任意一個有
! ( !a與!b與!c ) = a 或 b 或 c
處理動作:
-print:輸出到顯示螢幕,預設的動作;
-ls:對與查找到的結果執行ls -li指令顯示;
-exec COMMAND {} \;:
-ok COMMAND {} \;:
對于查找到的結果執行COMMAND指令;
差別:
-exec是非互動式的;
-ok是互動式的;
{}:占位符,用來引用被find指令查找到的所有的檔案的路徑資訊;
-exec和-ok的取代執行操作:
chmod a-r $(find -perm -444 -type f)
find -perm -444 -type f | xargs chmod a-r
注意:管道輸送的是純字元串資訊,是以如果管道之後的指令不是處理字元串的指令,需要使用xargs指令将其轉換成能夠被後面指令處理的參數;