热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[转载]系统管理:updatealternatives

http:blog.csdn.netdbigbeararticledetails4398961好吧,其实博主也是转载的。update-alternatives--display

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
的详细内容之间,先让我们看看系统中已有的例子。打开
终端,执行下面的命令:



代码:

herbert@natsu:~$ ls -l /usr/bin/editor
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。它使我们可以看到一个命令的所有可选命令。执行



代码:

natsu:/home/herbert# update-alternatives --display editor

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。这个选项使我们可以选择其中一个命令:



代码:

natsu:/home/herbert# update-alternatives --config editor


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 变回自动,只要执行



代码:

update-alternatives --auto editor

就可以了。你注意到了吗?我们说到了“名字”。该怎样写名字呢?这就是我们要介绍的第
二个概念:



引用:




general name -- 这是指一系列功能相似的程序的“公用”名字(包括绝对路径),比如
/usr/bin/editor。
link -- 这是指一个 alternative 在 /etc/alternative 中的名字,比如
editor。
alternative -- 顾名思义,这是指一个可选的程序所在的路径(包括绝对路径),比如
/usr/bin/vim。

--auto,--display 和 --config 跟的都是
link。我们要说的第三个概念是优先级。这个
比较简单,当然优先级越高的程序越好啦(在大多数情况下,我不想争论)bubuko.com,布布扣title="狂笑" border="0" src="https://img.php1.cn/3cd4a/1eebe/cd5/8170a21e8dddfd22.webp"> 最后一个概
念是主和从的
alternative。想想看,你将 /usr/bin/editor 链接到了 vim,可是当你执
行 man editor 时看到的却是 emacs 的
manpage,你会做何感想呢?这就引出了主和
从 alternative 的概念了:当更新主的 alternative 时,从的 alternative
也会被更新。

说完这四个重要的概念后,我们介绍另外两个选项。至于其他的。。。。我相信你会去看手
册页的,对吗?bubuko.com,布布扣title="抛媚眼" border="0" src="https://img.php1.cn/3cd4a/1eebe/cd5/6c257b6ba227cc3e.webp"> 

第一个是
--install。它的格式是:



代码:

update-alternatives --install gen link alt pri [--slave sgen
slink salt] ...

gen,link,alt,pri 分别是我们上面说过的。如果需要从的 alternative,你可以用 
--slave
加在后面。如果你在向一个已经存在的 alternative 组中添加新的 
alternatives,该命令会把这些 alternatives
加入到这个已经存在的 alternative 组的
列表中,并用新的可选命令作为新的命令;否则,将会建立一个新的自动的
alternative 
组。

呜呼!我加入了一个错误的 alternative。我不想要这个 alternative
了。在这种情况
下,可以执行下面的命令:



代码:

update-alternatives --remove name path

name 是一个在 /etc/alternatives 中的名字,也就是上面的 link,而 path
是希望删除
的可选程序名的绝对路径名(放心,这样只是从列表中删除了这个程序,并不会真的从硬盘
上删除程序的可执行文件)。如果从一个
alternative 组中删除了一个正在被链接的程序
并且这个组仍然没有变成空的,update-alternatives
会自动用一个具有其他优先级的可
选程序代替原来的程序。如果这个组变成空的了,那么连这个 alternative
组都会被移
除。如果删除的程序没有被链接,则只有有关这个程序的信息会被移除。

说个例子吧。我下载了 Eclipse,并且安装了 gcj 和
gij。可是我发现 GNU 的 java 工具
还不足以运行 Eclipse。我只好到 Sun 公司的网页上下载了它的 java 工具
jdk。因为是
自己安装的,我将它们安装在 /usr/local 上,以便将来重新安装 Linux
系统时这些程序仍
然可以使用。于是我要做的就是用这个 jdk 中的 java 和 javac 来代替系统原来的。执行



代码:

natsu:/home/herbert# update-alternatives --display java
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 --install /usr/bin/javac javac
/usr/local/j2sdk1.4.2_06/bin/javac 100 --slave /usr/bin/javah javah
/usr/local/j2sdk1.4.2_06/bin/javah --slave /usr/share/man/man1/javac.1.gz
javac.1.gz /usr/local/j2sdk1.4.2_06/man/man1/javac.1 --

[转载]系统管理:update-alternatives,布布扣,bubuko.com


推荐阅读
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • PDF内容编辑的两种小方法,你知道怎么操作吗?
    本文介绍了两种PDF内容编辑的方法:迅捷PDF编辑器和Adobe Acrobat DC。使用迅捷PDF编辑器,用户可以通过选择需要更改的文字内容并设置字体形式、大小和颜色来编辑PDF文件。而使用Adobe Acrobat DC,则可以通过在软件中点击编辑来编辑PDF文件。PDF文件的编辑可以帮助办公人员进行文件内容的修改和定制。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • 本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • intellij idea的安装与使用(保姆级教程)
    intellijidea的安装与使用(保姆级教程)IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(gi ... [详细]
author-avatar
xaony23625
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有