Ubuntu 中采用 update-alternatives 配置软件多版本

原创-转载请注明 http://tramp.cincout.cn/2017/09/27/linux-2017-09-27-debian-update-alternatives/

摘要

Debian 系统,比如 Ubuntu 中,经常会出现一个软件安装多个版本或类别的需求,而在使用时可以方便的切换。update-alternatives 就是用来在 Debian 系统中维护系统命令连接符的工具。
通过一定的设置,可以实现系统自动的选择最新的软件版本或最合适的软件类别。比如,维护系统的多个JDK 的版本;维护editor 命令所对应的编辑工具是 vimemacs

命令介绍

基本的命令格式

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 优先级,数值越大优先级越高。当alternativeauto 模式时,系统会自动选择优先级高的软件
  • 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:$JAVA_HOME/jre/bin) 而不是$JAVA_HOME 对应的路径(PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH)。

引用

  1. update-alternatives
  2. Linux命令大全
  3. Linux 教程

你可能感兴趣的:(Ubuntu 中采用 update-alternatives 配置软件多版本)