637 字
3 分钟
Linux全盘搜索文件名和内容的方法

Linux 全盘搜索文件名和内容的方法#

在 Linux 上找文件是基本功。不同场景用不同工具,效率差很多。

按文件名搜索#

find(最通用)#

实时遍历所有目录,准确但慢:

Terminal window
# 全盘搜索文件名包含 "config" 的文件
sudo find / -name "*config*"
# 忽略大小写
sudo find / -iname "*config*"
# 指定类型:只找文件(f)或目录(d)
sudo find / -type f -name "*.conf"
# 过滤权限错误(不用sudo时)
find / -name "*config*" 2>/dev/null

locate(最快)#

查询预先建立的数据库,秒出结果:

Terminal window
# 搜索(模糊匹配)
locate config
# 更新数据库(每天自动更新,手动更新需root)
sudo updatedb
优缺点
  • 优点:速度极快
  • 缺点:数据库可能不是最新的,刚创建的文件可能搜不到

fd(现代替代品)#

速度快,语法简单,默认忽略隐藏文件和 git 目录:

Terminal window
# 安装
sudo apt install fd-find
# 使用(fdfind 或 fd)
fdfind config /
# 包含隐藏文件
fd -H config /

按文件内容搜索#

grep(最强大)#

递归搜索文件内容:

Terminal window
# 在 /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 - 忽略二进制文件

在特定目录搜索#

Terminal window
# 在当前目录及子目录搜索
grep -r "password" .
# 在 /root 目录(需要root权限)
sudo grep -r "password" /root
# 在 /var/log 搜索错误日志
grep -ri "error\|failed\|exception" /var/log

组合使用#

先找到文件名,再搜索内容:

Terminal window
# 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文件内容文本搜索,日志分析

实用技巧#

Terminal window
# 找最近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/
作者
uu
发布于
2025-02-28
许可协议
CC0 1.0