首页 > 系统相关 >Linux下alternatives命令学习总结

Linux下alternatives命令学习总结

时间:2023-07-07 11:55:07浏览次数:41  
标签:总结 bin -- alternatives usr Linux python3 python3.9

在Linux系统中提供了一个alternatives命令,用于在多个同功能的软件,或软件的多个不同版本间选择、切换。简单来说就是版本切换控制。例如,你的操作系统有多个Python版本,例如python3.6,Python 3.9,如果不用alternatives命令,那么你可能需要通过手工修改软链接来实现Python版本的切换。如果用alternatives命令就可以很容易的实现Python版本的切换和管理。

另外,关于命令alternatives与update-alternatives的关系,其实先有update-alternatives命令,然后才有alternatives,update-alternatives最开始是Debian Linux下的一个项目,用于管理多版本,它是Perl编写的,然后RHEL重写了这个项目,名字也改为了alternatives,alternatives则在基于Fedora的分发版本(Redhat, CentOS)中发行,传播,而update-alternatives一般存在Debian Linux下。但是为了统一或者方便,在RHEL下你也会看到update-alternatives这个命令,它此时实际上是一个软链接,指向alternatives命令。如下所示:

# more /etc/redhat-release 
Red Hat Enterprise Linux release 8.8 (Ootpa)
# whereis alternatives
alternatives: /usr/sbin/alternatives /etc/alternatives /usr/share/man/man8/alternatives.8.gz
# whereis update-alternatives
update-alternatives: /usr/sbin/update-alternatives /usr/share/man/man8/update-alternatives.8.gz
# ll /usr/sbin/update-alternatives
lrwxrwxrwx. 1 root root 12 Jul 27  2021 /usr/sbin/update-alternatives -> alternatives

查看alternatives命令的帮助信息

alternatives或alternatives --help

$ alternatives
alternatives version 1.19.1 - 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 <slave_link> <slave_name> <slave_path>]*
       alternatives --remove <name> <path>
       alternatives --auto <name>
       alternatives --config <name>
       alternatives --display <name>
       alternatives --set <name> <path>
       alternatives --list
       alternatives --remove-all <name>
       alternatives --add-slave <name> <path> <slave_link> <slave_name> <slave_path>
       alternatives --remove-slave <name> <path> <slave_name>

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

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

install  --生成软连接

remove   --删除软连接

config   --选择软连接

display  --显示软连接

list     --显示所有软连接

例子:显示所有软连接

$ alternatives --list
libnssckbi.so.x86_64    auto    /usr/lib64/pkcs11/p11-kit-trust.so
python                  auto    /usr/libexec/no-python
cifs-idmap-plugin       auto    /usr/lib64/cifs-utils/cifs_idmap_sss.so
ld                      auto    /usr/bin/ld.bfd
modules.sh              auto    /usr/share/Modules/init/profile.sh
python3                 manual  /usr/bin/python3.9

例子:显示python3的软连接

$ alternatives --display python3
python3 - status is manual.
 link currently points to /usr/bin/python3.9
/usr/bin/python3.6 - priority 1000000
 slave easy_install-3: /usr/bin/easy_install-3.6
 slave pip-3: /usr/bin/pip-3.6
 slave pip3: /usr/bin/pip3.6
 slave pydoc-3: /usr/bin/pydoc3.6
 slave pydoc3: /usr/bin/pydoc3.6
 slave pyvenv-3: /usr/bin/pyvenv-3.6
 slave python3-man: /usr/share/man/man1/python3.6.1.gz
/usr/bin/python3.9 - priority 3900
 slave easy_install-3: /usr/bin/easy_install-3.9
 slave pip-3: /usr/bin/pip-3.9
 slave pip3: /usr/bin/pip3.9
 slave pydoc-3: /usr/bin/pydoc3.9
 slave pydoc3: /usr/bin/pydoc3.9
 slave pyvenv-3: (null)
 slave python3-man: /usr/share/man/man1/python3.9.1.gz
