Linux文件查找之find&locate
一、概述
Linux系統核心的思想之一“一切皆文件“,對於這麼多的文件,如何快速查找過濾呢?下面我們就看看系統提供的文件查找命令find和locat,熟練使用find命令是運維人員的必經之路
二、find的用法及示例
1.find特點
查找速度略慢
精確查找
實時查找
只能搜索有讀取和執行權限的目錄
2.find用法
用法:find [options] [查找路徑] [ 查找條件] [處理動作]
查找條件:
根據文件類型查找 -type f|d....... f 普通文件 d 目錄 l 鏈接 s 套接字 b 塊設備 c 字符設備 p 管道文件 根據屬主、屬組查找 -user name 查找目錄下屬主爲name的文件 -group g1 查找屬組爲g1的文件 -uid # 查找uid爲#的文件 -gid # 查找gid爲#的文件 -nouser 查找沒有屬主的文件 -nogroup 查找沒有屬組的文件 特定選項 -mindepth level 設置最小搜索層級 -maxdepth level 設置最大搜索層級 -name 匹配文件名搜索,支持通配符 -iname 以名稱搜索,忽略文件名大小寫 -inum # 按inode號搜索 -samefile 搜索相同inode號的文件 -links # 搜索鏈接數爲#的文件 -regex "pattern" 搜索匹配該字符串的文件 -prune 將某個目錄排除在搜索路徑之外 根據文件大小查找 -size [+|-]#(單位) 常用單位:k M G 6k 表示5k<S≤6k -6k 表示0≤S≤5k +6k 表示S>6k 根據時間戳查找 -atime [+|-]# +5:5天以前 -10:十天以內 -atime 訪問時間,以天爲單位 -mtime 更改時間,以天爲單位 -ctime 改變時間,以天爲單位 -amin 以分鐘爲單位 -mmin 以分鐘爲單位 -cmin 以分鐘爲單位
根據權限查找
-perm [/|-]mode
mode 精確權限匹配 如:find -perm 222 匹配權限爲222的文件
/mode 權限位(ugo),只要有一位匹配即可,或者關係
如:find -perm /222 只需一個權限位有寫權限即可
-mode 指定權限權限位都必須匹配
如:find -perm -222 各權限位都有寫權限
注意三種權限的區別
組合條件
-a 與
-o 或
-not,! 非
燒腦的非選項
!A -a !B=!(A -o B)
!A -o !B=!(A -a B)
處理動作
-print 打印匹配文件
-ls 長格式顯示匹配文件
-delete 刪除匹配文件
-fls outfile 輸出到指定文件
-ok cmd {} \; 對查找到的每個文件執行cmd命令,交互確認
-exec cmd {} \; 執行cmd命令,不進行交互確認
{} 代表查找到的文件自身
注意:由於是find查找到的文件,是一次性傳遞給後面的cmd命令,有寫命令會出現報錯現象,可使用xargs解決
find ....... | xargs cmd
3.find使用實例
①、搜索/var目錄下文件名中含有log的文件
find /var -name "*log*"
②、搜索/app目錄下屬主爲tom,數組爲g1的文件
find /app -user tom -a -group g1
③、搜索/app目錄下屬主不是tom,也不是joe的文件
find /app -not -user tom -a -not -user -joe
find /app -not \(-user tom -o -user joe\)
④、刪除存在時間超過3天以上,屬主爲tom的臨時文件
find /tmp -ctime +3 -user tom -ok rm {} \;
⑤、查找自己家目錄可以被其他用戶寫入的文件,並去掉其他用戶的寫權限
find ~ -perm -022 -exec chmod o-w {} \;
⑥、查找/var目錄下10以前修改的文件
find /var -mtime +10 -print
⑦、查找/var目錄下10以內修改的文件
find /var -mtime -10
⑧、查找/var目錄更改時間下比file1.log新,比file2.log舊的文件
find /var -newer file1.log -a -not -newer file2.log
⑨、查找/etc一級目錄下所有的目錄文件
find /etc -maxdepth 1 -type d
⑩、查詢/目錄下大於100M的文件
find / -size +100M
11、刪除/root一級目錄中非隱藏文件的普通文件
find ~ -maxdepth 1 -type f |grep -v "/root/\."
12、查詢當前系統中沒有屬主和屬組的文件
find / -nouser -a -nogroup
13、查找系統中所有具備suid權限的文件
find / -perm /u=s
14、查找系統中所有具備sgid權限的文件
find / -perm /g=s
15、查找/etc所有可執行文件
find /etc -perm /a=x
16、查找系統中所有空文件
find / -type f -empty
17、查詢/etc目錄下所有隱藏文件
find /etc -type f -name ".*"
18、查找50-100內被修改過的文件
find / -mtime +50 -mtime -100
19、查找最近1小時被修改過的文件
find / -mmin -60
三、locate用法及示例
1、locate概述
相比find,locate查找速度比較快,但由於其僅支持非實時查找,使用率不高
2、locate工作特點
查找速度快
非實時查找
搜索文件全路徑
只能搜索用戶具備讀取和執行權限的目錄
3、locate用法
locate [options] 匹配模式
-i 不區分大小寫搜索
-n # 只列舉前#個匹配項
4、示例
locate conf 查找文件名中含有conf的文件