最经在捣鼓Cloudera的cdh ,发现里面使用了alternatives命令,由于不懂这个命令,让我走了好多弯路。

现在mark一下

ubuntu 12.04 系统的命令为:update-alternatives

RedHat 6.4 系统命令为:alternatives,其中update-alternatives命令是/usr/sbin/alternatives的软链接。

现在以ubuntu 12.04 系统为基础。

假设系统中一个程序,存在多个版本

/opt/chenfool/chent1/chentest

代码

#!/bin/bash

echo "test1"

/opt/chenfool/chent2/chentest

代码

#!/bin/bash

echo "test2"

将/opt/chenfool/chent1/chentest 程序加入alternatives管理中

update-alternatives --install /usr/sbin/chentest chentest /opt/chenfool/chent1/chentest 1

将/opt/chenfool/chent1/chentest 程序加入alternatives管理中

update-alternatives --install /usr/sbin/chentest chentest /opt/chenfool/chent2/chentest 2

说明:

update-alternatives --install <link> <name> <path> <priority>

link:是目标的程序

name:是指定你程序中在alternatives中的名字(建议与link同名),它会在/etc/alternatives目录下建立同名文件,同时,它也是个软链接

path:是你要真实的程序路径

priority:是你程序的版本号

建立好一个映射关系后,可以通过命令查看你的程序版本

update-alternatives --display chentest

输出:

/opt/chenfool/chent1/chentest - priority 1
/opt/chenfool/chent2/chentest - priority 2

选择你需要的版本

update-alternatives --config chentest

输出:

Selection    Path                           Priority   Status
------------------------------------------------------------
* 0            /opt/chenfool/chent2/chentest   2         auto mode
  1            /opt/chenfool/chent1/chentest   1         manual mode
  2            /opt/chenfool/chent2/chentest   2         manual mode

Press enter to keep the current choice[*], or type selection number:

输入你的选择的版本即可。

原理:

/usr/sbin/chentest—>/etc/alternatives/chentest—>/opt/chenfool/chent1/chentest

它实质就是通过一个软链接来实现不同版本的选择。

alternatives存储对应关系的文件

ubuntu系统:/var/lib/dpkg/alternatives/chentest

RedHat系统:/var/lib/alternatives/chentest

manual
/usr/sbin/chentest /opt/chenfool/chent1/chentest
1
/opt/chenfool/chent2/chentest
2

删除一个版本

update-alternatives --remove chentest /opt/chenfool/chent2/chentest

从alternatives 管理中删除一个程序,/usr/sbin/chentest会被删除

update-alternatives --remove-all chentest

手动清理alternatives的文件

rm -f /var/lib/dpkg/alternatives/chentest
rm -f /etc/alternatives/chentest
rm -f /usr/sbin/chentest

参考文章:

http://blog.csdn.net/chszs/article/details/4158485

