有些時候我們是想要在系統中查找某個具體的文件,卻不知道路徑在哪里,只是知道其中的某些特性,比如大小或者名字什么的。這時候就要用到查找工具啦。
在文件系統上查找符合條件的文件命令有兩個,locate和find,其中locate是非實時查找即數據庫查找。而find是實時查找
locate:
用法:locate [OPTION]… [PATTERN]…
【option】
-i 不區分大小寫
-n # 只列舉前N個匹配項目
-r 使用擴展正則表達式 查詢
locate foo 搜索名稱或路徑中帶有foo的文件
locate -r '\.foo$' 使用擴展正則表達式來搜索以 ".foo" 結尾的文件
查詢系統上的文件索引數據庫
/var/lib/mlocate/mlocate.db
依賴于實現構建的索引,
索引的構建是在系統較為空閑時自動進行的(周期性任務),也可管理員手動更新數據庫(updatedb)
索引構建過程需要遍歷整個根文件系統,極消耗資源
工作特點:
查找速度快(只查找數據庫中有的數據)
模糊查找
非實時查找(在索引構建之后創建的文件時不能找到的)
搜索的是文件的全路徑,不僅僅是文件名
可能只搜索用戶具備讀取和執行權限的目錄
find:
find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path…] [expression]
即:find [option] [查找路徑] [查找條件] [處理動作]
查找路徑:指定具體目標路徑,【默認為當前目錄】
查找條件:指定的查找標準,可以文件名、大小、類型、權限等。默認找出指定路徑下的所有文件
處理動作:對符合條件的文件做操作,默認輸出至屏幕
【查找條件】
根據文件名和inode查找:
-name “文件名稱”: 支持使用glob (文件名通配符) *,?,[],[^]
-iname “文件名稱” : 不區分字母大小寫
inum n 按inode號查找
-samefile name 相同inode號的文件
-links n 鏈接數為n的文件
-regex “PATTERN”:以pattern匹配整個文件路徑字符串,而不僅僅是文件名稱
根據屬主屬組查找:
-user username:
-group groupname:
-uid userid:
-gid groupid:
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
根據文件類型查找:
-type type: f,d,l,s,b,c,p
根據組合條件查找:
-a -o -not=!
根據文件大小來查找:
-size [+|-]#UNIT (k,M,G)
#UNIT (#-1,#] –> 如6k 即(5k,6k] 5k到6k 但不包括5k
-#UNIT:[0,#-1] –>如6k 即[0,5k]
+#UNIT:(#,∞) 大于# 但不包括#
根據時間戳查找:
以 【天】為單位
-atime[+|-]# : [0,#) [#,#+1) [#+1,∞]
-mtime[+|-]# :
-ctime[+|-]# :
以【分鐘】為單位
-amin[+|-]# :
-mmin[+|-]# :
-cmin[+|-]# :
根據權限查找:
-perm [/|-] mode
mode : 精確匹配,不能多不能少
/mode 或+mode : 或關系 ugo中 只要有一個匹配即可
-mode : ugo必須至少擁有或比mode更多權限
【處理動作】
-print:默認處理動作
-ls:類似于對查找到的文件執行 ls -l
-delete:刪除查找到的文件
-fls file:查找到的所有文件的長格式信息保存至指定文件中
-ok commond {} \; 對查找到的每個文件執行有commond指定的命令,每個文件執行前都要交互式確認
-exec commond {} \; 對查找到的每個文件執行有commond指定的命令
{}:用于引用查找到的文件名稱自身
例:
find -name “*.conf” -exec cp {} {}.orig \;
?備份配置文件,添加.orig這個擴展名
find /tmp -ctime +3 -user joe -ok rm {} \;
?提示刪除存在時間超過3天以上的joe的臨時文件
find ~ -perm -002 -exec chmod o-w {} \ ;
?在你的主目錄中尋找可被其它用戶寫入的文件
find /data –type f -perm 644 -name “*.sh” –exec chmod 755 {} \;
?在 /data 目錄中 找出所有 以.sh 結尾沒有執行全選的文件 增加執行權限
find /home -type d -ls
找出所有/home 目錄下的 目錄 列出詳細信息
find /var -u root -g mail
find /var not \(-user root -o -user lp -o -user gdm \)
find /var -ctime -7 -not \( -user root -o -user postfix \)
find / -nouser -nogroup -atime -7
find /etc -size +1M -type f
find /etc -not \( -perm +222 \)
find /etc -not \( -perm -222 \)
find /etc/init.d -perm /113
find /etc -path '/etc/sane.d' -a -prune -o -name "*.conf" -print
find /etc -path '/etc/front*' -prune -o -path '/etc/hu*' -prune -o -path '/etc/lib*' -prune -o -path '/etc/se*' -prune -o -path '/etc/init' -prune -o -name "*.conf" -print
–joker的部落閣
原創文章,作者:joker,如若轉載,請注明出處:http://www.www58058.com/61122