您的位置首页百科知识

Linux中的update-alternatives命令详解

Linux中的update-alternatives命令详解

的有关信息介绍如下:

Linux中的update-alternatives命令详解

Linux 发展到今天,软件定期都会进行升级,现在java版本已经升级到JDK8.0,还有open-jdk各种版本。由于软件需要安装了很多java版本,又不想每次使用都去修改环境变量。Debian 提供了一种机制来解决这个问题,而 update-alternatives 就是用来实现这种机制的。这个命令会建立很软链接,当切换版本的时候,只需要更改软链接的指向。

首先查看下本地java版本,使用java -version

mec@mac:~$ java -version

java version "1.6.0_45"Java(TM) SE Runtime Environment (build 1.6.0_45-b06)Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)

mec@mac:~$ which java #which java命令查看java命令使用的可执行文件位置

/usr/bin/javamec@mac:~$ ll /usr/bin/java

#查看命令的链接位置

lrwxrwxrwx 1 root root 22 3月 1 22:36 /usr/bin/java -> /etc/alternatives/java

mec@mac:~$ ll /etc/alternatives/java #最后查看到java命令可执行文件的实际位置

lrwxrwxrwx 1 root root 39 4月 23 16:21 /etc/alternatives/java -> /usr/lib/jvm/java-6-oracle/jre/bin/java*

update-alternatives正如名字表达的意思一样,是可选择的更新

查看,这个命令会建立很软链接,当切换版本的时候,只需要更改软链接的指向。

sudo update-alternatives --display java

可以看出当前java命令只有一个软链接,指向/usr/lib/jvm/java-6-oracle/jre/bin/java,命令的模式是自动auto,这时候会根据优先级匹配,priority 1既是优先级。

列出使用java命令的列表,现在只有一个,指出了命令的所在位置

mec@mac:~$ sudo update-alternatives --list

java/usr/lib/jvm/java-6-oracle/jre/bin/java

现在开始配置,我下载的JDK8在/home/mec/Android/jdk1.8.0_73。下载这个在这里就不细讲了,你也可以配置~/.bashrc或是/etc/profile中的环境变量。

由sudo update-alternatives --list java我们上面查看只有

/usr/lib/jvm/java-6-oracle/jre/bin/java

现在使用

/usr/lib/jvm/java-6-oracle/jre/bin/java

sudo update-alternatives --install /usr/bin/java java /home/mec/Android/jdk1.8.0_73/bin/java 300

update-alternatives --install link name path priority其中link为系统中功能相同软件的公共链接目录,比如/usr/bin/java(需绝对目录);name为命令链接符名称,如javapath为你所要使用新命令、新软件的所在目录priority为优先级,当命令链接已存在时,需高于当前值,因为当alternative为自动模式时,系统默认启用priority高的链接;# 整数 根据版本号设置的优先级(更改的优先级需要大于当前的)

现在使用sudo update-alternatives --list java查看下

发现多了一项

/home/mec/Android/jdk1.8.0_73/bin/java

/usr/lib/jvm/java-6-oracle/jre/bin/java

sudo update-alternatives --config java

There are 2 choices for the alternative java (providing /usr/bin/java).

*号代表我们正在使用的。选择1后查看Java版本

mec@mac:~/Android/jdk1.8.0_73$ sudo update-alternatives --remove java

/home/mec/Android/jdk1.8.0_73/bin/java 移除刚来配置的

mec@mac:~/Android/jdk1.8.0_73$ java -version 测试下版本,发现又切换回来了1.6