为什么调用该命令which
而不调用该命令where
?
从逻辑上讲,您希望搜索可执行文件的位置,因此搜索它们在“哪里”,而不是搜索它们。
答案1
词源给出于which
该程序的早期版本:
which :告诉您您获得哪个程序
只有比尔·乔伊(Bill Joy)可以告诉你为什么问题是“我得到哪个程序”而不是“程序从哪里来”(但请注意,询问“哪里”最终会假设只有一个,而目的是which
确定哪个程序)程序将在一组潜在的程序中使用)。
答案2
这主要是在评论中讨论的,但这是我的看法。
我一直明白的原因是那which
是在向你展示哪个正在调用二进制文件;可能有多个同名的二进制文件,但运行该命令时只会选择一个。
which
通过遍历环境变量来确定正在运行哪些二进制文件$PATH
:
[root@headdesk ~]# echo $PATH
/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@headdesk ~]#
which
将查看/usr/local/sbin
,然后/sbin
,依此类推。
例如,看看which vim
,它位于我们的 的第三个位置$PATH
:
[root@headdesk ~]# which vim
/bin/vim
如果我们添加具有更高路径优先级的可执行文件,我们将看到添加的可执行文件:
[root@headdesk ~]# >/usr/local/sbin/vim; chmod +x /usr/local/sbin/vim
[root@headdesk ~]# which vim
/usr/local/sbin/vim
如果我们想查看vim
路径中的所有可执行文件,可以使用以下-a
标志: [root@headdesk ~]# which -a vim /bin/vim /usr/bin/vim
手册页对此进行了更简洁的介绍:
描述
这需要一个或多个参数。对于它的每个参数,它都会将在 shell 提示符下输入该参数时将执行的可执行文件的完整路径打印到 stdout。它通过使用与 bash(1) 相同的算法在环境变量 PATH 中列出的目录中搜索可执行文件或脚本来实现此目的。
答案3
除了 cutrightjm 和 Stephen Kitt 的两个出色答案之外,还有一个whereis
命令可以执行您所说的操作。
从它的联机帮助页来看:
whereis - locate the binary, source, and manual page files for a command