Debian 中的 update-alternatives 命令是系统上多版本软件管理的利器。它允许您轻松地在同一程序的不同版本之间切换。假设您在单个系统上安装了多个 Java 版本或 Python 版本,在 update-alternatives 的帮助下,您可以将程序的任何版本设置为系统的默认版本。
什么是 update-alternatives?
update-alternatives 是一个命令行工具,可帮助您设置、维护和管理不同版本软件的符号链接。这些符号链接指向系统上的实际文件,使得在不同版本之间切换变得很容易。
为什么用 update-alternatives?
当您的系统上安装了一个程序的多个版本,并且希望在它们之间轻松切换时,使用更新替代方案是有益的。例如,如果您安装了两个版本的 Python,您可以使用 update-alternatives 来切换系统使用的默认版本。
update-alternatives 是如何工作的?
当您在 Debian 上安装软件时,它通常会在 /usr/bin 目录。这些链接指向实际程序文件。
请参阅下图, php 8.3 被设置成 PHP 的默认版本,链接到 /usr/bin/php 二进制文件。
让我们看一些实际的例子来理解如何使用 update-alternatives 命令。
Example 1: Managing Multiple PHP Versions
我已经在系统上安装了 PHP 7.4, PHP 8.1 和 PHP 8.3。默认情况下,安装过程为每个已安装的版本创建 update-alternatives 引用,您可以使用以下命令在它们之间切换。
sudo update-alternatives --config php
执行命令后,您应该看到以下输出。
There are 3 choices for the alternative php (providing /usr/bin/php).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/php8.3 83 auto mode
1 /usr/bin/php7.4 74 manual mode
2 /usr/bin/php8.1 81 manual mode
3 /usr/bin/php8.3 83 manual mode
Press <enter> to keep the current choice[*], or type selection number:
输入选择号并单击 Enter,以使其成为系统的默认 PHP 版本。
Example 2: Managing Java Versions
在前面的示例中,已经创建了链接,但是如果没有创建链接呢?我们需要为应用程序创建一组版本链接。假设您安装了多个 Java 版本,我们首先将不同的 java 版本添加到组中,然后选择默认版本。
让我们创建一个链接 Java 8,并命名组为 Java
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-8-openjdk-amd64/bin/java 1
执行完命令后,您应该看到以下输出
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/java to provide /usr/bin/java (java) in auto mode
接下来,在同一组中为 Java 11 创建一个链接
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk-amd64/bin/java 2
执行完命令后,您应该看到以下输出
update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/java to provide /usr/bin/java (java) in auto mode
使用以下命令,在版本之间切换
sudo update-alternatives --config java
执行完命令后,您应该看到以下输出
There are 2 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 2 auto mode
1 /usr/lib/jvm/java-8-openjdk-amd64/bin/java 1 manual mode
2 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 2 manual mode
Press <enter> to keep the current choice[*], or type selection number:
选择任意选择号并按 Enter 使其成为系统上的默认 Java 版本。