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

管理多版本软件包,比如系统里同时装了JDK 8和JDK 11,或者Python 2和Python 3,
alternatives
命令就是Linux系统里一个非常趁手的工具。它本质上就是帮你管理这些不同版本软件的符号链接,让你可以非常方便、规范地在它们之间切换,避免了手动创建和维护一大堆软链接的麻烦。
解决方案
alternatives
命令提供了一种标准化的方式来管理系统中同名但不同版本的命令或文件。它通过维护一个主符号链接(通常在
/usr/bin
或
/bin
下),指向
/etc/alternatives
目录下的一个次级符号链接,而这个次级链接最终指向实际的程序路径。这种设计让版本切换变得非常灵活。
要使用
alternatives
,核心操作主要有几个:
注册一个新版本(
--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 80sudo alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk-amd64/bin/java 110
这里,
java
是这个”替代品组”的名字,
80
和
110
是它们的优先级。
切换版本(
--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 modePress to keep the current choice[*], or type selection number:
输入对应的数字就可以切换了。
查看当前状态(
--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
一下,选个数字,完事儿。它帮你处理了底层的符号链接更新,而且是系统级的,对所有用户都生效。这种标准化,让多版本共存不再是系统管理的负担,反而成了一种灵活配置的优势。它就像一个智能的交通指挥员,让不同版本的软件在你的系统里各行其道,需要时又能迅速切换车道。
LimeSurvey在线问卷管理系统
LimeSurvey是一款在线问卷管理系统,具有问卷的设计、修改、发布、回收和统计等多项功能。同时它也是一个开源软件,其最新版本的软件包可以完全免费获取和使用。它集成了调查程序开发、调查问卷的发布以及数据收集等功能,使用它,用户不必了解这些功能的编程细节。 网上收集的调查数据可以导出多种文件格式以便分析,例如 spss数据格式 *.dat文件。
198 查看详情
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
会做几件事:
在
/etc/alternatives/
目录下创建一个名为
java
的符号链接,这个链接会指向你选择的那个具体版本的
java
可执行文件(比如
/usr/lib/jvm/java-11-openjdk-amd64/bin/java
)。确保
/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
这个工具,虽然初看起来有点绕,但一旦掌握,它在管理多版本软件时的作用,简直是系统管理员和开发者的福音。它让复杂的版本管理变得井井有条,避免了不必要的混乱和错误。
以上就是如何管理多版本软件包 alternatives命令使用详解的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/939090.html
微信扫一扫
支付宝扫一扫