使用替代方案或添加到 PATH?

使用替代方案或添加到 PATH?

我对从终端使脚本全局可用的正确方法(例如命令)感到有点困惑。有两种方法,使用该alternatives实用程序,基本上是创建到 /usr/bin 的符号链接,然后添加到PATH.我知道添加PATH意味着添加完整的目录,并且它可以在每个用户的基础上工作。但我不喜欢的是这个过程的混乱。看起来(至少从我的角度来看)每个发行版都有自己的怪癖,甚至不同版本的发行版都给我添加一些东西带来麻烦PATH,然后网上有答案争论如何做到这一点,甚至更重要,如何不这样做。

安装 Java 时,我通常会找到有关alternatives使 java 和 javac 全局可用的说明,如下所示:

替代方案 --install /usr/bin/java java /opt/jdk1.7.0_79/bin/java 2

alternatives现在,更频繁地使用有什么问题吗?我主要在那些 Java 设置教程中找到它?我用它来将 Typesafe Activator 设置为全局可用。我还发现 Ansible 等自动化工具更容易。从管理员的角度来看有什么问题吗?

答案1

首先,替代方案来自 debian,不能在 redhat、freebsd 或许多其他系统中工作。其次,标准建议是对供应商软件包使用 /usr/bin,对第三方软件包使用 /opt,对本地可执行文件使用 /usr/local/bin,并设置用户可执行文件的路径。

替代方案的目的是让多个包提供相同的功能,例如 debian 中至少有三个 mailx 包、两个 awk 包和多个 java 包。

现在讨论问题的实质:为什么教程使用您展示的替代方案?由于替代方案与 debian 包紧密结合使用,这使得第三方包主要充当供应商包。您应该使用替代方案而不是安装吗?绝对不是,替代品不设置权限。


unix 的核心思想之一是一切皆文件。 (严格来说,这不再是真的,如果曾经是的话,但它作为一个设计目标塑造了很多东西。)现在,您可以对与权限关联的文件执行三件事。它们被读取、写入和执行。读取或写入时有两种方法指定要打开的文件。它们是绝对路径(相对于根目录的路径)或相对路径(相对于当前目录的路径)。执行稍微复杂一些,有三种方法可以指定要执行的文件。它们是绝对路径、裸文件名和相对路径。绝对路径与上面相同。相对路径与上面类似,但仅在明确指定(名称包含斜杠)或路径包含相对路径时使用。该路径是在 PATH 环境变量中为每个进程指定的(在 fork 期间从父进程继承)。当指定可执行文件的名称中没有斜杠时,路径是要查找可执行文件的目录列表。为了简化管理(并加快可执行文件的定位),可执行文件被收集到少量目录中。大多数可执行文件位于 /bin、/usr/bin 或 /usr/local/bin 中,特殊用途的可执行文件位于 /sbin、/usr/sbin、/usr/local/sbin 和 /usr/games 中。一些用户会将额外的二进制文件放置在其他位置供个人使用。我喜欢将我的目录放在 ~/.bin 中,但 ~/bin 也很常见,有时会根据用户的需要使用其他目录。

当放置要共享的可执行文件时,每个用户都可以告诉其他用户二进制文件的位置或将其放在公共位置。将可执行文件放在公共位置时,您可以复制文件并手动设置其权限,也可以使用安装,这将以更简单的方式处理详细信息。有时,您安装复杂的第三方软件包,并且不希望它们与所有相关文件(库等)混淆文件系统的主要部分,并将它们放在 /opt/package 或 /opt/vendor/package 中。您可以将相关目录添加到路径中,或者将包装器脚本或符号链接放置在标准目录中。替代方案放置一个符号链接和一个数据库条目,以便当您有多个具有相同基本功能和相同可执行文件名称的可用程序时,会使用正确的程序。

答案2

[什么是]使脚本从终端全局可用的正确方法,例如命令

一种方法是将命令添加到/usr/local/bin,并确保此单个目录位于PATH.如果您有一个包含多个命令的完整应用程序,那么添加符号链接来/usr/local/bin指向应用程序目录中保存的命令并不是不合理的。

这是我自己的目录之一的摘录/usr/local/bin,其中实际上包含 30 多个条目。您可以看到 VMware 工具保存在单独的目录中,但符号链接到/usr/local/bin.其他工具保存在目录本身中。

$ ls -l /usr/local/bin
total 804
-rwxr-xr-x 1 root staff   6717 Feb  4  2014 ad-search
-rwxr-xr-x 1 root staff   4811 Feb  2  2011 cpd
-rwxr-xr-x 1 root staff    798 Aug 13  2013 echoel
-rwxr-xr-x 1 root staff    294 Jun 18  2007 ifvi
...
lrwxrwxrwx 1 root staff     45 Feb  6  2014 vmware-gksu -> /usr/local/lib/vmware-tools/bin64/vmware-gksu
lrwxrwxrwx 1 root staff     43 Feb  6  2014 vmware-hgfsclient -> /usr/local/lib/vmware-tools/bin64/appLoader
lrwxrwxrwx 1 root staff     43 Feb  6  2014 vmware-toolbox-cmd -> /usr/local/lib/vmware-tools/bin64/appLoader
-rwxr-xr-x 1 root staff 256307 Feb  6  2014 vmware-uninstall-tools.pl

相关内容