2021-05-12 14:32:11
Linux系統中檔案查詢命令 find和locate
Linux系統中檔案查詢
關鍵詞 檔案查詢 | find | locate
本文主要介紹有關檔案查詢的兩個命令——find和locate,以及壓縮打包的命令——compress, gzip,bzip2,xz等。
locate
locate命令是通過查詢Linux系統上預先構建的檔案索引資料庫,準確說來,這個資料庫預設的位置是/var/lib/mlocate/mlocate.db,這個資料庫一般由系統定時周期性更新,當然也可以通過updatedb命令手動更新,但是花費的時間週期可能很長,尤其在檔案系統佔用率很高的情況下。
locate命令查詢的特點:
查詢速度快
模糊查詢
非實時查詢
命令格式及常用選項:
locate [OPTION]... PATTERN...
-h, --help 檢視幫助文件
-i 忽略大小寫搜尋
-n N 最多顯示N個匹配專案
-r, --regexp 支援進行基本正規表示式匹配,預設支援glob統配符
--regex 支援使用擴充套件正規表示式
-c 統計搜尋到匹配的條目,但不輸出具體條目
find命令
相對於locate命令,find命令查詢有如下特點
查詢速度較快
精確查詢
實時查詢
語法:
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...]
[expression]
[-H] [-L] [-P] 三選項用來控制處理符號連結檔案
[-D] 控制dubug
[-O] 查詢,設定優化等級
以上5個引數基本不用,如果需要使用,位置必須在路徑[path]之前
常用格式:
find [OPTION]... [查詢路徑] [查詢條件] [處理動作]
查詢路徑:指定需要查詢的目錄,如果是當前目錄,可用“.”代替
查詢條件:指定查詢標準,可以是檔名、大小、許可權等
處理動作:對符合條件的檔案進行操作,預設輸出至螢幕
接下來詳細介紹查詢條件:
根據檔名查詢
-name, 直接查詢檔名,支援glob風格查詢
-iname, 不區分大小寫,支援glob風格查詢
-regex, 支援正規表示式查詢檔名
-iregex, 不區分大小寫,支援正規表示式查詢檔名
注意:如果對glob不了解,可以用man 7 glob檢視
根據檔案從屬關係查詢
-user, 根據屬主查詢
-group, 根據屬組查詢
-uid 根據屬主id查詢
-gid 根據屬組id查詢
-nouser 判斷是否屬於無屬主檔案
-nogroup 判斷是否屬於無屬組檔案
根據檔案型別查詢
-type
常見檔案型別有
f 普通檔案
d 目錄檔案
l 符號連結檔案
b 塊檔案
c 字元裝置檔案
p 管道檔案
s 通訊端檔案
以檔案大小查詢
-size[+|-] UNIT
常用單位:k, M, G
以時間戳查詢
以“天”為單位:
-atime[+|-]
-mtime
-ctime
以“分鐘”為單位:
-amin
-mmin
-cmin
根據許可權查詢
-perm [/|-] mode
mode: 精確許可權匹配
-mode
/mode: 任何一類使用者的許可權滿足即可
+mode: 已廢棄這種用法
處理動作
-print 輸出至標準輸出,預設的動作
-ls 類似於對查詢的檔案執行"ls -l"命令,輸出檔案的詳細資訊
-delete 刪除查詢到的檔案
-fls file 把查詢到的所有檔案的長格式資訊儲存到指定檔案
-ok CMD {} ; 執行CMD,執行前詢問
-exec CMD {} ; 執行CMD
組合測試
各個條件之間預設是以“與”連線,如果需要使用其他組合測試,必須加上
-a 與
-o 或
-not, ! 非
德·摩根定律
(非 P) 或 (非 Q) = 非(P 且 Q)
(非 P) 且 (非 Q) = 非(P 或 Q)
練習
1、查詢/var目錄下屬主為root,且屬組為mail的所有檔案或目錄;
# find /var -user root -group mail
2、查詢/usr目錄下不屬於root、lp或gdm的所有檔案或目錄;
# find /usr -not -user root
-a -not -user lp -a -not -user gdm
# find /usr -not ( -user root -o -user lp -o -user gdm )
3、查詢/etc目錄下最周一週內其內容修改過,同時屬主不為root,也不是postfix的檔案或目錄;
# find /etc -mtime -7 -a -not -user root -a -not -user postfix
# find /etc/ -mtime -7 -a -not ( -user root -o -user postfix )
4、查詢當前系統上沒有屬主或屬組,且最近一個週內曾被存取過的檔案或目錄;
# find / ( -nouser -o -nogroup ) -a -atime -7
# find / ( -atime -7 -nouser -o -nogroup ) -ls
5、查詢/etc目錄下大於1M且型別為普通檔案的所有檔案;
# find /etc -size +1M -type f
6、查詢/etc目錄下所有使用者都沒有寫許可權的檔案;
# find /etc -not -perm 222 -type f -ls
Linux查詢find命令詳解 http://www.linuxidc.com/Linux/2017-01/140011.htm
Linux下的檔案查詢命令——find http://www.linuxidc.com/Linux/2016-05/131826.htm
Linux檔案查詢命令之locate與find http://www.linuxidc.com/Linux/2017-02/140272.htm
Linux檔案搜尋命令 find http://www.linuxidc.com/Linux/2016-11/137267.htm
5分鐘學會find命令 http://www.linuxidc.com/Linux/2016-11/137051.htm
find命令詳解 http://www.linuxidc.com/Linux/2017-09/146933.htm
find命令基本使用一覽 http://www.linuxidc.com/Linux/2016-07/133273.htm
Linux基礎知識:find命令的使用 http://www.linuxidc.com/Linux/2016-09/134947.htm
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-10/148089.htm
相關文章