浅谈Linux中的软件包管理器——基于ubuntu环境

news/2025/2/28 12:36:10/

文章目录

  • 1. 为什么要使用软件包管理器
    • 1.1 使用源码
    • 1.2 使用rpm安装包
    • 1.3 使用apt软件包管理器
  • 2. 如何使用apt
    • 2.1 软件的安装和卸载
    • 2.2 查找和搜素软件包
    • 2.3 更新并升级软件包
    • 2.4 清理缓存
  • 3. 从apt到系统生态

1. 为什么要使用软件包管理器

在Linux中,有三种软件安装方式。

1.1 使用源码

根据我们以往使用windows系统的经验,安装包本质上就是一个可执行文件,windows下的安装包,也就是用某个程序的源码在windows环境下编译得到的可执行程序。

类比到Linux中,我们想要安装软件,就可以拿到软件的源码,然后在Linux的环境下编译,得到一份可执行文件,然后通过运行这个可执行文件进行下载。

但是,这种方法难度过高,并不推荐,并且无法解决软件的依赖关系。
什么是软件的依赖关系呢?直白地说,软件往往不是单独存在的,一个软件的下载,往往不止下载这个软件自身,还要下载这个软件所依附的一些软件,即这个软件要借助其它的一些软件以实现其功能,这就是软件的依赖关系。

1.2 使用rpm安装包

rpm安装方式,实质上就是别人将软件的源码编译好,然后打包得到的安装包。

这种安装方式,虽然没有那么复杂,但是依然无法解决软件的依赖关系。

1.3 使用apt软件包管理器

在Linux中,使用apt软件包管理器既能下载软件本身,又能解决软件的依赖关系,是最为推荐的软件下载方式。

ubuntu中默认安装有apt软件包管理器。

在这里插入图片描述
apt软件包管理器的实质是什么呢?

在手机上,我们是如何下载应用的呢?我们打开手机的应用商店,应用商店里就提供了各种各样的软件安装包,我们要想下载某个软件,下载其中提供的软件安装包,最后安装即可。

apt软件包管理器相较于软件,就像手机上的APP之于应用商店的关系一样。
Linux中,所有的软件下载本质上都是到某些软件包服务器上进行下载,这些软件包服务器都是别人搭建好的。

使用apt软件包管理器下载某个软件时,apt就会向特定的软件包服务器发送下载请求,然后下载返回。此时,相应的软件下载好,同时软件所需的依赖关系也一并解决了。

你可能会疑惑,apt软件包管理器是如何找到这个软件包服务器的呢?实质上,apt中内置了一些软件包服务器的链接,下载软件时就会到这些链接所对应的软件包服务器上去查找相应软件,并下载。

在这里插入图片描述

2. 如何使用apt

2.1 软件的安装和卸载

使用apt时进行安装和卸载时,要么使用root账户,要么使用sudo进行权限提升,因为apt需要在某些要求管理员权限的目录下进行操作。

sudo apt install -y:后接具体要安装的软件名, -y 选项表示自动确认,无须手动确认。
sudo apt remove -y:后接具体要卸载的软件名, -y 选项表示自动确认。

2.2 查找和搜素软件包

sudo apt list : 列出所有可供安装的软件包,可以不使用sudo
sudo apt search : 后接关键字,会找到所有包含此关键字的软件包,可以不使用sudo

2.3 更新并升级软件包

sudo apt update : 用于从下载源处更新软件包索引,确保下载的软件包始终是最新版本的,但并不会实质性地更新已下载软件
sudo apt upgrade : 用于更新已下载软件,通常使用在update之后,可能无法解决某些软件更新后的新依赖关系
sudo apt full-upgrade : 对于upgrade无法解决的软件依赖的更新问题,可以使用 full-upgrade

2.4 清理缓存

在Linux中,下载的软件包通常会被存储在本地缓存中,清理缓存,实质上就是清理这些软件包,就像windows中软件安装好后,清理软件安装包一样。

通常情况下,不会将缓存全部清除,而是清理一些旧版本的软件包和一些不再被需要的依赖软件包。

