locate 非實時查找(資料庫查找)支援正則
∮查詢系統上預建的檔案索引資料庫
/var/lib/mlocate/mlocate.db
∮依賴于事先建構的索引
索引的建構是在系統較為空閑時自動進行( 周期性 任務),管理者手動更新資料(updatedb)
索引建構過程需要周遊整個根檔案系統,極消耗資源
∮工作特點:
查找速度快
模糊查找
非實時查找
搜尋的是檔案的全路徑,不僅僅是檔案名
可能隻搜尋使用者具備讀取和執行權限的目錄
locate
-i 不區分大小寫的搜尋
-n N 隻列舉前N 個比對項目
例: locate conf
搜尋名稱或路徑中帶有“conf ”的檔案
例:locate -r ‘\.conf$’
使用Regex 來搜尋以“.conf ”結尾的檔案
find
∮搜尋層級
-maxdepth level 最大搜尋深度
-minxdepth level 最小搜尋深度
∮根據檔案名和inode查找
-name 基于名稱的精确查找
-iname 基于名稱忽略大小寫的精确查找查找
-inum 基于inode查找
-samefile 基于相同inode号的查找(查找硬連結)
-links n 硬連結為n的檔案
-regex 支援正則預設為(emacs标準)
-regextype egrep -regex 支援egrep同标準的正則
∮根據屬組屬主查找
-user 使用者名基于檔案owner的查找
-group 組名基于檔案group的查找
-uid userid基于檔案uid的查找
-gid groupid基于檔案gid的查找
-nouser 查找沒有owner的檔案
-nogroup 查找沒有group的檔案
∮-type 基于檔案類型的查找
f: 普通檔案 如:find -type f
d: 目錄檔案
l: 符号連結檔案
s:套接字檔案
b: 塊裝置檔案
c: 字元裝置檔案
p: 管道檔案
∮根據時間戳:atime:通路時間 mtime:修改時間 ctime:原檔案時間
以“天”為機關;
-atime [+|-]#,
#: [#,#+1) 如 find -atime 1:通路時間大于等于1天小于2天的檔案
+#: [#+1,∞] 如 find -atime +7 :通路時間大于等于7天以上的檔案
-#: [0,#) 如 find -atime -7 :通路時間7天以内的檔案
-mtime
-ctime
以“分鐘”為機關:
-amin
-mmin
-cmin
∮ 根據檔案大小來查找:
-size [+|-]#UNIT
常用機關:k, M, G ,c (byte) )
#UNIT: (#-1, #]
如:6k 表示(5k,6k]
-#UNIT :[0,#-1]
如:-6k 表示[0,5k]
+#UNIT :(#, ∞ )
如:+6k 表示(6k ,∞ )
∮ -perm
mode:精确權限比對
+mode[/mode] 任何一類(u,g,o)對象的權限中隻要能一位比對即可,或關系,+ 從 centos7開始淘汰;/較為普遍
-mode 每一類對象都必須同時擁有指定權限,與關系 0表示不關注
-print 預設
-delete 直接删除所查找到的檔案,不詢問。
-ls 長列出所查找到的檔案
-fls file 将查找到的檔案長列出導入到指定檔案。
> file
-ok command \; 對查找到的檔案當做下一指令的參數去執行(互動式)
例如 find -perm /444 -ok chmod o-x {} \; {}代表find查找到的檔案,一旦用了 -ok就要用 \; 結尾
-exec command \; 對查找到的檔案當做下一指令的參數去執行(非互動式)執行指令時不會提示。
{}: 用于引用查找到的檔案名稱自身
find 傳遞查找到的檔案至後面指定的指令時,查找到所有符合條件的文 件一次性傳遞給後面的指令
由于很多指令不支援管道|來傳遞參數,而日常工作中有這個必要,是以 就有了xargs指令
xargs 用于産生某個指令的參數,xargs可以讀入stdin的數
據,并且以空格符或回車符将将stdin的資料分隔成為arguments
注意:1.檔案名或者是其他意義的名詞内含有空格符的情況。
2.有些指令不能接受過多參數,指令執行可能會失敗,xargs可以解決
組合條件:
與:-a
或:-o
非:-not, !
∮ 德 德· 摩根 定律:
(非 非 A) 或 或 (非 非 B) = 非(A 且 且 B)
(非 非 A) 且 且 (非 非 B) = 非(A 或 或 B)
∮ 示例:
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
練習:
1、查找/var目錄下屬主為root,且屬組為mail的所有檔案
find /var -user root -a -group mail -ls
此題用到的知識點: -user 使用者名基于檔案owner的查找 且:與關系
2、查找/var目錄下不屬于root、lp、gdm的所有檔案
find /var -not \( -user root -o -user lp -o -user gdm \) -ls
知識點:非關系:-not 或!此題中各條件是或關系,是以一定要加括号,并且要對括号進行轉義
3、查找/var目錄下最近一周内其内容修改過,同時屬主不為root,也不是postfix的檔案
find /var/ -mtime -7 -not -user root -not -user postfix -ls
知識點:修改時間:-mtime 一周内 小于七天 :-7
4、查找目前系統上沒有屬主或屬組,且最近一個周内曾被通路過的檔案
find / -nouser -o -nogroup -a -atime -7 -ls
知識點 :無屬主:-nouser 無屬組:-nogroup 通路時間:atime
5、查找/etc目錄下大于1M且類型為普通檔案的所有檔案
find /etc/ -size +1M -a -type f -ls
知識點:檔案大小:-size 檔案類型:-type
6、查找/etc目錄下所有使用者都沒有寫權限的檔案
find /etc ! -perm /222 -ls
知識點:/222:使用者都有寫權限. /本來是或的關系,但由于都指定了寫的權限,是以和-222沒有差別。
7、查找/etc目錄下至少有一類使用者沒有執行權限的檔案
find /etc ! -perm -111 -ls
題的意思:不是每一類使用者都有執行權限,-111:每一類都有執行權限,前面又用了非。
8、查找/etc/init.d目錄下,所有使用者都有執行權限,且其它
使用者有寫權限的檔案
find /etc/init.d/ -perm -113 -ls
都:與關系 所有的使用者都有執行權限:-perm -111,其他使用者有寫權限就變成了-113
本文轉自 honeyorange 51CTO部落格,原文連結:http://blog.51cto.com/13172732/1955809