在Linux這個一切皆文件的系統中怎么能快速和精確的查找到文件,是我們必不可少的技能。而文件查找的命令可以讓我們在很短的時間內在文件系統中找到我們要查找的文件。這就是我們要掌握的,因此我來介紹一下文件查找的這兩個命令locate和find。
文件查找:在文件系統上查找符合條件的文件;
文件查找:locate, find
非實時查找( 數據庫查找) :locate
實時查找:find
locate命令
查詢系統上預建的文件索引數據庫 :/var/lib/mlocate/mlocate.db
依賴于事先構建的索引;
索引的構建是在系統較為空閑時自動進行( 周期性任務) ;管理員手動更新數據庫(updatedb); ;索引構建過程需要遍歷整個根文件系統,極消耗資源;
工作特點:
查找速度快;
模糊查找;
非實時查找;
搜索的是文件的全路徑,不僅僅是文件名可能只搜索用戶具備讀取和執行權限的目錄。
locate 命令語法
locate KEYWORD
locate passwd:搜索名稱或路徑中帶有“passwd ”的文件
有用的選項
-i 執行區分大小寫的搜索
-n X 只列舉前X 個匹配項目
find命令
實時查找工具,通過遍歷指定路徑完成文件查找;
工作特點:
查找速度略慢
精確查找
實時查找
可能只搜索用戶具備讀取和執行權限的目錄
find命令語法:
find [OPTION]… [ 查找路徑] [ 查找條件] [ 處理動作]
查找路徑:指定具體目標路徑;默認為當前目錄
查找條件:指定的查找標準,可以文件名、大小、類型、權限等標準進行;默認為找出指定路徑下的所有文件
處理動作:對符合條件的文件做操作,默認輸出至屏幕
查找條件
根據文件名和inode 查找:
-name " 文件名稱" :支持使用glob
*, ?, [], [^]
-iname " 文件名稱" :不區分字母大小寫
-inum n 按inode 號查找
-samefile name 相同inode 號的文件
-links n 鏈接數為n 的文件
-regex "PATTERN" :以PATTERN 匹配整個文件路徑字符串,而不僅僅是文件名稱
根據屬主、屬組查找:
-user USERNAME :查找屬主為指定用戶(UID) 的文件
-group GRPNAME: 查找屬組為指定組(GID) 的文件
-uid UserID :查找屬主為指定的UID 號的文件
-gid GroupID :查找屬組為指定的GID 號的文件
-nouser :查找沒有屬主的文件
-nogroup :查找沒有屬組的文件
根據文件類型查找:
-type TYPE:
f: 普通文件
d: 目錄文件
l: 符號鏈接文件
s :套接字文件
b: 塊設備文件
c: 字符設備文件
p: 管道文件
根據文件大小來查找:
-size [+|-]#UNIT
常用單位:k, M, G
#UNIT: (#-1, #] ,如:6k
-#UNIT :[0,#-1], 如:-6k
+#UNIT :(#, ∞ ), 如:+6k
6k :是5k – 6k 之間,不包含5k,但包含6k。
-6k :是0k – 5k 之間,不僅包含0k, 也包含5k。
+6k?。菏?k-正無窮之間,不包含6k。
根據時間戳:
以“天”為單位;
以“分鐘”為單位:
-amin
-mmin
-cmin
根據權限查找:
-perm [/|-]MODE
MODE: 精確權限匹配
/MODE :任何一類(u,g,o) 對象的權限中只要能一位匹配即可,或關系,+ 從centos7 開始淘汰
-MODE :每一類對象都必須同時擁有指定權限,與關系
0 表示不關注
find -perm 755 會匹配權限模式恰好是755 的文件
只要當任意人有寫權限時,find -perm /222 就會匹配
只有當每個人都有寫權限時,find -perm -222 才會匹配
只有當其它人(other )有寫權限時,find -perm -002才會匹配
組合條件:
與:-a
或:-o
非:-not, !
德· 摩根 定律:
非(P 且 Q) = (非 P) 或 (非 Q)
非(P 或 Q) = (非 P) 且 (非 Q)
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
P=1+3 , Q=2+3 , P 且 Q=3 , P 或 Q=1+2+3
非(P 且 Q) = (非 P) 或 (非 Q)
非(P 且 Q):非(1+3 且 2+3)=(2+4 或 1+4)= 1+2+4
(非P)或(非Q): (非 1+3)或(非2+3)=(2+4)或(1+4)= 1+2+4
(可以看出除了3其他都是)
非(P 或 Q) = (非 P) 且 (非 Q)
非(P 或 Q):非(1+3 或 2+3)=(2+4 且 1+4)= 4
(非P)且(非Q) :(非 1+3)且(非 2+3)=(2+4)且(1+4)=4
(可以看出除了4其他都不是)
排除目錄
find /etc -path ‘/etc/sane.d’ -a -prune -o -name *.conf -print
處理動作
-print :默認的處理動作,顯示至屏幕;
-ls :類似于對查找到的文件執行“ls -l” 命令
-delete :刪除查找到的文件;
-fls file :查找到的所有文件的長格式信息保存至指定文件中
-ok COMMAND {} \; 對查找到的每個文件執行由COMMAND 指定的命令;
對于每個文件執行命令之前,都會交互式要求用戶確認
-exec COMMAND {} \; 對查找到的每個文件執行由COMMAND 指定的命令
{}: 用于引用查找到的文件名稱自身
find 傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令
有些命令不能接受過多參數,此時命令執行可能會失敗,下面方式可規避此問題
find | xargs COMMAND
原創文章,作者:AN0519,如若轉載,請注明出處:http://www.www58058.com/39849