sudo apt clean : 用于清理所有缓存
sudo apt autoclean : 用于清理旧版本的软件包
sudo apt autoremove : 用于清理不再需要的依赖包

3. 从apt到系统生态

通过前面的介绍,我们可以知道,apt这个软件包管理器,实质上是到相应的软件包服务器上去下载相应的软件包。而软件包服务器是需要维护的,软件包是需要不断更新的,而linux系统是开源的,并不是闭源的盈利性系统,那为什么会有人愿意自发地去进行维护呢?

这实际上设计到系统的生态问题。看一个系统优不优秀,并不是单单看这个系统本身,还要看与之相联系的许多东西。

在这里插入图片描述
所以,发展一个操作系统,实质上就是发展这个操作系统的生态,而软件体系,是操作系统生态中非常重要的一环。

一个操作系统的生态越好,使用这个操作系统的人便会越多,对这个操作系统的依赖性便会越强。

在这样的情况下,如果一个维护该操作系统生态的团队因为Linux开源的非盈利特性,而无以为继,这时,习惯并依赖于这个操作系统的个人、社会组织乃至公司,就会采用募捐等方式为这个团队筹集资金,使之能够继续维护该操作系统的生态。

所以,Linux的开源,本质上也是一种商业模式,并不会因为开源而导致操作系统的生态无人维护和发展。

在这里插入图片描述


http://www.ppmy.cn/news/1575500.html

相关文章

嵌入式硬件篇---常用的汇编语言指令

文章目录 前言汇编语言简介1. 数据传送指令MOVPUSHPOPXCHG 2. 算术运算指令ADDSUBMULDIVINCDEC 3. 逻辑运算指令ANDORXORNOTSHL/SHR 4. 控制转移指令JMPCALLRETJE/JZJNE/JNZJG/JNLEJL/JNGE 5. 比较与测试指令CMPTEST 6. 标志寄存器操作指令STCCLCSTDCLD 7. 字符串操作指令MOVSL…

微信小程序调用火山方舟(字节跳动火山引擎)中的DeepSeek大模型

微信小程序的轻量化特性与DeepSeek大模型的AI能力结合,可快速构建智能问答、内容生成等场景化服务。通过火山方舟平台提供的标准化接口,开发者无需深入算法细节即可调用模型能力。 一、注册火山引擎账号,创建API Key和model(接入…

Protobuf原理与序列化

本文目录 1. Protobuf介绍2. Protobuf的优势3. 编写Protobuf头部全局定义消息结构具体定义字段类型定义标签号Base128编码 4. TLVProtobuf的TLV编码如何通过Varint表示300? 5. 编译Protobuf6. 构造消息对象 前言:之前写项目的时候只是简单用了下Protobuf…

sql时间函数

1、adddate—将时间/日期间隔添加到日期 adddate("2015-01-03",INTERVAL 1 day) #2015-01-042、date_add,date_sub—增加/减去指定的时间间隔 date_add("2025-02-27",interval 1 day) #2025-02-28 date_sub("2025-02-27",interval 1 day) #202…

DeepSeek-R1 蒸馏

蒸馏的概念 简介 蒸馏(Distillation,又称模型蒸馏、数据蒸馏、知识蒸馏等)是一种通过大模型(教师模型)生成或优化训练数据,使小模型(学生模型)能够高效学习的技术,其核…

11、ubuntu-22.04安装go的最新版本

卸载 apt 版(防止冲突): sudo apt remove golang-go删除旧的 Go 安装目录(假设安装在 /usr/local/go): sudo rm -rf /usr/local/go sudo apt autoremove下载最新版本 Go 1.24 压缩包: wget h…

解决单元测试 mock final类报错

文章目录 前言解决单元测试 mock final类报错1. 报错原因2. 解决方案3. 示例demo4. 扩展 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0…

C++ 设计模式 十二:责任链模式 (读书 现代c++设计模式)

责任链 文章目录 责任链场景指针链代理链总结**责任链模式的核心思想****何时需要使用责任链模式?****责任链模式解决的核心问题****与其他设计模式的协同使用****与其他模式的对比****经典应用场景****实现步骤与关键点****注意事项****总结** 今天是第十二种设计模…