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

【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实现了软件版本管理。

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

相关文章:

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

​ 我们有的时候希望在安装了新软件之后保留旧版本的软件,比如希望保留旧版本的gcc,以防以前写的C编译出问题,这时候就需要版本管理软件update-alternatives。 ​ 在此之前我们需要先弄清楚,什么是ubuntu的软件?拿C源…...

如何把linux安装到单片机中

1.如何把linux安装到单片机中 将Linux安装到单片机中通常不是一个直接的过程,因为单片机(如51系列、STC系列等)的硬件资源和处理能力有限,而Linux是一个为更强大硬件平台(如个人电脑、服务器)设计的操作系…...

Ubuntu bash按Table不联想

Ubuntu bash按Table不联想 bash-completion包未安装或损坏: 自动补全功能依赖于bash-completion包。首先,需要确保这个包已经安装。可以通过下面的命令安装或重新安装它: sudo apt install --reinstall bash-completion安装完成后&#xff0c…...

Xcode中给UIView在xib中添加可视化的属性

给UIView在xib中添加可视化的属性 效果如下图&#xff1a; 可以直接设置view 的 borderColor 、borderWidth、cornerRadius&#xff0c;也可以单独指定view的某个角是圆角。减少了代码中的属性。 完整代码&#xff1a; UIViewBorder.h #import <UIKit/UIKit.h>inter…...

中缀表达式和前缀后缀

在中缀表达式中&#xff0c;操作数可能与两个操作符相结合 但是&#xff0c;想要不带括号无歧义&#xff0c;且不需要考虑运算符优先级和结合性 所以考虑 前缀表达式&#xff0c;波兰表达式 后缀表达式 逆波兰表达式 对于人来说&#xff0c;中缀表达式是最容易读懂的。但是对于…...

强化学习面试题

强化学习面试题通常会涵盖该领域的多个方面,包括基本概念、算法、应用以及实践问题。以下是一些常见的强化学习面试题及其简要回答: 基本概念题: 什么是强化学习? 强化学习是一种通过智能体与环境交互来学习最优行为策略的机器学习范式。智能体根据当前状态选择动作,环境…...

Pytorch中的广播机制

一、广播(broadcast)机制概述 在PyTorch中&#xff0c;广播机制(Broadcast)允许对不同形状的张量执行逐元素操作&#xff0c;而无需显式地复制数据。这一机制使得编写代码更加简洁和高效。广播机制遵循一定的规则来扩展较小的张量&#xff0c;使其与较大的张量具有相同的形状 …...

2024年全国一高考数学压轴题

(3) 证明: 显然, 等差数列 { a 1 , . . . , a 4 n 2 } \{a_{1},...,a_{4n2}\} {a1​,...,a4n2​} 是 ( i , j ) (i, j) (i,j)-可分的等价于等差数列 { 1 , . . . , 4 n 2 } \{1,...,4n2\} {1,...,4n2} 是 ( i , j ) (i,j) (i,j)-可分的. 前推后显然, 我们考虑后推前, 在去…...

springboot+vue前后端项目接口校验通信数据完整性

方案&#xff1a;使用国密SM3算法实现数字签名 服务端 maven的pom文件引用 <!-- 国密算法支持 --><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15to18</artifactId><version>1.69</version><…...

进程通信(IPC-Inter Process Communication)

进程之间的通信通过内核空间实现 IPC技术 ①管道(匿名管道/命名管道-FIFO队列) ②System V IPC(消息队列、信号量和共享内存) ③套接字(UNIX套接字&Internet套接字) ※信号 软中断&#xff0c;信号提供了一种处理异步事件的方法&#xff0c;作为进程通信的一种机制&am…...

idea debug时提示”Method breakpoints may dramatically slow down debugging“的解决办法

问题现象 今天同事喊我过去看一个问题&#xff0c;项目正常启动的时候没问题&#xff0c;debug模式就卡住了&#xff0c;很久不动。我推测是哪个断点导致的&#xff0c;一看断点果然有情况。在方法上打了断点。 解决方式(Android Studio一样的解决&#xff09; 1、View Brea…...

计算机缺失msvcp100.dll如何解决?教你5种简单高效的修复方法

在现代科技发展的时代&#xff0c;计算机已经成为我们生活和工作中不可或缺的工具。然而&#xff0c;在使用计算机的过程中&#xff0c;我们常常会遇到各种问题和困扰。其中之一就是计算机找不到msvcp100.dll文件。这个问题可能会给我们的生活和工作带来很多不便&#xff0c;下…...

对硬盘的设想2:纸存,硬指针,软指针

