首頁 > 軟體

Linux系統中檔案查詢命令 find和locate

2020-06-16 17:03:40

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


IT145.com E-mail:sddin#qq.com