1.文件查找:locate, find
非實(shí)時查找(數(shù)據(jù)庫查找,速度快):locate
實(shí)時查找:find
2.locate
1>查詢系統(tǒng)上預(yù)建的文件索引數(shù)據(jù)庫
/var/lib/mlocate/mlocate.db
2>依賴于事先構(gòu)建的索引
索引的構(gòu)建是在系統(tǒng)較為空閑時自動進(jìn)行(周期性任務(wù))坠狡,管理
員手動更新數(shù)據(jù)庫
# updatedb
3>索引構(gòu)建過程需要遍歷整個根文件系統(tǒng)唤锉,極消耗資源
? 工作特點(diǎn):
? 查找速度快
? 模糊查找
? 非實(shí)時查找
? 搜索的是文件的全路徑竖哩,不僅僅是文件名
? 可能只搜索用戶具備讀取和執(zhí)行權(quán)限的目錄
locate KEYWORD
? 有用的選項(xiàng)
? -i 不區(qū)分大小寫的搜索
? -n N 只列舉前N個匹配項(xiàng)目
? locate conf
? 搜索名稱或路徑中帶有“conf”的文件
? locate -r ‘.conf$’
? 使用Regex來搜索以“.conf”結(jié)尾的文件
2.find
語法:
find [OPTION]... [查找路徑] [查找條件] [處理動作]
查找路徑:指定具體目標(biāo)路徑赂毯;默認(rèn)為當(dāng)前目錄
查找條件:指定的查找標(biāo)準(zhǔn),可以文件名萍丐、大小轩端、類型、
權(quán)限等標(biāo)準(zhǔn)進(jìn)行逝变;默認(rèn)為找出指定路徑下的所有文件(默認(rèn)遞歸搜索)
處理動作:對符合條件的文件做操作基茵,默認(rèn)輸出至屏幕
查找條件
- 指搜索層級
-maxdepth level 最大搜索目錄深度,指定目錄為第1級
-mindepth level 最小搜索目錄深度- 根據(jù)文件名和inode查找:
name "文件名稱":支持使用glob
*, ?, [], [^]
-iname "文件名稱":不區(qū)分字母大小寫
-inum n 按inode號查找
-samefile name 相同inode號的文件
-links n 鏈接數(shù)為n的文件
-regex "PATTERN":以PATTERN匹配整個文件路徑字
符串,而不僅僅是文件名稱
- 根據(jù)屬主骨田、屬組查找:
-user USERNAME:查找屬主為指定用戶(UID)的文件
-group GRPNAME: 查找屬組為指定組(GID)的文件
-uid UserID:查找屬主為指定的UID號的文件
-gid GroupID:查找屬組為指定的GID號的文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件- 根據(jù)文件類型查找:
-type TYPE:
? f: 普通文件
? d: 目錄文件
? l: 符號鏈接文件
? s:套接字文件
? b: 塊設(shè)備文件
? c: 字符設(shè)備文件
? p: 管道文件
查找條件
組合條件:
與:-a
或:-o
非:-not, !
? 德·摩根定律:
(非 A) 或 (非 B) = 非(A 且 B)
(非 A) 且 (非 B) = 非(A 或 B)
? 示例:
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
舉例:
- find -name snow.png
? 搜索名為snow.png的文件
find -iname snow.png
? 不分大小寫地搜索名為snow.png耿导、Snow.png、SNOW.PNG等等的文件
find / -name “\*.txt”
find /var –name “*log*”
find -user joe -group joe
? 找出/tmp目錄下态贤,屬主不是root舱呻,且文件名不以f開頭的文件
find /tmp ( -not -user root -a -not -name 'f*' ) -ls
find /tmp -not ( -user root -o -name 'f*' ) –ls
? 排除目錄
示例:查找/etc/下,除/etc/sane.d目錄的其它所有.conf后綴的文件
find /etc -path ‘/etc/sane.d’ -a -prune-o -name “*.conf”
find /etc (–path ‘/etc/sane.d’ –o –path ’/etc/fonts’ ) -a prune –o name “*.conf”
? 根據(jù)文件大小來查找
-size [+|-]#UNIT
常用單位:k, M, G悠汽,c(byte)
#UNIT: (#-1,\ #]
如:6k 表示(5k,6k]
-#UNIT:[0,#-1]
如:-6k 表示[0,5k]
+#UNIT:(#,∞)
- ? 根據(jù)權(quán)限查找:
-perm [/|-]MODE
MODE: 精確權(quán)限匹配
/MODE:任何一類(u,g,o)對象的權(quán)限中只要能一位匹配即可箱吕,或關(guān)系,+ 從centos7開始淘汰
-MODE:每一類對象都必須同時擁有指定權(quán)限柿冲,與關(guān)系 茬高,0 表示不關(guān)注
? find -perm 755 會匹配權(quán)限模式恰好是755的文件
? 只要當(dāng)任意人有寫權(quán)限時,find -perm +222就會匹配
? 只有當(dāng)每個人都有寫權(quán)限時假抄,find -perm -222才會匹配
? 只有當(dāng)其它人(other)有寫權(quán)限時怎栽,find -perm -002才
會匹配
- 處理動作
? -print:默認(rèn)的處理動作,顯示至屏幕
? -ls:類似于對查找到的文件執(zhí)行“l(fā)s -l”命令
? -delete:刪除查找到的文件
? -fls file:查找到的所有文件的長格式信息保存至指定文件中
? -ok COMMAND {} ; 對查找到的每個文件執(zhí)行由COMMAND
指定的命令宿饱,對于每個文件執(zhí)行命令之前熏瞄,都會交互式要求
用戶確認(rèn)
? -exec COMMAND {} ; 對查找到的每個文件執(zhí)行由COMMAND指定的命令
? {}: 用于引用查找到的文件名稱自身
? find傳遞查找到的文件至后面指定的命令時,查找到所有符合
條件的文件一次性傳遞給后面的命令
- 參數(shù)替換xargs
? 由于很多命令不支持管道|來傳遞參數(shù)谬以,而日常工作中有這個
必要强饮,所以就有了xargs命令
? xargs用于產(chǎn)生某個命令的參數(shù),xargs 可以讀入 stdin 的數(shù)
據(jù)为黎,并且以空格符或回車符將 stdin 的數(shù)據(jù)分隔成為arguments
(找到文件后一個一個的傳文件給后面的命令)
? 注意:文件名或者是其他意義的名詞內(nèi)含有空格符的情況
? 有些命令不能接受過多參數(shù)邮丰,命令執(zhí)行可能會失敗行您,xargs可
以解決
(如果可以,直接刪除文件夾)
? 示例:
ls f* |xargs rm
find /sbin -perm +700 |ls -l 這個命令是錯誤的
find /sbin -perm +7000 | xargs ls –l
? find和xargs格式:find | xargs COMMAND