显示命令的完整路径名
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