• /etc/alternatives


    如何安装一个可执行程序

    一般来说我们一个可执行程序,可能在多个路径下,比如在opt路径下,或者在自己的home下。

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

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

    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的具体路径,比如

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

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

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

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

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

    alternatives机制,能够自动选择高版本程序作为默认程序,或者使用管理员指定的版本作为默认的程序。

    一个alternatives机制,涉及如下术语

    • 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 commandname path
    

    举例

    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

  • 相关阅读:
    记一次Jquery学习引发的学习思考
    时间管理记录11.26
    介绍几个可视化数据结构和算法的网站
    不靠电脑打字真的能弄懂代码吗?
    记学习品优购网站案例中遇到的问题
    仿小米logo案例
    HTML学习案例-仿慕课网网页制作(二)
    一个“MacBook”新手的Python“笨办法”自学之旅 #第十章预告:逻辑关系、布尔表达式、if/elif/else语句、循环for语句、while语句、列表及其相关
    一个“MacBook”新手的Python“笨办法”自学之旅 #第八章:参数、解包和变量、提示和传递、读取文件、读写文件
    一个“MacBook”新手的Python“笨办法”自学之旅 #第六章:常用的简易Python命令、符号、代码、格式化字符串
  • 原文地址:https://www.cnblogs.com/niceshot/p/13046601.html
Copyright © 2020-2023  润新知