rpm 查询解决什么问题
rpm 提供包与文件的双向查询:-qf 反查某个文件属于哪个包,-ql 列出包安装的全部文件,-qc 只看配置文件,-qd 看文档,-qi 看包信息(版本、大小、安装时间、来源),加 p 后缀还能直接查未安装的 .rpm 文件。排障时回答“这文件是谁装的”,合规清点时回答“这包装了什么、有没有被改过”。它只对 rpm 数据库管理的文件有效,/usr/local 下手动安装的内容反查会提示不属于任何包。
基本信息
| 适用平台 | RHEL/CentOS/Rocky/Alma/Fedora |
|---|---|
| 权限要求 | 查询用普通用户即可;-V 校验建议用 root 减少噪音 |
| 常用选项 | -qf、-ql、-qc、-qd、-qi、-qp、--whatprovides、-V |
| 数据库位置 | /var/lib/rpm |
| Debian 对应 | dpkg -S 文件、dpkg -L 包、dpkg -V 校验 |
典型使用场景
- 定位某个配置文件属于哪个包,改前备份、升级时预判是否被覆盖
- 清点某个服务安装的全部文件与配置目录位置
- 安全基线巡检:用 rpm -V 校验二进制是否被改动
- 判断某条命令是不是手工安装的(反查无结果即非包管理产物)
- 查看未安装的 rpm 包内容,评估升级或回滚范围
常用示例
常用示例
rpm -qf /usr/sbin/nginx # 这个文件属于哪个包
rpm -qf /usr/local/bin/app # 手工安装的文件会提示不属于任何包
rpm -ql nginx | head -n 20 # 包内文件清单
rpm -qc nginx # 只看配置文件,改配置前先备份这些
rpm -qd nginx | head # 文档文件,找官方示例与默认配置说明
rpm -qi nginx # 包信息:版本、安装时间、大小、来源
rpm -qlp ./nginx-1.24.0-1.el9.x86_64.rpm | head # 未安装的 rpm 也能查内容
rpm -V nginx # 校验文件是否被改动(配置与文档改动属正常)
rpm -q --whatprovides 'perl(JSON)' # 从能力维度查是哪个包提供常用选项对照
| 选项 | 查什么 | 典型用途 |
|---|---|---|
| -qf 文件 | 文件归属的包 | 排障定位来源,确认是否被替换 |
| -ql 包 | 包内全部文件 | 清点安装内容与目录布局 |
| -qc 包 | 包内配置文件 | 备份与差异比对,预判升级覆盖范围 |
| -qd 包 | 文档文件 | 找官方示例与默认配置 |
| --whatprovides | 哪个包提供了某个能力(如 perl(JSON)) | 依赖报错时直接定位提供者 |
| -V 包 | 大小、权限、校验和、属主等差异 | 安全巡检与篡改检测 |
rpm -V 的输出用字母标记差异(S 大小、M 权限、5 校验和、U 属主、G 属组、T 时间等),行尾的 c 表示配置文件、d 表示文档。配置与文档变动本来就正常,重点看二进制与库文件是否出现差异。
Ubuntu/Debian 对应命令是 dpkg -S(查文件归属)、dpkg -L(列包内容)、dpkg -V(校验),跨发行版脚本不要混用两套。