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/builtinwhich 名称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。

参考资料