which命令专用于在PATH环境变量指定路径中查找可执行命令的绝对路径,不查内置命令、普通文件或目录;支持单查、多查及-a选项列出所有匹配项。

which 命令专用于快速定位你在终端输入的**可执行命令**实际存放在哪个目录,它只在 $PATH 环境变量列出的路径里搜索,不查普通文件或文件夹。
基础用法:查单个命令在哪
直接跟上命令名即可:
-
which ls→ 返回类似/bin/ls -
which python3→ 返回类似/usr/bin/python3 -
which git→ 如果没安装或不在 PATH 中,就无输出或提示no git in (...)
一次查多个命令的位置
把几个命令名并列写在一行,空格分隔:
-
which ls grep awk→ 分别输出每个命令的绝对路径,每行一个 - 适合批量确认常用工具是否可用、路径是否一致
显示所有匹配结果,不只是第一个
默认只返回 PATH 中最先找到的那个。加 -a 选项可列出全部:
-
which -a java→ 可能输出:/usr/lib/jvm/java-17-openjdk-amd64/bin/java/usr/bin/java - 这对排查多版本共存(如手动装的 JDK 和系统包管理器装的)特别有用
注意它查不了什么
which 有明确边界,用错场景会白忙:
- 查不了 shell 内置命令,比如
cd、echo、source—— 它们不是独立文件,要用type cd查 - 查不了普通文件或目录,比如
which myfile.txt或which /home/user,一定失败 - 查不了不在 PATH 中的程序,即使文件存在且可执行,只要路径没加入 PATH,which 就看不见


















