在Linux上用update-alternatives配置多版本切换

在Linux环境中,update-alternatives工具允许开发者在系统上同时安装和切换不同版本的可执行文件或动态库,如GCC和G++。它通过软链接创建不带版本号的通用名称,并根据优先级或手动选择切换版本。该工具有install、list、display、query、config和auto等命令,方便管理和配置多个版本的程序。
摘要由CSDN通过智能技术生成

在Linux环境上做开发,经常需要用到不同版本的可执行文件或者动态库。
使用update-alternatives工具可以让多个版本的二进制程序或者动态库同时共存,根据需要进行切换。

基本原理

  1. 二进制程序名称带版本号,例如:gcc-7, gcc-8。
  2. 通过软连接,创建不带版本号的名称,例如:/usr/bin/gcc。
    用软连接指向实际使用的程序,例如:/usr/bin/gcc -> /usr/bin/gcc-7
  3. 默认使用不带版本号的名称使用命令,例如:
$gcc -v
gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) 

$gcc-7 -v
gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) 
  1. update-alternatives命令通过修改连接指向不同的实际程序或者动态库,实现多版本共存,动态切换的效果。

命令格式

update-alternatives [option...] command

install命令

update-alternatives --install link name path priority

link 不带版本号的链接名,例如:/usr/bin/gcc。
name update-alternatives数据库中的名称,创建后可以通过这个名称来管理软件。用户自定义。
path 实际可执行程序的path,例如:/usr/bin/gcc-7。
priority 优先级。update-alternatives有2中模式:手动(manual)和自动(auto),前者是用户明确指定使用哪个版本;auto模式,会使用高优先级(数值大)的程序版本。

install命令示例:
分别创建gcc和g++的链接,并设置gcc-8为高优先级。

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 5

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 5
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 9

list命令

查看一个软件安装了哪些版本

$ update-alternatives --list gcc
/usr/bin/gcc-7
/usr/bin/gcc-8

display命令

查看链接对应的详情信息

$ update-alternatives --display gcc
gcc - auto mode
  link best version is /usr/bin/gcc-8
  link currently points to /usr/bin/gcc-8
  link gcc is /usr/bin/gcc
/usr/bin/gcc-7 - priority 5
/usr/bin/gcc-8 - priority 9

query命令

查看链接对应的详情信息。
和display命令的差别,对信息进行了格式化处理。

$ update-alternatives --query gcc
Name: gcc
Link: /usr/bin/gcc
Status: auto
Best: /usr/bin/gcc-8
Value: /usr/bin/gcc-8

Alternative: /usr/bin/gcc-7
Priority: 5

Alternative: /usr/bin/gcc-8
Priority: 9

all命令

这个名字有点奇怪,不是动作。但帮助文档man page(man命令使用参考)中确实是做为命令进行说明的。
功能是逐条显示并配置各个链接。

update-alternatives --all

config命令切换版本

目前gcc->gcc-7,使用config命令,让gcc->gcc-8。
config命令显示链接所对应程序的各个版本的一个列表,通过数字进行选择。

$ sudo update-alternatives --config gcc
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path            Priority   Status
------------------------------------------------------------
  0            /usr/bin/gcc-8   9         auto mode
* 1            /usr/bin/gcc-7   5         manual mode
  2            /usr/bin/gcc-8   9         manual mode

Press <enter> to keep the current choice[*], or type selection number: 2
update-alternatives: using /usr/bin/gcc-8 to provide /usr/bin/gcc (gcc) in manual mode
$ gcc -v
gcc version 8.4.0 (Ubuntu 8.4.0-1ubuntu1~18.04) 

下面再切换会gcc-7,为了后面演示auto命令效果。

$ sudo update-alternatives --config gcc
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path            Priority   Status
------------------------------------------------------------
  0            /usr/bin/gcc-8   9         auto mode
  1            /usr/bin/gcc-7   5         manual mode
* 2            /usr/bin/gcc-8   9         manual mode

Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/bin/gcc-7 to provide /usr/bin/gcc (gcc) in manual mode


$ gcc -v
gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) 

auto命令

上面的命令结果:gcc->gcc-7。
创建链接时,gcc-7优先级是5,gcc-8优先级是9(更高)。
使用auto模式,应该会自动切换为gcc-8。

$ sudo update-alternatives --auto gcc
update-alternatives: using /usr/bin/gcc-8 to provide /usr/bin/gcc (gcc) in auto mode

$ gcc -v
gcc version 8.4.0 (Ubuntu 8.4.0-1ubuntu1~18.04) 

remove命令

删除一个链接

$ update-alternatives --list gcc
/usr/bin/gcc-7
/usr/bin/gcc-8

$ sudo update-alternatives --remove gcc /usr/bin/gcc-7

$ update-alternatives --list gcc
/usr/bin/gcc-8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抓饼先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值