查找命令:
? ? ? ? locate:非實時查找
? ? ? ? find:實時查找
? ? ? ? Gnome:圖形化搜索工具
locate:
描述:
查詢系統上預建的文件索引數據庫/var/lib/mlocate/mlocate.db,一天更新一次
更新數據庫:
updatedb
特點:
依賴于事先構建的索引。索引的構建是在系統較為空閑時自動進行(周期性任務),管理員手動也可更新數據庫。索引構建過程需要遍歷整個根文件系統,極消耗資源
查找速度快
模糊查找
非實時查找
搜索的是文件的全路徑,不僅僅是文件名
可能只搜索用戶具備讀取和執行權限的目錄
格式:
locate KEYWORD
選項:
-i:忽略大小寫
-n #:只列舉前#個匹配項目
-r:使用正則表達式
實例:
例:搜索名稱或路徑中帶有”conf”的文件
# locate conf
例:使用Regex來搜索以”.conf”結尾的文件
# locate -r ‘\.conf$’
find:
解釋:
實時查找工具,通過遍歷指定路徑完成文件查找
工作特點:
查找速度略慢
精確查找
實時查找
可能只搜索用戶具備讀取和執行權限的目錄
格式:
find [OPTION]… [查找路徑] [查找條件] [處理動作]
查找路徑:
指定具體目標路徑;默認為當前目錄,并且遞歸搜索
查找條件:
描述:
指定的查找標準,可以文件名、大小、類型、權限等標準進行;默認為找出指定路徑下的所有文件
指定搜索層級:
-maxdepth level:最大搜索目錄深度,指定目錄為第一級
-mindepth level:最小搜索目錄深度
例:最大第三層,最小兩層(2-3層)
# find /etc -maxdepth 3 -mindepth 2 -name “network”
例:只在第二層尋找:
# find /etc -maxdepth 2 -mindepth 2 -name “network”
根據文件名和inode查找:
-name “文件名稱”:支持使用glob
通配符:*,?,[],[^]
例:# find -name “*.txt”
-iname “文件名稱”:不區分字母大小寫
-inum n:按inode號查找
例:# find / -inum 2 -ls
-samefile name:相同inode號的文件
-links n:鏈接數為n的文件s
-regex “PATTERN”:以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱
例:# find /root -regex “.*\.txt”
# find /root -regex “.*\.\(txt\|sh\)$”
根據屬主、屬組查找:
-user USERNAME:查找屬主為指定用戶的文件
例:尋找home下不是wang的并且不是.sh結尾的文件
# find /home ! \( -user wang -o -name “*.sh” \)
-group GRPNAME:查找屬組為指定組的文件
-uid UserID:查找屬主為指定的UID的文件
-gid GroupID:查找屬組為指定的GID的文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
根據文件類型查找:
-type TYPE:
f:普通文件
d:目錄文件
l:符號鏈接文件
s:套接字文件
b:塊設備文件
c:字符設備文件
p:管道文件
組合條件:
與:-a
或:-o
非:-not,!
德·摩根定律:
(非A)或(非B)= 非(A且B)
(非A)且(非B)= 非(A或B)
實例:
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
根據文件大小查找:
-size [+|-]#UNIT
常用單位:k,M,G,c(byte)
#UNIT:(#-1,#]
如:6k表示(5k,6k]
-#UNIT:[0,#-1]
如:-6k表示[0,5k]
+#UNIT:(#,∞)
如:+6k表示(6k,∞)
根據時間戳:
以”天”為單位:
-atime [+|-]#,
#:[#,#+1)
+#:[#+1,∞]
-#:[0,#)
-mtime
-ctime
以”分鐘”為單位:
-amin
-mmin
-cmin
根據權限查找:
-perm [/|-]MODE
MODE:精確權限匹配
/MODE:
任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系,+從centos7開始淘汰
-MODE:每一類對象都必須同時擁有指定權限,與關系0表示不關注
tip:
find -perm 755會匹配權限模式恰好是755的文件
任合一人有寫權限時,find -perm +222就會匹配
只有當每個人都有寫權限時,find -perm -222才會匹配
其他人other有寫權限時,find -perm -002才會匹配
根據文件大小來查找:
-size [+|-]#UNIT
常用單位:k,M,G,c(byte)
#UNIT:(#-1,#]
如:6k 表示(5k,6k]
-#UNIT:[0,#-1]
如:-6k表示[0,5k]
+#UNIT:(#,∞)
如:+6k表示(6k,∞)
根據時間戳:
以”天”為單位:
-atime [+|-]#
#:[#,#+1)
+#:[#+1,∞]
-#:[0,#)
-mtime
-ctime
以”分鐘”為單位:
-amin
-mmim
-cmin
根據權限查找:
-perm [/|-]MODE
MODE:精確權限匹配
/MODE:任何一類(u,g,o)對象的權限中只要能以為匹配即可,或關系,+從centos 7開始淘汰
-MODE:每一類對象都必須同時擁有指定權限,與關系0表示不關注
find -perm 755
會匹配權限模式恰哈是755的文件
只要當任意人都有寫權限時,find -perm +222就會匹配
只有當每個人都有寫權限時,find -perm -222才會匹配
只有當其他人other都有寫權限時,find -perm -002才會匹配
處理動作:
描述:
對符合條件的文件做操作,默認輸出至屏幕
選項:
-print:默認的處理動作,顯示至屏幕
-ls:類似”ls -l”
-delete:刪除查找到的文件
-fls file:查找到的所有文件的長格式信息保存至指定文件中
-ok COMMAND {} \;:對查找到的每個文件執行由COMMAND指定的命令,對于每個文件執行命令之前,都會交互式要求用戶確認
-exec COMMAND {} \;:對查找到的每個文件執行由COMMAND指定的命令
{}:用于引用查找到的文件名稱自身
find傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令
參數替換xargs:
描述:
由于很多命令不支持管道”|”傳遞參數,而日常工作中有這個必要,所以就有了xargs命令
xargs用于產生某個命令的參數,xargs可以讀入stdin的數據,并且以空格符或回車符將stdin的數據分割成為arguments
格式:
find | xargs COMMAND
tip:注意,文件名或其它意義的名詞內含有空格符的情況
有些命令不能接受過多的參數,命令執行可能會失敗,xargs可以解決
示例:
ls f* | xargs rm
find /sbin -perm +700 | ls -l //這個命令是錯誤的
find /sbin -perm +7000 | xargs ls -l
例:備份配置文件,添加.orig這個擴展名
# find -name “*.conf” -exec cp {} {}.orig \;
例:提示刪除存在時間超過3天以上的joe的臨時文件
# find /tmp -ctime +3 -user joe -ok rm {} \;
例:在主目錄中尋找可被其它用戶寫入的文件
# find ~ -perm -002 -exec chmod o-2 {} \;
例:# find /data -type f -perm 644 -name “*.sh” -exec chmod 755 {} \;
例:# find /home -type d -ls
實例:
例:# find -name snow.png
例:# find -iname snow.png
例:# find / -name “*.txt”
例:# find /var -name “*log”
例:# find -user joe -group joe
例:# find -user joe -not -group joe
例:# find -user joe -o -user jane
例:# find -not \( -user joe -o -user jane \)
例:# find / -user joe -o -uid 500
示例:
例:找出/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”
解釋:
-prune:排除
例:查找根下除了/app下所有的.sh結尾的文件
# find / -path ‘/app’ -a -prune -o -name “*.sh”
例:查找/etc下,除/etc/sane.d和/etc/fonts兩個目錄的其它所有.conf后綴的文件
# find /etc \( -path ‘/etc/sane.d’ -o -path ‘/etc/fonts’ \) -a -prune -o -name “*.conf”
例:查找根下除了/app和/usr以外的所有.sh后綴的文件
# find / \( -path ‘/app’ -o -path ‘/usr’ \) -a -prune -o -name “*.sh”
tip:注意查找排除的時候目錄后面不要加”/”,否則查找失敗
Gnome:
描述:
圖形化搜索工具,可搜索命令、內容、用戶/組、大小、修改時間
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88974