whereis 查的是什么
whereis 定位命令的二进制、源码与 man 手册位置,默认同时给出 -b(二进制)、-m(手册)、-s(源码)的结果。它和 which 的差别在查找范围:whereis 只在标准目录(/bin、/sbin、/usr/bin、/usr/sbin、/usr/share/man 等)里找,which 按当前 PATH 顺序解析。因此“命令是否存在、手册装没装”用 whereis,“实际会执行哪一个”用 command -v 或 type -a,装在自定义目录的软件则要直接 find。
基本信息
| 适用平台 | Linux(util-linux);macOS/BSD 实现略有差异 |
|---|---|
| 权限要求 | 普通用户 |
| 语法 | whereis [-bms] 名称;-B/-M/-S 可自定义搜索目录 |
| 查找范围 | 标准系统目录,不含 /opt、/usr/local 等 |
| 相关命令 | which、command -v、type -a、find |
典型使用场景
- 确认命令是否存在、man 手册是否安装(man 打不开时先查这里)
- 检查同一命令是否存在多个安装位置(系统包与手工版共存)
- 只想要二进制路径时用 -b,避免手册目录混进结果
- 排查“命令能跑但文档找不到”的环境差异
- 定位源码目录,作为发行版自带源码包场景的辅助手段
常用示例
常用示例
whereis python3 # 二进制与手册一起给出
whereis -b nginx # 只看二进制路径
whereis -m ls # 只看 man 手册路径
whereis -s bash # 只看源码目录
command -v nginx # 当前 shell 实际会执行哪一个,不依赖标准目录假设
type -a nginx # 列出所有同名命令的解析顺序,多版本共存时最有用
find /opt /usr/local -maxdepth 3 -name nginx -type f # 非标准目录安装的兜底查法几个查找命令的区别
| 命令 | 查找依据 | 适合场景 |
|---|---|---|
| whereis | 标准目录(二进制、手册、源码) | 判断是否存在、文档是否安装 |
| which | 当前 PATH 顺序 | 确认实际会执行哪一个 |
| command -v | shell 自身解析结果(含内建、别名、函数) | 最可靠的存在性判断 |
| type -a | shell 解析顺序全列表 | 多版本共存时看清优先级 |
| find | 实时遍历文件系统 | 自定义目录安装、标准目录之外的情况 |
输出里的 /usr/share/man/... 是手册路径而不是可执行文件。写脚本解析时先加 -b 过滤二进制,避免把手册目录当成命令位置。
手工编译安装到 /usr/local 或 /opt 下的程序通常查不到:这不是缺文件,而是超出了 whereis 的搜索范围;可用 -B/-M/-S 指定目录,或直接用 find。