系统中的文件可能非常多,只靠 cd 和 ls 很难快速定位目标。find 实时遍历目录,locate 查询预先建立的路径数据库,两者速度与新鲜度不同。
find:实时查询文件系统
find . -name "notes.txt" 从当前目录递归查找名称;把起点改为 ~ 或 / 就会扩大范围。全盘搜索可能耗时,并遇到 Permission denied。
名称、类型、大小与时间条件
通配符应引用,例如 find /var/log -name "*.log",避免 Shell 提前展开。-iname 忽略大小写;-type f 只要普通文件,-type d 只要目录;多个条件可以组合。
**find /etc -type f -name "*.conf"**只找 /etc 下的 .conf 普通文件。
find /var -type f -size +100M寻找大于 100 MB 的普通文件;-1M 表示小于 1 MB。
find . -type f -mtime -7寻找最近 7 天修改过的文件;+30 常表示 30 天以前。
find . -name "*.tmp" -exec ls -l \;{} 代表当前结果;先预览,再考虑会修改数据的命令。
locate:快速但可能稍旧
locate nginx.conf 查询路径数据库,因此通常很快,但刚创建的文件可能尚未收录,已删除路径也可能暂时存在。数据库通常由 updatedb 定期刷新;精简系统或容器未必安装 locate。需要当前真实状态时选 find,只需快速查找长期存在的路径时可选 locate。
安全习惯:find -exec 后接 rm 等修改命令前,先去掉 -exec,只运行查找并检查全部匹配结果。
互动实验
文件系统搜索雷达
访问权限免费
搜索范围
/var实时遍历目录树/var/log/archive.log/var/log/app.log/etc/nginx/nginx.conf/etc/system.conf/home/alice/report.md/home/bob/notes.txt/home/alice/backup/opt/backup/usr/share/doc/nginx/nginx.conffind /var -type f -name "*.log" -size +100M选择任务,先阅读自动组成的命令,再启动搜索。
知识测验
题目
哪条命令能从 /var/log 实时查找所有 .log 文件,并让 find 处理通配符?
知识测验
题目
刚创建的文件必须立即被准确找到,应该优先使用什么?
动手练习
审计备份目录
在 /srv/backups 中完成 4 个只读查询,不删除或修改任何文件。
- 查找所有名为 manifest.json 的普通文件。
- 查找超过 1 GB 的普通文件。
- 查找 30 天以前修改的 *.tar.gz 文件。
- 忽略大小写查找名为 archive 的目录。