Linux 尋找檔案最常用的兩大工具 locate 與 find,雖同為搜尋,但運作機制、速度、適用場景截然不同。搞懂差異,才能在對的場合用對工具。
| 特性 | locate | find |
|---|---|---|
| 搜尋來源 | 預建索引資料庫 /var/lib/mlocate | 即時掃描實體檔案系統 |
| 速度 | 極快(毫秒級) | 較慢(視目錄大小) |
| 即時性 | 非即時(每日自動更新一次) | 完全即時 |
| 新建檔案 | 找不到(需 updatedb) | 立刻可搜尋到 |
| 已刪檔案 | 可能仍會出現 | 不會出現 |
| 支援條件 | 僅檔名/路徑模糊比對 | 支援權限、大小、時間、類型、擁有者等豐富條件 |
# 格式
locate [選項] 模式
# 常用選項
-i 忽略大小寫
-r 使用正則表達式
# 範例:找出以 pwd 結尾的路徑
locate -r 'pwd$' | grep -n 'pwd$'
手動更新索引:updatedb(讀取 /etc/updatedb.conf 設定,掃描硬碟重建 /var/lib/mlocate)
# 格式
find [路徑] [條件] [動作]
# 常用條件
-name "*.log" # 檔名模式
-type f # 類型:f=檔案 d=目錄 l=連結
-size +10M # 大於 10MB
-mtime -7 # 7 天內修改過
-user root # 擁有者
-perm 644 # 權限
# 1. 找 /var 下 7 天內修改過、屬主非 root 的檔
find /var -mtime -7 ! -user root -ls
# 2. 找 /home 下大於 100MB 的一般檔案
find /home -type f -size +100M -exec ls -lh {} \;
# 3. 找無擁有者/群組且近期被存取的檔(清理孤兒檔)
find / -atime -7 \( -nouser -o -nogroup \) -ls
locate(記得先 updatedb)find(配合 -exec、xargs)兩工具互補,而非互斥。掌握兩者特性,檔案搜尋不再盲目。