Команда gunzip

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

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

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

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

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

$ gunzip archive.tar.gz
$ tar -xf archive.tar

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

$ tar -xfz archive.tar.gz

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

1. Восстановление оригинальной версии одного файла

$ gunzip text.txt.gz

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

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

$ gunzip text1.txt.bz2 text2.txt.bz2 text3.txt.bz2

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

3. Восстановление оригинальной версии файла с сохранением сжатой версии

$ gunzip -k text.txt

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

4. Распаковка сжатого архива

$ tar -xfz etc.tar.gz

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

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

$ gunzip -t text.txt.gz
text.txt.gz: OK

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

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

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

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