当前位置: 首页 > article >正文

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 可以唯一标识一个组。

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

2.2 注册并执行命令

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

其中,

  • install表示安装
  • link是符号链接
  • name则是标识符
  • path是执行文件的路径
  • priority则表示优先级
# 1. 创建文件,模拟三个可互相替代的的“程序”
mkdir -p /usr/bin/t0 &&</
http://www.lryc.cn/news/2417885.html

相关文章:

  • PS(Photoshop)去水印的4个方法
  • MPEG音频文件格式(包括MP3文件格式)详解
  • 思科RIP路由协议介绍与实验操作步骤
  • 1.图文并茂详解Linux安装,客户端连接,xshell,虚拟机,虚拟网卡配置
  • 【统计类知识】大数定律与中心极限定理
  • 【笔记】位图(.bmp)和矢量图(Vector):位图是点阵图或光栅图,使用像素的一格一格来描述图像,放大以后每一个像素看就像是一个个的马赛克;矢量图是使用直线和曲线来描述图形,可以无限方法,不会失真
  • conan 详解
  • 什么是DI(依赖注入),依赖注入的原理
  • 数据库的索引
  • 用AVPlayer播放视频
  • 说走就走的「Windows」—— Windows To Go 制作详解
  • 算法篇-----粒子群算法
  • linux解压缩命令大全
  • html网页制作——HTML5响应式个人简历网站模板 web前端网页制作课作业
  • 项目介绍——面向对象与软件工程实验四
  • flex与bison入门,编译原理:flex编写词法分析器(使用windows环境)
  • NIVIDIA 硬解码学习2
  • 泛函分析的優勢在數值解析中:高效計算與準確度的平衡
  • 向量的点乘和叉乘
  • 打印机连接三种方式
  • Netbeans 适配C/C++、JAVA防坑秘笈
  • JS中几个getElementByXXX方法的区别
  • Varnish的基本应用详解
  • 使用autoit,可以节省您很多时间
  • 图文结合!非常详细Linux简介与安装!
  • CSS行高——line-height
  • Android面试:Invalidate、RequestLayout
  • Java基础—正则表达式
  • Font Awesome Icon Picker 教程
  • 开源全能免费的视频下载神器:Hitomi Downloader