/etc/alternatives

如何安装一个可执行程序

通常来讲咱们一个可执行程序,可能在多个路径下,好比在opt路径下,或者在本身的home下。html

当要达到在系统的任意路径下敲击该命令,均可执行的话,通常要将该可执行命令的路径加入到环境变量PATH中。java

加入PATH能够是直接到/etc/profile.d/中定义一个sh文件,在其中将该可执行程序的路径加入其中,好比linux

JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
export JAVA_HOME

固然还能够将可执行文件,以软链接的形式,放入到通常系统会找寻的目录中。好比通常linux系统的PATH,默认都有这几个路径操作系统

  • /bin 系统启动加载阶段须要使用的命令,好比cat,ls
  • /sbin 系统启动加载阶段须要使用,而且须要root权限才能执行的命令
  • /usr/bin 整个系统范围内都能使用的命令
  • /usr/sbin 整个系统范围内都能使用的命令,但须要管理员权限

好比咱们装一个java,若是想在任意路径敲击java后,都启动java(不考虑JAVA_HOME这个环境变量),咱们能够在/usr/bin下建立一个软链接文件java , 将其连接到咱们java的具体路径,好比.net

/usr/bin/java -> /usr/java/jdk1.8.0_221-amd64/jre/bin/java

这样作的好处是,其它程序须要使用java时,它直接去/usr/bin中找就好,不管java实际路径怎么存放,使用java的程序,不须要修改。code

当一个可执行程序有多个版本怎么办 , alternatives

上述只介绍了一个可执行程序的全局安装方式。但若是一个程序,有好几个版本的实现。系统怎么判断该使用哪个版本?htm

好比咱们即安装了java8,又安装了java10。 这就是alternatives机制要解决的。blog

alternatives机制,可以自动选择高版本程序做为默认程序,或者使用管理员指定的版本做为默认的程序。rem

一个alternatives机制,涉及以下术语get

  • Generic name 不考虑版本,这个程序对应的名字,好比不考虑java的版本,咱们通常统一使用java做为启动命令,其generic name 为:/usr/bin/java
  • Alternatives directory Alternatives 机制,默认使用软链接的方式,去连接实际的程序版本。该路径下展现了全部的软链接
  • Link group 而通常一个可执行程序,除了本身以外,还须要依赖一些其余的库文件,或与之对应的配置文件。这些须要一并链接。因此跟这个程序相关的一组链接叫作link group
  • Master link 链接组中程序主体的连接
  • Slave link 连接中程序依赖相关的文件连接

alternatives管理的命令为update-alternatives

版本选择的两种模式

当安装的alternatives有多个版本时。操做系统默认选择哪一个版本,有两种模式

  • 自动模式,基于权重自动判断,高权重为自动启用版本。而且新安装的版本因为权重高,自动成为默认版本
  • 手动模式,系统管理员经过命令sudo update-alternatives --config command手动指定一个版本为默认版本,即使后来又装了更新的版本,默认版本都不会变。

管理手动指定版本后,该alternative即进入手动模式。若是要回滚到自动模式,使用命令

手动安装一个alternatives

安装一个alternatives

  1. 表示在/usr/local/bin/下建立的genericname。固然,用户侧程序,通常建立在/usr/bin下,而不是截图中的/usr/local/bin中。generic name通常没有版本
  2. 整个Link group的名称,通常跟generic name一致
  3. 连接的执行程序实际版本的路径
  4. 当前安装版本对应的权重。alternatives 若是是自动模式的话,会自动选权重高的版本作为默认程序

上述程序的两个版本的实际路径是

  • /usr/local/bin/foo-2
  • /usr/local/bin/foo-3

带slave links的安装

跟上述安装相似,只是附加指定了主程序依赖的相关配置做为slave link

总结

默认状况下,上述步骤不须要咱们手动来作。通常在安装一个linux的安装包时,会自动完成上述步骤。而且安装好的alternatives都是auto模式,即自动决定程序版本

alternatives的一些命令

如何查看一个程序的alterntives 总体状况

sudo update-alternatives --display commandname

手动指定一个版本

列出多个版本,以交互的方式让用户选择指定版本

sudo update-alternatives --config commandname

直接将默认程序设置到某个具体版本的路径上

sudo update-alternatives --set commandname path

如何回退到自动模式

sudo update-alternatives  --auto commandname

从alternatives中移除指定版本

sudo update-alternatives  --remove commandnamepath

举例

sudo update-alternatives --remove foo /usr/local/bin/foo-2

移除指定程序的全部alternatives

sudo update-alternatives  --remove-all commandname

参考连接

https://linux.die.net/man/8/alternatives
https://documentation.suse.com/sles/15-SP1/html/SLES-all/cha-update-alternative.html

本站公众号
   欢迎关注本站公众号,获取更多信息