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 可能需要先安装 openssl、pcre 等库,如果手动用 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 update 或 dnf 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:人类可读的描述baseurl或metalink:包索引的 URLgpgcheck:是否强制验证 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 系系统的软件生命周期,从日常安装更新到故障恢复,都有一套标准、可靠的操作流。