whereis -b 仅在内置路径(如/bin、/usr/bin)中查找已安装的标准命令二进制文件,依赖静态索引,不查当前目录、非标准路径、未安装程序、alias、builtin或符号链接目标,结果与path无关。

whereis 不是为“快速定位任意二进制文件”设计的,它只查系统预设路径下的标准命令,且依赖静态数据库 —— 所以别指望它找到 ./mytool、/opt/bin/xxx 或刚编译未安装的程序。
whereis -b 真正能查到什么
它只搜索硬编码在 whereis 内部的路径列表(比如 /bin、/usr/bin、/usr/local/bin),而且仅限已安装、命名规范、被收录进系统索引的命令。例如:
$ whereis -b ls ls:/bin/ls
但如果执行的是当前目录下的 ls(比如 ./ls),或你手动把二进制扔进了 /home/user/bin 但没加进 PATH 或数据库,whereis -b 就完全看不到。
- 查不到 alias、function、shell builtin(如
cd、echo) - 查不到 PATH 里存在但不在默认搜索路径中的可执行文件
- 查不到符号链接指向的原始路径(它只显示链接本身位置)
- 输出中可能包含多个路径,但第一个不一定是实际执行的那个 ——
which或command -v才管运行时行为
为什么 whereis -b 有时比 which 还快,但结果更不可靠
whereis 读的是内置路径表 + 缓存(不依赖 updatedb),所以毫秒级返回;而 which 是逐个检查 PATH 中每个目录,实时 stat 文件是否存在。但这也意味着:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
whereis -b可能返回已删除文件的残留路径(比如卸载软件后没清理数据库) -
whereis -b python可能列出/usr/bin/python和/usr/local/bin/python,但你实际运行的可能是/opt/python3.12/bin/python - 它不关心权限 —— 即使某个路径下文件存在但不可执行,也会照列不误
用 whereis -b 前先确认你真需要它
多数情况下,你应该优先用:
-
command -v <code>ls:POSIX 兼容,返回 shell 实际调用的可执行路径(含 alias/function 处理) -
which <code>ls:简单直接,只看 PATH,适合脚本判断是否存在 -
type <code>ls:最全信息,告诉你它是 alias、builtin 还是文件,以及具体路径
只有当你明确想确认「这个命令有没有配套的手册页或源码」,或者要批量检查系统命令完整性(比如运维巡检),才值得用 whereis -b。顺带一提:whereis -l 能帮你看到它到底搜了哪些路径,避免误判范围。
真正容易被忽略的是:它的结果和 PATH 无关,也和当前 shell 环境无关 —— 它查的是“系统认为该命令该在哪”,不是“你现在敲下去会跑哪个”。这点一旦混淆,排查路径问题时就会南辕北辙。










