Pipe
管道“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 -
該問題的原因是 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