which

显示命令的完整路径名


语法格式

which [-ai] [--] cmds
which [--help] [-v|-V|--version]

命令简介

对于给定的命令或脚本参数,which将会根据PATH环境变量定义的命令检索路径,检索其中的可执行文件,显示which发现的第一个匹配的命令或脚本,给出完整的路径名。其中,cmds是一个或多个欲查询的命令或脚本等可执行文件。

第一个匹配的命令或脚本通常也是Shell解释用户输入的命令(或脚本中提供的命令)时执行的实际命令。利用这个特性,当对命令的运行结果存有疑问时,可以使用which查询究竟执行的是哪一个命令,是否存在同名的命令,命令检索路径中的目录顺序是否有问题。

例外的情况是,当存在同名的Shell内置命令时,Shell内置命令总是具有执行的优先权,这一点需要注意。当需要执行与Shell内置命令同名的外部命令时,或者冠以env命令,或者输入全路径名。

注意,除了“-a”选项,有些Linux系统并不支持其他选项。

命令选项

-a, --all  显示命令检索路径PATH中匹配指定程序的所有可执行文件,而不仅是第一个匹配的可执行文件。

-i, --read-alias  从标准输入中读取命令别名,显示匹配的命令别名。

--skip-alias  仅检索常规的二进制命令文件,忽略命令别名。

--read-functions  从标准输入中读取Shell函数定义,显示匹配的函数。

--skip-functions  仅检索常规的二进制命令文件,忽略函数定义。

--skip-dot  跳过命令检索路径PATH变量中以句点“.”为首字符的目录。

--skip-tilde  跳过命令检索路径PATH变量中以波浪号“~”为首字符的目录,及用户主目录中的可执行文件目录。

--show-dot  当命令检索路径PATH变量中的一个目录以句点“.”为首字符,且发现其中存在匹配的可执行文件时,输出“./program”形式的相对路径名而不是全路径名。

--show-tilde  当目录匹配用户主目录时输出替代的波浪号“~”。当超级用户运行which命令时,忽略此选项。

--tty-only  如果命令不是从终端键盘上输入的,停止处理后续的选项。

应用实例

1. 查询当前执行的find命令是哪一个find命令,返回结果说明执行的find命令并非系统提供的常规find命令,可能只是用户自己的某个find程序。

$ which find
/home/gqxing/bin/find
$

2. 当外部命令与Shell内置命令同名时,如kill命令,which命令的输出并不说明执行的kill命令就是外部命令,Shell内置的kill命令具有优先执行权。

$ which kill
/usr/bin/kill
$

索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z