'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。ただし、質問の最初の2つのコマンドで事前定義された基本ブロックを一致させるには、次のものを使用する必要があります-b20(10240バイトレコードは通常のファイルに格納されているアーカイブのデフォルト値です)。

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

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

関連情報