LINUX命令:update-alternatives(软件版本管理工具)

前言
  在基于 LINUX 操作系统之上安装所需开发环境组件时,可能会遇到无可避免的场景是:同一个组件,我们需要同时使用到两个或者更多的版本,比如 Java 有 1.6、1.7、1.8 等多版本,又比如 Python 有 2、3 等等,这里以 Python 组件为例,以搭建一套 Android 的 AOSP 编译环境为目标,对使用 update-alternatives 命令 管理多个组件版本 进一步详解。

update-alternatives

  • 操作系统信息

    itaso@ubuntu:~$ lsb_release -a
    No LSB modules are available.
    Distributor ID:	Ubuntu
    Description:	Ubuntu 16.04.7 LTS
    Release:	16.04
    Codename:	xenial
    itaso@ubuntu:~$ 
    
  • 使用查看 update-alternatives --help

    itaso@ubuntu:~$ update-alternatives --help
    Usage: update-alternatives [<option> ...] <command>
    
    Commands:
      --install <link> <name> <path> <priority>
        [--slave <link> <name> <path>] ...
                               add a group of alternatives to the system.
      --remove <name> <path>   remove <path> from the <name> group alternative.
      --remove-all <name>      remove <name> group from the alternatives system.
      --auto <name>            switch the master link <name> to automatic mode.
      --display <name>         display information about the <name> group.
      --query <name>           machine parseable version of --display <name>.
      --list <name>            display all targets of the <name> group.
      --get-selections         list master alternative names and their status.
      --set-selections         read alternative status from standard input.
      --config <name>          show alternatives for the <name> group and ask the
                               user to select which one to use.
      --set <name> <path>      set <path> as alternative for <name>.
      --all                    call --config on all alternatives.
    
    <link> is the symlink pointing to /etc/alternatives/<name>.
      (e.g. /usr/bin/pager)
    <name> is the master name for this link group.
      (e.g. pager)
    <path> is the location of one of the alternative target files.
      (e.g. /usr/bin/less)
    <priority> is an integer; options with higher numbers have higher priority in
      automatic mode.
    
    Options:
      --altdir <directory>     change the alternatives directory.
      --admindir <directory>   change the administrative directory.
      --log <file>             change the log file.
      --force                  allow replacing files with alternative links.
      --skip-auto              skip prompt for alternatives correctly configured
                               in automatic mode (relevant for --config only)
      --verbose                verbose operation, more output.
      --quiet                  quiet operation, minimal output.
      --help                   show this help message.
      --version                show the version.
    itaso@ubuntu:~$ 
    
    itaso@ubuntu:~$ update-alternatives --help
    用法:update-alternatives [<选项> ...] <命令>
    
    命令:
      --install <链接> <名称> <路径> <优先级>
        [--slave <链接> <名称> <路径>] ...
                               在系统中加入一组候选项。
      --remove <名称> <路径><名称> 替换组中去除 <路径> 项。
      --remove-all <名称>      从替换系统中删除 <名称> 替换组。
      --auto <名称><名称> 的主链接切换到自动模式。
      --display <名称>         显示关于 <名称> 替换组的信息。
      --query <名称>           机器可读版的 --display <名称>.
      --list <名称>            列出 <名称> 替换组中所有的可用候选项。
      --get-selections         列出主要候选项名称以及它们的状态。
      --set-selections         从标准输入中读入候选项的状态。
      --config <名称>          列出 <名称> 替换组中的可选项,并就使用其中哪一个,征询用户的意见。
      --set <名称> <路径><路径> 设置为 <名称> 的候选项。
      --all                    对所有可选项一一调用 --config 命令。
    
    <链接> 是指向 /etc/alternatives/<名称> 的符号链接。(如 /usr/bin/pager)
    <名称> 是该链接替换组的主控名。(如 pager)
    <路径> 是候选项目标文件的位置。(如 /usr/bin/less)
    <优先级> 是一个整数,在自动模式下,这个数字越高的选项,其优先级也就越高。
    
    ......
    itaso@ubuntu:~$ 
    
  • 查看替换组的信息 update-alternatives --display python

    itaso@ubuntu:~$ update-alternatives --display python
    python - manual mode
      link best version is /usr/bin/python3.5
      link currently points to /usr/bin/python3.5
      link python is /usr/bin/python
    /usr/bin/python2.7 - priority 2
    /usr/bin/python3.5 - priority 3
    /usr/local/bin/python3.7 - priority 4
    itaso@ubuntu:~$ 
    
    itaso@ubuntu:~$ update-alternatives --display python
    python - 手动模式
      link best version is /usr/bin/python3.5
      链接目前指向 /usr/bin/python2.7
      link python is /usr/bin/python
    /usr/bin/python2.7 - 优先级 2
    /usr/bin/python3.5 - 优先级 3
    /usr/local/bin/python3.7 - 优先级 4
    itaso@ubuntu:~$ 
    

    或者 假装我们知道系统自带的组件都是安装在 /usr/bin 目录下,那么我们找一下它/它们

    itaso@ubuntu:/usr/bin$ cd ~
    itaso@ubuntu:~$ pwd
    /home/itaso
    itaso@ubuntu:~$ find /usr/bin/ -name "python*"
    /usr/bin/python3
    /usr/bin/python2
    /usr/bin/python3m
    /usr/bin/python3.5
    /usr/bin/python3.5m
    /usr/bin/python2.7
    /usr/bin/python
    itaso@ubuntu:~$
    

    通过使用 find 进行条件筛选,发现系统已经带有了 python2python3
    在这里插入图片描述
    备注:python2 -> python2.7 这样的 -> 表示 软连接,这里可以把 python2 看成 Windon系统 中的 快捷方式,所以这句话的意思是 python2 真正执行的目标是 python2.7
    既然系统已经有两个 Python 的版本 ,那么已经足够用来展示多版本切换,就无需在自己手动安装其他版本的 Python 了(当然,并不阻止手动自己安装一个,一般手动安装的路径是 /usr/local/bin

  • 版本管理配置 update-alternatives --install /usr/bin/python python /usr/local/bin/python3.7 4
    为了能比较有说服力的进行版本管理,这边的验证使用了自己手动安装的 Python 3.7 版本 用于区分系统自带的 2.7 和 3.5 版本
    --install 表示向 update-alternatives 注册服务名
    /usr/bin/python 表示注册最终地址,成功后将会把命令在这个固定的目的地址做真实命令的软链,以后管理就是管理这个软链
    python 表示服务名,以后管理时以它为关联依据
    /usr/local/bin/python3.7 表示被管理的命令绝对路径
    4 表示优先级,数字越大优先级越高

  • 版本切换 update-alternatives --config python

    itaso@ubuntu:~$ sudo update-alternatives --config python
    There are 3 choices for the alternative python (providing /usr/bin/python).
    
      Selection    Path                      Priority   Status
    ------------------------------------------------------------
      0            /usr/local/bin/python3.7   4         auto mode
      1            /usr/bin/python2.7         2         manual mode
      2            /usr/bin/python3.5         3         manual mode
    * 3            /usr/local/bin/python3.7   4         manual mode
    
    Press <enter> to keep the current choice[*], or type selection number: 1
    update-alternatives: using /usr/bin/python2.7 to provide /usr/bin/python (python) in manual mode
    itaso@ubuntu:~$ sudo update-alternatives --config python
    There are 3 choices for the alternative python (providing /usr/bin/python).
    
      Selection    Path                      Priority   Status
    ------------------------------------------------------------
      0            /usr/local/bin/python3.7   4         auto mode
    * 1            /usr/bin/python2.7         2         manual mode
      2            /usr/bin/python3.5         3         manual mode
      3            /usr/local/bin/python3.7   4         manual mode
    
    Press <enter> to keep the current choice[*], or type selection number: 1
    itaso@ubuntu:~$ 
    
    

    备注:注意 * 号的位置

    itaso@ubuntu:~$ sudo update-alternatives --config python
    有 3 个候选项可用于替换 python (提供 /usr/bin/python).
    
      选择    	   路径                       优先级    状态
    ------------------------------------------------------------
      0            /usr/local/bin/python3.7   4         自动模式
      1            /usr/bin/python2.7         2         手动模式
      2            /usr/bin/python3.5         3         手动模式
    * 3            /usr/local/bin/python3.7   4         手动模式
    
    要维持当前值[*]请按<回车键>,或者键入选择的编号: 1
    update-alternatives: using /usr/bin/python2.7 to provide /usr/bin/python (python) in manual mode
    itaso@ubuntu:~$ 
    

至此,以上是在自己搭建的虚拟机系统的真实输入日志,有效的提供了从 查看操作系统查看 update-alternatives 帮助手册添加多版本管理配置 以及最后的 版本切换 操作等常用需求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值