gzip

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 16:56, 11 января 2019.

gzip (GNU zip)
Gzip.jpg
Разработчики: Free Software Foundation
Выпущена: 31 октября 1992
Постоянный выпуск: 1.8
Написана на: C
Тип ПО: Утилита сжатия данных
Лицензия: GNU GPL
Веб-сайт gzip.org

gzip- это формат файлов, утилита, созданная для сжатия и восстановления файлов. Программа была создана Jean-loup Gailly и Mark Adler как бесплатное ПО на замену уже существовавшим программам на системе UNIX. Версия 0.1 была выпущена 31 октября 1992, а следом версия 1.0 в феврале 1993. [Источник 1].

В соответствии с традициями UNIX-программирования, gzip выполняет только две функции: сжатие и распаковку одного файла. Упаковка нескольких файлов в один архив невозможна. При сжатии к оригинальному расширению файла добавляется суффикс .gz. Для упаковки нескольких файлов обычно их сначала объединяют в один файл, а потом этот уже сжимают с помощью gzip. Таким образом, сжатые архивы обычно имеют двойное расширение (см. рисунок 1). [Источник 2]

Рисунок 1 - Схема работы с архиватором tar и gzip

Формат файлов

gzip основан на алгоритме DEFLATE, который представляет собой комбинацию кодирования LZ77 и Хаффмана. DEFLATE задумывался как замена LZW и другим запатентованным алгоритмам сжатия данных, которые в то время ограничивали удобство сжатия других архиваторов.

gzip также часто используется для обозначения формата файла gzip, который представляет собой:

  • 10-байтовый заголовок, содержащий магическое число (1f 8b), идентификатор сжатия (08 для DEFLATE), флаги файлов, 32-битную метку времени, флаги сжатия и идентификатор операционной системы.
  • Необязательные дополнительные заголовки, обозначаемые флажками файлов, такими как исходное имя файла
  • Тело кода, содержащее информацию о нагрузке со сжатием DEFLATE

GZIP не следует путать с форматом ZIP архива, который также использует DEFLATE. Формат ZIP может содержать файлы без предыдущей архивацией, но он менее компактный, нежели сжатые архивы, содержащие те же данные.

Алгоритим LZ77

Алгоритм LZ77 заменяет повторные вхождения данных на «ссылки». Т.е. если в имеющихся данных какая-то цепочка элементов встречается более одного раза, то все последующие её вхождения заменяются «ссылками» на её первый экземпляр. Алгоритм прекрасно рассмотрен horror_x и описан здесь. Каждая такая ссылка имеет два значения: смещение и длина.

Кодирование Хаффмана

Кодирование Хаффмана является методом кодирования с переменной длиной, которая назначает более короткие коды к более частым «символам». Проблема с переменной длиной кода, как правило в том, что нам нужен способ узнать, когда код закончился и начался новый, чтобы расшифровать его. Кодирование Хаффмана решает эту проблему, создав код префикса, где ни одно кодовое слово не является префиксом другого.

Реализация

Спецификация DEFLATE обеспечивает некоторую свободу разработчикам реализовать алгоритм с использованием различных подходов, пока полученный поток совместим со спецификацией. [Источник 3].

GNU GZIP

Реализация GNU является наиболее распространенной и была разработана, чтобы стать заменой для утилиты архивации, свободной от запатентованных алгоритмов. Существует 9 уровней сжатия, от «1» (самого быстрого с наименьшим коэффициентом сжатия) до «9» (самого медленного с лучшей степенью сжатия). По умолчанию, используется «6». [Источник 4]

7-zip

7-zip реализуется алгоритм DELFATE иначе и обычно архивирует с большим коэффициентом сжатия. 7-zip так же доступен для Windows и обеспечивает реализацию для других методов сжатия, таких как 7z, xz, bzip2, zip и прочих.

Zopfli

Zopfli идеально подходит для одноразового сжатия, например в ситуациях, когда файл единожды сжимается и многоразово используется. Он заметно медленнее, но сжатие на 5-8% лучше, чем у других.

Ключи командной строки команды gzip

 -0 -9 - регулировка степени сжатия:
         -0 - вообще без сжатия,
         -6 - уровень сжатия по умолчанию,
         -9 - максимальный уровень сжатия;
 -c - оставлять исходные файлы нетронутыми, выводить результат
      на устройство стандартного вывода;
 -d - распаковка;
 -l - вывод информации о содержимом сжатого файла;
 -t - тестирование целостности сжатых данных;
 -v - режим вывода дополнительной информации в процессе работы;
 -h - вывод подсказки об использовании программы.

Источники

  1. gzip // gzip. URL: https://www.gzip.org/ (дата обращения 10.12.2018).
  2. GNU Gzip Wikipedia // Wikipedia. [2019] Дата изменения: 09.04.2018. URL: https://ru.wikipedia.org/wiki/Gzip (дата обращения 10.12.2018).
  3. habr Gzip // habr. [2006-2019] Дата изменения: 05.05.2014. URL: https://habr.com/post/221849/ (дата обращения 10.12.2018).
  4. GNU Gzip // GNU. [1997-2009] Дата изменения: 03.05.2018 URL: http://www.gnu.org/software/gzip/ (дата обращения 10.12.2018).