Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 对于完全相同的内容,tar包具有不同的校验和_Linux_Md5_Tar_Checksum_Opensuse - Fatal编程技术网

Linux 对于完全相同的内容,tar包具有不同的校验和

Linux 对于完全相同的内容,tar包具有不同的校验和,linux,md5,tar,checksum,opensuse,Linux,Md5,Tar,Checksum,Opensuse,使用GNU tar 1.30在SUSE Linux Enterprise Server 12 SP3系统上打包文件夹时,尽管文件内容不变,但始终会给出不同的md5校验和 我运行tar来打包包含简单文本文件的文件夹: tar cf package.tar folder 尽管如此,尽管内容完全相同,但生成的tar始终具有不同的md5(或sha1)校验和: $> rm -rf package.tar && tar cf package.tar folder &&

使用GNU tar 1.30在SUSE Linux Enterprise Server 12 SP3系统上打包文件夹时,尽管文件内容不变,但始终会给出不同的md5校验和

我运行tar来打包包含简单文本文件的文件夹:

tar cf package.tar folder
尽管如此,尽管内容完全相同,但生成的tar始终具有不同的md5(或sha1)校验和:

$> rm -rf package.tar && tar cf package.tar folder && md5sum package.tar
e6383218596fffe118758b46e0edad1d  package.tar
$> rm -rf package.tar && tar cf package.tar folder && md5sum package.tar
1c5aa972e5bfa2ec78e63a9b3116e027  package.tar
因为linux文件系统似乎以随机顺序向tar发送文件,所以我尝试使用
--sort
选项。但是结果命令并没有改变我的校验和问题。此外,tar的
--mtime
选项在这里也没有帮助,因为创建日期完全相同


非常感谢您在这方面提供的帮助。

每次对一组文件进行tar时,tar文件的标题可能会有所不同。例如,每次的最后访问时间和修改时间可能不同

根据,GNU tar可以通过执行以下操作,为相同的输入生成相同的输出:

# requires GNU Tar 1.28+
$ tar --sort=name \
      --mtime="2018-10-05 00:00Z" \
      --owner=0 --group=0 --numeric-owner \
      -cf product.tar build

您提供的档案中包含。 快速浏览一下它们的结构,就会发现它们在这两个领域有所不同:

  • pax进程的进程ID(作为ustar头块中扩展头的名称的一部分,以及该ustar头块的校验和)
  • 扩展标头中的atime(访问时间)
  • 可用于可复制归档创建的一个变通方法是强制使用旧的unix ustar格式(而不是pax/posix格式):

    另一种选择是手动设置扩展名并删除atime,同时保留pax格式:

    tar --format=pax --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime -cf package.tar folder
    

    现在,两个存档的
    md5sum
    应该相同。

    …文件的上次访问时间?也许?权限可以更改吗?查看TAR头中包含的内容。两个文件的文件大小是否相同?能否解压缩这两个不同的存档并比较文件夹内容?@DaBler filesize和文件夹内容对于两个版本的文件都完全相同。感谢您的输入。不幸的是,这对我不起作用。额外的头信息似乎仍在影响tars校验和。我还尝试触摸所有文件
    touch--no-dereference-t“201810050000”
    ,然后再涂焦油。仅供参考,我意识到我的文件夹包含指向文件夹内位置的符号链接。所以IMHO不应该有什么不同。在这种情况下,你必须在两个不同的焦油之间做一个比较,看看有什么不同。很可能有一些文件元数据被收集起来并放入您不想要的tar中。一旦您发现了差异所在,就可以使用来确定哪个字段是不同的。
    tar --format=pax --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime -cf package.tar folder