'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 

관련 정보