首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新CPIO存档中的单个文件

更新CPIO存档中的单个文件
EN

Server Fault用户
提问于 2019-06-04 12:17:33
回答 2查看 1.4K关注 0票数 2

我有一个带有Linux映像的CPIO归档文件。使用binwalk,我可以看到有以下几个块:

代码语言:javascript
复制
DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             ASCII cpio archive (SVR4 with no CRC), file name: "kernel", file name length: "0x00000007", file size: "0x00000000"
120           0x78            ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86", file name length: "0x0000000B", file size: "0x00000000"
244           0xF4            ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode", file name length: "0x00000015", file size: "0x00000000"
376           0x178           ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode/.enuineIntel.align.0123456789abc", file name length: "0x00000036", file size: "0x00000000"
540           0x21C           ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode/GenuineIntel.bin", file name length: "0x00000026", file size: "0x001A3800"
1718960       0x1A3AB0        ASCII cpio archive (SVR4 with no CRC), file name: "TRAILER!!!", file name length: "0x0000000B", file size: "0x00000000"
1719296       0x1A3C00        gzip compressed data, NULL date (1970-01-01 00:00:00)
32277012      0x1EC8214       Zlib compressed data, default compression
70217888      0x42F70A0       Unix path: /usr/local/go/src/runtime/runtime-gdb.py
85577309      0x519CE5D       MySQL MISAM compressed data file Version 3
96044561      0x5B98611       Unix path: /usr/local/go/src/runtime/runtime-gdb.py
100702073     0x6009779       Zlib compressed data, default compression
106454594     0x6585E42       MySQL MISAM compressed data file Version 7
110250207     0x69248DF       Unix path: /usr/local/go/src/runtime/runtime-gdb.py
115809787     0x6E71DFB       Unix path: /usr/local/go/src/runtime/runtime-gdb.py

我要把那个拉紧的:

代码语言:javascript
复制
1719296       0x1A3C00        gzip compressed data, NULL date (1970-01-01 00:00:00)

并替换其中的一个二进制文件,然后重新打包图像。

压缩后的内容是另一个CPIO映像。

做这件事最好/最简单的方法是什么?

EN

回答 2

Server Fault用户

发布于 2019-06-04 15:26:53

您搜索的命令是

代码语言:javascript
复制
cpio -id 'TRAILER!!!' < archive.cpio

您可能不需要-d,因为文件位于根路径中以获得更多信息,可以检查本问答

票数 0
EN

Server Fault用户

发布于 2022-12-04 16:22:55

这个问题的另一个答案是不完整的,因为它只描述了如何从cpio存档中提取单个文件。

在我看来,cpio档案无法就地修改,因此您必须提取并创建一个新的档案:

代码语言:javascript
复制
mkdir tmp && pushd tmp
cpio -idm < ../archive.cpio
find . | cpio -o > ../archive-new.cpio
popd && rm -Rf tmp

如果您关心文件的所有权,您可能希望将这些命令作为root运行。

由于您正在使用binwalk,如果您真的想在不干扰其他条目的情况下进行手术替换,您可能会对存档文件格式感兴趣。

这个问题在Unix & Linux StackExchange上可能会更好。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/970067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档