1. 程式人生 > >Linux檔案查詢命令及find詳解

Linux檔案查詢命令及find詳解

一、linux的檔案查詢工具

1、locate工具
2、find工具

二、locate命令

1、特點:
(1)依賴資料庫(可以用update更新資料庫,但費時長,現實企業環境最好不用)
(2)非實時查詢,結果非精確
(3)查詢速度快
(4)模糊查詢

三、find命令

1、特點:
(1)實時查詢,查詢速度慢
(2)精確匹配

2、find命令格式:

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

(1)預設情況:
①查詢路徑:預設當前目錄
②查詢條件:預設為查詢指定路徑下的所有檔案
③處理動作:預設為顯示

(2)查詢條件選項:
-name ‘FILENAME’

:對檔名作精確匹配,檔名支援萬用字元匹配(globbing,{*,?,【】,【^】}),檔名有空格用“”括起。

-iname ‘FILENAME’:檔案匹配時不區分大小寫,同上支援globbing。

-regex PATTERN:基於正則表示式進行檔案查詢(檔名匹配)

-user USERNAME:根據檔案屬主查詢

-group GROUPNAME:根據檔案屬組查詢

-uid UID:根據檔案的UID查詢

-gid GID:根據檔案的GID查詢
上述兩個選項的意義在於:如果使用者或組被刪除後,檔案中包含的屬主、屬組的查詢會被轉換成對應的uid和gid查詢

-nouser

:查詢沒有屬主的檔案

-nogroup :查詢沒有屬組的檔案

-type {f,d,c,b,l,p,s}:查詢特定的檔案型別
f:普通檔案
d:目錄
c:字元裝置
b:塊裝置
l:符號連結檔案
p:命名管道裝置
s:套接字裝置

-size [+|-] SIZE(大小)unit(單位):按檔案大小查詢
+表示大於,-表示小於
常用單位:
[+|-]#k
[+|-]#M
[+|-]#G

組合條件:
-a :與(and)
-o :或(or)
-not:非(not)

優先順序:-not>-a>-o
非A或非B==非(A且B)
非A並非B==非(A或B)

⑬按時間戳查詢:-{m,c,a}{time,min} [+|-]#

以天為單位:
-mtime #:表示過去第(#+1)天以後第#天以前的時間段被修改過的檔案
-ctime #:表示過去第(#+1)天以後第#天以前的時間段被改變過的檔案
-atime #:表示過去第(#+1)天以後第#天以前的時間段被訪問過的檔案

以分鐘為單位:
-mmin #:表示過去第(#+1)分鐘以後第#分鐘以前的時間段被修改過的檔案
-cmin #:表示過去第(#+1)分鐘以後第#分鐘以前的時間段被改變過的檔案
-amin #:表示過去第(#+1)分鐘以後第#分鐘以前的時間段被訪問過的檔案

上述均支援[+|-]#
+表示:過去第(#+1)天(分鐘)以前被訪問過
-表示:現在到過去第#天(分鐘)以內被訪問過

⑭按檔案許可權位查詢:-perm [+|-]MODE(精確匹配,MODE為3位八進位制數

+MODE:9位許可權位中任意一位匹配即滿足條件(任何一類使用者任何一維許可權匹配即可)–>常用於查詢某類使用者的某特定許可權是否存在

-MODE:檔案許可權能完全包含MODE時才滿足(每類使用者的任何一位許可權為匹配才滿足)–>常用於查詢某類使用者包含哪些許可權

沒有符號:精確匹配許可權位置

(3)處理動作:(預設為-print)
①-print:列印在標準輸出上
②-ls:以長格式輸出各檔案資訊
③-exec COMMAND {} \;:對查詢的檔案執行指定的命令
④-ok COMMAND:互動式的-exec
⑤find | xargs COMMAND:與exec功能相似,但需要通過管道將標準輸入轉換為命令。
例:find /tm p/test/ -perm -666 | xargs ls -l {}
find /etc/ -size +1M | xargs echo {} >> /tmp/etc.largefiles

{}是檔案佔位符代替查詢到的檔案的名稱

-exec的好處:
例:find /tmp/test -perm -666 -exec {} {}x \;
可用於對搜尋到的檔名進行二次或以上的引用,而xargs只能引用一次。

xargs的好處
可以對搜尋到的檔名逐個處理