Linux下快速查找可执行程序路径 which与whereis

冬浩同学_9156

冬浩同学_9156

2026-04-09

298人浏览

原创

which只查path中首个可执行文件,whereis查预建数据库中的二进制、man、源码路径;前者用于确定实际执行命令,后者适合找手册位置。

linux下快速查找可执行程序路径 which与whereis

which 和 whereis 都能查路径,但它们查的不是一回事——用错一个,就可能拿不到你真正想要的信息。

which 只认 PATH,且只返回第一个可执行文件

它干的事很专一:顺着 PATH 环境变量从左到右扫目录,找到第一个名字匹配的可执行文件就停。不看手册页、不看源码、不关心有没有同名非可执行文件。

  • 适合脚本中判断命令是否存在:if [ -x "$(which curl)" ]; then ...
  • 排查别名或 shell 函数干扰:which ls 能告诉你实际执行的是 /bin/ls 还是被 alias 覆盖了
  • which -a python 可列出 PATH 中所有 python 可执行文件(不止第一个)
  • 注意:如果当前 shell 有函数定义叫 foo,which foo 不会提示“这是函数”,而是静默失败(返回空)

whereis 默认查三类路径:二进制、man 手册、源码

它不依赖 PATH,而是查系统预建的数据库(通常由 updatedb 维护),固定扫描 /usr/bin、/usr/share/man、/usr/src 等标准位置。

  • whereis gcc 可能输出:gcc: /usr/bin/gcc /usr/lib/gcc /usr/share/man/man1/gcc.1.gz
  • 加参数可限定范围:whereis -b python 只查二进制;whereis -m python 只查 man 手册路径
  • 数据库不是实时更新:刚 apt install 的新命令,whereis 可能搜不到,需手动运行 sudo updatedb
  • 没输出基本等于没安装(而 which 空输出可能是 PATH 没配对)

常见误用场景与排查建议

当你发现 which python3 返回路径,但 whereis python3 什么都没返回,大概率是这个 python3 是你自己编译装在 /opt/python3 这种非标准路径下的——whereis 的数据库压根不扫那里。

  • 想确认「敲命令时到底执行谁」→ 无条件用 which
  • 想快速找某个命令的 man 文档位置(比如直接 man /usr/share/man/man1/git.1.gz)→ 用 whereis -m git
  • 两者结果不一致?先检查 echo $PATH,再确认是否刚装完软件还没更新数据库
  • 需要绝对可靠、绕过所有缓存和别名 → 直接上 find /usr -name python3 -type f -executable 2>/dev/null(慢但准)

真正容易被忽略的点是:whereis 查到的路径里,有些根本不是可执行文件(比如 /etc/passwd 也会被列出来),别直接当成 which 的替代品去执行。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

2023.09.22

549

3

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

2024.03.01

1678

6

curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

2023.06.14

3523

6

linux常见下载安装工具
linux常见下载安装工具

linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

2023.10.30

795

4

自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

2023.07.05

5899

9

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

2023.07.06

1740

6

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

2023.07.24

1014

5

git提交错误怎么撤回
git提交错误怎么撤回

git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.09

3837

7

git怎么对比两个版本的文件内容
git怎么对比两个版本的文件内容

要对比两个版本的 git 文件,请使用 git diff 命令:git diff 比较工作树和暂存区之间的差异。git diff 比较两个提交或标签之间的差异。git diff 输出显示差异块,其中 + 表示添加的行,- 表示删除的行, 表示修改的行。可使用 gitkraken、meld、beyond compare 等可视化工具更直观地查看差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.09

3561

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习