使用 update-alternatives 进行版本管理

喜欢 Linux 的一个很重要的原因是简单,不需要用鼠标就可以解决绝大多数问题,手只要放在键盘上敲命令就好了。

在 Linux 上进行版本控制很方便,今天用 Java 举例,讲讲用 update-alternatives 来管理同程序的不同版本。

Java 是个有历史,有故事的“事物”,Linux 上常用 OpenJDK,OpenJDK 就有很多版本了,不同项目要不同的版本,有时还要使用不同的开发商的 JDK,比如现在,我想试一试 ZuluJDK。

#安装

首先下载 ZuluJDK,下载解压后其实可以直接调用的,只要指定 path 就可以调用。但是这样不方便版本管理。找到你其他 JDK 的地址,一般都在 /usr/lib/jvm/,把解压的文件夹放到这个文件夹下.

然后执行

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/zulu17.30.15-ca-jdk17.0.1-linux_aarch64/bin/java 1999

update-alternatives参数解释: --install [link] [name] [path] [priority]

  • link: 指系统命令的链接
  • name: 配置名称
  • path: 可选的命令链接路径
  • priority: 优先级

update-alternatives是以链接的方式进行版本管理的,以上命令告诉update-alternatives,java 在/usr/lib/jvm/zulu17.30.15-ca-jdk17.0.1-linux_aarch64/bin/java 有一个新版本,优先级是 1999。

#修改

执行


sudo update-alternatives --config java

会提示机器上所有的可选版本,输入前边的数字选择想要的版本。

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

  Selection    Path                                                           Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/zulu17.30.15-ca-jdk17.0.1-linux_aarch64/bin/java   1999      auto mode
* 1            /usr/lib/jvm/java-11-openjdk-arm64/bin/java                     1111      manual mode
  2            /usr/lib/jvm/java-17-openjdk-arm64/bin/java                     1711      manual mode
  3            /usr/lib/jvm/zulu17.30.15-ca-jdk17.0.1-linux_aarch64/bin/java   1999      manual mode
#删除
sudo update-alternatives --remove java /usr/lib/jvm/zulu17.30.15-ca-jdk17.0.1-linux_aarch64/bin/java

将删除刚才安装的 JDK 链接,文件依旧在 /usr/lib/jvm/ 下,然后手动删除文件。

#查看所有版本
sudo update-alternatives --list java