gzip

Инструмент сжатия/распаковки файлов GNU

gzip (программное обеспечение)
Оригинальный автор(ы)
Разработчик(и)Проект GNU
Первоначальный выпуск31 октября 1992 г. ; 32 года назад ( 1992-10-31 )
Стабильный релиз
1.13 [1]  / 19 августа 2023 г.
Репозиторийgit.savannah.gnu.org/cgit/gzip.git
Написано вС
Операционная системаUnix-подобный , Plan 9 , Inferno
ТипСжатие данных
ЛицензияGPL-3.0 или более поздняя версия
Веб-сайтwww.gnu.org/software/gzip/

gzip — это формат файла и программное приложение, используемое для сжатия и распаковки файлов . Программа была создана Жаном-Лу Гайи и Марком Адлером как бесплатная программная замена для программы сжатия , использовавшейся в ранних системах Unix , и предназначалась для использования в GNU (откуда и произошло "g" в gzip). Версия 0.1 была впервые публично выпущена 31 октября 1992 года, а версия 1.0 последовала в феврале 1993 года.

Распаковка формата gzip может быть реализована как потоковый алгоритм , важная [ почему? ] функция для веб-протоколов , обмена данными и приложений ETLстандартных каналах ).

Формат файла

gzip (формат файла)
Расширение имени файла
.gz
Тип интернет-СМИ
приложение/gzip [2]
Единый идентификатор типа (UTI)org.gnu.gnu-zip-архив
Магическое число1f 8b
РазработаноЖан-Лу Гайи и Марк Адлер
Тип форматаСжатие данных
Открытый формат ?Да
Веб-сайтgzip.org (устарело)

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

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

  • 10-байтовый заголовок, содержащий магическое число ( 1f 8b), метод сжатия ( 08для DEFLATE), 1 байт флагов заголовка, 4-байтовую временную метку, флаги сжатия и идентификатор операционной системы.
  • необязательные дополнительные заголовки, разрешенные флагами заголовков, включая исходное имя файла, поле комментария, «дополнительное» поле и нижнюю половину контрольной суммы CRC-32 для раздела заголовка. [3]
  • тело, содержащее сжатый DEFLATE полезный груз
  • 8-байтовый трейлер, содержащий контрольную сумму CRC-32 и длину исходных несжатых данных по модулю 2 32 . [4]
gzip можно комбинировать с программой tar для сжатия нескольких файлов.

Хотя его формат файла также позволяет объединять несколько таких потоков (сжатые gzip-файлы просто распаковываются и объединяются, как если бы они изначально были одним файлом), [5] gzip обычно используется для сжатия только отдельных файлов. [6] Сжатые архивы обычно создаются путем сборки наборов файлов в один архив tar (также называемый tarball ), [7] а затем сжатия этого архива с помощью gzip. Окончательный сжатый файл обычно имеет расширение .tar.gz или .tgz .

gzip не следует путать с форматом архива ZIP , который также использует DEFLATE . Формат ZIP может содержать коллекции файлов без внешнего архиватора, но он менее компактен, чем сжатые tarballs, содержащие те же данные, поскольку он сжимает файлы по отдельности и не может использовать избыточность между файлами ( сплошное сжатие ). Формат файла gzip также не следует путать с форматом утилиты compress, основанной на LZW, с расширением .Z ; однако утилита gunzip способна распаковывать файлы .Z. [8]

Реализации

NetBSD Gzip / FreeBSD Gzip
Разработчик(и)Фонд NetBSD
Репозиторийcvsweb.netbsd.org/bsdweb.cgi/src/usr.bin/gzip/
Написано вС
ТипСжатие данных
ЛицензияУпрощенная лицензия BSD

Были написаны различные реализации программы. Наиболее известная из них — реализация GNU Project с использованием кодирования Lempel-Ziv (LZ77). Версия gzip от OpenBSD на самом деле является программой compress , в которую поддержка формата gzip была добавлена ​​в OpenBSD 3.4. «g» в этой конкретной версии означает gratis . [9] FreeBSD , DragonFly BSD и NetBSD используют реализацию под лицензией BSD вместо версии GNU; на самом деле это интерфейс командной строки для zlib , предназначенный для совместимости с параметрами реализаций GNU. [10] Эти реализации изначально происходят из NetBSD и поддерживают распаковку bzip2 и формата Unix pack .

Альтернативная программа сжатия, достигающая 3-8% лучшего сжатия — Zopfli . Она достигает gzip-совместимого сжатия с использованием более исчерпывающих алгоритмов за счет требуемого времени сжатия. Она не влияет на время распаковки.

pigz, написанный Марком Адлером, совместим с gzip и ускоряет сжатие за счет использования всех доступных ядер и потоков ЦП. [11]

Возмещение ущерба

Данные в блоках до первой поврежденной части архива обычно полностью читаемы. Данные из блоков, не разрушенных повреждением, которые находятся позже, могут быть восстановлены с помощью сложных обходных путей. [12]

Производные и другие виды использования

Утилита tar , входящая в состав большинства дистрибутивов Linux, может извлекать файлы .tar.gz, передавая параметр z , например, tar -zxf file.tar.gz , где указывает на распаковку, означает извлечение и указывает имя сжатого архивного файла для извлечения. Дополнительно ( verbose ) выводит список файлов по мере их извлечения. [13]-z-x-f-v

zlib — это абстракция алгоритма DEFLATE в библиотечной форме, которая включает поддержку как формата файла gzip, так и облегченного формата потока данных в своем API. Потоковый формат zlib, DEFLATE и формат файла gzip были стандартизированы соответственно как RFC 1950, RFC 1951 и RFC 1952.

