Команда 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
Другие вопросы по тегам