which 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,属于文件与目录命令族(见文件与目录命令族)。当你不确定敲的命令到底跑了哪个文件时,它就是答案。
which 在 $PATH 环境变量列出的目录里,从左到右找第一个匹配的可执行文件,打印它的绝对路径。一句话:告诉我 python 实际执行的是哪个文件。
一、基本用法
bash
which python # 输出 /usr/bin/python
which ls git curl # 一次查多个
which -a python # 列出 PATH 中所有匹配(不止第一个)
which只认$PATH里的可执行文件。多个同名命令存在时(如系统 python 和 venv python),which显示当前 shell 会执行的那个(PATH 顺序最靠前的)。-a列出全部,排查"到底有几个 python"很有用。
二、局限:看不见别名和函数
bash
alias ll='ls -l'
which ll # 可能找不到(ll 是别名,不是文件)
type ll # 正确:显示 ll 是 alias
which只查 PATH 里的二进制,看不到 shell 别名(alias)和函数(function)。想看命令"到底是什么"(别名/函数/内建/文件),用 bash 内建 type(更权威)。所以which适合确认"文件在哪",type 适合确认"这条命令到底是什么"。
三、which vs whereis
bash
which python # 只给可执行文件路径
whereis python # 给可执行 + 源码 + man 手册路径whereis(见whereis)搜的范围更广(可执行、源、手册),但依赖固定目录、whereis 比
which更"粗"。只想确认可执行文件位置,which更直接准确。
一句话总结
which = 查 PATH 里命令对应的可执行文件路径:-a 列所有匹配;它只认 PATH 里的二进制,看不到别名/函数(用 type 看命令本质);和 whereis(见whereis)比,which 只给可执行路径、更精准,适合确认"python 到底跑的是哪个文件"。