THE BELL

Есть те, кто прочитали эту новость раньше вас.
Подпишитесь, чтобы получать статьи свежими.
Email
Имя
Фамилия
Как вы хотите читать The Bell
Без спама

Регулировать скорость сжатия, где -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, которые можно использовать без применения дополнительных программ.



THE BELL

Есть те, кто прочитали эту новость раньше вас.
Подпишитесь, чтобы получать статьи свежими.
Email
Имя
Фамилия
Как вы хотите читать The Bell
Без спама