Linux命令-rpm2cpio(RPM包文件提取工具)
Linux命令-rpm2cpioRPM包文件提取工具简介语法⚙️选项示例示例 1查看 RPM 包内容不解压示例 2提取 RPM 包中的单个文件示例 3提取 RPM 包的全部内容示例 4从远程 RPM 包提取文件示例 5仅提取特定类型的文件示例 6从已安装包的缓存提取源 RPM⚠️注意总结相关命令rpm2cpio 将 RPM 包文件转换为 cpio 归档流再配合cpio命令即可无需安装直接提取 RPM 包中的单个文件。这是系统管理中极其实用的技巧常用于恢复误删的系统文件或检查 RPM 包内容。简介rpm2cpio 是 rpm 软件包的附属工具从标准输入或指定文件读取 RPM 包输出 cpio 格式的数据流。它不会修改系统不依赖 RPM 数据库甚至不需要 root 权限。特性说明所属软件包rpm输入.rpm包文件输出cpio 归档流到 stdout需要权限普通用户即可需要安装否直接提取核心搭配cpio -idmv解压、cpio -t列表注意rpm2cpio 本身只做格式转换必须管道连接 cpio 才能提取文件。这是设计哲学——一个工具做好一件事。语法rpm2cpio 包文件.rpm|cpio 选项[模式]rpm2cpio包文件.rpm|cpio 选项[模式]⚙️选项rpm2cpio 本身没有独立选项它的功能就是将 RPM 转换为 cpio 流。关键在于搭配 cpio 的选项cpio 选项说明-i提取模式copy-in-d自动创建目录-m保留文件修改时间-v显示处理过程-t仅列出文件名不解压--no-absolute-filenames去除绝对路径前缀示例示例 1查看 RPM 包内容不解压在不安装的情况下查看 RPM 包中包含哪些文件# 列出 RPM 包中的所有文件rpm2cpio nginx-1.24.0-1.el9.ngx.x86_64.rpm|cpio-t# 输出示例./etc/logrotate.d/nginx ./etc/nginx ./etc/nginx/conf.d ./etc/nginx/conf.d/default.conf ./etc/nginx/fastcgi_params ./etc/nginx/mime.types ./etc/nginx/modules ./etc/nginx/nginx.conf ./etc/nginx/scgi_params ./etc/nginx/uwsgi_params ./usr/lib64/nginx/modules ./usr/sbin/nginx ./usr/share/doc/nginx-1.24.0 ./usr/share/doc/nginx-1.24.0/CHANGES ./usr/share/doc/nginx-1.24.0/LICENSE ./usr/share/man/man8/nginx.8.gz ./var/cache/nginx ./var/log/nginx10467blocks# 仅查看配置文件rpm2cpio nginx-1.24.0-1.el9.ngx.x86_64.rpm|cpio-t|grep-E\.conf$|\.params$# 输出示例./etc/nginx/conf.d/default.conf ./etc/nginx/fastcgi_params ./etc/nginx/nginx.conf ./etc/nginx/scgi_params ./etc/nginx/uwsgi_params示例 2提取 RPM 包中的单个文件这是 rpm2cpio最核心的用法——从 RPM 包中提取指定文件而不安装整个包# 从 bash RPM 包中提取 /bin/bash 二进制文件rpm2cpio bash-5.2.15-2.el9.x86_64.rpm|cpio-idmv./bin/bash# 输出示例./bin/bash10467blocks# 验证提取的文件file./bin/bash# 输出示例./bin/bash: ELF64-bit LSB executable, x86-64, version1(SYSV), dynamically linked恢复误删的配置文件# 假设误删了 nginx.conf从 RPM 包中恢复rpm2cpio nginx-1.24.0-1.el9.ngx.x86_64.rpm|cpio-idmv./etc/nginx/nginx.conf# 输出示例./etc/nginx/nginx.conf10467blocks# 将恢复的文件复制到正确位置cp./etc/nginx/nginx.conf /etc/nginx/nginx.conf注意提取的文件会按 RPM 包中的相对路径放在当前目录下。例如./etc/nginx/nginx.conf会在当前目录创建etc/nginx/子目录。示例 3提取 RPM 包的全部内容将 RPM 包的所有文件解压到当前目录# 完整解压 RPM 包rpm2cpio httpd-2.4.57-5.el9.x86_64.rpm|cpio-idmv# 输出示例./etc/httpd ./etc/httpd/conf ./etc/httpd/conf.d ./etc/httpd/conf.d/README ./etc/httpd/conf.d/autoindex.conf ./etc/httpd/conf.d/userdir.conf ./etc/httpd/conf.d/welcome.conf ./etc/httpd/conf/httpd.conf ./etc/httpd/conf/magic ./etc/httpd/conf.modules.d ./etc/httpd/conf.modules.d/00-base.conf ./etc/httpd/conf.modules.d/00-dav.conf ./etc/httpd/conf.modules.d/00-lua.conf ./etc/httpd/conf.modules.d/00-mpm.conf ./etc/httpd/conf.modules.d/00-optional.conf ./etc/httpd/conf.modules.d/00-proxy.conf ./etc/httpd/conf.modules.d/00-systemd.conf ./etc/httpd/modules ./usr/lib64/httpd/modules ./usr/sbin/httpd ./usr/share/doc/httpd-2.4.57 ./usr/share/doc/httpd-2.4.57/CHANGES ./usr/share/doc/httpd-2.4.57/LICENSE ./usr/share/doc/httpd-2.4.57/README ./usr/share/man/man8/httpd.8.gz ./var/cache/httpd ./var/log/httpd ./var/www ./var/www/html10502blocks示例 4从远程 RPM 包提取文件结合 curl 直接从网络提取 RPM 包中的文件# 从远程仓库下载并提取不保存 RPM 文件curl-sLhttps://repo.example.com/Packages/bash-5.2.15-2.el9.x86_64.rpm|rpm2cpio|cpio-idmv./bin/bash# 输出示例./bin/bash10467blocks示例 5仅提取特定类型的文件使用通配符仅提取配置文件# 仅提取 .conf 配置文件rpm2cpio httpd-2.4.57-5.el9.x86_64.rpm|cpio-idmv*/conf*.conf# 输出示例./etc/httpd/conf.d/autoindex.conf ./etc/httpd/conf.d/userdir.conf ./etc/httpd/conf.d/welcome.conf ./etc/httpd/conf/httpd.conf10502blocks仅提取 man 手册页rpm2cpio coreutils-9.0-6.el9.x86_64.rpm|cpio-idmv*.gz# 输出示例部分./usr/share/man/man1/ls.1.gz ./usr/share/man/man1/cp.1.gz ./usr/share/man/man1/mv.1.gz ./usr/share/man/man1/rm.1.gz ./usr/share/man/man1/cat.1.gz示例 6从已安装包的缓存提取源 RPM# 查找系统中的 RPM 缓存文件ls/var/cache/dnf/*/packages/*.rpm2/dev/null|head-3# 输出示例/var/cache/dnf/appstream-3b2c1/packages/nginx-1.24.0-1.el9.ngx.x86_64.rpm# 从缓存中提取rpm2cpio /var/cache/dnf/appstream-3b2c1/packages/nginx-1.24.0-1.el9.ngx.x86_64.rpm|cpio-t|head-5# 输出示例./etc/logrotate.d/nginx ./etc/nginx ./etc/nginx/conf.d ./etc/nginx/conf.d/default.conf ./etc/nginx/fastcgi_params⚠️注意rpm2cpio 不会安装包不会执行 %post 等安装脚本仅提取文件提取的文件路径是 RPM 内的相对路径需要手动复制到正确位置使用--no-absolute-filenames选项可以去除路径开头的/防止覆盖系统文件不需要 root 权限推荐在临时目录中操作RPM 包可以从/var/cache/dnf/或/var/cache/yum/缓存中获取也可以从安装光盘/ISO 中获取 RPM 包总结rpm2cpio 是一个小而美的工具本身只做一件事——将 RPM 转为 cpio 流。但配合 cpio 命令后它成为无需安装即可提取 RPM 文件的利器。核心用法就是rpm2cpio xxx.rpm | cpio -idmv。在恢复误删系统文件、检查包内容、提取单个配置文件等场景下它是首选工具。相关命令cpio— cpio 归档处理工具rpm— RPM 包管理器rpmquery— RPM 包查询工具rpm2archive— 将 RPM 转为 tar 归档较新版本yumdownloader— 下载 RPM 包而不安装dnf download— 下载 RPM 包