05 搜索与查找
学习目标
- 能按名称、类型、时间查找文件。
- 能在文件内容中搜索关键词。
- 能定位命令程序所在路径。
命令总览
| 命令 | 用途 | 含义 | 基本用法 | 例子 |
|---|---|---|---|---|
find | 查找文件和目录 | 在指定目录递归查找路径 | find 路径 条件 | find . -name "*.log" |
grep | 搜索文本内容 | 在文件或输入流中匹配文本 | grep [选项] 关键词 文件 | grep "error" app.log |
command -v | 查看命令解析结果 | POSIX Shell 查询命令名如何解析 | command -v 名称 | command -v python3 |
type -a | 查看 Bash 命令来源 | 显示 alias、function、builtin 和多个文件位置 | type -a 名称 | type -a python3 |
which | 遗留路径查询工具 | 实现不一,可能漏 alias/function/builtin | which 名称 | which python3 |
whereis | 查找命令相关文件 | 查找二进制、源码和手册位置 | whereis 命令 | whereis bash |
locate | 快速查找文件 | 基于系统索引查找路径 | locate 关键词 | locate nginx.conf |
常用场景
按名称查找文件:
find . -name "*.log"
find ./logs -type f -name "*.log"查找最近修改的文件:
find . -type f -mtime -7搜索文件内容:
grep "error" app.log
grep -r "deprecated_flag" ./src
grep -n "failed" app.log定位命令路径:
command -v -- python3
type -a -- python3
whereis bash新手注意
find .表示从当前目录开始查找。find /会扫描整个系统,可能很慢、越过挂载点并收集无关路径;新手练习只在实验目录。grep -r会递归搜索目录,适合在项目里找关键词。grep -n会显示行号,方便定位。locate依赖索引,刚创建的文件可能搜不到;这种情况用find更可靠。find -mtime -7按 24 小时周期并取整判断,不等于最近 7 个日历日。- 用
grep -F搜字面文本,用grep -E或默认 BRE 处理正则;.在正则中匹配任意单字符。
安全文件名与限定范围
把查找结果交给另一个命令时,优先用 -exec ... {} +:
find ./logs -type f -name '*.log' -exec wc -l -- {} +它不会用换行切分合法文件名。GNU/Linux 也可用 -print0 | xargs -0,见 文本处理。
练习
在实验目录创建三个 .log 和一个文件名含空格的日志,完成按名称、修改时间、固定字符串和正则四类查询。验收时记录起点路径、命中数与退出码,不扫描 / 或真实 /var/log。