Команда gzip

Команда gzip предназначена для сжатия данных без потерь с помощью одноименной утилиты, использующей алгоритм Лемпела-Зива (LZ77) с кодированием Хаффмана. Целью использования данной утилиты является экономия дискового пространства. Упомянутый алгоритм позволяет достичь худшей степени сжатия данных, чем те, которые реализованы в рамках утилит bzip2 и xz. При этом данный алгоритм является стандартным алгоритмом утилиты zip и используется по умолчанию в архивах формата ZIP. Кроме того, он является менее ресурсоемким, чем алгоритмы, которые реализованы в рамках утилит bzip2 и xz. Последнее обстоятельство обуславливает актуальность данной утилиты для низкопроизводительных систем.

Базовый синтаксис команды выглядит следующим образом:

$ gzip [параметры] <имена файлов>

Чаще всего gzip используется вообще без каких-либо параметров, причем в качестве аргументов может передаваться неограниченное количество имен файлов, которые следует сжать. По умолчанию оригинальные версии файлов заменяются на их сжатые версии с соответствующими метаданными (то есть, меткой времени модификации, правами доступа, именами владельца и группы владельцев и так далее). Если вас не устраивает такое положение дел, вы можете воспользоваться параметром -k для сохранения оригинальных версий файлов. Параметры из диапазона от -1 до -9 позволяют задать степень сжатия (от самой низкой до самой высокой соответственно), при этом чем выше степень сжатия, тем больше системных ресурсов требуется утилите. Параметр -t предназначен для тестирования целостности сжатого файла и не оказывает какого-либо влияния на него (следует комбинировать его с параметром -v для подробного вывода). Параметр -l также не оказывает никакого влияния на сжатый файл и предназначен для получения информации об архиве (размеров сжатого и не сжатого файлов, степени сжатия и имени оригинального файла). Параметр -d позволяет восстановить оригинальные версии файлов с переданными именами на основе их сжатых версий.

Если же вам нужно создать архив с несколькими файлами внутри, одной утилиты gzip будет явно мало. Для этой цели также понадобится утилита tar, с помощью которой можно создать архив с файлами, после чего сжать этот архив с помощью утилиты gzip. Например, вы можете использовать следующую последовательность команд для создания архива с именем archive.tar.gz:

$ tar -cf archive.tar <имена файлов>
$ gzip archive.tar

Параметры -c и -f утилиты tar предназначены для указания на необходимость добавления всех файлов в один архив (-c) и чтения имени файла архива из следующего аргумента (-f). Альтернативным вариантом является замена последней команды на параметр -z утилиты tar, позволяющий автоматически сжать полученный архив с помощью gzip:

$ tar -cfz archive.tar.bz2 <имена файлов>

Примеры использования

1. Сжатие одного файла

$ gzip text.txt

В результате оригинальный файл text.txt будет заменен на свою сжатую версию text.txt.gz.

2. Одновременное сжатие нескольких файлов

$ gzip text1.txt text2.txt text3.txt

В этом случае также все оригинальные версии файлов (text1.txt, text2.txt, text3.txt) будут заменены на сжатые версии (text1.txt.gz, text2.txt.gz, text3.txt.gz). Добавление нескольких файлов в единый файл архива будет рассмотрено ниже.

3. Сжатие одного файла с сохранением оригинала

$ gzip -k text.txt

Теперь оригинальный файл text.txt будет оставлен в директории вместе со сжатой версией text.txt.gz.

4. Восстановление оригинальной версии файла из сжатой версии

$ gzip -d text.txt.gz

В результате сжатая версия файла text.txt.gz будет заменена на его оригинальную версию text.txt. Если вам нужно сохранить сжатую версию, следует воспользоваться параметром -k таким же образом, как было показано выше.

5. Сжатие файла с указанием степени сжатия

Степень сжатия файла может регулироваться с помощью параметров из диапазона от -1 (минимальная) до -9 (максимальная). Команда для сжатия файла с минимальной степенью сжатия:

$ gzip -1 text.txt

С максимальной степенью сжатия:

$ gzip -9 text.txt

При этом параметр -1 может заменяться на параметр --fast, а параметр -9 — на параметр --best.

6. Создание сжатого архива со всеми файлами из директории

$ tar -cfz etc.tar.bz2 /etc/

В результате будет создан архив etc.tar.gz с файлами из директории /etc/.

7. Проверка целостности сжатой версии файла

$ gzip -tv text.txt.gz
text.txt.gz: OK

Для проверки целостности сжатых версий файлов используются контрольные суммы (CRC). В случае повреждения сжатой версии файла выводится сообщение об ошибке, в противном случае — слово «OK».

8. Получение информации о сжатом файле

$ gzip -l enums.c.gz
compressed uncompressed ratio uncompressed_name
       253          371 38.8% enums.c

Очевидно, что в столбце compressed выводится размер сжатого файла в байтах, в столбце uncompressed — размер несжатого файла в байтах, в столбце ratio — степень сжатия файла, а в столбце uncompressed_name — имя оригинального файла. Вся эта информация хранится в заголовке сжатого файла.