“纸存”是设想中的存储器&#xff0c;它只能改写两次&#xff1a;写一次&#xff0c;再改一次&#xff0c;然后就不能再动了。就像拿着钢笔在纸上写字一样&#xff0c;所以叫纸存。 硬指针P、软指针S S abcd S aPcdPx P aPcdPx S aycd ①一个软指针S&#xff0c;指向数据abcd…...

Python在股票交易分析中的应用:布林带与K线图的实战回测

引言 在股票交易的世界中&#xff0c;技术分析是投资者们用来预测市场动向的重要工具。布林带&#xff08;Bollinger Bands&#xff09;作为一种动态波动范围指标&#xff0c;因其直观性和实用性而广受欢迎。本文将通过Python代码&#xff0c;展示如何使用布林带结合K线图来分…...

现代密码学-认证、消息认证码

什么是单向散列函数 单向散列函数&#xff08;one way hash function&#xff09;&#xff1a;一个输入&#xff1a;消息&#xff08;message&#xff09;,一个固定长度的输出(散列值&#xff0c;hash value),根据散列值检查消息完整性(integrity) 单向散列函数也称为消息摘要…...

在Java中为什么对a赋值为10,在进行a++时还是等于10呢

首先我们看这样一组代码 public class demo1 {public static void main(String[] args) {int a10;aa;System.out.println(a);} } 结果&#xff1a;10不是在第二步有a操作吗&#xff1f;为什么还是10呢&#xff1f; a的执行步骤如下&#xff1a; 保存当前a的值&#xff08;即10…...

免费数据库同步软件

在信息化日益发展的今天&#xff0c;数据同步成为了企业和个人用户不可或缺的一部分。数据库同步软件作为数据同步的重要工具&#xff0c;能够帮助我们实现不同数据库系统之间的数据复制和同步&#xff0c;确保数据的一致性和完整性。本文将介绍几款免费数据库同步软件&#xf…...

如何轻松修改Windows远程连接的端口号

为了增强远程连接的安全性&#xff0c;最好修改默认的远程桌面协议&#xff08;RDP&#xff09;端口号。以下步骤将指导您如何修改Windows注册表中的端口设置&#xff0c;并相应地更新防火墙规则。 一、修改注册表中的端口号 打开注册表编辑器&#xff1a; 按下Win R键&#…...

Leetcode 54. 螺旋矩阵(二维数组移动坐标)

54. 螺旋矩阵 使用vis数组记录该位置是否已经被访问 定义一个int型dir来记录方向&#xff0c;0123分别代表右下左上 当越界或碰壁已访问的位置后&#xff0c;修改dir并计算下一个位置 否则根据原dir计算下一个位置 class Solution {public List<Integer> spiralOrder(i…...

深度图的方法实现加雾,Synscapes数据集以及D455相机拍摄为例

前言 在次之前&#xff0c;我们已经做了图像加雾的一些研究&#xff0c;这里我们将从深度图的方法实现加雾展开细讲 图像加雾算法的研究与应用_图像加雾 算法-CSDN博客 接下来将要介绍如何使用深度图像生成雾效图像的方法。利用Synscapes数据集&#xff0c;通过读取EXR格式的…...

QT: 读写ini配置文件(实现qml界面登录,修改)

目录 一.功能介绍 二.暴露属性 三.指定INI文件的路径和格式。 四.登录操作 1.检查INI文件中是否含有登录信息&#xff1b; 2.读取存储的ID&#xff1b; 3.读取存储的密码; 4.成功返回1&#xff1b;失败返回2&#xff1b; 五.修改账号 1.检查INI文件中是否含有登录信…...

DevOps 安全集成:从开发到部署,全生命周期安全守护

目录 一、DevOps 安全集成&#xff1a;为什么要做&#xff1f; 二、DevOps 安全集成&#xff1a;如何做&#xff1f; 三、DevOps 安全集成的优势 四、DevOps 安全集成&#xff1a;一些最佳实践 五、DevOps 安全集成&#xff1a;未来展望 六、思考与建议 七、总结 DevOps…...

R语言数据分析15-xgboost模型预测

XGBoost模型预测的主要大致思路&#xff1a; 1. 数据准备 首先&#xff0c;需要准备数据。这包括数据的读取、预处理和分割。数据应该包括特征和目标变量。 步骤&#xff1a; 读取数据&#xff1a;从CSV文件或其他数据源读取数据。数据清理&#xff1a;处理缺失值、异常值等…...

重构大学数学基础_week04_从点积理解傅里叶变换

这周我们来看一下傅里叶变换。傅里叶变换是一种在数学和许多科学领域中广泛应用的分析方法&#xff0c;它允许我们将信号或函数从其原始域&#xff08;通常是时间域或空间域&#xff09;转换到频域表示。在频域中&#xff0c;信号被表示为其组成频率的幅度和相位&#xff0c;这…...

Shell以及Shell编程

