为什么命令被称为which而不是where?

为什么命令被称为which而不是where?

为什么调用该命令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 

相关内容