跳转到内容
搜索 RunEntLinux 文档

仅搜索 RunEntLinux 通用文档,各发行版文档使用各自的搜索入口。

    浏览当前文档目录

    适用于 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 包的文件名遵循固定格式:

    名称-版本-发行号.架构.rpm

    以 nginx-1.24.0-1.el9.x86_64.rpm 为例:

    部分值说明
    名称nginx软件名称
    版本1.24.0上游软件版本
    发行号1.el9打包版本,el9 表示适用于 EL 9
    架构x86_64目标 CPU 架构

    RPM 的查询功能非常强大,是日常排查的利器。所有查询操作都以 rpm -q 开头。

    查询 nginx 是否已安装
    $ rpm -q nginx
    nginx-1.24.0-1.el9.x86_64

    如果未安装,输出:

    package nginx is not installed
    列出系统中所有已安装的 RPM 包
    $ rpm -qa
    结合 grep 过滤
    $ rpm -qa | grep ssh
    openssh-server-8.7p1-38.el9.x86_64
    openssh-clients-8.7p1-38.el9.x86_64
    openssh-8.7p1-38.el9.x86_64
    按安装时间排序(最近安装的在最后)
    $ rpm -qa --last | head -20
    查看 nginx 包的详细信息
    $ rpm -qi nginx

    输出示例:

    Name : nginx
    Version : 1.24.0
    Release : 1.el9
    Architecture: x86_64
    Install Date: Mon 24 Mar 2026 10:00:00 AM CST
    Group : System Environment/Daemons
    Size : 1918738
    License : BSD
    Signature : RSA/SHA256, Fri 15 Nov 2025 08:00:00 AM CST, Key ID ...
    Source RPM : nginx-1.24.0-1.el9.src.rpm
    Build Date : Fri 15 Nov 2025 06:00:00 AM CST
    Build Host : build.almalinux.org
    URL : https://nginx.org/
    Summary : A high performance web server and reverse proxy server
    Description : Nginx is a web server and a reverse proxy server...
    查看 nginx 包安装了哪些文件
    $ 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
    ...
    查找某个文件属于哪个 RPM 包
    $ rpm -qf /usr/sbin/nginx
    nginx-1.24.0-1.el9.x86_64
    查找配置文件属于哪个包
    $ rpm -qf /etc/ssh/sshd_config
    openssh-server-8.7p1-38.el9.x86_64
    列出 nginx 包的配置文件
    $ rpm -qc nginx

    输出示例:

    /etc/logrotate.d/nginx
    /etc/nginx/conf.d/default.conf
    /etc/nginx/fastcgi.conf
    /etc/nginx/nginx.conf
    ...
    列出 nginx 包的文档文件
    $ rpm -qd nginx
    查看 nginx 依赖哪些包
    $ rpm -qR nginx
    查看哪些包依赖 openssl-libs
    $ rpm -q --whatrequires openssl-libs

    以上查询命令加上 -p 参数,就可以查询尚未安装的 .rpm 文件:

    查看未安装的 RPM 文件信息
    $ rpm -qip ./some-package-1.0-1.el9.x86_64.rpm
    查看未安装 RPM 文件中包含的文件列表
    $ rpm -qlp ./some-package-1.0-1.el9.x86_64.rpm
    命令说明
    rpm -qa列出所有已安装的包
    rpm -q <包名>查询包是否已安装
    rpm -qi <包名>查看包的详细信息
    rpm -ql <包名>列出包安装的所有文件
    rpm -qf <文件路径>查找文件属于哪个包
    rpm -qc <包名>列出包的配置文件
    rpm -qd <包名>列出包的文档文件
    rpm -qR <包名>查看包的依赖关系
    rpm -q --last按安装时间列出包
    使用 rpm 安装本地 RPM 文件
    $ sudo rpm -ivh package-1.0-1.el9.x86_64.rpm

    参数说明:

    • -i:安装
    • -v:显示详细信息
    • -h:显示进度条
    使用 DNF 安装本地 RPM 文件(自动解决依赖)
    $ sudo dnf install ./package-1.0-1.el9.x86_64.rpm
    升级已安装的包
    $ sudo rpm -Uvh package-1.1-1.el9.x86_64.rpm

    -U 参数的行为:如果包已安装则升级,如果未安装则安装。

    删除已安装的包
    $ sudo rpm -e nginx
    验证 nginx 包的文件是否被修改
    $ rpm -V nginx

    如果所有文件完好,命令没有输出。如果有文件被修改,会显示修改标记:

    S.5....T. c /etc/nginx/nginx.conf

    标记含义:

    标记说明
    S文件大小变化
    M权限或文件类型变化
    5MD5 校验和变化
    D设备号变化
    L符号链接变化
    U属主变化
    G属组变化
    T修改时间变化
    P功能 (capabilities) 变化
    验证所有已安装的包
    $ rpm -Va

    RPM 使用 GPG 签名来确保包的真实性和完整性。

    列出系统中已导入的 RPM GPG 密钥
    $ rpm -qa gpg-pubkey*
    查看某个密钥的详细信息
    $ rpm -qi gpg-pubkey-xxxxxxxx-yyyyyyyy
    导入仓库的 GPG 公钥
    $ sudo rpm --import https://www.example.com/RPM-GPG-KEY-example
    导入本地 GPG 公钥文件
    $ sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-9
    验证 RPM 文件的 GPG 签名
    $ 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 OK

    理解 RPM 和 DNF 的分工很重要:

    特性RPMDNF
    安装本地 .rpm 文件支持支持
    自动解决依赖不支持支持
    从仓库下载安装不支持支持
    查询包信息支持支持
    验证文件完整性支持不支持
    GPG 签名验证支持支持(调用 RPM)

    简单来说:

    • DNF 是高层包管理器,负责仓库管理、依赖解析和下载
    • RPM 是底层包管理器,负责实际的包安装、查询和验证
    • DNF 在底层调用 RPM 来完成包的安装和卸载

    日常推荐使用 DNF 进行安装、更新和删除操作,使用 RPM 进行查询和验证操作。

    说明包有未满足的依赖。解决方法:

    推荐方法:使用 DNF 安装本地 RPM
    $ sudo dnf install ./package.rpm

    需要查找某个命令由哪个包提供

    Section titled “需要查找某个命令由哪个包提供”
    使用 DNF provides 查找
    $ dnf provides */bin/dig

    输出示例:

    bind-utils-9.16.23-14.el9.x86_64 : Utilities for querying DNS name servers
    Repo : baseos
    Matched from:
    Filename : /usr/bin/dig

    如何提取 RPM 包中的文件(不安装)

    Section titled “如何提取 RPM 包中的文件(不安装)”
    使用 rpm2cpio 提取文件
    $ rpm2cpio package.rpm | cpio -idmv