Команда Gzip выдает точно такой же вывод, как tar -cvzf?
Я думал, что следующие команды эквивалентны, но они производят разные контрольные суммы:
tar -cvzf ...
а также tar -cvf ...; gzip ...
не выдает такой же вывод.
sha1sum
отличается.
Что будет gzip
команда, которая будет идеально соответствовать tar -cvzf
поведение?
1 ответ
Разница в выходных файлах, вероятно, не из-за метода сжатия. По умолчанию GNU tar использует стандартный режим GZIP deflate. Одна из причин этой разницы заключается в формате сжатого файла GZIP.
Структура первых 8 байтов заголовка GZIP выглядит следующим образом
OFFSET SIZE VALUE COMMENT
0 1 0x1F First "magic" id
1 1 0x8B Second "magic" id
2 1 CM Compression method
3 1 FLAGS 8-bit flag register
4 4 MTIME Object modification time
Проблема с MTIME
поле. Для данных, которые поступают из канала, это значение текущего времени Unix (секунды с 1 января 1970 г.). Следовательно, два одинаковых сжатых архива, созданные с интервалом не менее одного секунды, будут отличаться.
Попробуй запустить tar -cvzf
дважды на одни и те же данные и сравните результаты. Результаты будут отличаться 5-м байтом, младшим байтом значения метки времени.
$ tar czvf test1.tgz tmp/ ; sleep 2 ; \
tar czvf test2.tgz tmp/ ; md5sum test1.tgz test2.tgz
tmp/
tmp/test
tmp/
tmp/test
23d46f62dd4a9a0851279df7fe15842e test1.tgz
c8ae65026a5f771c63acf87a18f7379c test2.tgz