linux软件版本管理命令update-alternatives使用详解linux软件版本管理命令update-alternatives使用详解update-alternatives命令用于处理linux系统中软件版本的切换,在各个linux发行版中均提供了该命令,命令参数略有区别,但大致是一样的。1、注册软件以jdk为例,安装了jdk以后,先要在update-alternatives工具中注册;? 1 2 …
大家好,欢迎来到IT知识分享网。
linux软件版本管理命令update-alternatives使用详解
update-alternatives 命令用于处理linux系统中软件版本的切换,在各个linux发行版中均提供了该命令,命令参数略有区别,但大致是一样的。
1、 注册软件
以jdk为例,安装了jdk以后,先要在update-alternatives工具中注册;
?
1
2
|
# update-alternatives --install /usr/bin/java java /opt/jdk1.8.0_91/bin/java 200
# 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
2
3
4
5
6
|
# update-alternatives --display java
java - status is auto.
link currently points to /opt/install/jdk1 .8.0_111 /bin/java
/opt/install/jdk1 .8.0_91 /bin/java - priority 200
/opt/install/jdk1 .8.0_111 /bin/java - priority 300
Current `best' version is /opt/install/jdk1 .8.0_111 /bin/java .
|
3、 修改命令版本
注意–display开关使用时第一行信息:
?
1
|
java - auto /manual mode
|
默认为自动版本,根据优先级,使用优先级高的。
下面手动修改为jdk1.8.0_91:
交互式修改
交互式会提示一所有可用的列表, 选择对应的索引确认。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# update-alternatives --config java
There are 2 programs which provide 'java' .
Selection Command
-----------------------------------------------
1 /opt/install/jdk1 .8.0_91 /bin/java
*+ 2 /opt/install/jdk1 .8.0_111 /bin/java
Enter to keep the current selection[+], or type selection number: 1
# java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
# update-alternatives --display java
java - status is manual.
link currently points to /opt/install/jdk1 .8.0_91 /bin/java
/opt/install/jdk1 .8.0_91 /bin/java - priority 200
/opt/install/jdk1 .8.0_111 /bin/java - priority 300
Current `best' version is /opt/install/jdk1 .8.0_111 /bin/java .
|
看到当前状态变成了manual。
修改为自动:
?
1
2
3
4
5
6
7
8
9
10
11
12
|
# update-alternatives --auto java
# java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8 .0_111-b14)
Java HotSpot(TM) 64 -Bit Server VM (build 25.111 -b14, mixed mode)
# update-alternatives --display java
java - status is auto.
link currently points to /opt/install/jdk1. 8 .0_111/bin/java
/opt/install/jdk1. 8 .0_91/bin/java - priority 200
/opt/install/jdk1. 8 .0_111/bin/java - priority 300
Current `best' version is /opt/install/jdk1. 8 .0_111/bin/java.
|
又改为按照优先级高的了。
立即修改
除了交互式修改,也可以使用一条命令直接修改,修改后立即生效。
?
1
|
# update-alternatives --set java /opt/jdk1.8.0_91/bin/java
|
该情形适用于你对路径很熟悉,或者你已经进入了该路径:
?
1
2
|
# cd /opt/jdk1.8.0_91/bin/
# update-alternatives --set java $PWD/java
|
4、 update-alternatives是偏门命令吗?
可能你觉得这个命令很偏门,用处不大,但实际上在linux中早已被大量的使用。我们来挖掘一下,先看看我们注册的java做了什么:
?
1
2
3
4
5
6
7
8
9
10
11
12
|
# ls -l /usr/bin/java
lrwxrwxrwx 1 root root 22 Jan 16 01:45 /usr/bin/java -> /etc/alternatives/java *
# ls -l /etc/alternatives/
total 12
drwxr-xr-x 2 root root 4096 Jan 16 01:57 ./
drwxr-xr-x 95 root root 4096 Jan 16 01:41 ../
lrwxrwxrwx 1 root root 13 Dec 2 12:40 awk -> /usr/bin/gawk *
lrwxrwxrwx 1 root root 29 Dec 2 12:40 awk .1.gz -> /usr/share/man/man1/gawk .1.gz
lrwxrwxrwx 1 root root 38 Dec 2 12:38 builtins.7.gz -> /usr/share/man/man7/bash-builtins .7.gz
lrwxrwxrwx 1 root root 12 Jan 12 02:04 c++ -> /usr/bin/g ++*
...
|
首先可以看到我们的/usr/bin/java是一个软链, 它连接到/etc/alternatives目录中的另一个软链。
而/etc/alternatives中有很多软链,这里只列出了一部分。看到awk了吧?来看看它有哪些版本:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# update-alternatives --display awk
awk - auto mode
link best version is /usr/bin/gawk
link currently points to /usr/bin/gawk
link awk is /usr/bin/awk
slave awk .1.gz is /usr/share/man/man1/awk .1.gz
slave nawk is /usr/bin/nawk
slave nawk.1.gz is /usr/share/man/man1/nawk .1.gz
/usr/bin/gawk - priority 10
slave awk .1.gz: /usr/share/man/man1/gawk .1.gz
slave nawk: /usr/bin/gawk
slave nawk.1.gz: /usr/share/man/man1/gawk .1.gz
/usr/bin/mawk - priority 5
slave awk .1.gz: /usr/share/man/man1/mawk .1.gz
slave nawk: /usr/bin/mawk
slave nawk.1.gz: /usr/share/man/man1/mawk .1.gz
|
5、管理软件包
开始我们以java为例,作为jre运行环境可以,但如果你作为开发测试环境,你会发现javac找不到。
?
1
2
|
# javac
- bash : javac: command not found
|
原因是我们只对java命令做了版本管理。
事实上,update-alternatives的原理是软链管理,可以处理目录。那么我们就可以把整个软件包目录都纳入管理。
首先清理掉原来配置的java命令配置。
?
1
2
|
# update-alternatives --remove java /opt/jdk1.8.0_91/bin/java
# update-alternatives --remove java /opt/jdk1.8.0_111/bin/java
|
ubuntu里可以直接使用下面的全部清除,centos没有:
?
1
|
# update-alternatives --remove-all java
|
注册javahome管理
?
1
2
3
4
5
6
7
8
9
10
11
12
|
# update-alternatives --install /usr/local/jdk jdk /opt/jdk1.8.0_111 300
update-alternatives: using /opt/jdk1 .8.0_111 to provide /usr/local/jdk (jdk) in auto mode
# update-alternatives --install /usr/local/jdk jdk /opt/jdk1.8.0_91 200
# update-alternatives --display jdk
jdk - auto mode
link best version is /opt/jdk1 .8.0_111
link currently points to /opt/jdk1 .8.0_111
link jdk is /usr/local/jdk
/opt/jdk1 .8.0_111 - priority 300
/opt/jdk1 .8.0_91 - priority 200
|
配置jdk环境变量,指向注册的软链地址。
?
1
2
3
|
# echo export JAVA_HOME=/usr/local/jdk >>~/.bash_profile
# echo export PATH=$PATH:$JAVA_HOME/bin >>~/.bash_profile
# source ~/.bash_profile
|
管理JAVA_HOME
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# echo $JAVA_HOME
/usr/local/jdk
# java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
# javac -version
javac 1.8.0_111
# update-alternatives --config jdk
There are 2 choices for the alternative jdk (providing /usr/local/jdk ).
Selection Path Priority Status
------------------------------------------------------------
* 0 /opt/jdk1 .8.0_111 300 auto mode
1 /opt/jdk1 .8.0_111 300 manual mode
2 /opt/jdk1 .8.0_91 200 manual mode
Press <enter> to keep the current choice[*], or type selection number: 2
update-alternatives: using /opt/jdk1 .8.0_91 to provide /usr/local/jdk (jdk) in manual mode
# echo $JAVA_HOME
/usr/local/jdk
# java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
# javac -version
javac 1.8.0_91
|
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。
本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/10412.html