2021-05-12 14:32:11
find命令詳解
1.3 locate查詢補充
使用locate查詢,實際是對資料庫儲存內容的列出,在查詢前會判定目錄有沒rx許可權,如果沒有許可權,依然不列出。此操作在資料庫中進行,而非實時查詢。如果我們想在不退出登入的情況下更新資料庫,則要用到updatedb命令,該命令更新很慢,具體時間視你的系統中有多少檔案而定。
二、find命令
由於locate
的非精確查詢和非實時查詢的特性,導致locate用的不多。而find
命令
支援實時查詢,擁有眾多查詢選項,是linux上查詢最常用的,但是缺點也是比較明顯: 如果檔案數量很多的話,查詢起來很慢。但那又如何,find依然是最有用且最常用的Linux查詢命令。
2.1 find命令特點
- 查詢速度略慢
- 精確查詢
- 實時查詢
- 可能只搜尋使用者具備讀取和執行許可權的目錄
2.2 find用法
命令:find
格式:find [OPTION]... [查詢路徑] [查詢條件] [處理動作]
查詢路徑:指定具體目標路徑;預設為當前目錄
查詢條件:指定的查詢標準,可以檔名、大小、型別、許可權等標準進行;預設為找出指定路徑下的所有檔案
處理動作:對符合條件的檔案做操作,預設輸出至螢幕
2.3 find選項
2.3.1指搜尋層級查詢
-maxdepth level 最大搜尋深度
-mindepth level 最小搜尋深度
Example:
1 [root@ keer app]#find -maxdepth 7 2 3 . 4 5 ./dev1 6 7 ./dev1/dev2 8 9 ./dev1/dev2/dev3 10 11 ./dev1/dev2/dev3/dev4 12 13 ./dev1/dev2/dev3/dev4/dev5 14 15 ./dev1/dev2/dev3/dev4/dev5/dev6 16 17 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7 18 19 [root@ keer app]#find -mindepth 7 20 21 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7
2.3.2 按檔名和inode號查詢
-name “檔名稱” 基於名稱的精確查詢
-iname 基於名稱忽略大小寫的精確查詢
-inum n 基於inode號查詢(只顯示名稱,長列出則加-ls)
-samefile 基於相同inode號的查詢(查詢硬連結)
-links n 硬連結為n的檔案
-regex “PATTERN” 支援正則(預設只支援範圍,不支援萬用字元)
-regextype egrep -regex 支援egrep同標準的正則
Example:
1 [root@ keer app]#find -name hello 2 3 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello 4 5 [root@ keer app]#find -iname HELLO 6 7 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello 8 9 [root@ keer app]#find -inum 1310721 10 11 ./dev1 12 13 [root@ keer app]#find -inum 1310721 -ls 14 15 1310721 4 drwxr-xr-x 3 root root 4096 Aug 8 16:47 ./dev1 16 17 #因為find -regex匹配的是整個路徑,所以前面必須加.*才可以 18 19 [root@ keer app]#find . -regex ".*[a-z].*" 20 21 ./dev1 22 23 ./dev1/dev2 24 25 ./dev1/dev2/dev3 26 27 ./dev1/dev2/dev3/dev4 28 29 ./dev1/dev2/dev3/dev4/dev5 30 31 ./dev1/dev2/dev3/dev4/dev5/dev6 32 33 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7 34 35 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello
2.3.3 根據屬主查詢
-user 使用者名稱 基於檔案owner的查詢
-uid userid 基於檔案uid的查詢
-nouser 查詢沒有owner的檔案
Example:
1 [root@ keer app]#find -user root 2 3 . 4 5 ./dev1 6 7 ./dev1/dev2 8 9 ./dev1/dev2/dev3 10 11 ./dev1/dev2/dev3/dev4 12 13 ./dev1/dev2/dev3/dev4/dev5 14 15 ./dev1/dev2/dev3/dev4/dev5/dev6 16 17 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7 18 19 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello 20 21 [root@ keer app]#find -uid 0 22 23 . 24 25 ./dev1 26 27 ./dev1/dev2 28 29 ./dev1/dev2/dev3 30 31 ./dev1/dev2/dev3/dev4 32 33 ./dev1/dev2/dev3/dev4/dev5 34 35 ./dev1/dev2/dev3/dev4/dev5/dev6 36 37 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7 38 39 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello 40 41 [root@ keer app]#find -nouser 42 43 ./aaa
2.3.4 根據屬組查詢
-group 組名 基於檔案group的查詢
-gid groupid 基於檔案gid的查詢
-nogroup 查詢沒有group的檔案
Example:
1 [root@ keer app]#find -group root 2 3 . 4 5 ./dev1 6 7 ./dev1/dev2 8 9 ./dev1/dev2/dev3 10 11 ./dev1/dev2/dev3/dev4 12 13 ./dev1/dev2/dev3/dev4/dev5 14 15 ./dev1/dev2/dev3/dev4/dev5/dev6 16 17 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7 18 19 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello 20 21 [root@ keer app]#find -gid 0 22 23 . 24 25 ./dev1 26 27 ./dev1/dev2 28 29 ./dev1/dev2/dev3 30 31 ./dev1/dev2/dev3/dev4 32 33 ./dev1/dev2/dev3/dev4/dev5 34 35 ./dev1/dev2/dev3/dev4/dev5/dev6 36 37 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7 38 39 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello 40 41 [root@ keer app]#find -nogroup 42 43 ./aaa
2.3.5根據檔案型別查詢
-type TYPE:
f: 普通檔案
d: 目錄檔案
l: 符號連結檔案
s:通訊端檔案
b: 塊裝置檔案
c: 字元裝置檔案
p: 管道檔案
Example:
1 [root@ keer app]#find -type f 2 3 ./aaa 4 5 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello 6 7 [root@ keer app]#find -type d 8 9 . 10 11 ./dev1 12 13 ./dev1/dev2 14 15 ./dev1/dev2/dev3 16 17 ./dev1/dev2/dev3/dev4 18 19 ./dev1/dev2/dev3/dev4/dev5 20 21 ./dev1/dev2/dev3/dev4/dev5/dev6 22 23 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7
2.3.6組合查詢
- 查詢條件:
與:-a(可省略)
或:-o 非:-not, !
- 德·摩根定律:
(非 A) 或 (非 B) = 非(A 且 B)
(非 A) 且 (非 B) = 非(A 或 B)
Example:
1 !A -a !B = !(A -o B) 2 3 !A -o !B = !(A -a B)
2.3.7 按檔案大小查詢
-size [+|-]#UNIT 根據檔案大小來查詢
常用單位:k, M, G,c(byte)
#UNIT: (#-1, #]如:6k 表示(5k,6k]
-#UNIT:[0,#-1]如:-6k 表示[0,5k]
+#UNIT:(#,∞)如:+6k 表示(6k,∞)
更直觀的可以從下圖中看出:
2.3.8 按時間戳查詢
- 以“天”為單位
-atime [+|-]#
#UNIT: [#,#+1) 例:3 表示前3天到4天
-#UNIT:[#+1,∞] 例:-3 表示4天以前
+#UNIT:[0,#) 例:+3 表示三天之內
-mtime
-ctime
- 以“分鐘”為單位
-amin
-mmin
-cmin
更直觀的可以從下圖中看出:
2.3.9 按許可權查詢
-perm
mode:精確許可權匹配
+mode[/mode] 任何一類(u,g,o)物件的許可權中只要能一位匹配即可(或關係)。(“+”從CentOS7開始淘汰)
-mode 每一類物件都必須同時擁有指定許可權(與關係)。
註:0 表示不關注。
Example:
• find -perm 755會匹配許可權模式恰好是755的檔案
• 只要當任意人有寫許可權時,find -perm /222就會匹配
• 只有當每個人都有寫許可權時,find -perm -222才會匹配
• 只有當其它人(other)有寫許可權時,find -perm -002才會匹配(/002也可)
2.4 find補充
2.4.1 處理動作
-print 預設
-delete 直接刪除所查詢到的檔案,不詢問。
-ls 長列出所查詢到的檔案
-fls file 將查詢到的檔案長列出匯入到指定檔案。
配合重定向使用(> file)
-ok command ; 對查詢到的檔案當做下一命令的引數去執行(互動式確認)
-exec command ; 對查詢到的檔案當做下一命令的引數去執行(非互動式)
註:使用-ok和-exec時,必須以“ ;”結尾
Example:
1、備份以“.conf”結尾的檔案,並新增.orig擴充套件名
find-name “*.conf” -exec cp {} {}.orig ;
2、在你的主目錄中尋找可被其它使用者寫入的檔案,並取消這些檔案其他使用者的寫許可權
find ~ -perm -002 -exec chmodo-w {} ;
2.4.2 引數替換xargs
在我們使用的過程中,由於很多命令不支援管道符“|”來傳遞引數,但是在我們的日常工作中有這個必要,於是,就出現了xargs命令。xargs用於產生某個命令的引數,可以讀入 stdin 的資料,並且以空格符或回車符將 stdin 的資料分割成為 arguments。在這裡我們需要注意的是,檔名或者其他意義的名詞內含有空格符的情況。
當然,有些命裡不能接受過多引數,這樣命令可能會執行失敗,這種情況也可以用xargs來解決。
Example:
1、尋找以f開頭的檔案,並刪除。
ls f* |xargs rm
2、尋找/sbin下所屬者許可權位為滿的檔案,並長列出。
find /sbin -perm +700 | xargs ls –l
三、小練習
說了這麼多,我們來做一些練習練練手吧~活學活用才能更好的掌握喏?(?????)?
1、查詢/var目錄下屬主為root,且屬組為mail的所有檔案
find /var -user root -group mail -ls
2、查詢/var目錄下不屬於root、lp、gdm的所有檔案
find /var ! ( -user root -o -user lp -o -user gdm ) -ls
3、查詢/var目錄下最近一週內其內容修改過,同時屬主不為root、也不是postfix的檔案
find /var -mtime +7 ! ( -user root -user postfix ) -ls
4、查詢當前系統上沒有屬主或屬組,且最近一個週內曾被存取過的檔案
find / -nouser -o -nogroup -atime +7 -ls
5、查詢/etc目錄下大於1M且型別為普通檔案的所有檔案
find /etc/ -size +1M -type f -ls
6、查詢/etc目錄下所有使用者都沒有寫許可權的檔案
find /etc/ ! -perm /222 -ls
7、查詢/etc目錄下至少有一類使用者沒有執行許可權的檔案
find /etc/ ! -perm -111 -ls
8、查詢/etc/init.d目錄下,所有使用者都有執行許可權,且其它使用者有寫許可權的檔案
find /etc/init.d/ -perm -113 -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/2016-07/133273.htm
Linux基礎知識:find命令的使用 http://www.linuxidc.com/Linux/2016-09/134947.htm
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-09/146933.htm
相關文章