将“sha1sum”管道传输到“tar”输出时的不同哈希码

将“sha1sum”管道传输到“tar”输出时的不同哈希码

在 AIX 系统 (v 7.1) 中,sha1sum当直接通过管道传输到输出时,tar与读取文件时相比,会计算不同的哈希代码。

其原因何在?有没有办法解决这个问题并直接从管道输出获取哈希码tar

(在 Debian 和 Ubuntu 等其他系统中,通过管道sha1sum输出tar效果很好)

folder=myfolder
tarfile=myfolder.tar

tar -cf $tarfile $folder && sha1sum $tarfile
fe2dcba2b25d4bbb35460309c8bb87a1d2514d7d  myfolder.tar

tar -cf $tarfile $folder && sha1sum $tarfile
fe2dcba2b25d4bbb35460309c8bb87a1d2514d7d  myfolder.tar

tar -cf - $folder > $tarfile && sha1sum $tarfile
fe2dcba2b25d4bbb35460309c8bb87a1d2514d7d  myfolder.tar

tar -cf - $folder > $tarfile && sha1sum $tarfile
fe2dcba2b25d4bbb35460309c8bb87a1d2514d7d  myfolder.tar

tar -cf - $folder | sha1sum
f1dd1a0c4e82dd5c441664869b656c7bce799270  -

tar -cf - $folder | sha1sum
f1dd1a0c4e82dd5c441664869b656c7bce799270  -

答案1

该问题的原因是命令tar。它的内部记录由固定数量的 512 字节块组成。每条记录的块数可以使用参数设置-b

一些实现可以根据文件描述符自动调整块的数量,如果它是磁带设备、常规文件或管道。

使用参数修复块的数量解决-b了问题。就像:tar -b1 -cf - $folder | sha1sum。但为了匹配问题的前两个命令中预定义的默认块,我必须使用-b20(10240 字节记录是存储在常规文件中的存档的默认值):

$ tar -b20 -cf - $folder > $tarfile && sha1sum $tarfile
fe2dcba2b25d4bbb35460309c8bb87a1d2514d7d  myfolder.tar

$ tar -b20 -cf - $folder |sha1sum                      
fe2dcba2b25d4bbb35460309c8bb87a1d2514d7d 

相关内容