详解alternatives命令(本例以Python版本切换为例)

31 篇文章 5 订阅

                                                  详解alternatives命令(本例以Python版本切换为例)

alternatives是Linux系列操作系统的一个内置命令,即使最小化安装也有该命令,它的主要作用就是版本控制切换,比如,你的系统内有多个Python版本,Python3.8,Python2.7.5,Python3.6,。

首先,应该明确的是,Python可以多个版本共存于一个系统内,因为使用源码编译安装的时候可以指定安装目录,如果是rpm或者yum安装方式,那么,可能会存在版本冲突的问题。并且,Python的各个版本有其自身的特点,比如,Python3这一大版本基本都自带pip包管理器,Python2.7并没有pip,需要自己手动安装。为了加以区分,python3.8的pip 版本为21.0.1,Python2.7.5的pip版本为20.3.4.

环境简介:

centos7.2系统,使用自带的Python2.7.5和源码编译安装的Python3.8.1两个版本,Python2.7.5手动安装pip20.3.4,Python由于是源码编译,因此自带pip,安装好Python3.8后升级pip到21.0.1.

alternatives命令简介:

[root@centos6 piprpm]# alternatives 
alternatives version 1.7.4 - Copyright (C) 2001 Red Hat, Inc.
This may be freely redistributed under the terms of the GNU Public License.

usage: alternatives --install <link> <name> <path> <priority>
                    [--initscript <service>]
                    [--family <family>]
                    [--slave <link> <name> <path>]*
       alternatives --remove <name> <path>
       alternatives --auto <name>
       alternatives --config <name>
       alternatives --display <name>
       alternatives --set <name> <path>
       alternatives --list

common options: --verbose --test --help --usage --version --keep-missing
                --altdir <directory> --admindir <directory>

主要的常使用的参数是 install ,remove,config,display,list这5个参数。

install  --生成软连接

remove --删除软连接

config --选择软连接

display --显示软连接

list --显示所有软连接



假设Python3.8.1已经安装完毕,安装目录指定在 /usr/local/python3.8,Python2.7.5的pip安装的是pip8.1.2,然后升级到pip20.3.4,所有Python和pip都可以正常使用,

首先,将Python3.8.1加入alternatives管理,命令为:

alternatives --install /usr/bin/python python /usr/local/python3.8/bin/python3.8 3  该命令将Python3.8加入了alternatives。

其次,将Python2.7.5加入alternatives管理,命令为:

alternatives --install /usr/bin/python python /usr/bin/python2.7 2

然后,切换Python的版本到Python3.8

[root@centos6 ~]# alternatives --config python

There are 2 programs which provide 'python'.

  Selection    Command
-----------------------------------------------
   1           /usr/bin/python2.7
*+ 2           /usr/local/python3.8/bin/python3.8

Enter to keep the current selection[+], or type selection number: 2

选择2后即可切换到Python3.8.1版本了 

/usr/bin/python 首先是什么文件呢?

[root@centos7 ~]# ls -al /usr/bin/python
lrwxrwxrwx. 1 root root 7 Jan 23 22:13 /usr/bin/python -> python2

[root@centos7 bin]# ls -al /usr/bin/python2
lrwxrwxrwx. 1 root root 9 Jan 23 22:13 python2 -> python2.7

我们可以看到在未加入alternatives管理前,它是一个链接文件,指向 /usr/bin/python2 而Python2又指向了 /usr/bin/python2.7.

加入alternatives管理后,/usr/bin/python的指向又有所不同了

[root@centos6 ~]# ls -al /usr/bin/python
lrwxrwxrwx 1 root root 24 Mar 27 05:33 /usr/bin/python -> /etc/alternatives/python

[root@centos6 ~]# ls -al /etc/alternatives/python
lrwxrwxrwx 1 root root 34 Mar 27 05:33 /etc/alternatives/python -> /usr/local/python3.8/bin/python3.8

这是在切换Python版本到3.8后, /etc/alternatives/python 的指向,可以看到链接到了 /usr/local/python3.8/bin/python3.8。

那么,现在切换到Python2.7.5后呢?

[root@centos6 ~]# alternatives --config python

There are 2 programs which provide 'python'.

  Selection    Command
-----------------------------------------------
   1           /usr/bin/python2.7
*+ 2           /usr/local/python3.8/bin/python3.8

Enter to keep the current selection[+], or type selection number: 2^H

There are 2 programs which provide 'python'.

  Selection    Command
-----------------------------------------------
   1           /usr/bin/python2.7
*+ 2           /usr/local/python3.8/bin/python3.8

Enter to keep the current selection[+], or type selection number: 1
[root@centos6 ~]# ls -al /usr/bin/python
lrwxrwxrwx 1 root root 24 Mar 27 06:50 /usr/bin/python -> /etc/alternatives/python
[root@centos6 ~]# ls -al /etc/alternatives/python
lrwxrwxrwx 1 root root 18 Mar 27 06:50 /etc/alternatives/python -> /usr/bin/python2.7

这里使用 alternatives --config python  后选择的是1,切换到Python2.7了,在看链接可以看到/etc/alternatives/python 指向到了 /usr/bin/python2.7l 。

alternatives --install /usr/bin/python python /usr/local/python3.8/bin/python3.8 3 这条命令到底是怎么写的呢? install 后跟的文件必须是一个链接文件, python是项目名称,/usr/local/python3.8/bin/python3.8是实际文件的绝对路径,3是优先级。第二个命令 设定的优先级是2,表明优先使用Python3.8 这个优先等级高的Python,如果是auto模式的话。

如下图,第二行表示是手动模式,如果是auto,那么会优先使用Python3.8。

第三行说的是现在在使用的是 /usr/bin/python2.7,第四和第五行是说的两个版本的优先级,第六行意思是最好的版本是Python3.8.

[root@centos6 ~]# alternatives --display python
python - status is manual.
 link currently points to /usr/bin/python2.7
/usr/bin/python2.7 - priority 2
/usr/local/python3.8/bin/python3.8 - priority 3
Current `best' version is /usr/local/python3.8/bin/python3.8.

需要说明的是,Python版本切换后,pip管理器也是跟随自动切换的,即使pip是两个不同的组件。 

那么,经过以上的实验,我们可以得出,alternatives类似一个链接管理器,通过 alternatives --config 项目名称,然后选择序号选定使用哪个项目。从而动态的调整链接指向。

alternatives可以用在同一个系统中多gcc,tomcat,jdk版本的情况下,避免造成版本混乱的局面,是一个十分有用的Linux命令。(注意,即使重启系统,只要是manual模式,也仍会保持你的Python版本选择。)

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚风_END

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值