人人都会AI编程

16.1 RedHat 系:RPM 包与 YUM/DNF

更新时间:2026-07-12

Red Hat Enterprise Linux (RHEL) 及其衍生发行版(如 CentOS Stream、Fedora、Rocky Linux、AlmaLinux)采用 RPM(Red Hat Package Manager)作为底层软件包格式,并使用 YUM 或其继任者 DNF 作为上层依赖管理和安装工具。理解这一套体系,是管理此类服务器的基本功。

1. RPM:软件包的“集装箱”

RPM 包将编译好的二进制文件、配置文件、文档以及依赖关系、安装前后脚本全部打包在一个 .rpm 文件中。这种包具备以下特点:

  • 标准化查询:可以随时查看某个已安装包的信息、校验文件完整性。
  • 可校验性:使用 GPG 签名确保包未被篡改。
  • 依赖描述:包内明确声明了运行需要哪些其他软件包。

常用 RPM 命令(低层操作,直接与包文件打交道):

rpm -ivh package.rpm        # 安装新包,显示进度(i: install)
rpm -Uvh package.rpm        # 升级或安装包(U: upgrade)
rpm -e package_name         # 卸载包(e: erase)
rpm -qa                     # 列出所有已安装的包
rpm -qi package_name        # 查看已安装包的详细信息
rpm -ql package_name        # 列出包中安装了哪些文件
rpm -qf /usr/bin/vim        # 查询某个文件来自哪个包

然而,RPM 本身不会自动解决依赖关系。例如,安装 nginx 可能需要先安装 opensslpcre 等库,如果手动用 rpm 逐个安装这些依赖,过程极其繁琐。于是上层工具 YUM/DNF 应运而生。

2. YUM 与 DNF:智能包管理者

YUM (Yellowdog Updater Modified) 在 RHEL 5~7 中是标准包管理工具,它通过读取软件仓库中的元数据,自动计算并安装所有依赖,同时支持更新、搜索、分组安装等功能。从 RHEL 8 / Fedora 22 开始,DNF (Dandified YUM) 作为 YUM 的下一代实现成为默认工具,它使用更先进的依赖求解器(基于 libsolv),执行速度更快,API 更清晰。但为了兼容,大多数系统中 yum 命令仍然可用,实际上是 dnf 的符号链接或封装。

核心操作对比(以 DNF 为例,兼容 YUM 习惯):

| 任务 | 命令 | 说明 |
|------|------|------|
| 安装软件 | dnf install nginx | 自动解析并安装依赖,确认后下载安装 |
| 移除软件 | dnf remove nginx | 同时移除不再需要的依赖(可通过 autoremove) |
| 升级所有包 | dnf updatednf upgrade | 更新整个系统到仓库最新版本 |
| 搜索包 | dnf search keyword | 在包名和描述中搜索关键字 |
| 查看包详情 | dnf info nginx | 显示包的版本、大小、仓库来源等 |
| 列出仓库清单 | dnf repolist | 查看已启用的软件源 |
| 清理缓存 | dnf clean all | 清除下载的包缓存和元数据,释放空间 |
| 查看历史操作 | dnf history | 显示安装/更新/卸载的历史事务,支持回滚 |
| 查看依赖关系 | dnf deplist nginx | 列出包的依赖和被依赖关系 |

3. 软件仓库配置

YUM/DNF 的软件来源由 .repo 文件定义,通常位于 /etc/yum.repos.d/ 目录下。一个典型的仓库文件(如 nginx.repo)内容如下:

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
  • [$id]:仓库唯一标识
  • name:人类可读的描述
  • baseurlmetalink:包索引的 URL
  • gpgcheck:是否强制验证 GPG 签名(强烈建议保持为 1)
  • enabled:是否默认启用

通过添加各类官方或第三方仓库(如 EPEL、Remi、ELRepo),可以大幅扩充可用软件范围。例如,EPEL(Extra Packages for Enterprise Linux)提供了许多 RHEL 本身不带的常用软件,安装方法:

dnf install epel-release

4. 实用注意事项

  • 锁定关键包:生产环境中,有时不希望某软件(如内核、数据库)被意外升级。可以使用 dnf versionlock 插件固定版本。
  • 回滚变更dnf history undo <事务ID> 可以撤销某次操作,回归到之前状态,这是在线排错时极其保命的功能。
  • 国内镜像:默认仓库可能访问缓慢,建议将 baseurl 替换为阿里云、华为云等镜像站地址,以加快下载速度。
  • 依赖地狱规避:尽量使用官方仓库和受信任的第三方仓库,避免随意下载来源不明的单个 RPM 包,以免破坏依赖关系或引入安全隐患。

掌握 RPM 与 DNF 这套组合,你就能高效地管理 RedHat 系系统的软件生命周期,从日常安装更新到故障恢复,都有一套标准、可靠的操作流。