Linux下alternatives管理多版本软件
浏览量:1266
无意之中在系统发现了这个 alternatives 命令,然后百度了下,我靠,这个很实用啊,平时服务环境都需要依赖jdk,那么管理jdk版本就成了一个一个问题,然后打开服务器,先下载了三个不同版本的jdk:
yum install java-1.8.0-openjdk-devel.x86_64 -y yum install java-1.7.0-openjdk-devel.x86_64 -y yum install java-1.6.0-openjdk-devel.x86_64 -y
我这连续下载了三个不同版本的jdk,系统到底默认会用哪个呢?看一下
[root@k8s-master local]# java -version openjdk version "1.8.0_151" OpenJDK Runtime Environment (build 1.8.0_151-b12) OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)
我能理解这是我刚才下载的第一个为默认了吗?是的,没错。那么,我想换到1.6的jdk怎么办?接下来我们主角alternatives就出来了?详细命令我们后面再讲,我们先试下效果:
[root@k8s-master local]# alternatives --config java There are 4 programs which provide 'java'. Selection Command ----------------------------------------------- *+ 1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64/jre/bin/java) 2 java-1.7.0-openjdk.x86_64 (/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.161-2.6.12.0.el7_4.x86_64/jre/bin/java) 3 /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java Enter to keep the current selection[+], or type selection number: 3 [root@k8s-master local]# java -version java version "1.6.0_41" OpenJDK Runtime Environment (IcedTea6 1.13.13) (rhel-1.13.13.1.el7_3-x86_64) OpenJDK 64-Bit Server VM (build 23.41-b41, mixed mode)
哎哟,不错,这个是不是挺厉害的,别着急,后面还有更好的。我们上面只是yum了三个版本,如果我想自己指定版本呢?这可就难倒我了,不怕!试一下,先上传个jdk到服务器试试。
tar xf jdk-8u60-linux-x64.tar.gz -C /usr/local/ alternatives --install /usr/bin/java java /usr/local/jdk1.8.0_60/bin/java 4
这样就可以了?
[root@k8s-master local]# alternatives --config java There are 4 programs which provide 'java'. Selection Command ----------------------------------------------- *+ 1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64/jre/bin/java) 2 java-1.7.0-openjdk.x86_64 (/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.161-2.6.12.0.el7_4.x86_64/jre/bin/java) 3 /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java 4 /usr/local/jdk1.8.0_60/bin/java Enter to keep the current selection[+], or type selection number: 4 [root@k8s-master local]# java -version java version "1.8.0_60" Java(TM) SE Runtime Environment (build 1.8.0_60-b27) Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
果然切换过来了,怎么样?小伙伴,如果有需要不妨试试这个命令工具。
我们看看 /usr/bin/java有什么变化没有
[root@k8s-master local]# ll /usr/bin/java lrwxrwxrwx. 1 root root 22 Dec 20 14:09 /usr/bin/java -> /etc/alternatives/java [root@k8s-master local]# ll /etc/alternatives/java lrwxrwxrwx. 1 root root 46 Dec 20 14:09 /etc/alternatives/java -> /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
可以看到 /usr/bin/java 的连接的地方没有变,改变了的/etc/alternatives/java 的连接,这其实是一个策略模式的实现:

/usr/bin/java 的“调用”没有变,还是连接到 /etc/alternatives/java,/etc/alternatives/java的连接却被修改了,这个由 alternatives 管理。
通过linux的连接也可以简单地实现这种“接口”和“具体实现”的分离,但是 alternatives 提供一个配置清单,简单选一下就OK了,这为我们提供了很大的便利。
alternatives 命令详解
[root@k8s-master local]# alternatives -h alternatives version 1.7.2 - Copyright (C) 2001 Red Hat, Inc. This may be freely redistributed under the terms of the GNU Public License. usage: alternatives --install <link> <name> <path> <priority> [--initscript <service>] [--family <family>] [--slave <link> <name> <path>]* alternatives --remove <name> <path> alternatives --auto <name> alternatives --config <name> alternatives --display <name> alternatives --set <name> <path> alternatives --list common options: --verbose --test --help --usage --version --keep-missing --altdir <directory> --admindir <directory>
注释:
用法:alternatives --install <链接> <名称> <路径> <优先度>
[--initscript <服务>]
[--slave <链接> <名称> <路径>]*
alternatives --remove <名称> <路径>
alternatives --auto <名称>
alternatives --config <名称>
alternatives --display <名称>
alternatives --set <名称> <路径>
alternatives --list

神回复
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。