alternatives/update-alternatives的用法

alternatives(update-alternatives)命令用于处理 Linux 系统中软件版本的切换,使其多版本共存。alternatives 的管理目录 /etc/alternatives 。

用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# alternatives --help
alternatives(备用)版本 1.7.4 - 版权 (C) 2001 红帽公司
在 GNU 公共许可条款下,本软件可被自由地重发行。
用法:alternatives --install <链接> <名称> <路径> <优先度>
[--initscript <服务>]
[--family <family>]
[--slave <链接> <名称> <路径>]*
alternatives --remove <名称> <路径>
alternatives --auto <名称>
alternatives --config <名称>
alternatives --display <名称>
alternatives --set <名称> <路径>
alternatives --list
common options: --verbose --test --help --usage --version --keep-missing
--altdir <目录> --admindir <目录>
#

举例说明

以CentOS 7下java命令为例说明alternatives的用法

环境说明

最小化安装CentOS 7.6, 安装java 8 和java 11

1
2
sudo yum install java-11-openjdk-devel
sudo yum install java-1.8.0-openjdk-devel

安装完后,yum安装的java路径为/usr/lib/jvm/,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# ll /usr/lib/jvm/
总用量 0
lrwxrwxrwx. 1 root root 26 4月 25 21:29 java -> /etc/alternatives/java_sdk
lrwxrwxrwx. 1 root root 29 4月 25 21:28 java-11 -> /etc/alternatives/java_sdk_11
lrwxrwxrwx. 1 root root 37 4月 25 21:28 java-11-openjdk -> /etc/alternatives/java_sdk_11_openjdk
drwxr-xr-x. 8 root root 97 4月 25 21:28 java-11-openjdk-11.0.14.1.1-1.el7_9.x86_64
lrwxrwxrwx. 1 root root 32 4月 25 21:29 java-1.8.0 -> /etc/alternatives/java_sdk_1.8.0
lrwxrwxrwx. 1 root root 40 4月 25 21:29 java-1.8.0-openjdk -> /etc/alternatives/java_sdk_1.8.0_openjdk
drwxr-xr-x. 7 root root 135 4月 25 21:29 java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64
lrwxrwxrwx. 1 root root 34 4月 25 21:29 java-openjdk -> /etc/alternatives/java_sdk_openjdk
lrwxrwxrwx. 1 root root 21 4月 25 21:29 jre -> /etc/alternatives/jre
lrwxrwxrwx. 1 root root 24 4月 25 21:28 jre-11 -> /etc/alternatives/jre_11
lrwxrwxrwx. 1 root root 32 4月 25 21:28 jre-11-openjdk -> /etc/alternatives/jre_11_openjdk
lrwxrwxrwx. 1 root root 42 4月 25 21:28 jre-11-openjdk-11.0.14.1.1-1.el7_9.x86_64 -> java-11-openjdk-11.0.14.1.1-1.el7_9.x86_64
lrwxrwxrwx. 1 root root 27 4月 25 21:29 jre-1.8.0 -> /etc/alternatives/jre_1.8.0
lrwxrwxrwx. 1 root root 35 4月 25 21:29 jre-1.8.0-openjdk -> /etc/alternatives/jre_1.8.0_openjdk
lrwxrwxrwx. 1 root root 51 4月 25 21:29 jre-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64 -> java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre
lrwxrwxrwx. 1 root root 29 4月 25 21:29 jre-openjdk -> /etc/alternatives/jre_openjdk
#

其中java 8 和java 11的安装目录是

  • /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre/bin/java
  • /usr/lib/jvm/java-11-openjdk-11.0.14.1.1-1.el7_9.x86_64/bin/java

系统java目前链接的是java 8

1
2
3
4
5
6
7
# which java
/usr/bin/java
# ll /usr/bin/java
lrwxrwxrwx. 1 root root 22 4月 25 21:29 /usr/bin/java -> /etc/alternatives/java
# ll /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 4月 25 21:29 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre/bin/java
#

用法说明

使用alternatives --list列出支持的可选组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# alternatives --list
libnssckbi.so.x86_64 auto /usr/lib64/pkcs11/p11-kit-trust.so
ld auto /usr/bin/ld.bfd
mta auto /usr/sbin/sendmail.postfix
java auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre/bin/java
jre_openjdk auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre
jre_11 auto /usr/lib/jvm/java-11-openjdk-11.0.14.1.1-1.el7_9.x86_64
jre_11_openjdk auto /usr/lib/jvm/jre-11-openjdk-11.0.14.1.1-1.el7_9.x86_64
javac auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/bin/javac
java_sdk_openjdk auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64
java_sdk_11 auto /usr/lib/jvm/java-11-openjdk-11.0.14.1.1-1.el7_9.x86_64
java_sdk_11_openjdk auto /usr/lib/jvm/java-11-openjdk-11.0.14.1.1-1.el7_9.x86_64
jre_1.8.0 auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre
jre_1.8.0_openjdk auto /usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64
java_sdk_1.8.0 auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64
java_sdk_1.8.0_openjdk auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64
#

使用alternatives --config java设置java候选项。

1
2
3
4
5
6
7
8
9
10
alternatives --config java
共有 2 个提供“java”的程序。
选项 命令
-----------------------------------------------
1 java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.14.1.1-1.el7_9.x86_64/bin/java)
*+ 2 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre/bin/java)
按 Enter 保留当前选项[+],或者键入选项编号:

选择“1”,来设置默认的java命令为java 11。

选择过后,系统默认java就被设置为java 11了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# which java
/usr/bin/java
#
# ll /usr/bin/java
lrwxrwxrwx. 1 root root 22 4月 25 21:39 /usr/bin/java -> /etc/alternatives/java
#
# ll /etc/alternatives/java
lrwxrwxrwx. 1 root root 64 4月 25 21:39 /etc/alternatives/java -> /usr/lib/jvm/java-11-openjdk-11.0.14.1.1-1.el7_9.x86_64/bin/java
#
# java -version
openjdk version "11.0.14.1" 2022-02-08 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.14.1+1-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.14.1+1-LTS, mixed mode, sharing)
#

Reference

留言