原文地址《Ubuntu 中采用 update-alternatives 配置软件多版本》
我的博客 http://tramp.cincout.cn/
摘要
在 Debian
系统,比如 Ubuntu
中,经常会出现一个软件安装多个版本或类别的需求,而在使用时可以方便的切换。update-alternatives
就是用来在 Debian
系统中维护系统命令连接符的工具。
通过一定的设置,可以实现系统自动的选择最新的软件版本或最合适的软件类别。比如,维护系统的多个JDK
的版本;维护editor
命令所对应的编辑工具是 vim
或 emacs
。
命令介绍
基本的命令格式
在Ubuntu
的终端中输入 man update-alternatives
就可以查看该命令的详细使用信息。
命令的基本格式:
update-alternatives [option...] command
install 命令
install
命令用来增加一组新的系统命令连接符。
update-alternatives --install link name path priority [--slave link name path]...
sudo update-alternatives --install /usr/bin/java java /usr/local/java/jdk-9/bin/java 1702
- link 系统中功能相同的软u件的公共链接目录。比如
/usr/bin/java
- name 命令连接符在
alternatives
目录的名字 - path 需要被链接的软件的目录,比如
/usr/local/java/jdk-9/bin/java
- priority 优先级,数值越大优先级越高。当
alternative
为auto
模式时,系统会自动选择优先级高的软件 - slave
slave
创建的链接从属某一个主链接。
查看命令
display
update-alternatives --display name
用来展示某一个 name
的包含的链接的详细信息。包括模式、优先级以及当前最佳的软件版本。
~$ update-alternatives --display java
java - manual mode
link currently points to /usr/local/java/jdk1.8.0_111/bin/java
/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java - priority 1071
slave java.1.gz: /usr/lib/jvm/java-7-openjdk-amd64/jre/man/man1/java.1.gz
/usr/local/java/jdk-9/bin/java - priority 1074
/usr/local/java/jdk1.7.0_79/bin/java - priority 1072
/usr/local/java/jdk1.8.0_111/bin/java - priority 1073
Current 'best' version is '/usr/local/java/jdk-9/bin/java'.
update-alternatives --query
以更友好的格式来查看。
update-alternatives --list
展示更简洁的信息。
config 命令
config
命令允许我们以交互的形式进行软件的切换。
~$ sudo update-alternatives --config java
[sudo] password for zhaoyu:
There are 4 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/local/java/jdk-9/bin/java 1074 auto mode
1 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071 manual mode
2 /usr/local/java/jdk-9/bin/java 1074 manual mode
3 /usr/local/java/jdk1.7.0_79/bin/java 1072 manual mode
* 4 /usr/local/java/jdk1.8.0_111/bin/java 1073 manual mode
Press enter to keep the current choice[*],or type selection number:
在上述模式下,输入我们想要切换的软件编号即可。
remove 命令
update-alternatives --remove name path
命令可以用来移除某个指定的name
中的某个软件版本。比如:
sudo update-alternatives --remove java /usr/local/java/jdk1.6.0_45/bin/java
-- remove-all name
可以用来移除某一name
下的所有软件。
auto 命令
update-alternatives --auto name
命令可以用来设置某一name
的软件管理模式为自动。设置完成后,会根据priority
选择版本高的软件。
总结
update-alternatives
命令方便地用来进行JDK
的版本管理,包括java javac javap jar
等命令都可以配置。如下:
sudo update-alternatives --install /usr/bin/javac javac /usr/local/jdk1.7.0_80/bin/javac 300
使用该方法管理JDK
时,需要注意$JAVA_HOME PATH
的配置:
# java environment
export JAVA_HOME=/usr/local/java/jdk1.8.0_111
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
要先查找
$PATH
(PATH=PATH: JAVA_HOME/bin:JAVAHOME/jre/bin)而不是‘ JAVA_HOME` 对应的路径(PATH=JAVAHOME/bin: JAVA_HOME/jre/bin:$PATH)。