Pipe

管道“sha1sum”到“tar”輸出時的不同雜湊碼

  • August 17, 2017

在 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  -

該問題的原因是 command 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 

引用自:https://unix.stackexchange.com/questions/386502