rpm -qlp 包全名用于查询未安装的.rpm包将释放的文件列表,-p表示操作对象为包文件,-q为查询,-l为列出文件,输出为绝对路径,可预判安装影响。

查看未安装rpm包的文件列表用 rpm -qlp
要确认一个.rpm文件装上去会往系统里写哪些东西,最直接的办法就是不装它,先看它打算放什么。命令是 rpm -qlp 包名.rpm,其中 -q 表示查询,-l 表示列出文件,-p 表示操作对象是“未安装的包文件”而非已安装软件。
- 输出结果是绝对路径列表,比如
/usr/bin/nginx、/etc/nginx/nginx.conf,能帮你预判是否覆盖已有配置、是否写入敏感目录 - 如果包带
noarch架构标识(如nginx-1.20.1-1.el7.noarch.rpm),-qlp依然可用;x86_64/arm64 等平台专用包也一样适用 - 若提示
error: Failed dependencies,说明该 rpm 文件本身损坏或不是合法 RPM 格式,不是依赖问题——-qlp不检查依赖
对比已安装包的文件列表:rpm -ql vs rpm -qlp
rpm -ql nginx 查的是系统里**已经装好**的 nginx 包释放了哪些文件;而 rpm -qlp nginx-1.20.1.rpm 查的是这个**还没装**的 rpm 文件里声明要释放的文件。两者输出结构一致,但数据来源完全不同。
- 已安装包的
-ql结果可能受 postinstall 脚本影响(比如脚本动态生成 config 文件),但-qlp只反映包内静态声明的文件 - 如果
-qlp显示有/etc/xxx.conf,但你系统里已有同名文件,rpm 默认不会覆盖(除非加--force),这点必须心里有数 - 某些包会把文档或 man 页面打包进
-doc子包,主包-qlp里看不到,得单独查对应子包
想看配置文件或文档单独在哪?加 -c 或 -d 参数
很多 rpm 包会标记哪些文件是配置文件(%config)或文档(%doc),这些在安装时有特殊处理逻辑。你可以用 -qc 和 -qd 配合 -p 查未安装包:
-
rpm -qcp nginx-1.20.1.rpm:只列出被标记为配置文件的路径,比如/etc/nginx/nginx.conf -
rpm -qdp nginx-1.20.1.rpm:只列出文档路径,比如/usr/share/doc/nginx-1.20.1/README - 注意:
-qc和-qd必须和-p一起用,否则默认查已安装包,对未安装包无效
容易忽略的细节:路径是否真实存在、权限是否合理
-qlp 只告诉你“包说它要放哪”,不保证路径存在或权限正确。比如它可能声明要写入 /opt/myapp/lib,但你的系统没这个目录;也可能声明 /var/log/myapp/ 但没设好 SELinux 上下文。
- 安装前用
rpm -qp --scripts 包名.rpm看%pre脚本,常含 mkdir/chown/chmod 操作,这才是真正创建目录和设权的地方 - 如果
-qlp输出里有大量/usr/lib/systemd/system/*.service,说明它会注册 systemd 服务,后续需systemctl daemon-reload - 别只盯着
/bin和/usr/bin,有些包把主程序放在/usr/libexec或/opt下,-qlp是唯一提前发现的途径











