rpm2cpio 与 dpkg-deb 是什么
两个工具用来在不安装的前提下打开软件包:rpm2cpio 把 RPM 转换成 cpio 流,配合 cpio 可以列出或提取包内文件;dpkg-deb 则直接支持查看元信息与解包。典型用途是误删系统文件后,从同版本包装回那一个文件,或者只想看看某个包里到底有什么。
基本信息
| RPM 侧 | rpm2cpio 包.rpm | cpio -idmv;rpm -qpl 包.rpm 只列出内容 |
|---|---|
| DEB 侧 | dpkg-deb -x 包.deb 目录;dpkg-deb -I 包.deb 看元信息 |
| 所属组件 | rpm / cpio / dpkg |
| 适用场景 | 应急取回单个文件、核对包内容 |
典型使用场景
- 误删系统文件后,从同版本包装回原文件
- 不安装的前提下查看包内到底包含哪些路径
- 对比两个版本包的内容差异
- 从包里取出一个诊断工具到临时目录使用
- 核对某个二进制来自哪个包、属于哪个版本
- 在没有包管理数据库的环境里临时解压使用
RPM 侧
RPM 侧
rpm2cpio nginx-1.24.rpm | cpio -idmv # 解出包内全部文件
rpm -qpl nginx-1.24.rpm | head # 只列出包内路径,不解包
rpm2cpio nginx-1.24.rpm | cpio -idv ./usr/sbin/nginx # 只取单个文件
rpm -qp --scripts nginx-1.24.rpm | head # 看安装脚本,判断副作用
rpm -Vf /usr/sbin/nginx # 提取后复核文件完整性DEB 侧
DEB 侧
dpkg-deb -x package.deb /tmp/extract # 解出文件到指定目录
dpkg-deb -I package.deb | head # 查看控制信息与依赖
dpkg-deb -c package.deb | head # 列出包内文件与权限
cp /tmp/extract/usr/bin/tool /usr/bin/ # 按需取回单个文件
dpkg -V <包名> # 复核已安装文件的完整性常用组合
| 目的 | RPM 侧 | DEB 侧 |
|---|---|---|
| 列内容 | rpm -qpl | dpkg-deb -c |
| 解包 | rpm2cpio | cpio -idmv | dpkg-deb -x |
| 看元信息 | rpm -qpi | dpkg-deb -I |
| 校验已装文件 | rpm -Vf 路径 | dpkg -V 包名 |
| 看安装脚本 | rpm -qp --scripts | dpkg-deb -I 中的脚本段 |
手工提取的文件不会登记进包数据库,包的归属信息缺失,之后做完整性校验会报文件不一致;因此它只适合应急,长期方案是用包管理器重新安装对应包。
取文件时版本必须与原装一致:用错版本的库或二进制替换回系统,会制造更隐蔽的故障,比文件缺失更难排查。
恢复文件后建议用 rpm -V 或 dpkg -V 复核完整性,确认权限、大小与校验和都对得上,再结束这次应急处理。