Debian alternatives system: update-alternatives
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Debian alternatives system: update-alternatives相关的知识,希望对你有一定的参考价值。
一言以蔽之,工具 update-alternatives 的作用是管理系统下相似功能程序的符号链接,采取的方式是对具有相似功能的程序,不是直接调用该程序,而是用一个统一符号链接来调用,至于该符号链接
指向相似功能程序中的哪一个,则由工具update-alternatives来配置和管理。
说的很抽象,我们来举个例子,看过后自然就明白了。Ubuntu系统内置了一个阉割版的vim编辑器,
这时我们又安装了一个功能完全的vim编辑器,这时系统上就有了2个功能相似的vim编辑器,但注意,它
们不是同一个程序。那这和我们的工具update-alternatives又有什么关系呢?原来,Ubuntu系统对系统
内置vim的调用是通过名为vi的符号链接来完成的,而不是直接调用vim。
从上面的输出可知,vi最终链接到/usr/bin/vim.tiny,也就是vim的Ubuntu阉割版。
是的,update-alternatives机制是通过2级跳来完成了实际的程序调用。我想,大家一定很好奇这个
update-alternatives是怎么知道哪些程序具有相似功能呢?又怎么管理它们的呢?让我们通过vi的例子
来试着回答这些问题。我是不知道怎么回答这两个问题的,所以只有求助于帮助系统man,通过man的帮
助,发现了有两个update-alternatives的相关目录:
/etc/alternatives:目录下存放有第二级符号链接,指向实际的程序。还有实际程序关联的文件(如帮
助文档)的符号链接。
/var/lib/dpkg/alternatives:目录下存放的大概就是相似程序及其相关联文件(如帮助文档)的管理
文件。
对于上面两个目录的说明,是我的推断,我们还需要证明推断的正确性。目录/etc/alternatives的
作用很明显,可以通过ls -l命令看到如下输出:
上图中用红线框中的文件除了一个是对vim.tiny的链接外,其他是vim相关的帮助文档的符号链接。
接着,我们来验证我们对/var/lib/dpkg/alternatives作用的推断,并更进一步的了解该目录的作
用。在安装完整版的vim之前,先来看一下文件/var/lib/dpkg/alternatives/vi这个可能的管理文件:
对上面的文件,我稍微编辑了一下,基于我的理解添加了两个空行,按空行我们把文件分为4部分。第一
部分的auto从帮助文档可知是update-alternatives的运行模式;第二部分的/usr/bin/vi是第一级接;
第3部分的每两行为一个整体,而且发现每两行的第一行都和/etc/alternatives目录下的一个vim帮助文
档符号连接同名,而第二行则对应到实际链接的帮助文档;第4部分的第一行是最终被链接的程序,第二
行数字从帮助文档可知是一个优先级,当有多个类似程序可选时,该优先级决定了程序显示在
update-alternatives给出的可选程序列表的位置,优先级越高的程序显示在越前面。好,再看一下我们
通过 update-alternatives --query vi 命令得到的vi链接的信息:
应该可以断定,至少update-alternatives --query vi命令是在查询/var/lib/dpkg/alternatives/vi文
件得到信息的。
接下来我们安装完整版的来观察后update-alternatives相关目录和文件的变化。用命令:
sudo apt-get install vim
来安装vim完整版。安装完成后,先来观察一下/usr/bin/vi的链接指向:
vi的链接已经被更新了,并最终指向了/usr/bin/vim.basic,也就是我们新安装的完整版的vim程序。再来
看一下/etc/alternatives和/usr/bin目录:
随着完整版的vim安装也生成了新的符号链接文件和新的程序文件。最后来看一下文件
/var/lib/dpkg/alternatives/vi的变化:
看工具比较的结果,红色部分是安装完整版vim后新增加的内容,作用是增加了一个新的可选择程序,从符
号链接可以看出,现在默认选择了/usr/bin/vim.basic程序,即vim完整版。从上面也可以看出vim完整版的
优先级30高于阉割版vim的10。看来我们的推断应该是正确的了。实际上update-alternatives是不知道哪些
程序功能相似的,如果要做到这点,程序自己要通过update-alternatives提供的配置接口来告诉
update-alternatives,即更新/var/lib/dpkg/alternatives目录下的文件或在该目录下创建下新的文件。
你会发现下生成了一个新的文件/var/lib/dpkg/alternatives/vim。
我们可以来一下运行vi命令到底是不是启动了我们完整的vim程序/usr/bin/vim.basic。在命令行敲入
vi命令。然后通过ps命令获取vi的pid(进程id),如下:
可以看到vi程序的pid是4971。接着我们可以利用proc文件系统来查看pid=4971对应的可执行程序文件完整
路径,如下图:
从图中得知,确实是运行的我们新安装的vim完整版。
最后,如果你想更改vi对应的程序入口,可以用update-alternatives --config/--set命令来更改。至
于新生成的/var/lib/dpkg/alternatives/vim文件应该是update-alternatives --install命令来完成的。
本文出自 “JiMoKuangXiangQu” 博客,请务必保留此出处http://4594296.blog.51cto.com/4584296/1793674
以上是关于Debian alternatives system: update-alternatives的主要内容,如果未能解决你的问题,请参考以下文章
Linux中dpkg工具update-alternatives实现符号链接软件版本的切换(转)