Регулировать скорость сжатия, где -1 (один) – метод сжатия с наивысшей скоростью (наименьшее сжатие), а -9 – метод сжатия с наименьшей скоростью (оптимальное сжатие).
Описание :
Утилита gzip сокращает размер указанных файлов с помощью алгоритма кодировки Lempel-Ziv (LZ77). Если возможно, каждый файл заменяется файлом с расширением .gz при сохранении данных о режиме, принадлежности, времени доступа и изменения. (Расширение -z используется для VMS, z – для MSDOS, OS/2 и Atari.) Если файлы не указаны, выполняется сжатие стандартного потока ввода в стандартный поток вывода. Если новое имя файла является слишком длинным, утилита gzip усекает его с сохранением исходного имени файла в сжатом файле. Утилита gzip выполняет попытку сжатия только стандартных файлов. В частности, она игнорирует символьные ссылки.
Для восстановления сжатых файлов до исходного вида используются утилиты gzip -d , gunzip или zcat .
Примечание . На данные утилиты распространяются условия общедоступной лицензии GNU Public License (GPL). Они предназначены для использования в системах разработки программ.
Утилита gunzip заменяет каждый файл из списка в командной строке, имя которого оканчивается на .gz , .GZ или -z , а начинается с корректного "магического" числа, несжатым файлом без исходного расширения. Эта утилита также распознает специальные выражения .tgz и .taz в качестве условных обозначений для .tar.gz или .tar.GZ .
Утилита gunzip в настоящее время может распаковать файлы, созданные посредством утилит gzip , zip , compress или pack . Формата ввода определяется автоматически. При использовании первых двух форматов утилита gunzip проверяет 32-разрядный CRC. Для формата pack gunzip проверяет длину в несжатом виде. Формат сжатия не предусматривает проверок целостности. Однако в некоторых случаях утилита gunzip может обнаружить поврежденный файл .GZ . При ошибке распаковки файла .GZ не следует полагать, что файл .GZ является корректным только по причине отсутствия предупреждений со стороны стандартной утилиты uncompress . Как правило, это означает, что стандартная утилита uncompress не проверяет входные данные и генерирует некорректный вывод.
Утилита gzip используется для распаковки файлов, созданных посредством zip , только в том случае, если эти файлы включают один компонент, сжатый методом "deflation". Эта функция предназначена только для преобразования файлов tar.zip в формат tar.gz . Для извлечения файлов zip с несколькими компонентами следует использовать вместо gunzip утилиту unzip . (Обратите внимание, что утилита unzip не входит в комплект поставки QNX Neutrino.)
Утилита zcat идентична gunzip -c . (В некоторых системах утилиту zcat можно установить в качестве gzcat с сохранением исходной ссылки на утилиту compress .) Утилита zcat выполняет распаковку файлов из списка в командной строке или из стандартного ввода и записывает извлеченные данные в стандартный поток вывода. Она распаковывает файлы с корректным "магическим" числом независимо от наличия суффикса .gz .
Утилита gzip использует алгоритм Lempel-Ziv, применяемый в zip и PKZIP . Общее сжатие зависит от размера входного файла и распределения общих подстрок. Как правило, текст (исходный текст или текст на английском языке) сокращается на 60–70%. Качество сжатия, как правило, выше, чем при использовании алгоритма кодировки LZW ( compress ), метода Хаффмана ( pack ) или адаптивного метода Хаффмана ( compact ).
Сжатие выполняется даже в том случае, если сжатый файл превышает исходный по размеру. Самый неблагоприятный результат – увеличение на несколько байтов, используемых для заголовка файла gzip , плюс на 5 байтов на каждый блок из 32 КБ либо, для крупных файлов, увеличение на 0,015%. При сжатии и распаковке утилита gzip сохраняет данные о режиме и принадлежности, а также временные метки файлов.
Можно выполнить конкатенацию нескольких сжатых файлов. В этом случае утилита gunzip извлекает все компоненты одновременно. Пример:
Заархивированный файл GNU интегрирован со спецификациями и стандартами, реализованных с помощью алгоритма ZIP GNU сжатия, и эти сжатые файлы GNU сохраняются в формате GZIP и прикреплены с.gzip расширением. Эти.gzip файлы могут содержать один или несколько файлов, выбранных пользователем для сжатия с использованием алгоритма ZIP GNU. Полученный файл GZIP будет в меньшем размере, чем фактический размер несжатых версий файлов, хранящихся в файле GZIP. Алгоритм ZIP GNU является открытой технологией сжатия источника, а также поддержка этих стандартов сжатия GZIP и спецификации в основном интегрированы в системах Unix на базе. Есть много сжатия файлов и декомпрессии инструментов Microsoft Windows с поддержкой этих GZIP файлов, что означает, что эти программы могут быть использованы для создания или распаковки и получить доступ к информации, хранящейся в этих GZIP файлов. Есть также файл сжатия и распаковки программы, разработанные для Mac платформ, которые могут быть использованы для распаковки этих файлов GZIP. Smith Micro StuffIt Делюкс 2011 интегрирована с поддержкой сжатия файлов в формате GZIP, а также для распаковке GZIP файлов.
gzip (сокращение от GNU zip) – компьютерная утилита сжатия и восстановления (декомпрессии) файлов, использующая алгоритм DEFLATE. Используется в основном в UNIX-системах, в ряде которых является стандартом де-факто для сжатия данных. Была создана Жан-лу Галли (Jean-loup Gailly) и Марком Адлером (Mark Adler). Версия 0.1 была впервые выпущена 31 октября 1992 года, а версия 1.0 – в феврале 1993 года.
В соответствии с традициями Unix-программирования, gzip выполняет только две функции: сжатие и распаковка одного файла, он не умеет упаковывать несколько файлов в один архив. При сжатии к оригинальному расширению файла добавляется суффикс.gz. Для упаковки нескольких файлов обычно их сначала архивируют в один файл утилитой tar, а потом этот файл сжимают gzip. Таким образом, сжатые архивы обычно имеют двойное расширение.tar.gz или сокращённое.tgz.
С другой стороны, указанная особенность даёт gzip возможность работать с непрерывным потоком данных, упаковывая/распаковывая их «на лету». Это широко применяется в UNIX-системах: при помощи перенаправления потоков можно работать с упакованными файлами так же легко, как и с распакованными (распаковывая их в памяти при чтении и упаковывая при записи); многие Unix-утилиты имеют встроенную поддержку этого механизма. В последнее время gzip активно применяется для сжатия интернет-трафика. Сейчас gzip поддерживает большинство современных браузеров.
Кроме того, существует набор утилит для выполнения поиска, вывода и сравнения данных в формате gzip: zcat, zdiff, zfgrep, zless, zcmp, zegrep, zgrep, zmore.
В жизни каждого мужчины наступает момент, когда трафик растёт и сервак умирает необходимо задуматься об оптимизации. В последнем дайджесте PHP (№ 40) была упомянута ссылкой статья «How GZIP Compression Works». Исходя из статистики , 56% веб-сайтов используют GZIP. Я надеюсь, эта статья раскроет перед читателем достоинства этой технологии.
В тексте возможны ошибки (делал вычитку несколько раз, но всё же вдруг), поэтому заранее прошу прощения и прошу сообщать мне обо всех проблемах через личные сообщения, если какая-то часть перевода покажется вам некорректной.
Даже в современном мире, со скоростным интернет соединением и неограниченными хранилищами информации, сжатие данных по-прежнему актуально, особенно для мобильных устройств и стран с медленным интернет-соединением. Этот пост описывает метод де-факто сжатия без потерь для сжатия текстовых данных на веб-сайтах: GZIP.
GZIP compression
GZIP обеспечивает сжатие без потерь, иными словами, исходные данные можно полностью восстановить при распаковке. Он основан на алгоритме DEFLATE, который использует комбинацию алгоритма LZ77 и алгоритма Хаффмана.Алгоритм LZ77
Алгоритм LZ77 заменяет повторные вхождения данных на «ссылки». Т.е. если в имеющихся данных какая-то цепочка элементов встречается более одного раза, то все последующие её вхождения заменяются «ссылками» на её первый экземпляр. Алгоритм прекрасно рассмотрен и описан . Каждая такая ссылка имеет два значения: смещение и длина.Давайте рассмотрим пример:
Original text: «ServerGrove, the PHP hosting company, provides hosting solutions for PHP projects» (81 bytes)
LZ77: «ServerGrove, the PHP hosting company, p<3,32>ides<9,26>solutions for<5,52><3,35>jects» (73 bytes, assuming that each reference is 3 bytes)
Как вы могли заметить, слова «hosting» и «PHP» повторяются, поэтому во второй раз, когда подстрока найдена, она будет заменена ссылкой. Есть и другие совпадения, такие как «er», но т.к. это незначительно (в данном случае - «er» отсутствует в других словах) , остается оригинальный текст.
Кодирование Хаффмана
Кодирование Хаффмана является методом кодирования с переменной длиной, которая назначает более короткие коды к более частым «символам». Проблема с переменной длиной кода, как правило в том, что нам нужен способ узнать, когда код закончился и начался новый, чтобы расшифровать его.Кодирование Хаффмана решает эту проблему, создав код префикса, где ни одно кодовое слово не является префиксом другого. Это может быть более понятно на примере:
>Original text: «ServerGrove»
ASCII codification: «01010011 01100101 01110010 01110110 01100101 01110010 01000111 01110010 01101111 01110110 01100101» (88 bits)
ASCII представляет собой систему кодировки символов с фиксированной длиной, так что буква «е», которая повторяется три раза, а также является наиболее часто встречаемой буквой в английском языке, имеет такой же размер как буква «G», которая появляется только один раз. Используя эту статистическую информацию, Хаффман может создать наиболее оптимизированную систему
Huffman: «1110 00 01 10 00 01 1111 01 110 10 00» (27 bits)
Метод Хаффмана позволяет нам получить более короткие коды для «e», «r» и «v», в то время как «S» и «G» получаются более длинными. Объяснения, как использовать метод Хаффмана, выходят за рамки этого поста, но если вы заинтересовались, я рекомендую вам ознакомиться с отличным видео на Computerphile (или статьей на Хабре) .
DEFLATE как алгоритм, который используется в GZIP сжатии, является комбинацией обоих этих алгоритмов.
Является ли GZIP лучшим метод сжатия?
Ответ - нет. Есть другие методы, которые дают более высокие показатели сжатия, но существует несколько хороших причин использовать этот.Во-первых, даже при том что GZIP не самый лучший метод сжатия, он обеспечивает хороший компромисс между скоростью и степенью сжатия. Сжатие и распаковка у GZIP происходят быстро и степень сжатия на высоком уровне.
Во-вторых, нелегко внедрить новый глобальный метод сжатия данных, который смогут использовать все. Браузерам потребуется обновление, что на сегодняшний день гораздо проще за счёт автообновления. Как бы то ни было, браузеры - не единственная проблема. Chromium пытался добавить поддержку BZIP2, более лучшего метода основанного на преобразовании Барроуза-Уилера, но от него пришлось отказаться, т.к. некоторые промежуточные прокси-серверы искажали данные, т.к. не могли распознать заголовки bzip2 и пытались обработать gzip контент. Баг-репорт доступен .
GZIP + HTTP
Процесс получения сжатого контента между клиентом (браузером) и сервером достаточно прост. Если у браузера есть поддержка GZIP/DEFLATE, он даёт серверу понять это благодаря заголовку “Accept-Encoding”. Тогда, сервер может выбрать - отправлять содержимое в сжатом или оригинальном виде.Реализация
Спецификация DEFLATE обеспечивает некоторую свободу разработчикам реализовать алгоритм с использованием различных подходов, пока полученный поток совместим со спецификацией.GNU GZIP
Реализация GNU является наиболее распространенной и была разработана, чтобы стать заменой для утилиты архивации, свободной от запатентованных алгоритмов. Чтобы сжать файл с помощью утилиты GNU GZIP:$ gzip -c file.txt > file.txt.gz
Существует 9 уровней сжатия, от «1» (самого быстрого с наименьшим коэффициентом сжатия) до «9» (самого медленного с лучшей степенью сжатия). По умолчанию, используется «6». Если вам необходимо максимальное сжатие за счёт использования большего объёма памяти и времени, используйте флаг "-9" (или "-best"):
$ gzip -9 -c file.txt > file.txt.gz
7-zip
7-zip реализуется алгоритм DELFATE иначе и обычно архивирует с бо льшим коэффициентом сжатия. Чтобы максимально сжать файл:7z a -mx9 file.txt.gz file.txt
7-zip так же доступен для Windows и обеспечивает реализацию для других методов сжатия, таких как 7z, xz, bzip2, zip и прочих.
Zopfli
Zopfli идеально подходит для одноразового сжатия, например в ситуациях, когда файл единажды сжимается и многоразово используется. Он в 100 раз медленнее, но сжатие на 5% лучше, чем у других. Хабрапост .Включение GZIP
Apache
Модуль mod_deflate обеспечивает поддержку GZIP, так что ответ сервера сжимается на лету до его передачи клиенту через сеть. Чтобы включить сжатие текстовых файлов, необходимо дополнить.htaccess строками:AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
Существует несколько известных багов в некоторых версиях браузеров, поэтому рекомендуется* также добавить:
BrowserMatch ^Mozilla/4 gzip-only-text/html*это решение на текущий момент уже потеряло актуальность, как и вышеуказанные браузеры, поэтому данную информацию можно воспринимать в ознакомительных целях
BrowserMatch ^Mozilla/4\.0 no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Header append Vary User-Agent
Кроме того, можно использовать предварительно сжатые файлы вместо того, чтобы сжимать их каждый раз. Это особенно удобно для файлов, которые не меняются при каждом запросе, например CSS и JavaScript, которые могут быть сжаты с использованием медленных алгоритмов. Для этого:
RewriteEngine On
AddEncoding gzip .gz
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule ^(.*)$ $1.gz
Это даёт Apache понять, что файлы с расширением.gz должны предоставляться сжатыми (линия 2), нужно проверить доступность принятия gzip браузером (линия 3), и если сжатый файл существует (линия 4), мы добавляет.gz для запрашиваемого файла.
Nginx
Модуль ngx_http_gzip_module позволяет сжимать файлы с помощью GZIP на лету, в то время как ngx_http_gzip_static_module позволяет отправлять предварительно сжатые файлы с “.gz” расширением вместо обычных.Пример конфигурации выглядит следующим образом:
gzip on;
gzip_min_length 1000;
gzip_types text/plain application/xml;
GZIP + PHP
Хотя обычно сжимать данные используя PHP не рекомендуется, так как это довольно медленно, сделать это можно, используя модуль zlib . Например, используем максимальное сжатие на библиотеке jQuery.min:$originalFile = __DIR__ . "/jquery-1.11.0.min.js"; $gzipFile = __DIR__ . "/jquery-1.11.0.min.js.gz"; $originalData = file_get_contents($originalFile); $gzipData = gzencode($originalData, 9); file_put_contents($gzipFile, $gzipData); var_dump(filesize($originalFile)); // int(96380) var_dump(filesize($gzipFile)); // int(33305)
Вместо вывода (примечание переводчика)
Несмотря на то, как чесались руки добавить в статью автора собственные пояснения алгоритмов, статистику и результаты тестов сравнения, перевод осуществлён практически без вмешательств со стороны переводчика. Перевод статьи осуществлён с разрешения автора и портала ServerGrove.Пользователи компьютерных систем иногда сталкиваются с файлами, имеющими расширение GZ или TGZ. Возникает вполне закономерный вопрос: чем можно открыть такой файл? Не хотелось бы раньше времени расстраивать читателей, которые работают с операционной системой Windows, но целесообразность открытия файлов в этой середе сведена к минимуму. И вот в чем дело…
Что представляет собой разрешение GZ?
Файлы с расширением GZ впервые появились еще в 1993 году, после того как вышла утилита GZip для упаковки и распаковки файлов. Файлы, обработанные данной программой с применением алгоритма компрессии, и получили такое расширение. Многие, наверное, уже поняли, что приложение GZip относится к разряду архиваторов. Файлы, созданные с их помощью – это обычные архивы. Но здесь имеется один тонкий момент. Все дело в том, что такие архивы используются только в UNIX-подобных системах.
Сама утилита GZip здесь по умолчанию встроена в программную среду операционной системы. Самое интересное, что данный архиватор присутствует не только в операционной системе Linux, но и в операционных системах Mac OS X. Конечно, открыть файлы, которые имеют расширение GZ, можно открыть и в операционной системе Windows, но тут возникает вполне закономерный вопрос: а нужно ли это делать? Ведь в большинстве случаев декомпрессированные данные все равно не могут быть прочитаны в операционных системах Windows. Хотя есть версии GZip и для Windows.
Сжатие и распаковка файла: алгоритм
Многие пользователи могут ошибочно подумать, что программа GZip для сжатия и распаковки файлов работает точно так же, как и всем известный пакет WinZIP. Но это вовсе не так. Изначально тестирование программы выполнялось на основе собственного алгоритма DEFLATE. Данный алгоритм изначально был построен на сочетании двух видов кодировок Huffman и LZ77. Как вы уже поняли, при сжатии искомой информации к основному названию прибавляется суффикс gz. Но это касается только единичных файлов. Все дело в том, что данная программа изначально не поддерживает работу с несколькими файлами, что возможно в приложениях WinRaR или WinZIP.
Иначе говоря, запаковать в один архив два и более пакета данных просто невозможно. Это связано с тем, что утилита при компрессии и декомпрессии использует дополнительное приложение TAR. В результате при создании архивов на выходе получается не файл с расширением GZ, а объект с расширением TGZ. Также иногда встречается вариант tar.gz. Иначе говоря, утилита TAR сначала сжимает несколько файлов в один, который после этого обрабатывается приложением GZip. Такая комбинация действий, мягко говоря, является не очень удобной. Это же касается и процесса распаковки данных. Сначала выполняется декомпрессия основного архивного файла, а затем все остальные объекты извлекаются с помощью дополнительной утилиты TAR.
Чем открыть файл с расширением GZ?
Теперь поговорим о том, как можно открыть файлы с расширением GZ. Конечно, можно использовать для этих целей «родную» утилиту, которая называется GZip. Существуют версии данной программы как для UNIX, так и для Windows систем. Поскольку у нас больше используется именно операционная система Windows, то можно распаковывать файлы с таким расширением при помощи встроенного архиватора WinZIP. Помимо этого, достаточно эффективными являются пакеты программ WinRAR, 7-ZIP, Corel WinZIP, E-merge WinAce.
Вирус
Иногда бывают ситуации, когда под архивы с расширением GZ маскируются вирусы и вредоносные объекты. В большинстве случаев расширение GZ вирус заменяет чем-то похожим, например, GAZ. Известны случаи, когда вредоносные программы и вирусы проникают в систему в виде файла с расширением GZ. Антивирусные программы, рассчитанные на работу с операционной системе Windows, не всегда смогут обнаружить в таком случае потенциальную угрозу. Поэтому при выявлении подозрительных объектов нужно быть очень осторожным. Лучше использовать для проверки на вирусы мощные пакеты, а не бесплатные антивирусы типа Avast. В крайнем случае, просканируйте компьютер портативной утилитой типа KVRT на предмет наличия угроз.
Заключение
Вот и вся информация, касающаяся работы с архивами GZ. Многие пользователи, наверное, уже поняли, как нужно работать с такими данными. Но для начала следует прояснить ситуацию. Можно открыть такой архив даже в операционной системе Windows, но стоит ли это делать? Ведь запакованная в нем информация, которая относится исключительно к UNIX системам. Работать с такими файлами потом будет невозможно. Для примера посмотрим на файл образа с расширением DMG, который был создан в среде операционной системы Mac OS X. Извлечь содержимое такого файла можно при помощи программы UltraISO. Но вот что потом делать с извлеченной информацией? Такая же ситуация складывается и с форматом данных GZ. Даже если пользователь работает с операционными системами LINUX и Mac OS X, ему проще установить Win RAR, которые можно использовать без применения дополнительных программ.