Linux find 命令:文件搜索与批量处理终极指南
【摘要】 find 命令之所以被称为 Linux 文件搜索的"瑞士军刀",是因为它不仅能"找到"文件,还能对找到的文件"做事"。无论是日常运维中的日志清理、磁盘空间排查,还是安全审计中的权限检查、可疑文件定位,find 都能一行命令搞定。 最基础的用法find . -name "*.log"在当前目录(.)及其所有子目录中,递归查找文件名以 .log 结尾的文件。-name 支持通配符 *(匹配任意字...
find 命令之所以被称为 Linux 文件搜索的"瑞士军刀",是因为它不仅能"找到"文件,还能对找到的文件"做事"。无论是日常运维中的日志清理、磁盘空间排查,还是安全审计中的权限检查、可疑文件定位,find 都能一行命令搞定。
最基础的用法
find . -name "*.log"
在当前目录(.)及其所有子目录中,递归查找文件名以 .log 结尾的文件。-name 支持通配符 *(匹配任意字符)和 ?(匹配单个字符),但通配符必须加引号,否则 Shell 会提前展开导致匹配失败。
实际使用中,高频场景与命令组合
1. 按文件名搜索
- 忽略大小写:
find . -iname "README*" - 排除特定名称:
find . -type f ! -name "*.tmp" - 按路径模式匹配:
用find . -path "*/node_modules/*" -prune -o -name "*.js" -print-prune跳过node_modules目录,避免在海量依赖文件中浪费时间。
2. 按文件类型搜索
find . -type f # 普通文件
find . -type d # 目录
find . -type l # 符号链接
find . -type f -empty # 空文件
find . -type d -empty # 空目录
3. 按时间搜索(运维最高频)
Linux 文件有三种时间戳:mtime(内容修改时间)、atime(访问时间)、ctime(元数据变更时间,如权限变化)。
- 7 天内修改过的文件:
find /data -type f -mtime -7 - 超过 30 天没修改的日志:
find /var/log -name "*.log" -type f -mtime +30 - 最近 30 分钟内修改的文件(紧急排查用):
find /var/log -type f -mmin -30 - 按具体日期范围查找:
查找 10 月 1 日到 10 月 5 日之间修改的文件,安全事件溯源时非常实用。find /home -type f -newermt "2026-10-01" ! -newermt "2026-10-06"
符号规则:
-7表示 7 天以内,+7表示超过 7 天,7表示恰好 7 天前。
4. 按文件大小搜索
find / -xdev -type f -size +100M # 查找大于 100MB 的文件
find / -xdev -type f -size +1G # 查找大于 1GB 的文件
find /data -type f -size +10M -size -100M # 10MB~100MB 之间的文件
-xdev 参数限制不跨越文件系统边界,避免扫描到 /proc、/sys 或挂载的 NFS,既提速又安全。
5. 按权限与属主搜索(安全审计)
# 查找 777 权限的危险文件
find /var/www -type f -perm 777
# 查找 SUID 文件(可能被提权利用)
find / -type f -perm /4000 2>/dev/null
# 查找无主文件(用户已删除但文件残留)
find / -nouser -o -nogroup 2>/dev/null
# 查找属于特定用户的文件
find /home -user www-data -type f
6. 对搜索结果执行操作
-
直接删除(最简洁):
find /tmp -type f -name "*.tmp" -delete-delete是 find 内置动作,比-exec rm更高效。 -
批量执行命令:
# 压缩 30 天前的日志 find /var/log -name "*.log" -mtime +30 -exec gzip {} \; # 批量修改权限 find /var/www -type f -exec chmod 644 {} \; find /var/www -type d -exec chmod 755 {} \;{}是文件占位符,\;表示命令结束。文件很多时用+替代\;可批量传参提升效率。 -
按时间排序输出:
find /var/log -type f -name "*.log" -printf "%T@ %p\n" | sort -rn | head -10输出最近修改的 10 个日志文件,快速定位"谁在写日志"。
7. 限制搜索深度
find . -maxdepth 1 -type f # 只查当前目录,不递归
find . -maxdepth 2 -name "*.conf" # 最多递归两层
find . -mindepth 2 -maxdepth 2 -name "config" # 只查第二层
限制深度能大幅提升搜索速度,尤其在目录结构很深时。
如果不知道如何下手,可以先尝试
find /var/log -type f -name "*.log" -mtime +7 -ls
这条命令会列出 7 天前的所有日志文件及其详细信息(大小、权限、时间戳)。确认无误后,把 -ls 换成 -delete 即可安全清理。
或者,当磁盘空间告警时,一套标准排查流程是:
df -h # 1. 确认哪个分区满了
find / -xdev -type f -size +100M -exec ls -lh {} \; 2>/dev/null # 2. 找大文件
find /var/log -type f -name "*.log" -mtime +30 -delete # 3. 清理旧日志
安全注意事项
- 删除前务必预览:先不加
-delete跑一遍,确认结果无误再执行。 - 根目录搜索加
-xdev:避免扫描/proc、/sys和外部挂载点。 - 通配符加引号:
-name "*.log"而非-name *.log。 - 屏蔽权限报错:全局搜索时加
2>/dev/null避免刷屏。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)