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 <link> <name> <path> <priority>

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

    示例: 假设你安装了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>
    它会列出所有注册在该
    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 <enter> to keep the current choice[*], or type selection number:

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

  3. 查看当前状态(

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

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

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

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

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

理解这些,你会发现

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

443

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

605

2023.08.10

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1564

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

716

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

300

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

800

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

587

2023.07.06

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

570

2023.07.20

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

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

精品课程

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

共48课时 | 10.5万人学习

Git 教程
Git 教程

共21课时 | 4.1万人学习

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

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