首页/系统/Linux 运维命令速查/rpm 底层包操作与校验

rpm 底层包操作与校验

rpm 直接操作 .rpm 与数据库:-i 安装、-U 升级、-e 卸载、-V 校验文件完整性、-qp 查询包文件;绕过依赖但获得精细控制。

Linux 运维命令速查系统更新于 2026-10-13

rpm 是什么

rpm 是 RHEL 系的底层包管理工具,直接读写 .rpm 文件与本地 RPM 数据库。它不解析依赖关系,所以安装时报 Failed dependencies 属于正常现象;它的真正强项是查询与校验:-q 查是否安装、-ql 列文件清单、-qf 反查文件归属、-V 校验文件自安装以来是否被改动。最后一项是排查「系统文件被改过」的标准手段。日常装包应当用 dnf,只有在需要精细控制、离线安装或系统文件取证时才直接使用 rpm。

基本信息

适用平台RHEL/CentOS/Rocky/AlmaLinux/Fedora;openSUSE 用 zypper 管理但 rpm 仍可用于查询
命令语法rpm [选项] 包名或包文件
查询类选项-q 是否安装 -qi 详情 -ql 文件清单 -qf 反查归属 -qa 列出全部已装 -qc 只列配置 -qd 只列文档
操作类选项-ivh 安装 -Uvh 升级 -e 卸载 --test 干跑不落地 -V 校验文件
权限说明安装、升级、卸载需要 root;查询普通用户即可

典型使用场景

  • 文件归属排查:某个二进制或配置文件是哪个包装的,用 -qf 直接回答
  • 系统取证:用 -V 找出被改动过的系统可执行文件与库
  • 离线部署:内网无仓库时用 -ivh 装本地 rpm 包,依赖用手工方式补齐
  • 版本核对:确认线上包的版本、架构与签名信息
  • 应急卸载:包管理器的元数据损坏时用 rpm 直接操作

常用示例

常用示例
rpm -q nginx                       # 是否安装,输出含版本与架构
rpm -qi nginx                      # 详细信息:版本、安装时间、来源
rpm -ql nginx | head               # 该包安装的全部文件
rpm -qf /etc/nginx/nginx.conf      # 反查文件属于哪个包
rpm -qc nginx | head               # 只列配置文件
rpm -V nginx                       # 校验文件是否被改动
rpm -Va 2>/dev/null | head -n 40   # 校验全部已装包,输出量大
rpm -ivh --test ./package.rpm      # 干跑:只检查不安装

-V 校验输出读法

标记含义处理方式
missing包内文件不存在,可能被误删重新安装该包即可恢复
5 与 T内容摘要或修改时间与数据库记录不同配置文件被编辑属正常;二进制或库被改需警惕
S文件大小发生变化确认是否人为修改,否则按入侵排查处理
U / G / M属主、属组或权限位被改动核对是否有安全基线或脚本改过权限
c 标记该文件是配置文件内容变化通常属预期行为
rpm -V 输出里带 c 的是配置文件,被编辑属正常;不带 c 的可执行文件、共享库或内核模块发生变化才值得追查来源。
rpm -e 卸载不检查依赖,直接卸掉被其他包依赖的组件会导致系统破损。常规卸载一律使用 dnf remove,让依赖解析器保护系统完整性。

易错点

  • rpm -ivh 不解析依赖,报 Failed dependencies 是常态,需要自动解依赖请用 dnf install ./pkg.rpm
  • 使用 --nodeps --force 强行装包会破坏依赖链,除非应急救砖否则不要碰
  • rpm -V 会对每个文件计算摘要,全量校验在大系统上耗时明显,避免放在业务高峰
  • 直接用 rpm 卸载而忽略依赖关系,是造成系统「缺库、命令找不到」的常见原因

数据来源与参考

  • man 8 rpm
  • rpm.org 文档

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