在 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