可替换命令
应用场景
考虑一下,一个程序有多个版本,我们应该如何管理呢?
方案0:一台机器上只安装/使用某一个特定的版本(比如/usr/lib/gcc)
方案1:使用命名或路径体现不同版本(比如/usr/bin/gcc-11和/usr/bin/gcc-13)
方案2:使用不同命名后创建一个入口链接,需要手动管理,比如:
/usr/bin/gcc-11
/usr/bin/gcc-13
/usr/bin/gcc → /usr/bin/gcc-13
方案4:使用update-alternatives
/usr/bin/gcc → /etc/alternatives/gcc → /usr/bin/gcc-11
我们可以使用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管理版本呢?
方案0:可能需要把二进制程序改一下名字,然后使用update-alternatives创建链接(gcc改为gcc-<version>,然后gcc → gcc-<version>)
方案1:直接创建即可,完美适配
方案2:使用update-alternatives创建链接会把原本我们手动创建的链接给覆盖掉,但是可以思考一下,这样是没问题的,因为本来就用不到原本的链接了