Zhonghui

每个不曾起舞的日子,都是对生命的辜负

User Tools

Site Tools


软件:linux:可替换命令

可替换命令

update-alternatives

module管理比较类似?


应用场景

考虑一下,一个程序有多个版本,我们应该如何管理呢?

  1. 方案0:一台机器上只安装/使用某一个特定的版本(比如/usr/lib/gcc)
  2. 方案1:使用命名或路径体现不同版本(比如/usr/bin/gcc-11和/usr/bin/gcc-13)
  3. 方案2:使用不同命名后创建一个入口链接,需要手动管理,比如:
    1. /usr/bin/gcc-11
    2. /usr/bin/gcc-13
    3. /usr/bin/gcc → /usr/bin/gcc-13
  4. 方案4:使用update-alternatives
    1. /usr/bin/gcc → /etc/alternatives/gcc → /usr/bin/gcc-11
    2. 我们可以使用update-alternatives命令管理/etc/alternatives/gcc指向哪里

ps: 可以管理不同版本的多个同名程序(比如gcc),也可以管理多个路径(比如cuda)

使用方式

# /usr/bin/gcc:主链接(所有人用的入口)
# gcc:分组名字(自己随便定,一般就用程序名。一个分组就是对应n个不同版本的同名程序/文件夹)
# /usr/bin/gcc-11:某个版本的实际路径
# 20:优先级(数字越大优先级越高)
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 10

# 切换当前版本(gcc分组)
sudo update-alternatives --config gcc

# 查看所有的分组
sudo update-alternatives --get-selections

安装

思考一下,从上面的情景的各种方案开始,应该如何改为使用update-alternatives管理版本呢?

  1. 方案0:可能需要把二进制程序改一下名字,然后使用update-alternatives创建链接(gcc改为gcc-<version>,然后gcc → gcc-<version>)
  2. 方案1:直接创建即可,完美适配
  3. 方案2:使用update-alternatives创建链接会把原本我们手动创建的链接给覆盖掉,但是可以思考一下,这样是没问题的,因为本来就用不到原本的链接了
/var/www/DokuWikiStick/dokuwiki/data/pages/软件/linux/可替换命令.txt · Last modified: 2025/07/20 13:05 by zhonghui