【ubuntu软件版本管理】利用update-alternatives管理ubuntu软件

​ 我们有的时候希望在安装了新软件之后保留旧版本的软件,比如希望保留旧版本的gcc,以防以前写的C++编译出问题,这时候就需要版本管理软件update-alternatives。

​ 在此之前我们需要先弄清楚,什么是ubuntu的软件?拿C++源码编译的来说,其实就是编译后得到的【可执行文件(没有后缀的那个东西)+它所依赖的库(.a或者.so结尾)】,如下图的QQ-linux
请添加图片描述

系统软件的可执行文件放在【/usr/bin】下面(通过apt-get安装的),库放在【/usr/lib下面】,如下图
请添加图片描述

第三方安装的软件一般建议放在【/opt/】下面(如下图1)(通过编译源码安装的,编译安装的时候可以通过--prefix=路径名后缀选安装路径(如下图2),一般都建议安装在/opt/下面,方便与系统软件区分开来,不选的话会安装在/usr/local下面),第三方安装的软件有的结构比较规整(下图3),有的比较混乱(下图4),但是都包含可执行文件以及库文件

请添加图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

​ 系统在执行软件的时候是怎么操作的呢?我们这里只讨论在终端中执行软件的操作。编译过C++文件的人都知道,如果在cmakelist中设置了可执行目标的话,最后会编译出一个可执行文件(下图1),当终端在可执行文件同级目录的时候,就可以通过文件名进行执行(下图2)。那么为什么对于cmake、gcc这种软件,我们无论在哪里都可以执行呢?那是因为这些系统软件的可执行文件目录/usr/bin已经被包含在系统环境变量PATH中了(下图3),当我们执行软件的时候,系统会自动在PATH包含的路径中去找同名的可执行文件,就拿刚才图1中的test来说,如果我们把~/build/加入PATH环境变量(通过export PATH=~/test/build:$PATH实现),无论在哪里我们都可以执行my_test了(下图4)。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

​ 那么怎么进行软件版本管理呢?在刚才的讨论中,我们已经知道了执行软件是通过运行可执行文件的方式(比如通过./my_test运行my_test),那么我们就先来看看可执行文件,不妨看看/usr/bin下的可执行文件(下图1)。我们会发现,好奇怪,为什么有的可执行文件下面会有一个箭头(下图2),那是因为这个文件不是一个真正占内存的文件,而是一个软连接(跟windows里面的快捷方式差不多),它实际上指向了别的可执行文件(下图3)。这时候就可以想到,如果把某个软连接的指向修改掉,让它指向新版本的可执行文件,是不是就可以实现软件版本的切换了呢。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
​ 这时候终于可以请出我们的update-alternatives了,它的作用就是修改软连接的指向。拿cmake举例,这里我已经安装了两个cmake,一个是系统自带的cmake-3.16.3(在/usr/bin下,如下图1,它本来的名字是cmake,这里我改了名,方便后续操作),一个是自己安装的cmake-3.28.0(在/opt下,如下图2),利用如下命令就可以使/usr/bin/cmake指向/usr/bin/cmake-3.16.3或者/opt/cmake-3.28.0/bin/cmake了:

在这里插入图片描述
在这里插入图片描述

sudo update-alternatives --install /usr/bin/cmake  cmake /usr/bin/cmake-3.16.3  90
sudo update-alternatives --install /usr/bin/cmake  cmake /opt/cmake-3.28.0/bin/cmake  100

执行完这个操作后,可以用sudo update-alternatives --config cmake进行版本切换(下图1),这里版本切换的作用就是修改可执行文件软连接的指向。用ls -n /usr/bin/cmake可以看到/usr/bin/cmake指向/etc/alternatives/cmake,然后当我们切换到cmake-3.28.0的时候可以看到/etc/alternatives/cmake指向/opt/cmake-3.28.0/bin/cmake(下图2),当我们切换到cmake-3.16.3可以看到/etc/alternatives/cmake指向/usr/bin/cmake-3.16.3(下图2)。至此我们就用update-alternatives实现了软件版本管理。

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/23068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐系统学习 一

参考:一文看懂推荐系统:召回08:双塔模型——线上服务需要离线存物品向量、模型更新分为全量更新和增量更新_数据库全量更新和增量更新流程图-CSDN博客 一文看懂推荐系统:概要01:推荐系统的基本概念_王树森 小红书-CSD…

Python 全栈体系【四阶】(五十七)

第五章 深度学习 十三、自然语言处理(NLP) 2. 传统NLP处理技术 2.4 关键词提取 关键词提取是提取出代表文章重要内容的一组词,对文本聚类、分类、自动摘要起到重要作用。此外,关键词提取还能使人们便捷地浏览和获取信息。现实…

Qt 的 d_ptr (d-pointer) 和 q_ptr (q-pointer)解析;Q_D和Q_Q指针

篇一: Qt之q指针(Q_Q)d指针(Q_D)源码剖析---源码面前了无秘密_qtq指针-CSDN博客 通常情况下,与一个类密切相关的数据会被作为数据成员直接定义在该类中。然而,在某些场合下,我们会…

这才是大模型价格战背后的真相

想必大家今天肯定被各家大模型厂商的降价新闻刷圈了,如果说 Meta Llama 3 的开源是国外大模型市场的搅局者,那 DeepSeek-V2 就是国内大模型市场的鲶鱼,但是价格战背后是大模型基础设施优化带来的物美价廉,还是浑水摸鱼的噱头&…

引擎:Shader

一、原理 创建Shader脚本,创建材质球,将物体的渲染效果Shader脚本挂载到材质球,最后把材质球挂到3d物体上面从而实现渲染。 二、模型边缘发光 原理:正对着摄像机的模型三角面边缘光最弱,垂直于摄像机的模型三角面边缘光…

