Linux系統中文件查找
關鍵詞 文件查找 | find | locate
本文主要介紹有關文件查找的兩個命令——find和locate,以及壓縮打包的命令——compress, gzip,bzip2,xz等。有問題或建議可發至郵箱VatheSee@163.com.
locate
locate命令是通過查詢Linux系統上預先構建的文件索引數據庫,准確說來,這個數據庫默認的位置是/var/lib/mlocate/mlocate.db,這個數據庫一般由系統定時周期性更新,當然也可以通過updatedb命令手動更新,但是花費的時間周期可能很長,尤其在文件系統占用率很高的情況下。
locate命令查找的特點:
查找速度快
模糊查找
非實時查找
命令格式及常用選項:
locate [OPTION]... PATTERN...
-h, --help 查看幫助文檔 -i 忽略大小寫搜索 -n N 最多顯示N個匹配項目 -r, --regexp 支持進行基本正則表達式匹配,默認支持glob統配符 --regex 支持使用擴展正則表達式 -c 統計搜索到匹配的條目,但不輸出具體條目
find命令
相對於locate命令,find命令查找有如下特點
查詢速度較快
精確查找
實時查找
語法:
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] [-H] [-L] [-P] 三選項用來控制處理符號鏈接文件 [-D] 控制dubug [-O] 查詢,設置優化等級
以上5個參數基本不用,如果需要使用,位置必須在路徑[path]之前
常用格式:
find [OPTION]... [查找路徑] [查找條件] [處理動作]
查找路徑:指定需要查找的目錄,如果是當前目錄,可用“.”代替
查找條件:指定查找標准,可以是文件名、大小、權限等
處理動作:對符合條件的文件進行操作,默認輸出至屏幕
接下來詳細介紹查找條件:
根據文件名查找
-name, 直接查找文件名,支持glob風格查找 -iname, 不區分大小寫,支持glob風格查找 -regex, 支持正則表達式查找文件名 -iregex, 不區分大小寫,支持正則表達式查找文件名 注意:如果對glob不了解,可以用man 7 glob查看
根據文件從屬關系查找
-user, 根據屬主查找 -group, 根據屬組查找 -uid 根據屬主id查找 -gid 根據屬組id查找 -nouser 判斷是否屬於無屬主文件 -nogroup 判斷是否屬於無屬組文件
根據文件類型查找
-type
常見文件類型有
f 普通文件
d 目錄文件
l 符號鏈接文件
b 塊文件 c 字符設備文件 p 管道文件 s 套接字文件
以文件大小查找
-size[+|-] UNIT 常用單位:k, M, G
以時間戳查找
以“天”為單位:
-atime[+|-] -mtime -ctime 以“分鍾”為單位: -amin -mmin -cmin
根據權限查找
-perm [/|-] mode mode: 精確權限匹配 -mode /mode: 任何一類用戶的權限滿足即可 +mode: 已廢棄這種用法
處理動作
-print 輸出至標准輸出,默認的動作 -ls 類似於對查找的文件執行"ls -l"命令,輸出文件的詳細信息 -delete 刪除查找到的文件 -fls file 把查找到的所有文件的長格式信息保存到指定文件 -ok CMD {} \; 執行CMD,執行前詢問 -exec CMD {} \; 執行CMD
組合測試
各個條件之間默認是以“與”連接,如果需要使用其他組合測試,必須加上
-a 與 -o 或 -not, ! 非
德·摩根定律
(非 P) 或 (非 Q) = 非(P 且 Q) (非 P) 且 (非 Q) = 非(P 或 Q)
練習
1、查找/var目錄下屬主為root,且屬組為mail的所有文件或目錄;
# find /var -user root -group mail
2、查找/usr目錄下不屬於root、lp或gdm的所有文件或目錄;
# find /usr -not -user root \ -a -not -user lp -a -not -user gdm # find /usr -not \( -user root -o -user lp -o -user gdm \)
3、查找/etc目錄下最周一周內其內容修改過,同時屬主不為root,也不是postfix的文件或目錄;
# find /etc -mtime -7 -a -not -user root -a -not -user postfix # find /etc/ -mtime -7 -a -not \( -user root -o -user postfix \)
4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件或目錄;
# find / \( -nouser -o -nogroup \) -a -atime -7 # find / \( -atime -7 -nouser -o -nogroup \) -ls
5、查找/etc目錄下大於1M且類型為普通文件的所有文件;
# find /etc -size +1M -type f
6、查找/etc目錄下所有用戶都沒有寫權限的文件;
# find /etc -not -perm 222 -type f -ls