Current `best' version is /usr/bin/python3.6.

如上所示,--display显示链接组的所有信息,包括链接的模式(自动还是手动)、链接priority值、所有可用的链接命令

例子:选择软连接

注意,选择软链接必须使用root权限,否则会遇到权限问题,如下所示:

$ alternatives --config python3

There are 2 programs which provide 'python3'.

  Selection    Command
-----------------------------------------------
*  1           /usr/bin/python3.6
 + 2           /usr/bin/python3.9

Enter to keep the current selection[+], or type selection number: 1
failed to create /var/lib/alternatives/python3.new: Permission denied

root用户下操作:

# alternatives --config python3

There are 2 programs which provide 'python3'.

  Selection    Command
-----------------------------------------------
*  1           /usr/bin/python3.6
 + 2           /usr/bin/python3.9

Enter to keep the current selection[+], or type selection number: 1
# alternatives --list
libnssckbi.so.x86_64    auto    /usr/lib64/pkcs11/p11-kit-trust.so
python                  auto    /usr/libexec/no-python
cifs-idmap-plugin       auto    /usr/lib64/cifs-utils/cifs_idmap_sss.so
ld                      auto    /usr/bin/ld.bfd
modules.sh              auto    /usr/share/Modules/init/profile.sh
python3                 manual  /usr/bin/python3.6

(*)星号表示当前系统使用的版本,加号表示优先级最高的。输入数值可修改默认配置,直接按回车保持原来状态

例子:生成软连接python

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

# link是在/usr/bin/,/usr/local/bin/等默认PATH搜索目录
# name是在/etc/alternatives目录中的链接名
# path是真正的可执行程序的位置,可以在任何位置
# priority是优先级

例如,当前环境只有python3,你想使用python这个命令,而不想使用python3的话,那么我们可以生成一个软连接。

# alternatives --install /usr/bin/unversioned-python python /usr/bin/python3.9 2
# alternatives --list | grep python
python                  auto    /usr/bin/python3
python3                 manual  /usr/bin/python3.9

注意,link的命令最好合乎规范,否则可能有告警信息:

# alternatives --install /usr/bin/python python /usr/bin/python3.9 2
the primary link for python must be /usr/bin/unversioned-python
# alternatives --list
libnssckbi.so.x86_64    auto    /usr/lib64/pkcs11/p11-kit-trust.so
python                  auto    /usr/bin/python3
cifs-idmap-plugin       auto    /usr/lib64/cifs-utils/cifs_idmap_sss.so
ld                      auto    /usr/bin/ld.bfd
modules.sh              auto    /usr/share/Modules/init/profile.sh
python3                 manual  /usr/bin/python3.9

关于priority优先级, 当命令链接已存在时,需高于当前值,因为当alternative为自动模式时,系统默认启用priority高的链接

例子:删除软连接

# alternatives --remove python /usr/libexec/no-python

那么我们接下来简单探究一下,在版本切换时,alternatvies命令做了一下啥

# alternatives --list | grep python3
python                  auto    /usr/bin/python3
python3                 manual  /usr/bin/python3.9
# whereis python3
python3: /usr/bin/python3.6 /usr/bin/python3.6m /usr/bin/python3 /usr/bin/python3.9 /usr/lib/python3.6 /usr/lib/python3.9 /usr/lib64/python3.6 /usr/lib64/python3.9 /usr/include/python3.6m /usr/include/python3.9 /usr/share/man/man1/python3.1.gz
# ll /usr/bin/python3
lrwxrwxrwx. 1 root root 25 May 12 11:04 /usr/bin/python3 -> /etc/alternatives/python3
# ll /etc/alternatives/python3
lrwxrwxrwx 1 root root 18 Jul  6 15:00 /etc/alternatives/python3 -> /usr/bin/python3.9
# ll /usr/bin/python3.9
-rwxr-xr-x 1 root root 7776 Dec 21  2022 /usr/bin/python3.9
# alternatives --config python3

There are 2 programs which provide 'python3'.

  Selection    Command
-----------------------------------------------
*  1           /usr/bin/python3.6
 + 2           /usr/bin/python3.9

Enter to keep the current selection[+], or type selection number: 1
# python3 --version
Python 3.6.8
# ll /usr/bin/python3
lrwxrwxrwx. 1 root root 25 May 12 11:04 /usr/bin/python3 -> /etc/alternatives/python3
# ll /etc/alternatives/python3
lrwxrwxrwx 1 root root 18 Jul  7 10:46 /etc/alternatives/python3 -> /usr/bin/python3.6

如上所示,我们看到alternatvies其实是通过多一层软链接,例如,/usr/bin/python3指向/etc/alternatives/python3,这一层关系不变, 切换python版本时,我们看到链接/etc/alternatives/python3 指向了不同的python版本来实现的。

标签:总结,bin,--,alternatives,usr,Linux,python3,python3.9
From: https://www.cnblogs.com/kerrycode/p/17534576.html

相关文章

  • 《心流》总结
    中心思想:进入心流状态时我们会感受到幸福。需要有与自己能力匹配的目标,不能太容易也不能太难,是有挑战性的,并且我们的技能是可以初步胜任的。当我们全身心投入这样的事情上时,内心会处于一种安宁、幸福的状态。在这样的状态下,我们不愿意被打扰,也不愿意中断,可以从事很长的时间而不感......
  • Linux之shell编程
     1.脚本格式要求2.脚本的执行方式一:输入输出重定向1.输入重定向<将/etc/fstab作为输出重新定向到cat命令上2.输出重定向>>现实当前文件下的项目,创建一个文本txt,ls命令重新定向到txt中并显示出来3.管道grep|二:shell里的特殊字符【$\'''`】1.“[双引号]、’[单......
  • linux 中输出连续匹配字符的下一行
     001、[root@PC1test03]#lsfile.txt[root@PC1test03]#catfile.txt##测试数据matchrandomtextline1matchmatchmatchrandomtextline2matchrandomtextline3matchmatchrandomtextline4matchrandomtextline5matchrandomtextline6......
  • 面试题总结
    一、Linux1.常用的高级命令:ps-eftopiotopnetstatdf-hfreetarrpm2.查看磁盘使用情况:ps-ef,查看内存:top、free、jmap-heap进程号,查看端口号:netstat二、shell1.常用工具awksedsortcut,知道对应名称。--》一般用Python写脚本。2.手写过......
  • Linux操作系统中,*.zip、*.tar、*.tar.gz、*.tar.bz2、*.tar.xz、*.jar、*.7z等格式的
    Linux操作系统中,.zip、.tar、.tar.gz、.tar.bz2、.tar.xz、.jar、*.7z等格式的压缩与解压zip格式压缩:zip-r[目标文件名].zip[原文件/目录名]解压:unzip[原文件名].zip1.2.注:-r参数代表递归tar格式(该格式仅仅打包,不压缩)打包:tar-cvf[目标文件名].tar[原文件名/目录......
  • Linux安装minio
    一、软件下载 二、安装minio1、安装包准备 2、检查minio是否已安装rpm-qa|grepminio 3、安装minio与mcli安装包rpm-ivhminio-20230227181045.0.0.x86_64.rpmrpm-ivhmcli-20230228001259.0.0.x86_64.rpm 4、修改配置文件查看配置文件位置systemctlst......
  • 动画总结
    animation-name:myanimation;//动画名字,指定关键帧的名字。animation-duration:4s;//动画持续时间,间接控制速率,越长越慢!animation-iteration-count:infinite;//重复次数,可以填数字也可以填infinite,infinite代表无限重复animation-timing-function:linear;//动画速......
  • 解决Linux系统中时间差8小时的问题
    今天遇到一个问题,在使用LocalDateTime.now()获取时间时,会出现于当前时间相差8个小时的情况,开始以为是linux系统的时间有问题,后来发现系统时间是正确的,最终找到了解决办法。需要指定时区-Duser.timezone=GMT+08java-jar-Duser.timezone=GMT+08/home/robot-server_V1.0.0.0.ja......
  • linux--I/O分析
    磁盘IO磁盘IO时的过程。第一步,首先是磁头径向移动来寻找数据所在的磁道。这部分时间叫寻道时间。第二步,找到目标磁道后通过盘面旋转,将目标扇区移动到磁头的正下方。第三步,向目标扇区读取或者写入数据。到此为止,一次磁盘IO完成。故单次磁盘IO时间=寻道时间+旋转延......
  • linux 中实现将指定列中多个连续的字符压缩为一个字符
     001、(base)[b20223040323@admin2test]$lsa.txt(base)[b20223040323@admin2test]$cata.txt##测试数据geneexonexonexonexon--------geneexonexon--------geneexonexonexonexon##将多个连续的exon......