RPM 基础
适用于 CentOS Stream 9 & 10 / AlmaLinux 9.x & 10.x / Rocky Linux 9.x & 10.x
RPM (Red Hat Package Manager) 是 EL 系统底层的包管理工具。虽然日常操作中更常使用 DNF,但理解 RPM 基础对于查询包信息、验证包完整性以及排查问题非常有帮助。
- RPM 包的命名格式和结构
- 使用
rpm查询已安装的包信息 - 安装和验证 RPM 文件
- RPM 与 DNF 的关系
- GPG 密钥验证机制
- 一台已安装 EL 9.x 的系统
- 拥有
sudo权限的用户账户 - 了解 DNF 基础操作
RPM 包的命名格式
Section titled “RPM 包的命名格式”每个 RPM 包的文件名遵循固定格式:
名称-版本-发行号.架构.rpm以 nginx-1.24.0-1.el9.x86_64.rpm 为例:
| 部分 | 值 | 说明 |
|---|---|---|
| 名称 | nginx | 软件名称 |
| 版本 | 1.24.0 | 上游软件版本 |
| 发行号 | 1.el9 | 打包版本,el9 表示适用于 EL 9 |
| 架构 | x86_64 | 目标 CPU 架构 |
RPM 查询操作
Section titled “RPM 查询操作”RPM 的查询功能非常强大,是日常排查的利器。所有查询操作都以 rpm -q 开头。
查询某个包是否已安装
Section titled “查询某个包是否已安装”$ rpm -q nginxnginx-1.24.0-1.el9.x86_64如果未安装,输出:
package nginx is not installed列出所有已安装的包
Section titled “列出所有已安装的包”$ rpm -qa$ rpm -qa | grep sshopenssh-server-8.7p1-38.el9.x86_64openssh-clients-8.7p1-38.el9.x86_64openssh-8.7p1-38.el9.x86_64$ rpm -qa --last | head -20查询包的详细信息
Section titled “查询包的详细信息”$ rpm -qi nginx输出示例:
Name : nginxVersion : 1.24.0Release : 1.el9Architecture: x86_64Install Date: Mon 24 Mar 2026 10:00:00 AM CSTGroup : System Environment/DaemonsSize : 1918738License : BSDSignature : RSA/SHA256, Fri 15 Nov 2025 08:00:00 AM CST, Key ID ...Source RPM : nginx-1.24.0-1.el9.src.rpmBuild Date : Fri 15 Nov 2025 06:00:00 AM CSTBuild Host : build.almalinux.orgURL : https://nginx.org/Summary : A high performance web server and reverse proxy serverDescription : Nginx is a web server and a reverse proxy server...列出包中包含的文件
Section titled “列出包中包含的文件”$ rpm -ql nginx输出示例:
/etc/logrotate.d/nginx/etc/nginx/etc/nginx/conf.d/etc/nginx/conf.d/default.conf/etc/nginx/nginx.conf/usr/lib/systemd/system/nginx.service/usr/sbin/nginx/usr/share/nginx/html/index.html...查找文件属于哪个包
Section titled “查找文件属于哪个包”$ rpm -qf /usr/sbin/nginxnginx-1.24.0-1.el9.x86_64$ rpm -qf /etc/ssh/sshd_configopenssh-server-8.7p1-38.el9.x86_64仅列出包的配置文件
Section titled “仅列出包的配置文件”$ rpm -qc nginx输出示例:
/etc/logrotate.d/nginx/etc/nginx/conf.d/default.conf/etc/nginx/fastcgi.conf/etc/nginx/nginx.conf...仅列出包的文档文件
Section titled “仅列出包的文档文件”$ rpm -qd nginx查看包的依赖关系
Section titled “查看包的依赖关系”$ rpm -qR nginx$ rpm -q --whatrequires openssl-libs查询未安装的 RPM 文件
Section titled “查询未安装的 RPM 文件”以上查询命令加上 -p 参数,就可以查询尚未安装的 .rpm 文件:
$ rpm -qip ./some-package-1.0-1.el9.x86_64.rpm$ rpm -qlp ./some-package-1.0-1.el9.x86_64.rpmRPM 查询速查表
Section titled “RPM 查询速查表”| 命令 | 说明 |
|---|---|
rpm -qa | 列出所有已安装的包 |
rpm -q <包名> | 查询包是否已安装 |
rpm -qi <包名> | 查看包的详细信息 |
rpm -ql <包名> | 列出包安装的所有文件 |
rpm -qf <文件路径> | 查找文件属于哪个包 |
rpm -qc <包名> | 列出包的配置文件 |
rpm -qd <包名> | 列出包的文档文件 |
rpm -qR <包名> | 查看包的依赖关系 |
rpm -q --last | 按安装时间列出包 |
安装和管理 RPM 文件
Section titled “安装和管理 RPM 文件”安装本地 RPM 文件
Section titled “安装本地 RPM 文件”$ sudo rpm -ivh package-1.0-1.el9.x86_64.rpm参数说明:
-i:安装-v:显示详细信息-h:显示进度条
推荐:使用 DNF 安装本地 RPM
Section titled “推荐:使用 DNF 安装本地 RPM”$ sudo dnf install ./package-1.0-1.el9.x86_64.rpm升级 RPM 包
Section titled “升级 RPM 包”$ sudo rpm -Uvh package-1.1-1.el9.x86_64.rpm-U 参数的行为:如果包已安装则升级,如果未安装则安装。
删除 RPM 包
Section titled “删除 RPM 包”$ sudo rpm -e nginx验证 RPM 包
Section titled “验证 RPM 包”验证已安装的包完整性
Section titled “验证已安装的包完整性”$ rpm -V nginx如果所有文件完好,命令没有输出。如果有文件被修改,会显示修改标记:
S.5....T. c /etc/nginx/nginx.conf标记含义:
| 标记 | 说明 |
|---|---|
S | 文件大小变化 |
M | 权限或文件类型变化 |
5 | MD5 校验和变化 |
D | 设备号变化 |
L | 符号链接变化 |
U | 属主变化 |
G | 属组变化 |
T | 修改时间变化 |
P | 功能 (capabilities) 变化 |
$ rpm -VaGPG 密钥验证
Section titled “GPG 密钥验证”RPM 使用 GPG 签名来确保包的真实性和完整性。
查看已导入的 GPG 密钥
Section titled “查看已导入的 GPG 密钥”$ rpm -qa gpg-pubkey*$ rpm -qi gpg-pubkey-xxxxxxxx-yyyyyyyy手动导入 GPG 密钥
Section titled “手动导入 GPG 密钥”$ sudo rpm --import https://www.example.com/RPM-GPG-KEY-example$ sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-9验证 RPM 文件的签名
Section titled “验证 RPM 文件的签名”$ rpm -K package-1.0-1.el9.x86_64.rpm输出示例(签名有效):
package-1.0-1.el9.x86_64.rpm: digests signatures OK输出示例(签名无效或密钥未导入):
package-1.0-1.el9.x86_64.rpm: digests SIGNATURES NOT OKRPM 与 DNF 的关系
Section titled “RPM 与 DNF 的关系”理解 RPM 和 DNF 的分工很重要:
| 特性 | RPM | DNF |
|---|---|---|
安装本地 .rpm 文件 | 支持 | 支持 |
| 自动解决依赖 | 不支持 | 支持 |
| 从仓库下载安装 | 不支持 | 支持 |
| 查询包信息 | 支持 | 支持 |
| 验证文件完整性 | 支持 | 不支持 |
| GPG 签名验证 | 支持 | 支持(调用 RPM) |
简单来说:
- DNF 是高层包管理器,负责仓库管理、依赖解析和下载
- RPM 是底层包管理器,负责实际的包安装、查询和验证
- DNF 在底层调用 RPM 来完成包的安装和卸载
日常推荐使用 DNF 进行安装、更新和删除操作,使用 RPM 进行查询和验证操作。
rpm -ivh 报 “Failed dependencies”
Section titled “rpm -ivh 报 “Failed dependencies””说明包有未满足的依赖。解决方法:
$ sudo dnf install ./package.rpm需要查找某个命令由哪个包提供
Section titled “需要查找某个命令由哪个包提供”$ dnf provides */bin/dig输出示例:
bind-utils-9.16.23-14.el9.x86_64 : Utilities for querying DNS name serversRepo : baseosMatched from:Filename : /usr/bin/dig如何提取 RPM 包中的文件(不安装)
Section titled “如何提取 RPM 包中的文件(不安装)”$ rpm2cpio package.rpm | cpio -idmv- DNF 包管理基础 — 高层包管理操作
- 仓库管理 — 管理软件仓库
- EPEL 与第三方源 — 获取更多软件包
man rpm— RPM 命令完整参考