CentOS(及其继任者 Rocky/AlmaLinux)和 Ubuntu 在软件包管理上的核心差异,归根结底是 RPM 体系与 DEB 体系 的分野。这不仅仅是命令行的不同,更深层的是底层依赖解析逻辑、仓库结构以及社区生态习惯的差异。
作为一线运维或开发者,日常打交道最多的是 yum/dnf 和 apt/apt-get。下面从实际使用场景出发,拆解几个关键维度的区别:
1. 包管理器内核与命令演变
-
RedHat 系 (CentOS/RHEL):
- 早期使用
rpm进行底层安装,但直接操作 rpm 极易遇到依赖地狱。 - 现代版本主要使用
yum(Yellowdog Updater Modified),它是基于 RPM 的前端工具,负责解决依赖关系。 - CentOS 8+ 及后续衍生版逐步迁移到
dnf(Dandified YUM)。dnf是yum的重写版,性能更好,并行下载,依赖解析算法更先进。目前建议统一使用dnf,因为yum在很多新发行版中只是指向dnf的软链接。 - 典型命令:
dnf install <package>,dnf update,dnf remove <package>
- 早期使用
-
Debian 系 (Ubuntu):
- 核心是
dpkg,用于本地 .deb 包的解压和安装。 - 用户层面主要使用
apt(Advanced Package Tool) 或其前身apt-get。apt是较新的前端,对终端用户更友好,输出更简洁;apt-get更适合脚本自动化。 - 典型命令:
apt install <package>,apt upgrade,apt remove <package>
- 核心是
注意: 虽然
apt-get依然广泛使用且稳定,但官方推荐新用户优先使用apt,因为它提供了进度条和更清晰的提示。
2. 仓库结构与 EPEL vs Universe/Multiverse
这是最容易让新手困惑的地方。
-
CentOS/RHEL:
- 默认仓库非常“纯净”,只包含经过严格测试的基础组件和核心应用。很多常用软件(如 nginx, php-fpm, docker-ce)不在默认仓库里。
- EPEL (Extra Packages for Enterprise Linux) 是事实上的标准扩展源。由 Fedora 项目维护,提供大量高质量的非自由软件。安装 EPEL 后,才能方便地通过
dnf安装大多数主流开源软件。 - 商业软件或特定版本服务通常需要通过厂商提供的额外 repo 文件(如 Docker 官方源、Nginx 官方源)来添加。
-
Ubuntu:
- 默认仓库相对丰富,包含了更多非核心的应用。
- 仓库分为
main(完全支持),universe(社区维护,无官方支持),restricted(专有驱动),multiverse(版权限制软件)。 - 对于普通用户,
apt默认启用了 main 和 universe,因此很多软件可以直接安装,无需像 CentOS 那样先配置 EPEL。 - Ubuntu 也有自己的 PPA (Personal Package Archives) 机制,类似于 CentOS 的第三方 repo,但 PPA 更分散,质量参差不齐,需谨慎使用。
3. 依赖解析与冲突处理
-
CentOS (dnf):
- 依赖解析极其严格。如果两个包有冲突,
dnf通常会报错并拒绝安装,要求你手动解决。这种“保守”策略保证了系统稳定性,但也增加了排错成本。 - 支持模块 (Modules),允许在同一系统中切换不同版本的运行时环境(如 Python 3.6 和 3.9),这在容器化和微服务架构中很有用。
- 依赖解析极其严格。如果两个包有冲突,
-
Ubuntu (apt):
- 依赖解析相对灵活。在某些情况下,
apt可能会自动移除冲突包或升级相关依赖,行为有时不如 dnf 可预测。 - 没有原生的多版本共存模块机制,通常通过源码编译、Snap 包或 Docker 来解决版本冲突问题。
- 依赖解析相对灵活。在某些情况下,
4. 服务管理与配置
虽然这不是直接的包管理,但与包安装紧密相关:
- CentOS: 使用
systemctl管理服务。配置文件通常在/etc/<service>/下,遵循 FHS (Filesystem Hierarchy Standard) 规范,结构清晰。 - Ubuntu: 同样使用
systemctl。但 Ubuntu 更倾向于使用snap或flatpak分发应用,这些应用的配置文件路径可能不在传统位置,而是隔离在/var/lib/snapd/等目录下。
5. 实际工作建议
| 场景 | CentOS/Rocky/Alma | Ubuntu |
|---|---|---|
| 企业级生产环境 | 首选。稳定性高,长期支持周期长(10年+),适合运行数据库、中间件等核心服务。 | 次选。除非团队熟悉 Debian 生态,否则稳定性略逊于 RHEL 系。 |
| 开发/测试环境 | 需先配置 EPEL,再装基础工具链。 | 开箱即用,apt update && apt install build-essential 即可快速搭建环境。 |
| 云原生/容器化 | 两者皆可,但镜像体积 Ubuntu 通常更小(基础镜像)。 | 更流行,因 Docker 官方镜像多以 Ubuntu 为基础构建。 |
| 脚本自动化 | 使用 dnf -y install,注意处理 EPEL 安装步骤。 |
使用 apt -y install,注意处理 DEBIAN_FRONTEND=noninteractive 避免交互式提示。 |
总结
- 如果你追求极致稳定和长期支持,选择 CentOS/RHEL 系,接受其“少而精”的默认仓库,善用 EPEL 和第三方 repo。
- 如果你追求快速上手和丰富的软件资源,选择 Ubuntu,利用其庞大的 universe 仓库和 PPA,但要警惕第三方源的兼容性风险。
关键点提醒:
- 不要混用包管理器:不要在 CentOS 上用
apt,也不要在 Ubuntu 上用yum,除非你有特殊需求并清楚后果。 - 更新缓存:每次添加新 repo 后,务必执行
dnf makecache或apt update,否则无法找到新包。 - 清理残留:CentOS 中可用
dnf autoremove清理无用依赖;Ubuntu 中可用apt autoremove。定期清理有助于节省磁盘空间。
掌握这两套体系的差异,能显著提升你在异构服务器集群中的运维效率。
云技术博客