Gzip 命令是否产生与 tar -cvzf 完全相同的输出?

Gzip 命令是否产生与 tar -cvzf 完全相同的输出?

我确实认为以下命令是等效的,但它们产生不同的校验和:

tar -cvzf ...并且tar -cvf ...; gzip ...不会产生相同的输出。

sha1sum不同。

什么gzip命令可以与行为完美匹配tar -cvzf

答案1

输出文件的差异可能不是由于压缩方法造成的。默认情况下,GNU tar 使用标准 GZIP放气模式。造成这种差异的原因之一是 GZIP 压缩文件的格式。

GZIP 头前 8 个字节的结构如下

      OFFSET  SIZE  VALUE    COMMENT
        0       1    0x1F    First "magic" id
        1       1    0x8B    Second "magic" id
        2       1    CM      Compression method
        3       1    FLAGS   8-bit flag register
        4       4    MTIME   Object modification time

问题出在MTIME字段上。对于来自管道的数据,这是当前 Unix 时间的值(自 1970 年 1 月 1 日以来的秒数)。因此,两个彼此之间至少相隔一秒创建的完全相同的压缩档案将有所不同。

尝试tar -cvzf对同一数据运行两次并比较结果。结果将在第 5 个字节(时间戳值的最低字节)上有所不同。

$ tar czvf test1.tgz tmp/ ; sleep 2 ; \
  tar czvf test2.tgz tmp/ ; md5sum test1.tgz test2.tgz
tmp/
tmp/test
tmp/
tmp/test
23d46f62dd4a9a0851279df7fe15842e  test1.tgz
c8ae65026a5f771c63acf87a18f7379c  test2.tgz

相关内容