首页/系统/Linux 运维命令速查/rpm 查文件归属与包内容

rpm 查文件归属与包内容

定位「这个文件属于哪个包/这个包装了什么」:rpm -qf 文件反查、-ql 列文件、-qc 列配置、-qd 列文档;排障与合规清点两相宜。

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

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(校验),跨发行版脚本不要混用两套。

易错点

  • 看到 rpm -V 报差异就当成入侵:配置文件与文档的变动是正常输出,应先按文件类型过滤再评估
  • 用 rpm -qf 反查 /usr/local 下手动编译的文件:提示不属于任何包,这类文件只能靠安装记录或自建清单追踪
  • 升级前不备份 rpm -qc 列出的配置文件:升级产生 .rpmnew/.rpmsave 后配置分散,排查与回滚都变麻烦
  • 依赖缺失时只按包名查找:用 --whatprovides 从能力维度查(如 perl(JSON)、库文件 soname)更直接

数据来源与参考

  • man 8 rpm(-qf/-ql/-qi)
  • Red Hat 文档:rpm 查询

相关工具

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