Shell的任务 ①分析命令&#xff1b; ②处理通配符、变量替换、命令替换、重定向、管道和作业控制&#xff1b; ③搜索命令并执行。 内部命令&#xff1a;内嵌在Shell中。 外部命令&#xff1a;存在于磁盘上的独立可执行文件。 #&#xff01;/bin/bash #! 称为一个幻数&…...

从记忆到想象:探索AI的智能未来

引言 人工智能&#xff08;AI&#xff09;在信息处理、数据分析和任务自动化等方面展现了强大的能力。然而&#xff0c;在人类独有的记忆和想象力领域&#xff0c;AI仍然有很长的路要走。加利福尼亚大学戴维斯分校的心理学和神经科学教授查兰兰加纳特&#xff08;Charan Ranga…...

“安全生产月”专题报道:AI智能监控技术如何助力安全生产

今年6月是第23个全国“安全生产月”&#xff0c;6月16日为全国“安全宣传咨询日”。今年全国“安全生产月”活动主题为“人人讲安全、个个会应急——畅通生命通道”。近日&#xff0c;国务院安委会办公室、应急管理部对开展好2024年全国“安全生产月”活动作出安排部署。 随着科…...

【转】ES, 广告索引

思考&#xff1a; 1&#xff09;直接把别名切换到上一个版本索引 --解决问题 2&#xff09;广告层级索引如何解决&#xff1f; -routing、join 3&#xff09;查询的过程&#xff1a;query and fetch, 优化掉fetch 4&#xff09;segment合并策略 5&#xff09;全量写入时副…...

Unity学习要点

前言 学习Unity作为游戏开发的强大工具&#xff0c;对于初学者来说&#xff0c;掌握一些基础而实用的技巧是非常重要的。这不仅能帮助你更快地上手&#xff0c;还能在项目开发过程中提高效率。以下是一些Unity初学者的使用技巧&#xff0c;希望能为你的学习之旅提供帮助。 ##…...

简单使用phpqrcode 生成二维码图片

$path ROOT_PATH; //tp项目根路径 require_once $path.vendor/phpqrcode/phpqrcode.php; //加载phpqrcode库 $url http://.$_SERVER[HTTP_HOST]./home/index/detail?id.$param[id]; $value $url; //二维码内容 $errorCorrectionLevel L; //容错级别 $mat…...

网站空间商盗取数据/网站互联网推广

上一篇刚刚完成了nagios的自动安装&#xff0c;这篇继续吧&#xff0c;想到前些天手动配置kickstart服务器过程比较繁琐&#xff0c;思路也不够清晰&#xff0c;还是把安装配置过程写进脚本非常方便&#xff0c;感觉是一劳永逸&#xff0c;降低后续工作的劳动量&#xff0c;而且…...

临沂网站建设哪家更好/自己想做个网站怎么做

在Java中经常会涉及到对象数组的排序问题&#xff0c;那么就涉及到对象之间的比较问题。本文为大家介绍java比较器的使用。java比较器的使用对于一个实现了Comparable接口的对象&#xff0c;该接口只能实现一次。如果在一个集合里面需要使用id排序&#xff0c;而在另外一个集合…...

如何承接网站建设外包/爱情链接

文章目录如何制作GIF?网页版GIF工具PC端GIF工具手机端GIF工具GIF压缩工具GIF现在被用得十分广泛了&#xff0c;各种表情包、小动画、甚至有些小教学说明动图也是GIF做的。在现在这个信息爆炸的年代&#xff0c;GIF已不再神秘&#xff0c;很多工具都可以制作GIF了&#xff0c;如…...

政府英文网站建设外包服务方案/网络营销模式有哪些?

前言对于Qt应用来说&#xff0c;为了更大的跨平台通用性&#xff0c;使用SDL播放音频&#xff0c;同时也能做更多的扩充操作。声波声音是通过空气传播的一种连续的波&#xff0c;简称声波。声音的强弱体现在声波压力的大小上&#xff0c;音调的音调体现在声音的频率上。声音信号…...

深圳做微信网站设计/河南平价的seo整站优化定制

大家好&#xff0c;最近不少小伙伴在学 Python&#xff0c;想找个好玩的练手项目。那今天分享一个简单、好玩&#xff0c;适合新手的 Python 小项目。文章较长&#xff0c;建议收藏、喜欢关注、点赞&#xff0c;文末提供技术交流群。 以下是具体项目&#xff1a; 本文将以哔哩…...

wordpress首页添加价格/软文写作公司

假设需要交换的两个数为 a, b 使用中间变量 ------------- | a | b | t | ------------- 使用一个中间变量来做媒介来交换&#xff0c;设中间变量为t&#xff1b;则通过 a -> t; b -> a; t -> b 完成了交换&#xff0c;代码如下 var t a; a b; b t; 不使用中间变量…...