Формат gzip используется в сжатии HTTP , технике, используемой для ускорения отправки HTML и другого контента во Всемирной паутине . Это один из трех стандартных форматов для сжатия HTTP, как указано в RFC 2616. Этот RFC также определяет формат zlib (называемый «DEFLATE»), который эквивалентен формату gzip, за исключением того, что gzip добавляет одиннадцать байтов служебных данных в виде заголовков и трейлеров. Тем не менее, формат gzip иногда рекомендуется вместо zlib, поскольку Internet Explorer не реализует стандарт правильно и не может обрабатывать формат zlib, как указано в RFC 1950. [14]

zlib DEFLATE используется внутри формата Portable Network Graphics (PNG).

С конца 1990-х годов bzip2 , утилита сжатия файлов, основанная на алгоритме сортировки блоков, приобрела некоторую популярность в качестве замены gzip. Она производит значительно меньшие файлы (особенно для исходного кода и другого структурированного текста), но за счет памяти и времени обработки (до 4 раз). [15]

AdvanceCOMP, Zopfli , libdeflate и 7-Zip могут создавать файлы, совместимые с gzip, используя внутреннюю реализацию DEFLATE с лучшими коэффициентами сжатия, чем сам gzip, но за счет большего процессорного времени по сравнению с эталонной реализацией. [ необходима ссылка ]

Исследование, опубликованное в 2023 году, показало, что простые методы сжатия без потерь, такие как gzip, можно объединить с классификатором k-ближайших соседей , чтобы создать привлекательную альтернативу глубоким нейронным сетям для классификации текста при обработке естественного языка . Было показано, что этот подход эквивалентен, а в некоторых случаях и превосходит традиционные подходы, такие как BERT, из-за низких требований к ресурсам, например, отсутствия требований к оборудованию GPU . [16]

Смотрите также

Примечания

  1. ^ Джим Мейеринг (19 августа 2023 г.). "gzip-1.13 released [stable]" . Получено 20 августа 2023 г. .
  2. ^ Типы носителей «application/zlib» и «application/gzip». Internet Engineering Task Force. doi : 10.17487/RFC6713 . RFC 6713. Получено 1 марта 2014 г.
  3. ^ Deutsch, L. Peter (май 1996 г.). "Спецификация формата файла GZIP версии 4.3". Internet Engineering Task Force. doi :10.17487/RFC1952 . Получено 23 июля 2019 г. .
  4. ^ Жан-Лу Гайи. "GNU Gzip". Gnu.org . Архивировано из оригинала 15 октября 2015 г. Получено 11 октября 2015 г.
  5. ^ "GNU Gzip: Advanced usage". Gnu.org . Архивировано из оригинала 24 декабря 2012 г. Получено 28 ноября 2012 г.
  6. ^ "Может ли gzip сжать несколько файлов в один архив?". Gnu.org . Архивировано из оригинала 22 июля 2010 г. Получено 27 января 2010 г.
  7. ^ "tarball, The Jargon File, версия 4.4.7". Catb.org . Архивировано из оригинала 20 марта 2017 г. Получено 27 января 2010 г.
  8. ^ "GNU Gzip". Операционная система GNU и движение за свободное программное обеспечение . 5 февраля 2023 г. Получено 3 апреля 2024 г. В настоящее время gunzip может распаковывать файлы, созданные с помощью gzip, zip, compress или pack. Определение входного формата происходит автоматически.
  9. ^ "Страница руководства OpenBSD gzip(1)". Openbsd.org . OpenBSD . Получено 4 февраля 2018 г. .
  10. ^ "gzip". Man.freebsd.org. 9 октября 2011 г. Архивировано из оригинала 17 декабря 2019 г. Получено 1 марта 2014 г.
  11. ^ Марк Адлер (2017). "pigz: Параллельная реализация gzip для современных многопроцессорных многоядерных машин". zlib.net . Архивировано из оригинала 18 декабря 2018 г. . Получено 23 декабря 2018 г. .
  12. ^ Восстановление поврежденного файла .gz – Жан-Лу Гайи, GZip.org
  13. ^ "Как извлечь / распаковать файлы tar.gz из командной строки Linux". База знаний phoenixNAP . 14 ноября 2019 г. Получено 12 января 2022 г.
  14. ^ Лоуренс, Эрик (21 ноября 2014 г.). «Сжатие Интернета». Блоги MSDN > IEInternals . Microsoft . Архивировано из оригинала 28 октября 2015 г. . Получено 2 ноября 2015 г. .
  15. ^ "Comparison Tool: 7-zip vs bzip2 vs gzip". compressionratings.com . Архивировано из оригинала 1 ноября 2014 . Получено 1 ноября 2014 .
  16. ^ Цзян, Чжиин; Ян, Мэтью; Цирлин, Михаил; Тан, Рафаэль; Дай, Ицинь; Линь, Джимми (июль 2023 г.). «Классификация текста с низкими ресурсами: метод классификации без параметров с компрессорами». Результаты Ассоциации компьютерной лингвистики: ACL 2023. Торонто, Канада: Ассоциация компьютерной лингвистики: 6810– 6828. doi : 10.18653/v1/2023.findings-acl.426 . S2CID  260668487.

Ссылки

  • RFC 1952 Архивировано 28 июля 2019 г. на Wayback Machine – спецификация формата файла GZIP версии 4.3
  • Официальный сайт
Взято с "https://en.wikipedia.org/w/index.php?title=Gzip&oldid=1267722908"