locate
依賴與事先構建好的數據庫查找
系統自動實現(周期性任務)
手動更新數據庫(updatedb)
工作特性
查找數度快
模糊查找
非實時查找
搜索的是文件的全路徑,不僅僅是文件名
可能只搜索用戶具備讀取和執行權限的目錄
locate [OPTION]… PATTERN…
-b:只匹配路徑中的基名符合pattern的
-c:統計共出現多少個符合查找條件的,而不是顯示文件
-r:支持使用基本正則表達式BRE
注意:數據庫構建過程需要遍歷整個根文件系統,極消耗資源
find
實時查找工具,通過遍歷指定路徑下文件系統層級結構完成文件查找
工作特性:
查找速度快
精確查找
實時查找
可能只搜索用戶具備讀取和執行權限的目錄
find [OPTIONS] [查找路徑] [查找條件] [處理動作]
查找的路徑:指定具體搜索目標的起始路徑,默認為當前目錄
查找條件:指定查找的標準,比如文件名,大小,屬主,屬組,權限等等,默認是指定路徑下所有文件
處理動作:找到符合查找條件的文件后的操作,比如刪除,默認為輸出只標準輸出
查找條件:
1.根據文件名查找:
-name "patter" :精確查找符合patter的文件,要模糊查找可以使用通配符
-iname "patter" :忽略大小寫
支持glob風格的通配符
-inum n :按inode查找
-links n :查找鏈接數為n的文件
-samefile name :相同inode號的文件
-regex "patter" :基于正則表達式,以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱
2.根據文件從屬關系查找:
-user USERNAME :查找指定USERNAME的所有文件
-group GROUPNAME :查找指定GROUPNAME的所有文件
-nouser :查找沒有USERNAME的所有文件
-nogroup :查找沒有GROUPNAME的所有文件
-uid UID :查找指定UID的所有文件
-gid GID :查找指定GID的所有文件
3.根據文件的類型查找:
-type TYPE:
f:普通文件
d:目錄文件
b:塊設備
c:字符設備
l:符號鏈接文件
S:套接字文件
p:管道文件
4.組合測試:
與:-a find命令的默認邏輯
或:-o
非:-not,!
重要公式:(德摩根定律)
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
練習:找出/tmp目錄下屬主為非root的所有文件
find /tmp ! -user root
找出/tmp目錄下文件中不包括fstab字符串的文件
find /tmp ! -name "*fstab*"
找出/tmp目錄下屬組不是root,而且文件名不包括fstab字符串的文件
find /tmp -not \( -user root -o -name "*fstab*" \) find /tmp -not -user root -a -not -name "*fstab*"
5.根據文件大小查找:
-size [+|-]#UNIT
常用單位:k,M,G
#UNIT:(#-1,#]
+#UNIT:(#,oo)
-#UNIT:[0,#)
6.根據時間戳查找:
以“天”為單位:
-atime [+|-]#
#:(#-1,#] :過去的實際#為負數的
+#:(#,oo)
-#:[0,#)
-mtime
-ctime
以“分鐘”為單位
-amin
-mmin
-tmin
7.根據文件的權限查找:
-perm [/|-]mode
mode:精確權限匹配
/mode:文件的任何一類用戶(u.g.o)的任何權限中的任何以為(r.w.x)符合條件即滿足,9位權限之間存在“或”關系
-mode:文件的每一類用戶(u.g.o)的權限中的名義為同時滿足(符合)添加才能匹配,9位權限之間存在“與”關系
mode權限中沒給的權限,其文件位權限可有可無
例如:
find -perm 755 會匹配權限模式恰好是755 的文件
find -perm +222 只要當任意人有寫權限才會匹配
find -perm -222 只有當每個人都有寫權限時才會匹配
處理動作:
-print:輸出至標準輸出,默認的動作
-ls:類似與對查找到的文件執行了“ls -l”命令
-delete:刪除查找到的文件
-fls /path/to/somefile:把查找到的文件以長格式的信息保存至指定的文件中
-ok COMMAND {}\; :對查找到的每個文件執行由COMMAND指定的命令,每次操作由用戶進行確認
-exec COMMAND {}\; :對查找到的每個文件執行由COMMAND指定的命令,不與用戶交互
{}:用于引用查找到的文件名稱自身
注意:請小心使用-exec命令,該命令不與用戶交互,如果find找到的內容與需求不匹配,-exec 后跟chmod/rm等等其他操作會帶來不可避免的損失
注意:find 傳遞查找到的文件至后面指定的命令時,先查找到所有符合條件的文件,并一次性傳遞給后面的命令;有些命令不能接受過多的參數,此時命令執行可能會失敗,另一中方法可規避此問題
find | xargs COMMAND
查找/var 目錄下屬主為root,且屬組為mail 的所有文件
find /var -user root -user mail -type f
查找/var 目錄下不屬于root 、lp 、gdm 的所有文件
find /var -not \( -user root -o -user lp -o -user gdm \) -type f
查找/var 目錄下最近一周內其內容修改過,同時屬主不為root ,也不是postfix 的文件
find /var -mtime -7 -not \( -user root -o -user postfix \) -type f find /var -mtime -7 -not -user root -a -not -user postfix -type f
查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件
find / -nouser -nogroup -atime -7 -type f
查找/etc 目錄下大于1M 且類型為普通文件的所有文件
find /etc -size +1M -type f
查找/etc 目錄下所有用戶都沒有寫權限的文件
find /etc -not -perm 222 -type f
查找/etc 目錄下至少有一類用戶沒有執行權限的文件
find /etc -not -perm 111 -type f
查找/etc/init.d 目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件
find /etc/init.d/ -perm 113 -type f
原創文章,作者:megedugao,如若轉載,請注明出處:http://www.www58058.com/35008
文章架構清晰,層次分明,對常用選項有的放矢,希望下來能多加練習,熟練掌握。