在 Linux 系统中,update-alternatives 是一种用于管理命令软链接的工具,适合管理多个版本共存的程序,例如不同版本的 PHP、Java、GCC、Python 等。通过它可以灵活控制哪个版本被调用、切换默认版本、统一管理系统路径下的可执行程序。


✅ 基本原理

Linux 中大多数命令其实都是 /usr/bin/xxx 的可执行文件,这些文件很多是软链接:

ls -l /usr/bin/php
# 可能指向 -> /etc/alternatives/php
# 再指向 -> /usr/bin/php8.2

update-alternatives 就是负责管理 /etc/alternatives/ 中的这些链接,并允许你注册多个候选路径、设置优先级、手动切换或自动切换。


✅ 常用参数说明

参数 说明
--install 添加一个新候选版本
--remove 移除某个候选路径
--config 手动选择当前使用哪个版本
--set 直接设置当前使用路径
--display / --query 查看当前配置状态
--auto 恢复为优先级自动选择模式

▶ –install 参数详解

update-alternatives --install 是添加“候选版本”的关键命令,它的完整语法格式如下:

sudo update-alternatives --install <链接路径> <名字> <实际可执行路径> <优先级>
参数位置 含义 示例值 说明
链接路径 创建的统一入口点 /usr/bin/php 这是用户最终执行命令时调用的路径
名字 系统识别用的名称 php 是“组名”,管理同类版本的别名
实际路径 程序的真实可执行文件路径 /usr/bin/php7.4 要加入的某个版本路径
优先级 一个整数 74 数值越大,优先级越高,自动模式下会选择它

✅ 实例说明:

你系统中已经安装了 PHP 7.4 和 PHP 8.2,可以这样添加:

sudo update-alternatives --install /usr/bin/php php /usr/bin/php7.4 74
sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.2 82

结果:

  • 会建立 /etc/alternatives/php/usr/bin/php8.2
  • 同时 /usr/bin/php 会是最终入口,间接指向 8.2

📎 注意事项:

  • 这个命令并不会删除已存在的链接,只是“添加一个候选项”;
  • 优先级影响“自动模式”(--auto)下的选择;
  • 名字 一定要保持一致,比如 php,用来归组管理;
  • 不支持自动创建 实际路径,它必须已经存在。

✅ 使用场景举例

▶ 管理多个 PHP 版本(7.4 和 8.2)

添加候选版本

sudo update-alternatives --install /usr/bin/php php /usr/bin/php7.4 74
sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.2 82

手动切换版本

sudo update-alternatives --config php

终端提示选择:

There are 2 choices for the alternative php (providing /usr/bin/php):

  Selection    Path              Priority   Status
------------------------------------------------------------
* 0            /usr/bin/php8.2   82        auto mode
  1            /usr/bin/php7.4   74        manual mode

设置为自动根据优先级

sudo update-alternatives --auto php

▶ 查看候选状态

sudo update-alternatives --display php

输出信息包含当前使用版本、优先级、是否手动模式等。


▶ 删除某个版本

sudo update-alternatives --remove php /usr/bin/php7.4

🧠 适合管理的典型程序

  • php
  • java
  • gcc / g++
  • editor(vim / nano / emacs)
  • awk / sh / python(⚠ Python 不推荐用此方式)

⚠ 注意事项

  • 使用 --install 的路径必须真实存在;
  • 如果使用 update-alternatives 设置 python,可能会影响系统组件,慎用;
  • 不会安装程序本身,只是管理已存在的路径和链接;
  • 修改的是系统范围的命令,需 sudo 权限。

✅ 总结

update-alternatives 是 Linux 官方提供的软链接选择器,适用于系统中存在多个程序版本时的路径控制问题。它不负责安装或卸载软件,而是通过注册路径和配置优先级,实现快速切换和统一入口的目的。

对于开发者或运维人员,合理利用该命令可以让系统更可控、更灵活。