which 命令在 path 中查找指定可执行文件的第一个匹配绝对路径,不识别别名、内置命令或函数;支持 -a(显示所有匹配)和 -s(静默判断)选项;推荐脚本中使用 command -v 替代。

which 命令用于在当前 PATH 环境变量列出的目录中,查找指定可执行文件的**第一个匹配的绝对路径**。
它只查 PATH 中的命令,不查别名或函数
which 只搜索 PATH 中的目录(如 /usr/bin、/bin、$HOME/.local/bin 等),不会识别 shell 别名(alias)、shell 内置命令(如 cd、echo)或 shell 函数。例如:
-
which ls→ 返回/bin/ls或/usr/bin/ls -
which ll→ 若ll是 alias(如alias ll='ls -l'),则输出为空 -
which cd→ 无输出,因为cd是 shell 内置命令,不在 PATH 中
基本用法很简单
直接跟上命令名即可:
which pythonwhich gitwhich node
如果找到,打印完整路径;没找到,不输出任何内容,且退出状态为 1。
常用选项增强实用性
-
-a:显示所有匹配路径(默认只显示第一个)
例如:which -a python可能输出/usr/bin/python和/usr/local/bin/python -
-s:静默模式,不输出路径,仅通过退出码判断是否存在(适合脚本中判断)
例如:which -s curl && echo "curl 可用"
注意替代方案更全面
若需更准确判断命令来源(比如区分 alias、function、builtin、PATH 中的文件),推荐用 type 或 command -v:
-
type ls→ 显示是 alias / builtin / file -
command -v ls→ 类似 which,但 POSIX 兼容,且能处理更多情况
which 是传统工具,简单直接;但在现代脚本中,command -v 更可靠。











