inux软件版本管理命令update-alternatives使用详解
update-alternatives 命令用于处理linux系统中软件版本的切换,在各个linux发行版中均提供了该命令,命令参数略有区别,但大致是一样的。
1、 注册软件
以jdk为例,安装了jdk以后,先要在update-alternatives工具中注册;
序号 | 命令 |
---|---|
1 | # update-alternatives --install /usr/bin/java java /opt/jdk1.8.0_91/bin/java 200 |
2 | # update-alternatives --install /usr/bin/java java /opt/jdk1.8.0_111/bin/java 300 |
其中:
第一个参数–install表示向update-alternatives注册服务名。
第二个参数是注册最终地址,成功后将会把命令在这个固定的目的地址做真实命令的软链,以后管理就是管理这个软链;
( --install link name path priority)
其中link为系统中功能相同软件的公共链接目录,比如/usr/bin/java(需绝对目录);name为命令链接符名称,如java path为你所要使用新命令、新软件的所在目录 priority为优先级,当命令链接已存在时,需高于当前值,因为当alternative为自动模式时,系统默认启用priority高的链接;# 整数 根据版本号设置的优先级(更改的优先级需要大于当前的)
第三个参数:服务名,以后管理时以它为关联依据。
第四个参数,被管理的命令绝对路径。
第五个参数,优先级,数字越大优先级越高。
2、查看已注册列表
序号 | 命令 |
---|---|
1 | # update-alternatives --display java |
2 | java - status is auto. |
3 | link currently points to /opt/install/jdk1.8.0_111/bin/java |
4 | /opt/install/jdk1.8.0_91/bin/java - priority 200 |
5 | /opt/install/jdk1.8.0_111/bin/java - priority 300 |
6 | Current `best’ version is /opt/install/jdk1.8.0_111/bin/java. |
3、 修改命令版本
注意–display开关使用时第一行信息:
序号 | 命令 |
---|---|
1 | java - auto/manual mode |
默认为自动版本,根据优先级,使用优先级高的。
下面手动修改为jdk1.8.0_91:
交互式修改
交互式会提示一所有可用的列表, 选择对应的索引确认。
序号 | Value |
---|---|
1 | # update-alternatives --config java |
2 | There are 2 programs which provide ‘java’. |
3 | Selection Command |
4 | 1 /opt/install/jdk1.8.0_91/bin/java |
5 | *+ 2 /opt/install/jdk1.8.0_111/bin/java |
6 | Enter to keep the current selection[+], or type selection number: 1 |
7 | # java -version |
8 | java version “1.8.0_91” |
9 | Java™ SE Runtime Environment (build 1.8.0_91-b14) |
10 | Java HotSpot™ 64-Bit Server VM (build 25.91-b14, mixed mode) |
11 | # update-alternatives --display java |
12 | java - status is manual. |
13 | link currently points to /opt/install/jdk1.8.0_91/bin/java |
14 | /opt/install/jdk1.8.0_91/bin/java - priority 200 |
15 | /opt/install/jdk1.8.0_111/bin/java - priority 300 |
16 | Current `best’ version is /opt/install/jdk1.8.0_111/bin/java. |
5、管理软件包
开始我们以java为例,作为jre运行环境可以,但如果你作为开发测试环境,你会发现javac找不到。
序号 | 命令 |
---|---|
1 | # javac |
2 | -bash: javac: command not found |
原因是我们只对java命令做了版本管理。
事实上,update-alternatives的原理是软链管理,可以处理目录。那么我们就可以把整个软件包目录都纳入管理。
首先清理掉原来配置的java命令配置。
序号 | 命令 |
---|---|
1 | # update-alternatives --remove java /opt/jdk1.8.0_91/bin/java |
2 | # update-alternatives --remove java /opt/jdk1.8.0_111/bin/java |
ubuntu里可以直接使用下面的全部清除,centos没有:
序号 | 命令 |
---|---|
1 | # update-alternatives --remove-all java |
注册javahome管理
序号 | 命令 |
---|---|
1 | #update-alternatives --install /usr/local/jdk jdk /opt/jdk1.8.0_111 300 |
2 | update-alternatives: using /opt/jdk1.8.0_111 to provide /usr/local/jdk (jdk) in auto mode |
3 | #update-alternatives --install /usr/local/jdk jdk /opt/jdk1.8.0_91 200 |
4 | #update-alternatives --display jdk |
5 | jdk - auto mode |
6 | link best version is /opt/jdk1.8.0_111 |
7 | link currently points to /opt/jdk1.8.0_111 |
8 | link jdk is /usr/local/jdk |
9 | /opt/jdk1.8.0_111 - priority 300 |
10 | /opt/jdk1.8.0_91 - priority 200 |
配置jdk环境变量,指向注册的软链地址。
#echo export JAVA_HOME=/usr/local/jdk >>~/.bash_profile
#echo export PATH= P A T H : PATH: PATH:JAVA_HOME/bin >>~/.bash_profile
#source ~/.bash_profile
管理JAVA_HOME
echo $JAVA_HOME
/usr/local/jdk
java -version
序号 | 命令 |
---|---|
1 | java version “1.8.0_111” |
2 | Java™ SE Runtime Environment (build 1.8.0_111-b14) |
3 | Java HotSpot™ 64-Bit Server VM (build 25.111-b14, mixed mode) |
4 | # javac -version |
5 | javac 1.8.0_111 |
6 | # update-alternatives --config jdk |
7 | There are 2 choices for the alternative jdk (providing /usr/local/jdk). |
8 | Selection Path Priority Status |
9 | * 0 /opt/jdk1.8.0_111 300 auto mode |
10 | 1 /opt/jdk1.8.0_111 300 manual mode |
11 | 2 /opt/jdk1.8.0_91 200 manual mode |
12 | Press to keep the current choice[*], or type selection number: 2 |
13 | update-alternatives: using /opt/jdk1.8.0_91 to provide /usr/local/jdk (jdk) in manual mode |
14 | #echo $JAVA_HOME |
15 | /usr/local/jdk |
16 | #java -version |
17 | java version “1.8.0_91” |
18 | Java™ SE Runtime Environment (build 1.8.0_91-b14) |
19 | Java HotSpot™ 64-Bit Server VM (build 25.91-b14, mixed mode) |
20 | #javac -version |
21 | javac 1.8.0_91 |