[转载]系统管理:update-alternatives
http://blog.csdn.net/dbigbear/article/details/4398961
好吧,其实博主也是转载的。
update-alternatives --display | --config editor
链接路径/etc/alternatives
Linux 发展到今天,可用的软件已经非常多了。这样自然会有一些软件的功能大致上相同。
例如,同样是编辑器,就有 nvi、vim、emacs、nano,而且我说的这些还只是一部分。
大多数情况下,这样的功能相似的软件都是同时安装在系统里的,可以用它们的名称来执
行。例如,要执行 vim,只要在终端下输入 vim 并按回车就可以了。不过,有些情况下我
们需要用一个相对固定的命令调用这些程序中的一个。例如,当我们写一个脚本程序时,
只要写下 editor,而不希望要为“编辑器是哪个”而操心。Debian 提供了一种机制来解
决这个问题,而 update-alternatives 就是用来实现这种机制的。
在说明 update-alternatives 的详细内容之间,先让我们看看系统中已有的例子。打开
终端,执行下面的命令:
lrwxrwxrwx 1 root root 24 2004-09-26 08:48 /usr/bin/editor -> /etc/alternatives/editor
herbert@natsu:~$ ls -l /etc/alternatives/editor
lrwxrwxrwx 1 root root 12 2004-10-27 16:24 /etc/alternatives/editor -> /usr/bin/vim
herbert@natsu:~$
我们看到,editor 这个可执行命令实际上是个符号链接,它指向 /etc/alternatives/editor;而
/etc/alternatives/editor 也是个符号链接,它指
向 /usr/bin/vim。这样,当我输入 editor 并回车时,将执行 vim。之所以要在 /usr/bin
和 /etc/alternatives 中费心建立这样两个链接,就是要实现上面说到的特性:方便脚本
程序的编写和系统的管理。
下面我们就来看看 update-alternatives 的功能。当然,如果你觉得我说得不详细,可
以看看这个命令的 manpage:UPDATE-ALTERNATIVES(8)。
首先要介绍的参数是 --display。它使我们可以看到一个命令的所有可选命令。执行
editor - status is auto.
link currently points to /usr/bin/vim
/bin/ed - priority -100
slave editor.1.gz: /usr/share/man/man1/ed.1.gz
/usr/bin/nvi - priority 19
slave editor.1.gz: /usr/share/man/man1/nvi.1.gz
/bin/nano - priority 40
slave editor.1.gz: /usr/share/man/man1/nano.1.gz
/usr/bin/vim - priority 120
slave editor.1.gz: /usr/share/man/man1/vim.1.gz
/usr/bin/emacs21 - priority 0
slave editor.1.gz: /usr/share/man/man1/emacs.1emacs21.gz
Current `best' version is /usr/bin/vim.
natsu:/home/herbert#
你可以看到我的机器上的所有可以用来被 editor 链接的命令。
下面说说 --config。这个选项使我们可以选择其中一个命令:
There are 5 alternatives which provide `editor'.
Selection Alternative
-----------------------------------------------
1 /bin/ed
2 /usr/bin/nvi
3 /bin/nano
*+ 4 /usr/bin/vim
5 /usr/bin/emacs21
Press enter to keep the default[*], or type selection number: 4
Using `/usr/bin/vim' to provide `editor'.
natsu:/home/herbert#
我并没有修改它,因为我还是比较喜欢 vim 的。 当然,你可以选择别的程序。
说到这里我们就要介绍一些概念了。首先,update-alternatives 在一般情况下是由
postinst 和 prerm 这样的安装脚本自动调用的,所以一个 alternative 的状态有两种:
自动和手动。每个 alternative 的初始状态都是自动。如果系统发现管理员手动修改了一
个 alternative,它的状态就从自动变成了手动,这样安装脚本就不会更新它了。如果你希
望将一个 alternative 变回自动,只要执行
就可以了。你注意到了吗?我们说到了“名字”。该怎样写名字呢?这就是我们要介绍的第
二个概念:
general name -- 这是指一系列功能相似的程序的“公用”名字(包括绝对路径),比如 /usr/bin/editor。 link -- 这是指一个 alternative 在 /etc/alternative 中的名字,比如 editor。 alternative -- 顾名思义,这是指一个可选的程序所在的路径(包括绝对路径),比如 /usr/bin/vim。 |
--auto,--display 和 --config 跟的都是 link。我们要说的第三个概念是优先级。这个
比较简单,当然优先级越高的程序越好啦(在大多数情况下,我不想争论) 最后一个概
念是主和从的 alternative。想想看,你将 /usr/bin/editor 链接到了 vim,可是当你执
行 man editor 时看到的却是 emacs 的 manpage,你会做何感想呢?这就引出了主和
从 alternative 的概念了:当更新主的 alternative 时,从的 alternative 也会被更新。
说完这四个重要的概念后,我们介绍另外两个选项。至于其他的。。。。我相信你会去看手
册页的,对吗?
第一个是 --install。它的格式是:
gen,link,alt,pri 分别是我们上面说过的。如果需要从的 alternative,你可以用
--slave 加在后面。如果你在向一个已经存在的 alternative 组中添加新的
alternatives,该命令会把这些 alternatives 加入到这个已经存在的 alternative 组的
列表中,并用新的可选命令作为新的命令;否则,将会建立一个新的自动的 alternative
组。
呜呼!我加入了一个错误的 alternative。我不想要这个 alternative 了。在这种情况
下,可以执行下面的命令:
name 是一个在 /etc/alternatives 中的名字,也就是上面的 link,而 path 是希望删除
的可选程序名的绝对路径名(放心,这样只是从列表中删除了这个程序,并不会真的从硬盘
上删除程序的可执行文件)。如果从一个 alternative 组中删除了一个正在被链接的程序
并且这个组仍然没有变成空的,update-alternatives 会自动用一个具有其他优先级的可
选程序代替原来的程序。如果这个组变成空的了,那么连这个 alternative 组都会被移
除。如果删除的程序没有被链接,则只有有关这个程序的信息会被移除。
说个例子吧。我下载了 Eclipse,并且安装了 gcj 和 gij。可是我发现 GNU 的 java 工具
还不足以运行 Eclipse。我只好到 Sun 公司的网页上下载了它的 java 工具 jdk。因为是
自己安装的,我将它们安装在 /usr/local 上,以便将来重新安装 Linux 系统时这些程序仍
然可以使用。于是我要做的就是用这个 jdk 中的 java 和 javac 来代替系统原来的。执行
java - status is auto.
link currently points to /usr/local/j2sdk1.4.2_06/bin/java
/usr/bin/gij-wrapper-3.3 - priority 33
slave java.1.gz: /usr/share/man/man1/gij-wrapper-3.3.1.gz
/usr/local/j2sdk1.4.2_06/bin/java - priority 100
slave java.1.gz: /usr/local/j2sdk1.4.2_06/man/man1/java.1
Current `best' version is /usr/local/j2sdk1.4.2_06/bin/java.
natsu:/home/herbert# update-alternatives --display javac
javac - status is auto.
link currently points to /usr/local/j2sdk1.4.2_06/bin/javac
/usr/bin/gcj-wrapper-3.3 - priority 33
slave javah: /usr/bin/gcjh-wrapper-3.3
slave javac.1.gz: /usr/share/man/man1/gcj-wrapper-3.3.1.gz
slave javah.1.gz: /usr/share/man/man1/gcjh-wrapper-3.3.1.gz
/usr/bin/gcj-wrapper-3.4 - priority 33
slave javah: /usr/bin/gcjh-wrapper-3.4
slave javac.1.gz: /usr/share/man/man1/gcj-wrapper-3.4.1.gz
slave javah.1.gz: /usr/share/man/man1/gcjh-wrapper-3.4.1.gz
/usr/local/j2sdk1.4.2_06/bin/javac - priority 100
slave javah: /usr/local/j2sdk1.4.2_06/bin/javah
slave javac.1.gz: /usr/local/j2sdk1.4.2_06/man/man1/javac.1
slave javah.1.gz: /usr/local/j2sdk1.4.2_06/man/man1/javah.1
Current `best' version is /usr/local/j2sdk1.4.2_06/bin/javac.
natsu:/home/herbert#
(你看到的是我更新以后的)就可以得到关于要更新哪些 alternatives 的信息。我是这么
更新的:
[转载]系统管理:update-alternatives的更多相关文章
- mybatis执行批量更新update
Mybatis的批量插入这里有http://ljhzzyx.blog.163.com/blog/static/38380312201353536375/.目前想批量更新,如果update的值是相同的话 ...
- sql update 触发器 可获得被update的行的信息
类型:转载 sql update 触发器 可获得被update的行的信息,需要的朋友可以参考下. 复制代码 代码如下: create trigger TgName on tb for update ...
- linux 大法
实验楼 练习 小笔记 可以输出图形字符的命令banner 你可以先使用如下命令安装: $ sudo apt-get update $ sudo apt-get install sysvbanner 然 ...
- sql 批量操作(存在的更新,不存在的插入)
标签: sql 2012-09-06 18:13 2408人阅读 评论(0) 收藏 举报 分类: Sql Server(123) 版权声明:本文为博主原创文章,未经博主允许不得转载. update A ...
- 2016032701 - ubuntu安装jdk
参考地址:http://jingyan.baidu.com/article/d621e8da0e92052865913f32.html 1.首先需要去oracle官网去下载jdk1.8,我本人下载的是 ...
- CentOS系统、Jdk、Tomcat安装实战
CentOS系统.Jdk.Tomcat安装实战 第一次接触Liunx系统,都说J2EE系统在Li ...
- (转载)[MySQL技巧]INSERT INTO… ON DUPLICATE KEY UPDATE
(转载)http://blog.zol.com.cn/2299/article_2298921.html MySQL 自4.1版以后开始支持INSERT … ON DUPLICATE KEY UPDA ...
- [转载][QT][SQL]sql学习记录3_sqlite之update delete like
转载自:详见 : http://www.runoob.com/sqlite/sqlite-create-table.html 约束表实例 下面是一个实例,它创建了一个 COMPANY 表,ID 作为主 ...
- Linux学习笔记—Linux磁盘与文件系统管理(转载)
认识EXT2文件系统 文件的系统特性 Linux的正规文件系统为Ext2 文件数据除了文件实际内容外,还包括其他属性(文件权限.文件属性). 文件系统将这两部分数据分别存放在不同的块,权限和属性放在i ...
随机推荐
- leetcode-最大子序和(动态规划讲解)
最大子序和(动态规划讲解) 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输 ...
- VMWare Workstation新装CentOS 7无法联网解决办法
按照这位博主的方法成功解决:http://blog.csdn.net/deniro_li/article/details/54632949
- ActiveMQ服务器之间传输对象,项目A发送对象到项目B接收发送对象《二》
ActiveMQ服务器之间传输对象,项目A发送对象到项目B接收发送对象<一> 上一篇文章写到对象之间传输使用线程方式 ,无法使用监听方式,最近解决了使用监听方式接收对象,本次使用配置文件方 ...
- 关于css的总结
写在前面 ,学好css,需要长期的推敲和积累 ,细节是不断完善的,逐渐形成自己的风格 让自己的css更加接近优雅. 下面来总结一些我觉得比较好的css代码风格 : 1. 一般网页中的背景 用 ...
- 展示github中的页面(Github Pages)
一.创建一个仓库,名为"user_name.github.io"(此处user_name替换为你自己的github用户名),并在根目录下创建index.html,则该仓库下的所有h ...
- Java内存区域划分和GC机制
Java 内存区域和GC机制 目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Ga ...
- python2 对URL编码进行编译
在请求页面时有时会返回类似: %E8%AF%A5985%E5%A4%A7%E5%AD%A6%E5%B8%B8%E5%B9%B4%E4%BD%8D%E5%B1%85%E5%9B%BD%E5%86%85% ...
- Jdk1.7 与 jdk1.8的区别,最新的特征有哪些(美团,360,京东面试题目)
在jdk7的新特性方面主要有下面几方面的增强: 1.1二进制变量的表示,支持将整数类型用二进制来表示,用0b开头. 所有整数int.short.long.byte都可以用二进制表示: byte aBy ...
- [Leetcode] 3.Longest Substring Without Repeating Characters(unordered_map)
通过把未访问的结点放到unordered_map中来判断是否重复,代码如下: class Solution { public: int lengthOfLongestSubstring(string ...
- 如何取得dbgrid中未保存(post)的值(50分)
比如说处在编辑状态时,想取得当前记录值 Dataset.fields[0].Value 就是当前值:Dataset.fields[0].OldValue 就是原始值. 呵呵,我指得是在编辑时,就是按键 ...