当前位置: 首页 > news >正文

Linux alternatives / update-alternatives 使用教程

1. 系统概述

alternatives(Debian/Ubuntu 称为update-alternatives,RHEL/CentOS/Fedora 直接称为alternatives)是 Linux 系统中用于管理同一软件多版本共存的机制。

核心原理

通过维护一组符号链接(symlinks),指向由管理员配置的候选版本。系统根据优先级自动或手动选择默认版本。

适用场景

场景

示例

多版本 Java

OpenJDK 8/11/17/21

多版本编译器

GCC 不同版本

编辑器选择

vi/vim/nano/ed

桌面环境

x-window-manager

文档查看器

x-www-browser


2. 命令差异对照

发行版

命令名称

包管理器

Debian/Ubuntu

update-alternatives

dpkg/apt

RHEL/CentOS/Fedora/Rocky

alternatives

rpm/yum/dnf

openSUSE

update-alternatives

rpm/zypper

注意:以下示例统一使用update-alternatives,RHEL 系用户请将命令替换为alternatives(去掉update-前缀)。


3. 完整命令参考

3.1 安装与注册

添加新的替代项
update-alternatives --install <链接路径> <名称> <实际路径> <优先级>

参数说明

  • <链接路径>:系统命令的公共路径(如/usr/bin/java
  • <名称>:替代组的标识名称(如java
  • <实际路径>:该版本的真实可执行文件路径
  • <优先级>:数字越大,自动模式下优先级越高

Java 示例

# 安装 OpenJDK 11 sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 # 安装 OpenJDK 17(更高优先级) sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1717 # 同时注册 javac sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-17-openjdk-amd64/bin/javac 1717

3.2 查询与显示

显示特定替代组的详细信息
update-alternatives --display <名称>

示例输出

$ update-alternatives --display java java - auto mode link best version is /usr/lib/jvm/java-17-openjdk-amd64/bin/java link currently points to /usr/lib/jvm/java-17-openjdk-amd64/bin/java link java is /usr/bin/java /usr/lib/jvm/java-11-openjdk-amd64/bin/java - priority 1111 /usr/lib/jvm/java-17-openjdk-amd64/bin/java - priority 1717
查询替代组配置
update-alternatives --query <名称>
列出所有替代组
update-alternatives --get-selections
列出特定名称的所有候选
update-alternatives --list <名称>

3.3 配置与切换

交互式选择默认版本(最常用)
sudo update-alternatives --config <名称>

交互示例

$ sudo update-alternatives --config java There are 2 choices for the alternative java (providing /usr/bin/java). Selection Path Priority Status ------------------------------------------------------------ * 0 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1717 auto mode 1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode 2 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1717 manual mode Press <enter> to keep the current choice[*], or type selection number: 1
直接设置默认版本(非交互式)
sudo update-alternatives --set <名称> <实际路径>

示例

sudo update-alternatives --set java /usr/lib/jvm/java-11-openjdk-amd64/bin/java
切换为自动模式(按优先级自动选择)
sudo update-alternatives --auto <名称>
切换为手动模式(固定当前选择)
sudo update-alternatives --set <名称> <当前指向的路径>

3.4 删除与清理

移除特定候选版本
sudo update-alternatives --remove <名称> <实际路径>

示例

# 移除 Java 11 sudo update-alternatives --remove java /usr/lib/jvm/java-11-openjdk-amd64/bin/java # 同时移除 javac sudo update-alternatives --remove javac /usr/lib/jvm/java-11-openjdk-amd64/bin/javac
移除整个替代组(谨慎使用)
sudo update-alternatives --remove-all <名称>

4. 高级用法

4.1 管理从属链接(Slave Links)

某些软件有多个关联命令(如javajavackeytool等),可以一次性配置:

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1717 \ --slave /usr/bin/javac javac /usr/lib/jvm/java-17-openjdk-amd64/bin/javac \ --slave /usr/bin/javadoc javadoc /usr/lib/jvm/java-17-openjdk-amd64/bin/javadoc \ --slave /usr/bin/jar jar /usr/lib/jvm/java-17-openjdk-amd64/bin/jar

效果:切换java版本时,javacjavadocjar会自动同步切换。

4.2 验证当前配置

# 查看当前 Java 版本 java -version # 查看实际指向的路径 readlink -f $(which java) # 或直接查看 alternatives 状态 update-alternatives --display java | grep "link currently"

4.3 批量查看所有配置

update-alternatives --get-selections

示例输出

editor auto /usr/bin/vim.basic java manual /usr/lib/jvm/java-17-openjdk-amd64/bin/java javac manual /usr/lib/jvm/java-17-openjdk-amd64/bin/javac x-www-browser auto /usr/bin/firefox
http://www.jsqmd.com/news/467605/

相关文章:

  • 物美卡回收最新操作攻略 - 猎卡回收公众号
  • 2026年四川电缆与变压器回收服务商深度测评:谁才是工业产废企业的“专业护航者”? - 深度智识库
  • 避坑指南:特征转换中SVD/LSA的5个常见误区与优化方案
  • 不仅能听还能懂:网易有道发布首个同传Agent,重塑高频信息处理场景
  • 从电话通信到数字音频:PCM编码中的μ律15折线为何在北美更流行?
  • Qt5.15.2下QML地图插件源码修改实战:解决OSM在线地图加载失败问题
  • DNANet实战解析:如何用密集嵌套注意力网络提升红外小目标检测精度
  • 泛微E9移动端集成实战:如何为不同业务配置多个Emobile7工作台(附代码修改步骤)
  • 性能测试基础概念
  • 2026陕西仿古铝瓦厂家排名|源头好厂口碑推荐,选型不踩坑 - 朴素的承诺
  • 用Colab免费GPU训练专属SDXL模型:手把手教你跑通BLIP标注+Waifu Diffusion打标
  • Acunetix漏洞扫描实战:从零配置到生成专业安全报告(附常见错误排查)
  • 2025大唐杯仿真2——车联网中的V2V与PC5技术实战解析
  • ChatGLM3-6B模型服务化:FastAPI高性能接口开发
  • 玩Pokémon GO被Ban?2024年安卓Root检测绕过全攻略(附SafetyNet通关配置)
  • RCL0923光伏协议转换器与SCU融合终端:分布式光伏群调群控的智能化实践
  • CentOS7下FFmpeg安装全攻略:从在线到离线的完整解决方案(含Nux Dextop源配置)
  • Model-Contrastive Federated Learning:从SimCLR到MOON的联邦对比学习演进(CVPR 2021)
  • 5900端口安全指南:从VNC密码破解案例看企业远程控制防护策略
  • YOLO26安全帽识别踩坑实录:从标注数据到模型部署,我遇到的5个‘坑’和解决办法
  • 从日志分析到问题定位:Linux故障排查的完整工作流(含常用命令速查表)
  • Web3安全实战:从零搭建应急响应靶场(附完整工具包)
  • RISC-V驱动开发“断代危机”预警(2025 Q4起工具链全面弃用旧__attribute__((section))语法)
  • 从‘甄嬛’到‘鲁迅’:用Unsloth微调Qwen/Gemma,打造你的专属风格写作机器人
  • 中国高精度DEM数据获取与应用全指南
  • 当Nmap遇到不存在的IP:用-S参数模拟服务器连通性测试的完整避坑指南
  • Flux.1-Dev深海幻境应用:自动化软件测试用例生成实践
  • WeKnora实战案例:用公司制度文档搭建内部政策问答助手,行政必备
  • 嵌入式实战笔记 | AHL微控制器SysTick与RTC的深度应用与调试技巧
  • 灵毓秀-牧神-造相Z-Turbo问题解决:常见部署错误与解决方法