解压 .lz 格式:这个命令有什么作用?

解压 .lz 格式:这个命令有什么作用?

我正在尝试解压 Ubuntu Desktop 的初始 ramdisk ( initrd.lz) 来检查一些 casper 组件。

楼主格式确实很有趣,但更让我惊讶的是 RedHat 记录的解包方法(对我有用)这里

那么在打包/解包时,这组命令实际上做了什么?它形成一个名为 initrd 的文件,然后将此文件打包到 initrd.lz 中。它与我所知道的其他命令行方法非常不同:

xz/LZMA 格式 - 提取/解压缩:

解压并提取 /boot/ 目录中的映像内容:

xz -dc < /boot/initrd-$(uname -r).img | cpio -idmv

我使用的命令:

xz -dc < initrd.lz | cpio -idmv

xz/LZMA 格式 - 重新打包/重新压缩:

查找 . 2>/dev/null | cpio -c -o | xz -9 --format=lzma > /boot/new.img

我使用的命令:

find . 2>/dev/null | cpio -c -o | xz -9 --format=lzma > initrd.lz

我理解这2>/dev/null意味着发送任何错误流null以便它们不会出现在终端中,但是其他命令链呢?

答案1

打包和解包分为两个步骤:打包时,整个目录存储在一个未压缩的单个文件中,可能带有一个索引,指示哪个段来自哪个文件。接下来,压缩这个单个文件。

cpio 不会创建中间文件,而是将这个未压缩的单个文件发送到 stdout,然后压缩器通过 stdin 接收它。

类似地,解包将解压的文件通过其标准输出发送到 cpio 的标准输入,从而导致 cpio 解包其标准输入。

管道符号 | 表示前一个程序的标准输出是下一个程序的标准输入。

阅读 xz 和 cpio 的手册页了解详细信息,例如哪些选项导致程序使用 stdin 和 stdout 而不是文件。

相关内容