alternatives 命令学习的更多相关文章

  1. 别出心裁的Linux命令学习法

    别出心裁的Linux命令学习法 操作系统操作系统为你完成所有"硬件相关.应用无关"的工作,以给你方便.效率.安全.操作系统的功能我总结为两点:管家婆和服务生: 管家婆:通过进程.虚 ...

  2. Git版本控制软件结合GitHub从入门到精通常用命令学习手册(转)

    简要参考:http://www.tuicool.com/articles/mEvaq2 http://gitref.org/zh/index.html GIT 学习手册简介 本站为 Git 学习参考手 ...

  3. penghui_031413 Bat命令学习

    penghui_031413   Bat命令学习 基础部分:====================================================================== ...

  4. Linux命令学习

    Linux命令学习 Ubuntu常用快捷键 •Ctrl+Alt+T: 打开终端 •Ctrl+Shift+T: 新建标签页 •Tab: 终端中命令补全 •Alt+数字N: 终端中切换到第N个标签页 •↑ ...

  5. alternatives命令使用方法

    alternatives命令使用方法 alternatives是Linux下的一个功能强大的命令.仅仅能在root权限下运行.如系统中有几个命令功能十分相似,却又不能任意删除,那么能够用 altern ...

  6. Linux的几个概念,常用命令学习

    Linux的几个概念,常用命令学习---------------------------------设备名装载点// 通过装载点访问设备-------------------------------- ...

  7. Java命令学习系列(7):Javap(转)

    原文出处: Hollis(@Hollis_Chuang) javap是jdk自带的一个工具,可以对代码反编译,也可以查看java编译器生成的字节码. 一般情况下,很少有人使用javap对class文件 ...

  8. TCP/IP协议学习之实例ping命令学习笔记

    TCP/IP协议学习之实例ping命令学习笔记(一) 一. 目的为了让网络协议学习更有效果,在真实网络上进行ping命令前相关知识的学习,暂时不管DNS,在内网中,进行2台主机间的ping命令的整个详 ...

  9. 使用Linux的alternatives命令替换选择软件的版本

    上周在安装搜索引擎Elasticsearch时,要求安装比较新的java 版本,我选择了java 1.8.0,安装java 成功后使用java -version 发现使用的版本仍旧是1.6.0, 查询 ...

随机推荐

  1. Effective C++ 条款三 尽可能使用const

    参考资料:http://blog.csdn.net/bizhu12/article/details/6672723      const的常用用法小结 1.用于定义常量变量,这样这个变量在后面就不可以 ...

  2. HBase技术简介

    一.HBase简介 HBase – Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群. ...

  3. Eclipse打包Android项目时用到proguard.cfg后,出现的Warning:can&#39;t find referenced class问题的解决方式

    Warning: can't find superclass or interface Warning: can't find referenced class 这两个问题的解决方法: 1.要把你项目 ...

  4. Atlassian Confluence安装

    前言 Confluence与Jira 由于线上jira和confluence之前互相关联,confluence的登录用户全部关联自jira的用户,confluence安装时会提示是否关联jira,由于 ...

  5. 【转载】C# sleep 和wait的区别

    eep和wait都是使线程暂时停止执行的方法,但它们有很大的不同. 1. sleep是线程类Thread 的方法,它是使当前线程暂时睡眠,可以放在任何位置. 而wait,它是使当前线程暂时放弃对象的使 ...

  6. 【linux驱动分析】之dm9000驱动分析(三):sk_buff结构分析

    [linux驱动分析]之dm9000驱动分析(一):dm9000原理及硬件分析 [linux驱动分析]之dm9000驱动分析(二):定义在板文件里的资源和设备以及几个宏 [linux驱动分析]之dm9 ...

  7. 关于Android滑动冲突的解决方法(二)

    之前的一遍学习笔记主要就Android滑动冲突中,在不同方向的滑动所造成冲突进行了了解,这样的冲突非常easy理解,当然也非常easy解决.今天,就同方向的滑动所造成的冲突进行一下了解,这里就先以垂直 ...

  8. ArcGIS 10.3 for Server新特性介绍

    ArcGIS10.3的正式版立即在美国Esri全球用户大会推出.中国的正式发行时间预计在Esri中国的用户大会.以下就将用户比較关心的ArcGIS 10.3 for Server的新特性给大家进行简单 ...

  9. 设计模式学习笔记——Observer观察者模式

    观察者模式里面有两个东西:观察者(Observer)和目标(Subject).当目标发生变化的时候,观察者随之起舞,也作出相应的变化.此为观察者模式. 这是怎么做到的?主要是目标里面存有一份观察者的名 ...

  10. 浏览器上的Qt Quick

    你想不想在浏览器上运行你的Qt Quick程序呢?在Qt 5.12之前,唯一的方法是使用Qt WebGL Streaming技术把界面镜像到浏览器上.但该方法有不少缺陷,下文会说.前不久随着Qt 5. ...