0

0

如何管理多版本软件包 alternatives命令使用详解

P粉602998670

P粉602998670

发布时间:2025-08-16 15:26:01

|

702人浏览过

|

来源于php中文网

原创

alternatives命令用于管理linux系统中多版本软件的符号链接,解决手动切换版本的麻烦;2. 核心操作包括:使用--install注册新版本并设置优先级,--config交互式切换版本,--display查看当前配置状态;3. 工作原理是通过/usr/bin下的主链接指向/etc/alternatives中的次级链接,再指向实际程序路径;4. 常见问题如版本未更新可清除shell缓存(hash -r),未注册版本需先执行--install,移除版本用--remove,手动选择后进入手动模式避免自动切换。该工具通过标准化机制实现多版本软件的灵活、可靠管理,最终确保系统级的版本切换准确生效。

如何管理多版本软件包 alternatives命令使用详解

管理多版本软件包,比如系统里同时装了JDK 8和JDK 11,或者Python 2和Python 3,

alternatives
命令就是Linux系统里一个非常趁手的工具。它本质上就是帮你管理这些不同版本软件的符号链接,让你可以非常方便、规范地在它们之间切换,避免了手动创建和维护一大堆软链接的麻烦。

解决方案

alternatives
命令提供了一种标准化的方式来管理系统中同名但不同版本的命令或文件。它通过维护一个主符号链接(通常在
/usr/bin
/bin
下),指向
/etc/alternatives
目录下的一个次级符号链接,而这个次级链接最终指向实际的程序路径。这种设计让版本切换变得非常灵活。

要使用

