find
是 Linux 系統最強大的文件搜索工具,支持 嵌套遍歷、條件篩選、執行動作。以下通過場景分類解析核心用法,涵蓋高效搜索、文件管理及高級技巧:
一、基礎搜索模式
1. 按文件名搜索(精確/模糊匹配)
<BASH>
find /path -name "*.log" # 精確匹配 .log 后綴(區分大小寫)
find /home -iname "*.TXT" # 模糊匹配 .txt 后綴(忽略大小寫)
find . -name "data_[0-9].csv" # 使用通配符 [] ? * 匹配
2. 排除指定目錄/文件
<BASH>
find /var/log -path "/var/log/nginx" -prune -o -name "*.log" # 排除 nginx 目錄
find . -not -name "*.tmp" # 排除所有 .tmp 文件
二、根據文件類型篩選
使用 -type
篩選文件類型:
f
: 常規文件d
: 目錄l
: 符號鏈接s
: 套接字p
: 命名管道
<BASH>
find /opt -type d -name "config" # 搜索名為 config 的目錄
find ~/ -type f -empty # 查找當前用戶下空文件
find /tmp -type l -ls # 列出 /tmp 下所有符號鏈接詳細信息
三、時間維度搜索
按時間篩選(文件修改時間 -mtime
/ 訪問時間 -atime
):
+n
: n 天前-n
: 最近 n 天內n
: 正好 n 天前
<BASH>
find . -mtime -7 # 查找過去 7 天內修改過的文件
find /var/log -mtime +30 -name "*.log" # 搜索 30 天前的日志文件
按分鐘級精準控制(-mmin
):
<BASH>
find /tmp -mmin -10 # 查找過去 10 分鐘內修改的文件
四、文件大小搜索
使用 -size
(單位:c
=字節, k
=KB, M
=MB, G
=GB):
+n
: 大于 n-n
: 小于 nn
?: 等于 n
<BASH>
find / -size +100M # 全局搜索大于 100MB 的文件(慎用根目錄)
find ~/Downloads -size -5k # 查找 Downloads 中小于 5KB 的文件
五、權限與所有權過濾
1. 按權限位搜索(數字或符號模式)
<BASH>
find . -perm 644 # 精確匹配權限為 644 的文件
find /etc -perm -u=r # 用戶可讀的文件(權限包含 r)
find /bin -perm /u=s # 包含 SUID 的文件
2. 按用戶/組篩選
<BASH>
find /var -user www-data # 屬于 www-data 用戶的文件
find /home -group dev # 屬于 dev 組的文件
六、組合條件與邏輯操作
-a
?(-and
): 邏輯與(默認)-o
?(-or
) : 邏輯或!
?(-not
) : 邏輯非- 使用?
()
?分組(需轉義)
<BASH>
find /data \( -name "*.jpg" -o -name "*.png" \) -size +2M # 查找 JPG 或 PNG 且大于 2MB
find . -type f ! -name "*.tmp" # 排除所有 .tmp 文件
七、執行后續動作(-exec
?與?xargs
)
1. 直接執行命令(-exec
)
<BASH>
find . -name "*.bak" -exec rm -f {} \; # 刪除所有 .bak 文件(確認無誤后執行)
find /var/log -type f -mtime +30 -exec gzip {} \; # 壓縮 30 天前的日志文件
2. 結合?xargs
?提高效率
<BASH>
find /tmp -name "core.*" -print0 | xargs -0 rm -f # 安全處理含空格文件名
3. 刪除文件(內建動作)
<BASH>
find . -type f -name "*.tmp" -delete # 直接刪除(-delete 必須放在最后)
八、高級搜索場景
1. 查找占用 inode 的小文件
<BASH>
find /path -type f -size +0c -links 1 -exec ls -i {} \; # 非硬鏈接的獨立文件
2. 查找重復文件(根據 MD5)
<BASH>
find . -type f -exec md5sum {} + | sort | uniq -w32 -dD # 生成校驗和對比重復項
九、安全排查技巧
1. 搜索可疑 SUID/SGID 文件
<BASH>
find / -perm /4000 -user root 2>/dev/null # SUID 且屬主為 root
find / -perm /2000 -group root 2>/dev/null # SGID 且屬組為 root
2. 查找全局可寫文件
<BASH>
find / -xdev -type f -perm -0002 ! -perm -1000 # 忽略粘滯位目錄下的文件
十、性能優化建議
- 限定搜索深度:
-maxdepth
?和?-mindepth
<BASH>
find /var/log -maxdepth 2 -name "*.log" # 僅搜索兩層目錄
- 跳過特定文件系統:
-xdev
(不跨文件系統)<BASH>
find / -xdev -name "lost+found" # 僅在當前文件系統搜索
總結
- 核心模式:
find [路徑] [條件] [動作]
,靈活組合條件實現精準搜索。 - 安全第一:執行刪除或修改前,建議先用?
-print
?或?-ls
?確認目標文件。 - 效率優先:在高負載場景下,盡量減少全盤掃描,合理使用?
-xargs
?提升性能。