centos/linux alternatives与update-alternatives详解与软件版本切换

2014/09/29 5217点热度 0人点赞 0条评论

    update-alternatives是linux系统中专门维护系统命令链接符的工具,通过它可以很方便的设置系统默认使用哪个命令、哪个软件版本,比如,我们在系统中同时安装了open jdk和sun jdk两个版本,而我们又希望系统默认使用的是sun jdk,那怎么办呢?通过update-alternatives就可以很方便的实现了。

根据update-alternatives 命令查看该命令的选项

[yxkong@localhost ~]$ update-alternatives
alternatives(备用)版本 1.3.61 - 版权 (C) 2001 红帽公司
在 GNU 公共许可条款下,本软件可被自由地重发行。

用法:alternatives --install <链接> <名称> <路径> <优先度>
                    [--initscript <服务>]
                    [--slave <链接> <名称> <路径>]*
       alternatives --remove <名称> <路径>
       alternatives --auto <名称>
       alternatives --config <名称>
       alternatives --display <名称>
       alternatives --set <名称> <路径>
       alternatives --list

公用选项:--verbose --test --help --usage --version
                --altdir <目录> --admindir <目录>

install选项

   install选项的功能就是增加一组新的系统命令链接符了,使用语法为:

update-alternatives --install link name path priority [--slave link name path]...

其中link为系统中功能相同软件的公共链接目录,比如/usr/bin/java(需绝对目录); name为命令链接符名称,如java; path为你所要使用新命令、新软件的所在目录; priority为优先级,当命令链接已存在时,需高于当前值,因为当alternative为自动模式时,系统默认启用priority高的链接; --slave为从alternative。

    alternative有两种模式:auto和manual,默认都为auto模式,因为大多数情况下update-alternatives命令都被postinst (configure) or prerm (install)调用的,如果将其更改成手动的话安装脚本将不会更新它了。

例如:

update-alternatives --install /usr/bin/java java /usr/local/lib/java/jdk1.7.0_67 17067   
# /usr/bin/java   java link所在的路径
# java  创建link的名称
# /usr/local/lib/java/jdk1.7.0_67  java链接指向的路径
# 17067  根据版本号设置的优先级(更改的优先级需要大于当前的)版本越高优先级越高

remove选项

   remove选项的功能是删除一个alternative及相关从alternative,使用语法为

update-alternatives --remove name path

其中name与path与install中的一致,如果所删除的链接组中还有其他链接的话,系统将会自动从其他中选择一个priority高的链接作为默认为链接。

update-alternatives --remove  java /usr/local/lib/java/jdk1.7.0_67

auto选项

auto选项用于修改命令的模式,语法如下:

update-alternatives --auto name
# 只有两个auto和manual模式,默认都为auto模式

config选项

config选项功能为在现有的命令链接选择一个作为系统默认的,使用语法为:

update-alternatives --config name
 [root@localhost yxkong]# update-alternatives --config java
共有 2 个提供“java”的程序。
  选项    命令
-----------------------------------------------
*+ 1      /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64/jre/bin/java
   2      /usr/local/lib/java/jdk1.7.0_67/bin/java
   按 Enter 保留当前选项[+],或者键入选项编号:2

这里才是配置版本的重点,当系统中有多个版本时,可以通过该命令设置默认版本,类似于默认程序

display选项

  display选项的功能就是查看一个命令链接组的所有信息,包括链接的模式(自动还是手动)、链接priority值、所有可 用的链接命令等等。使用语法:

update-alternatives --display name

其中name为命令链接名称,如java

[yxkong@localhost ~]$ update-alternatives --display java
java - 状态为手工。
链接当前指向 /usr/local/lib/java/jdk1.7.0_67/bin/java
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64/jre/bin/java - 优先度 170051
....
当前“最佳”版本是 /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64/jre/bin/java。

原理解析

我们来看下跟踪

[yxkong@localhost ~]$ ls -l /usr/bin/java  #该链接link到了/etc/alternatives/java
lrwxrwxrwx. 1 root root 22 9月  29 12:28 /usr/bin/java -> /etc/alternatives/java
[yxkong@localhost ~]$ ls -l /etc/alternatives/java  #链接到了/usr/local/lib/java/jdk1.7.0_67/bin/java
lrwxrwxrwx. 1 root root 40 9月  29 12:28 /etc/alternatives/java -> /usr/local/lib/java/jdk1.7.0_67/bin/java

java这个可执行命令实际是一个链接,指向了/etc/alternatives/java。而这个也是一个链接,指向了/usr/local/lib/java/jdk1.7.0_67/bin/java,这才是最终的可执行文件。之所以建立这样两个链接,是为了方便脚本程序的编写和系统的管理。

yxkong

这个人很懒,什么都没留下

文章评论