news 2026/7/13 13:01:18

Linux命令-rpm2cpio(RPM包文件提取工具)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux命令-rpm2cpio(RPM包文件提取工具)

Linux命令-rpm2cpio(RPM包文件提取工具)

    • 🔰简介
    • 📖语法
    • ⚙️选项
    • 💡示例
      • 示例 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 包
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/13 13:01:12

HS2-HF_Patch终极指南:5分钟为Honey Select 2解锁完整游戏体验

HS2-HF_Patch终极指南&#xff1a;5分钟为Honey Select 2解锁完整游戏体验 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 你是否曾经因为语言障碍而无法完全享…

作者头像 李华
网站建设 2026/7/13 13:00:42

Windows/Linux 文件换行符转换:4 种工具实测与 sed 避坑指南

Windows/Linux 文件换行符转换&#xff1a;4 种工具实测与 sed 避坑指南 跨平台协作时&#xff0c;文件换行符差异就像隐藏在代码中的"幽灵字符"&#xff0c;常常引发脚本执行失败、日志格式错乱等隐蔽问题。本文将带您深入理解不同系统的换行符机制&#xff0c;并通…

作者头像 李华
网站建设 2026/7/13 12:59:56

基于深度学习的车牌识别与停车场管理系统312(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

基于深度学习的车牌识别与停车场管理系统312(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_ 本系统是一款功能完善、界面美观的车牌识别与停车场管理系统&#xff0c;采用Python语言开发&#xff0c;结合了计算机视觉与人工智能技术&#xff0…

作者头像 李华
网站建设 2026/7/13 12:59:21

高压安全隔离系统设计与ISOM8710+PIC24应用

1. 高压安全隔离系统设计概述在工业自动化、电力电子和医疗设备等领域&#xff0c;高压安全隔离是确保人员和设备安全的关键技术。ISOM8710数字隔离器与PIC24HJ256GP610微控制器的组合&#xff0c;为构建可靠的高压隔离系统提供了理想的解决方案。这套方案的核心价值在于&#…

作者头像 李华