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,让依赖解析器保护系统完整性。