天天看點

檔案查找

檔案查找:按照檔案名或檔案屬性來搜尋檔案;

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指令将其轉換成能夠被後面指令處理的參數;