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,这才是最终的可执行文件。之所以建立这样两个链接,是为了方便脚本程序的编写和系统的管理。

转自:http://www.5ycode.com/article/59.html

centos/linux alternatives与update-alternatives详解与软件版本切换的更多相关文章

  1. CentOS Linux使用crontab运行定时任务详解

    参考博文: (总结)CentOS Linux使用crontab运行定时任务详解

  2. Linux——CentOS7安装gcc编译器详解 查看内核版本

    [root@localhost ~]# uname -a Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:3 ...

  3. (总结)CentOS Linux搭建SVN Server配置详解

         PS:虽然在公司linux服务器上搭建过几次svn,但是时间长了,有些配置操作会忘掉,上网搜索的结果都不大满意,有幸在前几天看到一篇算是最满意的svn搭建文章,转载一下以备以后使用,原文地址 ...

  4. centOS linux 下PHP编译安装详解

    一.下载PHP源码包 wget http://php.net/distributions/php-5.6.3.tar.gz   二.添加依赖应用 yum install -y gcc gcc-c++ ...

  5. centOS linux 下nginx编译安装详解

    Nginx的官方网站是 www.nginx.org   Nginx的下载地址是:http://nginx.org/en/download.html   由 于官网的设计非常简洁不大气不上档次,所以我们 ...

  6. (总结)CentOS Linux使用crontab运行定时任务详解

    安装crontab:yum install crontabs 说明:/sbin/service crond start //启动服务/sbin/service crond stop //关闭服务/sb ...

  7. CentOS 7.4中firewall防火墙详解和配置以及切换为iptables防火墙

    转载:https://blog.csdn.net/xlgen157387/article/details/52672988 一.firewall介绍 CentOS 7中防火墙是一个非常的强大的功能,在 ...

  8. Linux(centos)系统各个目录的作用详解

    Linux(centos)系统各个目录的作用详解 文件系统的类型 LINUX有四种基本文件系统类型:普通文件.目录文件.连接文件和特殊文件,可用file命令来识别. 普通文件:如文本文件.C语言元代码 ...

  9. Linux计划任务Crontab实例详解教程

    说明:Crontab是Linux系统中在固定时间执行某一个程序的工具,类似于Windows系统中的任务计划程序 下面通过详细实例来说明在Linux系统中如何使用Crontab 操作系统:CentOS ...

随机推荐

  1. cursor 属性

    鼠标 样式 default 默认光标(通常是一个箭头) auto 默认.浏览器设置的光标. crosshair 光标呈现为十字线. pointer 光标呈现为指示链接的指针(一只手) move 此光标 ...

  2. Java将头像图片保存到MySQL数据库

    在做头像上传的过程中通常是将图片保存到数据库中,这里简单介绍一中将图片保存到数据库的方法: jsp代码: <div> <input class="avatar-input& ...

  3. 使用Eclipse进行Javaweb项目开发时,如何设置外置浏览器Chrome

    使用Eclipse开发Javaweb项目时,在Eclipse中显示页面不是很好,那么如何让它自动打开外置浏览器呢?操作如下

  4. Java IO流之内存流

    内存流 1)内存流主要用来操作内存 2)分类 ByteArrayInputStream 主要完成将内容从内存读入程序之中 ByteArrayOutputStream 主要是将数据写入到内存中. 3)输 ...

  5. 用Python玩微信(非常详细)

    代码放在这里:wzyonggege/python-wechat-itchat 词云那里可以换成小黄人图片 ----------------------------------------------- ...

  6. 分清css的em和rem

    在css中单位长度用的最多的是px.em.rem,这三个的区别是: px是固定的像素,一旦设置了就无法因为适应页面大小而改变. em和rem相对于px更具有灵活性,他们是相对长度单位,意思是长度不是定 ...

  7. oracle日志挖掘

    oracle日志挖掘是一种十分强大的数据恢复技术,只要你保障你的归档日志和重做日志是完整的,那么就可以将你的数据恢复到任何时刻.简单叙述一下日志挖掘的基本原理,然后进行一个简单的小实验. 日志挖掘时基 ...

  8. github--hello,world(参考官网)

    官网:https://guides.github.com/activities/hello-world/ 一共分为5步. 1.为你的项目新建仓库(repository): 2.新建分支(branch) ...

  9. Ubuntu安装搜狗拼音和金山快盘

    搜狗拼音和金山快盘是UbuntuKylin中的特色中文应用,通过下述方法在Ubuntu或UbuntuKylin中安装. 一.更新Fcitx 1.由于 Ubuntu 12.04自带的 小企鹅输入法Fci ...

  10. canvas学习总结三:绘制路径-线段

    Canvas绘图环境中有些属于立即绘制图形方法,有些绘图方法是基于路径的. 立即绘制图形方法仅有两个strokeRect(),fillRect(),虽然strokezText(),fillText() ...