发布时间:2025-12-09 11:44:41 浏览次数:1
一般来说我们一个可执行程序,可能在多个路径下,比如在opt路径下,或者在自己的home下。
当要达到在系统的任意路径下敲击该命令,都可执行的话,一般要将该可执行命令的路径加入到环境变量PATH中。
加入PATH可以是直接到/etc/profile.d/中定义一个sh文件,在其中将该可执行程序的路径加入其中,比如
JAVA_HOME=/usr/java/jdk1.8.0_221-amd64export JAVA_HOME当然还可以将可执行文件,以软连接的形式,放入到一般系统会找寻的目录中。比如一般linux系统的PATH,默认都有这几个路径
比如我们装一个java,如果想在任意路径敲击java后,都启动java(不考虑JAVA_HOME这个环境变量),我们可以在/usr/bin下创建一个软连接文件java , 将其链接到我们java的具体路径,比如
/usr/bin/java -> /usr/java/jdk1.8.0_221-amd64/jre/bin/java这样做的好处是,其它程序需要使用java时,它直接去/usr/bin中找就好,无论java实际路径怎么存放,使用java的程序,不需要修改。
上述只介绍了一个可执行程序的全局安装方式。但如果一个程序,有好几个版本的实现。系统怎么判断该使用哪一个版本?
比如我们即安装了java8,又安装了java10。 这就是alternatives机制要解决的。
alternatives机制,能够自动选择高版本程序作为默认程序,或者使用管理员指定的版本作为默认的程序。
一个alternatives机制,涉及如下术语
alternatives管理的命令为update-alternatives
当安装的alternatives有多个版本时。操作系统默认选择哪个版本,有两种模式
sudo update-alternatives --config command手动指定一个版本为默认版本,即便后来又装了更新的版本,默认版本都不会变。管理手动指定版本后,该alternative即进入手动模式。如果要回滚到自动模式,使用命令
上述程序的两个版本的实际路径是
跟上述安装类似,只是附加指定了主程序依赖的相关配置作为slave link
默认情况下,上述步骤不需要我们手动来做。一般在安装一个linux的安装包时,会自动完成上述步骤。并且安装好的alternatives都是auto模式,即自动决定程序版本
sudo update-alternatives --display commandname列出多个版本,以交互的方式让用户选择指定版本
sudo update-alternatives --config commandname直接将默认程序设置到某个具体版本的路径上
sudo update-alternatives --set commandname pathsudo update-alternatives --auto commandnamesudo update-alternatives --remove commandnamepath举例
sudo update-alternatives --remove foo /usr/local/bin/foo-2sudo update-alternatives --remove-all commandnamehttps://linux.die.net/man/8/alternatives
https://documentation.suse.com/sles/15-SP1/html/SLES-all/cha-update-alternative.html