当前位置:   article > 正文

alternatives命令总结_/etc/alternatives

/etc/alternatives

在CentOS上安装Python3,默认的 python 指向 python2.7。
我想让 python 默认指向 python 3.6,可以手动修改。
但是想到有个 alternatives 命令,可以把这个过程自动化,遂再次学习一下,做记录。

1. 关键概念

先大概阅读一下手册。

有些软件他们的功能相同或类似,能相互替代,比如1)/usr/bin/vi/usr/bin/ed都是本编辑器,相互之间可以作为替代品使用;再比如,2)gcc 4.2gcc 9.2只是版本不同,更是明显的互相替代软件;3)OpenJDK和Oracle JDK以及它们的不同版本都是可以互相替代的。alternatives 系统就是用来解决这些问题的。
以1)为例,可以把/user/bin/vi设为整个系统的默认编辑器,一种方式是,创建符号链接/usr/bin/editor使其默认指向/usr/bin/vi,其他用户和程序使用编辑器的使用只需要调用editor命令即可;当管理员想要更改默认编辑器时,简单的更改/user/bin/editor的指向就行了。
扯两句闲话,像1)这种简单的情形手动完成也很方便,但是a)如果程序多起来的时候,纯靠手工管理容易混乱、忘记;b)有些软件同时包含多个可执行文件,它们的切换应该是整体切换,手动容易乱;c)手工切换要求管理者对软件有十分透彻的理解,否则搞错了怎么办,比如弄错了软件和文档的对应关系,但如果有alternatives系统,然后大家都遵守它的使用规则,让软件发行者负责管理软件中各部分的关联关系,然后一起打包进RPM发行包中,就能大大减轻管理员的负担。
回到正题,1)在alternatives会这样实现/usr/bin/editor—>/etc/alternatives/editor–>/usr/bin/vi,就是在/etc/alternatives/目录下多加了一层间接的符号链接。vi和ed都是文本编辑器,并用/user/bin/editor指向其中的一个,在alternatives系统里,我们说软件vi和ed有相同的通用名(generic name):editor,并把/usr/bin/editor称为链接(link),把/usr/bin/vi/usr/bin/ed都叫做路径(path);这是最基本的情况。而向gcc这样的软件包含多个可执行程序gccg++,这就有了master、slave 链接的概念。
一个generic name下包含多个互相替代品(alternatives),每个互相替代品也叫一个组(group),一个组由至少一个主链接和零至多个从链接组成。
generic name、alternative、grou、master、slave之间的逻辑关系
alternative directory:/etc/alternatives:这里保存alternative系统中中间那一层符号链接。

administration directory: /var/lib/alternatives:这里就是alternative系统的数据库,所有的alternative都在这里有登记,并且保存这各个alternative的状态信息。
主从链接是为了解决软件整体性问题:当主链接被设为默认、删除时,从链接会同步处理。

自动模式和手动模式:一个generic name第一次安装后,它处于自动模式;一旦手动设置某个组为默认组,它就变成了手动模式,并一直保持手动模式,直到显式使用命令把他设为自动模式。自动模式的含义是:alternatives系统会在安装、卸载软件时自动更新相关链接;而手动模式下,系统不会对链接做任何修改,一切都由系统管理员说了算。

Each link group is, at any given time, in one of two modes: automatic or manual. When a group is in automatic mode, the alternatives system will automatically decide, as packages are installed and removed, whether and how to update the links. In manual mode, the alternatives system will not change the links; it will leave all the decisions to the system administrator.
最后,同一个name下的各个组有一个相关联的优先级,比如0,30,50,数值越大优先级越高,50就比30高;自动模式下alternatives系统根据优先级选择默认组。

# 1. --install 新注册一个group到generic name中
# alternatives --install link name path priority[--slave slink sname spath]...
$ sudo alternatives --install /usr/bin/gcc gcc /usr/local/bin/gcc 4 --slave /usr/bin/g++ g++ /usr/local/bin/g++
# 2. --display name 显示某个通用名字中包含的组以及各个组的优先级、主从链接
# 3. --list 列出alternative系统中所有的组
$ alternatives --list
$ alternatives --dispaly gcc
# 4. --config name 交互式更改某个通用名字中的默认组;也可以
# 5. --set name path 直接设置默认组(这里的path是组中的master link的实际路径)
# 6. --auto name 把name的模式设为自动
# 7. --remove name path 删除某个组
# 由此可见,在命令行中,name + path 可以唯一标识一个组。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2. 做个实验

2.1 环境

$ cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
$ uname -r
3.10.0-1062.4.1.el7.x86_64
$ alternatives --version
alternatives version 1.7.4
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.2 注册并执行命令

alternatives --install <link> <name> <path> <priority>
  • 1

其中,

  • install表示安装
  • link是符号链接
  • name则是标识符
  • path是执行文件的路径
  • priority则表示优先级
# 1. 创建文件,模拟三个可互相替代的的“程序”
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/261078
推荐阅读
相关标签
  

闽ICP备14008679号