如何在系统上找到Unix程序的所有版本?

时间:2015-03-19 20:01:01

标签: linux shell unix terminal version

这在课程中出现了,我被困了:

  

许多系统都有多个版本的实用程序,以便用户可以选择他们想要的版本。建议命令查找系统上make的所有版本。是什么决定了用户实际得到的是哪一个?用户如何覆盖默认值?

你会怎么做?

1 个答案:

答案 0 :(得分:1)

UNIX如何查找程序

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

当您要运行命令时搜索的目录存储在名为$PATH的{​​{3}}中,以冒号(:)分隔。要查看其内容,请在终端窗口中键入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标记来打印匹配的所有可执行文件,而不仅仅是第一个。 (我通过运行man which查阅其手册找到了这一点。)因此which -a java应该告诉您java的所有版本的位置。

更改默认值

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

我还可以通过执行PATH="/home/anko/bin:$PATH"来预先添加目录,使其优先于其他任何目录。