rpm 查询能做什么
rpm 命令的第一职责不是装包而是查询。dnf 解决的是「仓库里有什么」,rpm 解决的是「本机装了什么、文件属于谁、依赖来自哪里」,这也是排障时最有用的视角:服务起不来时先确认二进制有没有被替换、配置文件属于哪个包、库依赖是否齐全,都靠 -q 系列完成。麒麟 V10 服务器版、UOS 服务器版、openEuler 都预装 rpm,命令与 CentOS、RHEL 完全一致。
基本信息
| 所属 | rpm 包管理系统 |
|---|---|
| 适用平台 | Kylin V10 服务器版 / UOS 服务器版 / openEuler / RHEL |
| 语法 | rpm -q[子选项] [包名|文件路径] |
| 数据库位置 | /var/lib/rpm(记录已安装包与文件清单) |
| 权限 | 查询普通用户可用;-Va 全量校验建议 root |
| 与 dnf 分工 | 查询本机用 rpm,查询仓库与装包用 dnf |
典型使用场景
- 确认软件装没装、什么版本:升级前先 rpm -qa 摸清现状
- 反查命令归属:看到一个陌生脚本或二进制,用 -qf 找出它属于哪个包
- 确认配置文件清单:改配置前用 -qc 看清哪些文件属于这个包,避免改错同名文件
- 依赖检查:用 -qR 看包声明的依赖,排查缺少库导致的启动失败
- 完整性校验:用 -Va 比对文件的校验值与权限,发现被误改或被替换的系统文件
- 审计离线包:对未安装的 rpm 文件用 -qp 系列看信息与脚本,再决定是否安装
常用查询
常用查询
rpm -qa | grep -i openssh # 全量列表再过滤,注意大小写
rpm -qi openssh-server # 包详情:版本、安装时间、描述
rpm -ql nginx | head # 该包安装的所有文件
rpm -qf /usr/sbin/sshd # 反查文件属于哪个包
rpm -qc openssh-server # 只列配置文件
rpm -qR nginx # 列出依赖项
rpm -q --scripts openssh-server # 看包自带的安装脚本
rpm -Va | grep -v '^........c' # 校验文件完整性,排除正常被改的配置文件查询选项对照
| 选项 | 查询对象 | 典型输出 |
|---|---|---|
| -qa | 所有已安装包 | 包名加版本,量大需过滤 |
| -qi | 包的详细信息 | 版本、体积、安装日期、厂商 |
| -ql | 包内文件清单 | 绝对路径列表 |
| -qf | 指定文件属于哪个包 | 包名与版本 |
| -qc | 配置文件清单 | 常用于备份与比对 |
| -qR | 依赖声明 | 用于排查缺库 |
| -qp | 未安装的 rpm 文件 | 配合 --scripts 看安装脚本 |
| -Va | 全量完整性校验 | 输出被改动的文件与权限差异 |
rpm -qf 只能查已经装到本机的文件。要查「某个还没装的文件属于哪个包」,用 dnf provides <绝对路径>;-qf 找不到时先确认文件真实路径,符号链接查到的往往是链接本身。
-Va 的输出里,配置文件的正常修改也会被标记出来,判断时要看第二列:c 表示配置文件,改过是常态;其它位置的文件出现校验差异才值得追查。文件量大时先用 grep 过滤出关心的目录。