省流版本:
APT:Debian/Ubuntu 系统的包管理工具,用于自动化安装、更新、卸载软件包及解决依赖。
YUM:RHEL/CentOS/Fedora 系统的包管理器,功能类似,专注于 RPM 包管理和依赖处理。
(核心:包管理 + 依赖处理 + 适用系统区分)
超级理解版本:
Linux中的仓库包(后缀:.rpm或者.deb)就是Windows中的压缩包(zip)
我们在Windows环境下安装软件单有压缩包还不行
还要“解压软件+模拟鼠标点击安装的过程+自动安装软件可以正常运行的组件”
上述红字部分即apt或者yum的功能
总结:
即apt或者yum == 解压软件+模拟鼠标点击安装的过程+自动安装软件可以正常运行的组件
非省流版本:
apt(Advanced Package Tool)和yum(Yellowdog Updater Modified)是 Linux 系统中两大主流的包管理工具,分别服务于 Debian/Ubuntu 系和 Red Hat/CentOS/Fedora 系发行版。它们的差异不仅体现在命令语法上,更源于其底层设计哲学、历史背景和技术实现。
dpkg 的早期时代(1993)
Debian 是最早采用包管理系统的 Linux 发行版之一。1993 年,Debian 项目创始人 Ian Murdock 开发了 dpkg(Debian Package Manager),用于安装和管理 `.deb` 格式的软件包。然而,dpkg 仅能处理单个软件包的安装,无法自动解决依赖关系,用户需手动下载依赖包。
apt 的诞生(1998)
为了解决依赖管理问题,Debian 社区在 1998 年推出了 apt。它通过引入软件仓库(repository)的概念,自动解析依赖关系并从远程仓库下载所需包。apt 的早期版本由 Jason Gunthorpe 主导开发,迅速成为 Debian 及其衍生版(如 Ubuntu)的核心工具。
RPM 的起源(1997)
Red Hat 在 1997 年推出了 RPM(Red Hat Package Manager),用于管理 `.rpm` 格式的软件包。RPM 解决了软件打包和安装的标准化问题,但与 dpkg 类似,无法自动处理依赖。
yum 的出现(2003)
为解决 RPM 的依赖问题,社区开发了多个工具(如 up2date、Yellow Dog Linux 的 `yup`)。2003 年,Seth Vidal 等开发者基于 Python 编写了 yum,成为 Red Hat 系发行版的默认包管理器。它通过连接远程仓库,自动下载依赖项并管理更新。
1. 包格式与底层工具
apt
- 包格式:`.deb`(基于 ar 归档格式,包含元数据和文件)。
- 底层工具:`dpkg` 负责实际安装/卸载操作,apt 负责依赖解析和仓库管理。
- 依赖解析算法:基于 SAT(布尔可满足性问题)的先进算法,支持复杂依赖关系的快速解析。
yum
- 包格式:`.rpm`(使用 cpio 归档,包含 SPEC 文件定义的元数据)。
- 底层工具:`rpm` 处理包安装,yum 负责依赖管理。
- 依赖解析算法:早期采用简单的贪婪算法,易出现依赖冲突;后续版本改进为基于 DNF 的 Libsolv 库(依赖关系求解器)。
2. 仓库与配置
apt
- 仓库配置:`/etc/apt/sources.list` 或 `/etc/apt/sources.list.d/` 目录下的独立文件。
- 缓存机制:通过 `apt update` 更新本地包索引(存储在 `/var/lib/apt/lists/`)。
- 优先级控制:支持复杂的包版本优先级规则(`/etc/apt/preferences`)。
yum
- 仓库配置:`/etc/yum.repos.d/` 目录下的 `.repo` 文件,支持分片配置。
- 缓存机制:仓库元数据存储在 `/var/cache/yum/`,更新需 `yum makecache`。
- 插件系统:支持通过插件扩展功能(如 `yum-plugin-priorities`)。
三、核心功能与命令对比
| 功能 | apt | yum |
|------------------------|---------------------------------------------|-------------------------------------------|
| 更新包列表 | `apt update` | yum check-update |
| 安装包 | `apt install
| 删除包 | `apt remove
| 升级所有包 | `apt upgrade` | yum update |
| 搜索包 | `apt search
| 清理缓存 | `apt clean` | `yum clean all` |
| 显示包信息 | `apt show
四、后续发展与现状
1. apt 的持续优化
apt 2.0(2014):引入并行下载、增量更新等特性。
apt 与 Snap/Flatpak:现代 Debian/Ubuntu 系统整合了 Snap 包管理,但 apt 仍是核心工具。
2. yum 的替代与演进
DNF 的崛起(2015):Fedora 22 和 RHEL 8 开始使用DNF(Dandified Yum),取代了 yum。DNF 基于 Libsolv 库,依赖解析更快,支持事务回滚。
yum 的维护状态:yum 仍存在于旧版系统(如 CentOS 7),但已停止活跃开发。
五、总结:设计哲学与适用场景
apt
优势:依赖解析高效、命令简洁、社区支持广泛。
适用:Debian、Ubuntu 及其衍生发行版。
yum/DNF
优势:插件扩展性强、企业级支持(如 Red Hat)。
适用:CentOS、Fedora、RHEL 等 Red Hat 系发行版。
两者差异的核心在于其服务的生态系统:apt 是 Debian 自由精神的产物,强调易用性和社区协作;yum 则体现了 Red Hat 的企业需求,注重稳定性和可扩展性。随着容器化和通用包格式(如 Flatpak)的兴起,传统包管理器的角色正在演变,但 apt 和 yum 仍是 Linux 生态的基石。