alternatives
,核心操作主要有几个:

  1. 注册一个新版本(

    --install
    : 当你安装了一个新版本的软件,想让
    alternatives
    管理它时,需要用
    --install
    alternatives --install    

    • : 这是你希望在
      /usr/bin
      /bin
      下创建的主符号链接,比如
      /usr/bin/java
    • : 这是
      alternatives
      内部用来识别这个软件的名称,比如
      java
    • : 这是实际的程序路径,比如
      /usr/lib/jvm/java-11-openjdk-amd64/bin/java
    • : 一个整数,数字越大,优先级越高。在自动模式下,系统会选择优先级最高的版本。

    示例: 假设你安装了OpenJDK 8和OpenJDK 11,想让

    alternatives
    管理
    java
    命令:

    sudo alternatives --install /usr/bin/java java /usr/lib/jvm/java-8-openjdk-amd64/bin/java 80
    sudo alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk-amd64/bin/java 110

    这里,

    java
    是这个"替代品组"的名字,
    80
    110
    是它们的优先级。

  2. 切换版本(

    --config
    : 当你想在不同的版本之间切换时,使用
    --config
    alternatives --config 
    它会列出所有注册在该
    name
    下的版本,让你选择一个。 示例

    sudo alternatives --config java

    执行后,你会看到一个列表,类似这样:

    There are 2 choices for the alternative java (providing /usr/bin/java).
    
      Selection    Path                                            Priority   Status
    ------------------------------------------------------------
    * 0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      110       auto mode
      1            /usr/lib/jvm/java-8-openjdk-amd64/bin/java       80        manual mode
    
    Press  to keep the current choice[*], or type selection number:

    输入对应的数字就可以切换了。

  3. 查看当前状态(

    --display
    : 想知道某个命令当前指向哪个版本,或者
    alternatives
    管理了哪些版本,用
    --display
    alternatives --display 
    示例

    alternatives --display java

    这会显示

    java
    这个替代品组的详细信息,包括当前链接指向哪里,有哪些可用的替代品,以及它们的优先级。

为什么我们需要
alternatives
?多版本共存的痛点与解决方案

说实话,在没有

alternatives
之前,管理系统里的多版本软件简直是个噩梦。想想看,你可能需要JDK 8来跑一些老项目,但新项目又要求JDK 11,甚至JDK 17。或者,你的Python环境,有些脚本依赖Python 2,大部分新开发都用Python 3。手动去改
PATH
环境变量,或者在
/usr/bin
下创建一堆软链接,然后每次切换都得小心翼翼地删掉旧的,再创建新的,这不光效率低下,还特别容易出错。我记得有次就因为手滑,把一个重要的系统命令链接给搞坏了,结果一堆东西都跑不起来,那感觉真是崩溃。

alternatives
就是来解决这个痛点的。它提供了一个统一、规范的框架。你只需要告诉它:“嘿,我有好几个
java
程序,它们都在这儿,这是它们的优先级。”然后,当你需要切换时,
alternatives --config java
一下,选个数字,完事儿。它帮你处理了底层的符号链接更新,而且是系统级的,对所有用户都生效。这种标准化,让多版本共存不再是系统管理的负担,反而成了一种灵活配置的优势。它就像一个智能的交通指挥员,让不同版本的软件在你的系统里各行其道,需要时又能迅速切换车道。

睿拓企业网站系统1.2
睿拓企业网站系统1.2

睿拓智能网站系统-睿拓企业网站系统1.2免费版软件大小:6M运行环境:asp+access本版本是永州睿拓信息企业网站管理系统包括了企业网站常用的各种功能,带完整的后台管理系统,本程序无任何功能限制下载即可使用,具体功能如下。1.网站首页2.会员注册3.新闻文章模块4.产品图片展示模块5.人才招聘模块6.在线留言模块7.问卷调查模块8.联系我们模块9.在线QQ客服系统10.网站流量统计系统11.后

下载

alternatives
命令的核心操作:安装、配置与查看

理解

alternatives
的核心,就是掌握
--install
--config
--display
这三个参数。它们构成了管理软件版本的完整生命周期。

--install
是你把一个新软件版本“介绍”给
alternatives
的入口。它的参数顺序很重要:
--install <主链接路径> <替代品组名> <实际程序路径> <优先级>
。那个
<主链接路径>
通常是
/usr/bin/java
或者
/usr/bin/python
这样的,是用户实际会执行的命令。
<替代品组名>
则是
alternatives
内部用来归类和管理这些不同版本的“名字”,比如
java
python
gcc
<实际程序路径>
就是你安装的那个具体版本的可执行文件在哪儿。而
<优先级>
是个挺有意思的设定,它决定了在“自动模式”下,哪个版本会被默认选中。数字越大,优先级越高。比如你给JDK 11设110,给JDK 8设80,那么在自动模式下,系统就会默认用JDK 11。这对于那些你希望大多数时候都用最新版本的场景非常方便。

--config
则是日常使用中最常用的。当你需要从JDK 11切换回JDK 8,或者从Python 3.9切换到Python 3.11时,就用它。它会弹出一个交互式菜单,你输入对应的数字就能完成切换。这个操作会把当前替代品组从“自动模式”切换到“手动模式”,意味着系统不再根据优先级自动选择,而是按照你手动选择的来。

最后,

--display
就像一个诊断工具。当你搞不清楚当前
java
命令到底指向哪个版本,或者想看看
alternatives
到底管理了
java
的哪些版本时,
alternatives --display java
就能给你答案。它会告诉你当前是自动模式还是手动模式,以及所有注册的路径和它们的优先级。这对于排查问题或者仅仅是确认当前环境非常有用。

深入理解
alternatives
的工作原理与常见问题排查

alternatives
的工作原理其实并不复杂,但理解它能帮你更好地排查问题。它并不是直接修改你的
PATH
环境变量(那是shell的事情),而是通过创建和管理
/etc/alternatives/
目录下的符号链接,以及最终指向这些链接的
/usr/bin
(或其他标准路径)下的主链接。

举个例子,当你配置

java
时,
alternatives
会做几件事:

  1. /etc/alternatives/
    目录下创建一个名为
    java
    的符号链接,这个链接会指向你选择的那个具体版本的
    java
    可执行文件(比如
    /usr/lib/jvm/java-11-openjdk-amd64/bin/java
    )。
  2. 确保
    /usr/bin/java
    这个主链接指向
    /etc/alternatives/java

所以,当你执行

java -version
时,系统实际上是找到
/usr/bin/java
,然后发现它指向
/etc/alternatives/java
,再发现
/etc/alternatives/java
指向
/usr/lib/jvm/java-11-openjdk-amd64/bin/java
,最终执行的就是这个路径下的
java

常见问题排查:

  • “切换了版本,但

    java -version
    显示还是旧的?” 这通常不是
    alternatives
    的问题,而是你的shell环境问题。如果你在切换版本前已经打开了一个终端,这个终端可能已经缓存了旧的
    java
    路径。简单的解决方法是:关闭当前终端,重新打开一个;或者在当前终端里执行
    hash -r
    来清除shell的命令缓存。

  • “执行

    alternatives --config 
    ,提示
    No alternatives for 
    ?”
    这意味着你还没有用
    --install
    把任何版本注册到这个
    下。你需要先用
    alternatives --install
    把你的软件版本加进去。

  • “想移除一个不再需要的版本,怎么做?” 可以使用

    alternatives --remove  
    。 比如:
    sudo alternatives --remove java /usr/lib/jvm/java-8-openjdk-amd64/bin/java
    。 注意,移除后,如果这个版本是当前活动的,
    alternatives
    会自动切换到下一个优先级最高的版本(如果存在的话)。

  • alternatives
    是自动模式,但我希望它一直用某个特定版本,不想被优先级覆盖。” 当你使用
    alternatives --config 
    手动选择一个版本后,该替代品组就会进入“手动模式”。这意味着即使有更高优先级的版本被安装,系统也不会自动切换过去,除非你再次手动选择或将其设回自动模式(通常选择列表中的
    0
    选项)。

理解这些,你会发现

alternatives
这个工具,虽然初看起来有点绕,但一旦掌握,它在管理多版本软件时的作用,简直是系统管理员和开发者的福音。它让复杂的版本管理变得井井有条,避免了不必要的混乱和错误。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

769

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

661

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

764

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

659

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1325

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

549

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

730

2023.08.11

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

1

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.5万人学习

Git 教程
Git 教程

共21课时 | 2.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号