解锁下载EasyRecovery2024电脑版软件 3步破解下载秘籍!

在数字时代,数据已成为我们生活中不可或缺的一部分。无论是工作中的重要文件,还是珍贵的家庭照片和视频,数据都承载着我们的回忆和努力。然而,数据的丢失也是我们常常遇到的问题。硬盘损坏、误删除、病毒攻击等都可能导致数据丢失…

Nodejs 第七十四章(微服务)

什么是微服务? micro servers 微服务和微前端是类似的,微前端就是借鉴了微服务的理念去实现的,那么微服务指的就是,将应用程序拆分成为一系列小型、独立的服务,每个服务都是专注于执行特定的业务,比如文章…

第N4周:中文文本分类

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、预备知识 中文文本分类和英文文本分类都是文本分类,为什么要单独拎出来个中文文本分类呢? 在自然语言处理(NLP&#x…

Tomcat相关概述和部署

目录 一、Tomcat知识 1.Tomcat概述 2.Tomcat组件构成 3.Tomcat 功能组件结构 4.Tomcat的请求过程 二、tomcat服务部署 1.老样子准备工作——关闭防火墙和selinux,防止其对安装过程的干扰 2.将准备好的软件包拖入/opt目录下,进行安装JDK 3.设置J…

嵌入式学习记录6.5(内存分配/构造函数/析构函数)

目录 目录 一.c动态内存分配回收 1.1分配 1.2回收 1.3new、delete和malloc、free之间的区别(重点) 二.构造函数 2.1功能,格式 2.2示例 三.析构函数 3.1功能,格式 3.2特点 3.3示例 四.思维导图/练习 4.1思维导图 4.2练习 一.c动态内存分配回…

无需复杂步骤,Win11用户轻松开启旧版文件资源管理器!

在Win11电脑操作中,用户可以使用到新版的文件资源管理器,但总是有各种错误、卡顿等问题的出现,所以很多用户都不喜欢新版资源管理器。接下来小编给大家介绍一个简单的方法,帮助Win11用户快速开启旧版文件资源管理器。 具体操作如下…

【RISC-V】站在巨人的肩膀上——看开源芯片、软件生态、与先进计算/人工智能/安全的结合

目录 会议议程专题二:RISC-V与先进计算基于RISC-V的后量子密码芯片设计,刘冬生,华中科技大学存算一体集成芯片,刘琦,复旦大学面向端侧大模型计算的RISC-V矩阵扩展架构,复旦大学,韩 军 专题五&am…

开源基于Rust编写的Web服务器

基于 RUST 的 WEB 资源服务器 Github 地址 LTPP-GIT 地址 官方文档 该项目于 2024 年 5 月 1 日开始开发 预期功能 功能支持情况当前情况多线程支持是是服务支持配置化是是防盗链支持是是gzip 支持是是反向代理支持是是自定义状态码对应资源文件是是日志支持是是负载均衡支…

easyexcel模板填充列表

引入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version></dependency>编写模板 编写代码 public class FillData {private String name;private Double number;pu…

如何解决 Zabbix模板同步超时:解决运维技术领域的BugFailed to sync Zabbix template due to timeout

如何解决 Zabbix模板同步超时&#xff1a;解决运维技术领域的BugFailed to sync Zabbix template due to timeout 原创作者&#xff1a; 猫头虎 作者微信号&#xff1a; Libin9iOak 作者公众号&#xff1a; 猫头虎技术团队 更新日期&#xff1a; 2024年6月6日 博主猫头虎…

LabVIEW源程序安全性保护综合方案

LabVIEW源程序安全性保护综合方案 一、硬件加密保护方案 选择和安装硬件设备 选择加密狗和TPM设备&#xff1a;选择Sentinel HASP加密狗和支持TPM&#xff08;可信平台模块&#xff09;的计算机主板。 安装驱动和开发工具&#xff1a;安装Sentinel HASP加密狗的驱动程序和开发…

Java物业管理系统+数据库应用程序开发[JavaSE+JDBC+idea控制台+MySQL]

背景&#xff1a; 使用JavaSEJDBCMySQL技术实现一个物业管理系统&#xff0c;具体要求如下 物业管理系统需求&#xff1a; 需求分析 1.1用户需求分析 在进入系统之前&#xff0c;要进行身份确认&#xff0c;只有用户名和用户密码都相符的用户方可进入本系统&#xff0c;为…

SASAM软件架构静态分析法-系统架构师(六)

1、体系结构权衡分析法&#xff08;Architecture Tradeoff Analysis Method ATAM&#xff09;包含四个主要活动领域&#xff0c;分别是 场景和需求的收集、体系结构视图和场景的实现、&#xff08;&#xff09;、折中。基于场景的架构分析方法&#xff08;Scenarios-based Arch…

大归纳!!教你使用<string.h>的字符函数与字符串函数!!☑

这篇博客为你归纳了所有的字符函数和最常用的字符串函数&#xff0c;以及对应的模拟实现&#xff01;&#xff01;你可以直接循着目录跳到你需要的段落哦&#xff01;&#xff01;&#x1f60d; 目录 字符函数 字符分类 字符判断函数 islower——判断小写字母 isupper——…

JVM学习-Jprofiler

JProfiler 基本概述 特点 使用方便&#xff0c;界面操作友好对被分析的应用影响小(提供模板)CPU&#xff0c;Tread&#xff0c;Memory分析功能尤其强大支持对jdbc,noSql,jsp,servlet,socket进行分析支持多种模式(离线、在线)的分析支持监控本地、远程JVM跨平台&#xff0c;拥…