Linux `whereis` 命令详解
🐧 Linux whereis 命令详解
📌 学习目标
- 理解
whereis的基本功能及其在查找系统命令、源码和文档中的作用 - 掌握
whereis与其他查找命令(如which,locate,find)的区别与适用场景 - 能够在实际运维中快速定位命令路径、手册页和源代码位置,提升排错效率
🔍 核心重点
| 功能 | 描述 |
|---|---|
| 查找命令 | 快速定位可执行文件路径(bin) |
| 查找源码 | 定位对应程序的源代码文件(src) |
| 查找文档 | 定位帮助手册(man pages) |
| 搜索范围 | 仅限预定义目录(如 /usr/bin, /usr/share/man) |
| 搜索速度 | ⚡ 极快,不依赖实时扫描 |
📌 注意:
whereis只搜索已知的标准系统路径,无法查找任意文件- 对于非标准安装或自定义路径的程序可能查不到结果
📘 详细讲解
🧠 什么是 whereis?
whereis 是 Linux 中用于快速查找命令、源码和手册页位置的命令。它通过搜索一组预定义的系统目录来定位指定命令的相关信息。
适合用来:
- 查看某个命令的实际路径(如
ls来自/bin/ls) - 找到命令的帮助手册(man page)存放位置
- 定位某些软件的源代码路径(如果有安装)
🛠️ 基本语法
whereis [选项] [命令名]
最简用法示例:
whereis ls
# 输出类似:ls: /bin/ls /usr/share/man/man1/ls.1.gz
表示:
/bin/ls是可执行文件/usr/share/man/man1/ls.1.gz是帮助手册
💡 参数说明与实战用法
1. -b:仅显示可执行文件路径(Binary)
忽略 man 和 source 信息
示例:
whereis -b gcc
# 输出:gcc: /usr/bin/gcc /usr/lib/gcc
📌 适用场景:
- 快速获取某个命令的执行路径
- 编写脚本时确认命令位置
2. -m:仅显示手册页路径(Manual)
忽略 binary 和 source 信息
示例:
whereis -m curl
# 输出:curl: /usr/share/man/man1/curl.1.gz
📌 适用场景:
- 快速查看某命令是否有帮助文档
- 配合
man使用
3. -s:仅显示源代码路径(Source)
如果安装了开发包或调试符号包,可能会有输出
示例:
whereis -s bash
# 输出:bash: /usr/src/bash-5.0
📌 适用场景:
- 开发者调试源码时快速定位
- 安装了 debuginfo 包后使用
4. -u:查找不一致的条目(Unusual entries)
显示那些缺少二进制、手册或源码的命令
示例:
whereis -u some_unknown_command
📌 适用场景:
- 检查系统中残留的无效路径
- 清理无用软件包
5. 多参数查询
你可以一次查询多个命令:
whereis cp mv rm
# 输出:
# cp: /bin/cp /usr/share/man/man1/cp.1.gz
# mv: /bin/mv /usr/share/man/man1/mv.1.gz
# rm: /bin/rm /usr/share/man/man1/rm.1.gz
🔄 whereis 与其他查找命令对比
| 命令 | 功能 | 是否搜索整个系统 | 是否支持通配符 | 速度 | 用途 |
|---|---|---|---|---|---|
whereis |
查找命令、手册、源码 | ❌ 否 | ❌ 否 | ⚡ 很快 | 快速定位系统命令相关路径 |
which |
查找当前环境变量 PATH 下的命令路径 | ❌ 否 | ❌ 否 | ⚡ 快 | 查找用户正在使用的命令路径 |
locate |
快速查找文件(基于数据库) | ✅ 是 | ✅ 是 | ⚡ 快 | 全盘模糊查找 |
find |
实时遍历文件系统查找文件 | ✅ 是 | ✅ 是 | 🐢 较慢 | 精确查找特定条件的文件 |
type |
查看命令类型(内置、别名、外部) | ❌ 否 | ❌ 否 | ⚡ 快 | 快速判断命令来源 |
📌 结论:
- 如果你只想知道一个命令在哪、有没有手册页 → 用
whereis - 如果你想知道当前 shell 正在调用哪个命令 → 用
which - 如果你要查找任意文件(包括非标准路径)→ 用
find或locate
🧪 实战案例分析
案例一:确认 ping 命令的位置及权限问题
当你发现普通用户不能执行 ping,想确认其路径和权限:
whereis ping
# 输出:ping: /bin/ping /usr/share/man/man8/ping.8.gz
ls -l /bin/ping
# 输出:-rwxr-xr-x 1 root root 72560 Jan 1 00:00 /bin/ping*
发现问题:没有设置 SUID 位,导致非 root 用户无法运行 ICMP 请求。
✅ 解决方案:
sudo chmod u+s /bin/ping
案例二:查找 Python 相关路径
whereis python
# 输出:python: /usr/bin/python /usr/bin/python3.8 /usr/lib/python3.8 /usr/include/python3.8 /usr/share/man/man1/python.1.gz
📌 解读:
/usr/bin/python:主可执行文件/usr/bin/python3.8:具体版本路径/usr/lib/python3.8:库文件目录/usr/include/python3.8:头文件(开发用)/usr/share/man/man1/python.1.gz:帮助手册
案例三:查看 Vim 是否安装了源码
whereis -s vim
# 输出:vim: /usr/src/vim-8.2
表示系统中安装了 Vim 的源码包,可用于调试或二次开发。
⚙️ 不同发行版注意事项
| 发行版 | 支持情况 | 默认路径举例 |
|---|---|---|
| Ubuntu | ✅ 完全支持 | /usr/bin, /usr/share/man |
| Debian | ✅ 完全支持 | /usr/bin, /usr/lib |
| CentOS | ✅ 完全支持 | /usr/bin, /usr/src |
| RHEL | ✅ 完全支持 | /usr/bin, /usr/include |
| Alpine Linux | ✅ 支持 | /bin, /usr/share/man |
| macOS | ✅ 支持 | /usr/bin, /usr/local/bin |
| Windows WSL | ✅ 支持 | 所有 Linux 版本均内置 |
📌 提示:
- 若找不到源码路径,请尝试安装对应的开发包(如
vim-source,glibc-devel) - 手册页缺失?安装
man-db或man-pages包即可
🧪 小技巧:结合 man 快速查看帮助
man $(whereis -m ls | awk '{print $2}')
📌 解释:
whereis -m ls获取手册路径awk提取路径man加载该手册页
🧯 安全警告与建议
- 不要依赖
whereis查找安全敏感路径:它只搜索标准目录,可能遗漏隐藏或非标准路径 - 确保系统更新了手册页数据库:否则
whereis可能找不到某些命令的手册 - 避免对不存在命令反复使用
whereis:浪费资源且无意义 - 开发环境下建议安装源码包:便于调试和阅读
🧰 其他相关命令推荐
| 命令 | 功能 |
|---|---|
which |
查找当前环境中执行的命令路径 |
type |
判断命令是内部命令、别名还是外部程序 |
locate |
基于数据库快速查找任意文件 |
find |
实时递归查找符合条件的文件 |
apropos |
搜索手册页关键词 |
man |
查看帮助手册 |
🧠 总结
whereis 是 Linux 中非常实用的命令之一,尤其适合在日常运维和开发过程中快速定位命令、手册和源码路径。虽然它的搜索范围有限,但正因为如此,它的查找速度极快,非常适合用于快速诊断、脚本编写、路径确认等任务。
掌握 whereis 的基本用法及其与其他查找命令(如 which, find)的配合使用,将极大提升你在 Linux 系统上的操作效率和排查能力。
如果你已经掌握了 whereis,下一步你可以深入学习:
which:查找当前 shell 使用的命令路径find:深度查找任意文件man+apropos:系统级文档查询体系
如需进一步了解某个具体属性或使用场景,请告诉我:
追加问题: 如何用 whereis 查找命令的源码?

浙公网安备 33010602011771号