我怎样才能在一个系统上找到一个 Unix 程序的所有版本?

How can I find all the versions of a Unix program on a system?

这在课程作业中出现,我被卡住了:

Many systems have more than one version of a utility program so that users can choose the one they want. Suggest a command to find all the versions of make on a system. What determines which one a user actually gets? How might a user override the defaults?

你会怎么做?

UNIX 如何查找程序

由于历史原因,类 Unix 系统将其可执行程序存储在各种目录中。

当您想要 运行 命令时搜索的目录存储在名为 $PATHenvironment variable 中,以冒号 (:) 分隔。要查看其内容,请在终端 window 中键入 echo "$PATH"。在我的系统上,显示(拆分以避免长行)

/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:
/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl

他们是按这个顺序搜索的。如果我要运行make,系统会先检查/usr/local/sbin/make(不存在),然后/usr/local/bin/make(也不存在),然后/usr/bin/make确实存在,所以运行就是这样)。

如何判断哪一个会 运行

程序 which 可用于查看 $PATH 以确定将选择哪个程序。 运行 which make 在我的系统上产生输出 /usr/bin/make.

方便的是,which 有一个 -a 标志来打印 所有 匹配的可执行文件,而不仅仅是第一个。 (我通过 运行ning man which 查阅它的手册发现了这一点。)所以 which -a java 应该告诉你 java 的所有版本在哪里。

更改默认值

如果你愿意,你可以改变$PATH变量的内容,就像你可以改变任何环境变量一样:如果我运行 PATH="$PATH:/home/anko/bin",下次系统需要要找到一个程序,它会检查所有 $PATH 以前的内容,如果找不到其他任何东西,还会检查我的主目录中名为 bin 的目录。

我还可以通过 PATH="/home/anko/bin:$PATH".

在目录前面添加目录,使其优先于其他任何内容