小小白祈祷中...

which 是一个用来查找可执行文件路径的命令,用于显示命令或程序所在的绝对路径。它会根据当前用户的环境变量 PATH 中定义的搜索路径,依次查找指定的命令,并返回第一个匹配的路径。


基本语法

1
which [选项] 命令
  • 命令:需要查找的可执行文件名称。
  • 选项:可选参数,用于修改 which 的行为。

用法示例

查找命令的路径

1
which ls
  • 输出

    1
    /bin/ls
  • 说明:返回 ls 命令的绝对路径 /bin/ls


检查某个程序是否安装

1
which python
  • 如果程序已安装,输出类似以下路径:
    1
    /usr/bin/python
  • 如果程序未安装,没有任何输出或返回空。

查看用户使用的命令位置

1
which ssh
  • 输出

    1
    /usr/bin/ssh
  • 说明:在 PATH 路径中找到 ssh 可执行程序的位置。


查找多个命令路径

1
which ls pwd cat
  • 输出

    1
    2
    3
    /bin/ls
    /bin/pwd
    /bin/cat
  • 说明:同时查找多个命令的路径。


检查自定义脚本或别名

如果 PATH 中存在同名脚本或工具,which 会返回第一个匹配项:

1
which myscript
  • 如果 myscript 是可执行脚本,返回其绝对路径。

常用选项

选项 作用
-a 显示所有匹配的路径,而不仅仅是第一个路径。

显示所有匹配的路径

1
which -a python
  • 输出

    1
    2
    /usr/bin/python
    /bin/python
  • 说明:-a 会列出所有路径,而不仅仅是第一个匹配的路径。


配合环境变量

which 会根据用户的 PATH 环境变量依次查找命令的路径。

查看 PATH 变量

1
echo $PATH
  • 输出

    1
    /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
  • 说明:which 会按照 PATH 的顺序查找命令。


临时修改 PATH 并用 which 检查

1
2
export PATH=/custom/path:$PATH
which my_command
  • 说明:将 /custom/path 添加到 PATH 的开头,优先在该路径中查找命令。

区别于其他相关命令

type 命令

type 命令不仅可以显示命令的路径,还可以检查命令是否是 Shell 内置命令或别名。

1
type cd
  • 输出
    1
    cd is a shell builtin
1
type ls
  • 输出
    1
    ls is /bin/ls

command -v

command -vwhich 类似,但功能更广泛,可以检查所有命令类型(内置命令、别名、函数等)。

1
command -v ls
  • 输出
    1
    /bin/ls

whereis 命令

whereis 查找命令的位置、源码路径和手册页路径。

1
whereis ls
  • 输出

    1
    ls: /bin/ls /usr/share/man/man1/ls.1.gz
  • 说明:whereis 提供更多信息,但搜索范围比 which 更广。


注意事项

  1. which 只查找可执行文件:

    • 如果文件不可执行,或不在 PATH 环境变量中,which 将无法找到它。
  2. 别名和内置命令:

    • which 不会解析 Shell 的别名或内置命令。如果需要检查别名,可以使用 type 命令。
    1
    2
    3
    alias ls='ls --color=auto'
    which ls
    # 输出:/bin/ls
  3. 所有路径优先级:

    • which 返回 PATH 中第一个匹配的路径。可以使用 which -a 查看所有可能的路径。

示例总结

操作 命令 说明
查找单个命令路径 which ls 返回 /bin/ls,显示 ls 的第一个匹配路径。
查找多个命令路径 which ls pwd cat 同时查找多个命令路径。
显示所有匹配路径 which -a python 返回所有匹配的 python 可执行文件路径。
检查命令是否存在 which git 如果返回路径则存在,否则为空。
检查特定路径优先级 export PATH=/custom:$PATH 临时修改 PATH,优先查找 /custom 目录中的命令。

which 是一个简单又实用的命令,可以快速帮助你定位程序的位置,并与其他命令(如 typewhereis)配合使用,进一步了解命令的来源或行为。