Photo by Unsplash
637 字
3 分钟
Linux全盘搜索文件名和内容的方法
Linux 全盘搜索文件名和内容的方法
在 Linux 上找文件是基本功。不同场景用不同工具,效率差很多。
按文件名搜索
find(最通用)
实时遍历所有目录,准确但慢:
# 全盘搜索文件名包含 "config" 的文件sudo find / -name "*config*"
# 忽略大小写sudo find / -iname "*config*"
# 指定类型:只找文件(f)或目录(d)sudo find / -type f -name "*.conf"
# 过滤权限错误(不用sudo时)find / -name "*config*" 2>/dev/nulllocate(最快)
查询预先建立的数据库,秒出结果:
# 搜索(模糊匹配)locate config
# 更新数据库(每天自动更新,手动更新需root)sudo updatedb优缺点
- 优点:速度极快
- 缺点:数据库可能不是最新的,刚创建的文件可能搜不到
fd(现代替代品)
速度快,语法简单,默认忽略隐藏文件和 git 目录:
# 安装sudo apt install fd-find
# 使用(fdfind 或 fd)fdfind config /
# 包含隐藏文件fd -H config /按文件内容搜索
grep(最强大)
递归搜索文件内容:
# 在 /etc 目录搜索包含 "localhost" 的文件sudo grep -r "localhost" /etc
# 显示行号 + 忽略大小写sudo grep -rni "localhost" /etc
# 只显示文件名(不显示匹配内容)sudo grep -rl "localhost" /etc
# 排除二进制文件(防止乱码)sudo grep -rI "localhost" /etc
# 组合使用(推荐)sudo grep -rniI "localhost" /etc参数说明:
-r- 递归搜索-n- 显示行号-i- 忽略大小写-l- 只输出文件名-I- 忽略二进制文件
在特定目录搜索
# 在当前目录及子目录搜索grep -r "password" .
# 在 /root 目录(需要root权限)sudo grep -r "password" /root
# 在 /var/log 搜索错误日志grep -ri "error\|failed\|exception" /var/log组合使用
先找到文件名,再搜索内容:
# 1. 找到所有 .log 文件find /var/log -name "*.log" -type f
# 2. 在这些文件里搜索特定内容find /var/log -name "*.log" -type f -exec grep -l "error" {} \;工具对比
| 工具 | 搜索目标 | 速度 | 适用场景 |
|---|---|---|---|
| find | 文件名 | 慢 | 实时搜索,权限检查 |
| locate | 文件名 | 极快 | 快速查找已知文件 |
| fd | 文件名 | 快 | 日常使用,语法简洁 |
| grep | 文件内容 | 慢 | 文本搜索,日志分析 |
实用技巧
# 找最近7天内修改的文件find /path -mtime -7
# 找大于100MB的文件find / -size +100M 2>/dev/null
# 找空文件或目录find /path -empty
# 统计匹配文件数量grep -rl "pattern" /path | wc -l参考链接
Linux全盘搜索文件名和内容的方法
https://im.awsl.app/posts/system-ops/044-linux-file-search/