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命令来完成的。

时间: 2024-08-09 03:37:05

Debian alternatives system: update-alternatives的相关文章

简介linux下的多版本管理工具—alternatives

alternatives是Unix下重要的版本管理工具,它最早是在debain的系统中出现,因为它强大实用性使得它在各个Unix环境中大量的移植使用,而我们在平时的时候可能最经常使用的是java的openjdk工具包的版本转换,而在alternatives实现多版本是使用替换系统中命令的link指向来实现版本的转换,它默认的多版本link文件都是放在/etc/alternatives路径下,在实际生产中可以用他来管理系统中不同软件的版本问题. 在这里就用openjdk工具包做例子,openjdk

alternatives命令用法

说明: alternatives是Linux下的一个功能强大的命令,只能在root权限下执行:如系统中有几个命令功能十分类似,却又不能随意删除,那么可以用 alternatives 来指定一个全局的设置 alternatives常用于同一个系统中安装同一软件的多个版本.比如为了开发需要,我需要安装JDK1.6,同时还需要JDK1.7,我怎么样才能忽略安装路径,按照我自己的意思,使用我想要的java版本呢? 使用方法: [[email protected] tools]# alternatives

centos/linux alternatives与update-alternatives详解与软件版本切换

update-alternatives是linux系统中专门维护系统命令链接符的工具,通过它可以很方便的设置系统默认使用哪个命令.哪个软件版本,比如,我们在系统中同时安装了open jdk和sun jdk两个版本,而我们又希望系统默认使用的是sun jdk,那怎么办呢?通过update-alternatives就可以很方便的实现了. 根据update-alternatives 命令查看该命令的选项 [[email protected] ~]$ update-alternativesalterna

alternatives命令使用方法

alternatives命令使用方法 alternatives是Linux下的一个功能强大的命令.仅仅能在root权限下运行.如系统中有几个命令功能十分相似,却又不能任意删除,那么能够用 alternatives 来指定一个全局的设置. alternatives经常使用于同一个系统中安装同一软件的多个版本号.比方为了开发须要,我须要安装JDK1.4.2,同一时候还须要JDK1.6.10,我怎么样才干忽略安装路径,依照我自己的意思,使用我想要的java版本号呢? 以下为您一一道来. alterna

变更Linux下的Java版本 alternatives

默认正常情况下,即使使用Java 1.6版本Java脚本jdk-6u31-linux-i586.bin,安装Java运行后,会出现自动升级为1.7版本状态的情况.针对某些应用程序需要基于1.6版本方可运行的情况,需要降级为1.6.具体的操作方法有两种:1. 使用alternatives命令来实现.alternatives是Linux下的一个功能强大的命令,只能在root权限下执行.如系统中有几个命令功能十分类似,却又不能随意删除,那么可以用 alternatives 来指定一个全局的设置.[[e

linux alternatives命令详解

alternatives是Linux下的一个功能强大的命令.只能在root权限下执行.如系统中有几个命令功能十分类似,却又不能随意删除,那么可以用 alternatives 来指定一个全局的设置. alternatives常用于同一个系统中安装同一软件的多个版本.比如为了开发需要,我需要安装JDK1.4.2,同时还需要JDK1.6.10,我怎么样才能忽略安装路径,按照我自己的意思,使用我想要的java版本呢? 下面为您一一道来. alternatives的命令行执行如下:[[email prot

linux jdk 使用alternatives多版本控制

安装配置 需要配置两个内容,分别是java和javac命令,指定jdk目录和优先级:alternatives --install /usr/bin/java java /usr/local/jdk版本/bin/java 1400alternatives --install /usr/bin/javac java /usr/local/jdk版本/bin/javac 1400 注意需要注释掉profile文件里面的JAVA_HOM 查看可用的版本信息alternatives --display j

实例场景应用(sun JDK1.7和sun JDK1.8切换alternatives)

Java运用于执行java程序(java运行环境)Javac运用于java程序编译(java程序开发环境)步骤二:alternatives安装JDK#alternatives --install /usr/bin/java java /usr/local/jdk版本/bin/java 1#alternatives --install /usr/bin/javac java /usr/local/jdk版本/bin/javac 2步骤二:查看可用的版本信息#alternatives --displ

Building OpenCASCADE on Debian

Building OpenCASCADE on Debian [email protected] Abstract. When you are familiar with OpenCASCADE on Windows, you should try it on Linux operating system, because of Debian is also open source like OpenCASCADE. The paper is focus on how to building t