Как архивировать и распаковывать файлы с помощью Gzip в Linux

Опубликовано: 2022-06-28
Терминал Linux на красном фоне.
Фатмавати Ачмад Заэнури/Shutterstock.com

Существует много утилит для сжатия файлов, но в каждом дистрибутиве Linux вы обязательно найдете gzip . Если вы учитесь использовать только один инструмент сжатия, это должен быть gzip .

СВЯЗАННЫЕ С: Как работает сжатие файлов?

Алгоритмы и деревья

Инструмент сжатия данных gzip был написан в начале 1990-х годов и до сих пор присутствует в каждом дистрибутиве Linux. Существуют и другие инструменты сжатия, но независимо от того, на каком компьютере Linux вам нужно работать, вы найдете на нем gzip . Так что, если вы знаете, как использовать gzip , вам не нужно ничего устанавливать.

gzip — это реализация алгоритма DEFLATE, изобретенного и запатентованного Филом Кацем из PKZIP. Алгоритм DEFLATE улучшил более ранние алгоритмы сжатия, которые все работали с вариациями темы. Сжимаемые данные сканируются, идентифицируются уникальные строки, которые добавляются в двоичное дерево.

Уникальным строкам назначается уникальный маркер ID в зависимости от их положения в дереве . Маркеры используются для замены строк в данных, и, поскольку маркеры меньше, чем данные, которые они заменили, файл сжимается. Замена токенов на исходные строки повторно увеличивает данные до их несжатого состояния.

Сравнительный анализ: какой формат сжатия файлов лучше всего?
СВЯЗАННЫЕ С Benchmarked: какой формат сжатия файлов лучше всего?

Алгоритм DEFLATE добавил изюминку, заключающуюся в том, что наиболее часто встречающимся строкам выделялись наименьшие токены, а наименее часто встречающимся строкам выделялись более крупные. Алгоритм DEFLATE также включает в себя идеи двух более ранних методов сжатия, кодирования Хаффмана и сжатия LZ77.

На момент написания алгоритму DEFLATE уже почти три десятилетия. Три десятилетия назад стоимость хранения данных была высокой, а скорость передачи — низкой. Сжатие данных было жизненно важно.

4 способа освободить место на диске в Linux
СВЯЗАННЫЕ 4 способа освободить место на диске в Linux

Хранение данных сегодня намного дешевле, а скорость передачи на порядки выше. Но у нас есть гораздо больше данных для хранения, и люди во всем мире получают доступ к облачным хранилищам и потоковым сервисам. Сжатие данных по-прежнему жизненно важно, даже если все, что вы делаете, это сжимаете то, что вам нужно загрузить или передать, или вы пытаетесь освободить место на локальном жестком диске.

Команда gzip

Чем больше файл, тем лучше может быть сжатие. Это происходит по двум причинам. Во-первых, в большом файле будет много повторяющихся одинаковых последовательностей байтов. Вторая причина заключается в том, что список строк и токенов необходимо хранить в сжатом файле, чтобы можно было выполнить распаковку. При очень маленьком файле накладные расходы могут свести на нет все преимущества сжатия. Но даже с довольно маленьким файлом, вероятно, произойдет некоторое уменьшение размера.

Сжатие файла

Чтобы сжать файл, все, что вам нужно сделать, это передать имя файла команде gzip . Мы проверим исходный размер файла, сожмем его, а затем проверим размер сжатого файла.

 ls -lh calc-sheet.ods
 gzip calc-sheet.ods
 ls -lh кал-* 

Сжатие электронной таблицы

Исходный файл, электронная таблица под названием «calc-sheet.ods», имеет размер 11 КБ, а сжатый файл, также известный как файл архива, — 9,3 КБ. Обратите внимание, что имя файла архива — это имя исходного файла с добавленным к нему расширением «.gz».

Первое использование команды ls нацелено на конкретный файл, электронную таблицу. Второе использование ls ищет все файлы, начинающиеся с «calc-», но находит только сжатый файл. Это потому, что по умолчанию gzip создает файл архива и удаляет исходный файл.

Это не проблема. Если вам нужен исходный файл, вы можете получить его из архивного файла. Но если вы предпочитаете сохранить исходный файл, вы можете использовать опцию -k (сохранить).

 gzip -k calc-sheet.ods
 ls -lh расчетный лист.* 

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

На этот раз исходный файл ODS сохраняется.

Распаковка файла

Чтобы распаковать файл архива GZ, используйте параметр -d (распаковать). Это позволит извлечь сжатый файл из архива и распаковать его так, чтобы он был неотличим от исходного файла.

 ls расчетный лист.*
 gzip -d calc-лист.ods.gz
 ls расчетный лист.* 

Распаковка файла с помощью gzip

На этот раз мы видим, что gzip удалил файл архива после извлечения исходного файла. Чтобы сохранить файл архива, нам нужно снова использовать параметр -k (сохранить), а также параметр -d (распаковать).

 ls расчетный лист.*
 gzip -d calc-лист.ods.gz
 ls расчетный лист.* 

Распаковка файла и сохранение файла архива

На этот раз gzip не удаляет файл архива.

СВЯЗАННЫЕ С: Почему удаленные файлы можно восстановить и как это предотвратить

Распаковка и перезапись

Если вы попытаетесь извлечь файл в каталог, где существует исходный файл или другой файл с таким же файлом, gzip предложит вам отказаться от извлечения или перезаписать существующий файл.

 gzip -d текстовый файл.txt.gz 

Запрос на перезапись от gzip, когда файл в архиве уже существует в каталоге

Если вы заранее знаете, что вас устраивает перезапись файла в каталоге файлом из архива, используйте параметр -f (принудительно).

 gzip -df текстовый файл.txt.gz 

Принудительная перезапись существующего файла

Файл будет перезаписан, и вы автоматически вернетесь в командную строку.

Сжатие деревьев каталогов

Параметр -r (рекурсивный) заставляет gzip сжимать файлы во всем дереве каталогов. Но результат может быть не таким, как вы ожидаете.

Вот дерево каталогов, которое мы собираемся использовать в этом примере. Каждый каталог содержит текстовый файл.

 уровень дерева 1 

Древовидная структура тестового каталога

Давайте воспользуемся gzip для дерева каталогов и посмотрим, что произойдет.

 gzip -r уровень1/
 уровень дерева 1 

Структура каталогов после запуска на ней gzip

В результате gzip создал архивный файл для каждого текстового файла в структуре каталогов. Он не создал архив всего дерева каталогов. На самом деле gzip может поместить в архив только один файл.

Мы можем создать архивный файл, содержащий дерево каталогов и все его файлы, но нам нужно ввести в действие еще одну команду. Программа tar используется для создания архивов многих файлов, но у нее нет собственных процедур сжатия. Но, используя соответствующие параметры с tar , мы можем заставить tar протолкнуть файл архива через gzip . Таким образом, мы получаем сжатый файл архива и многофайловый или многокаталоговый архив.

 tar -czvf level1.tar.gz level1

Параметры tar :

  • c : Создать архив.
  • z : Протолкните файлы через gzip .
  • v : Подробный режим. Напечатайте в окне терминала, чем занимается tar .
  • f level1.tar.gz : Имя файла для архивного файла.

Вывод tar, проходящий через дерево каталогов

Это архивирует структуру дерева каталогов и все файлы в дереве каталогов.

СВЯЗАННЫЕ: Как сжимать и извлекать файлы с помощью команды tar в Linux

Получение информации об архивах

Параметр -l (список) предоставляет некоторую информацию о файле архива. Он показывает сжатый и несжатый размеры файла в архиве, степень сжатия и имя файла.

 gzip -l уровень1.tar.gz
 gzip -l текстовый файл.txt.gz 

Использование параметра -l list для просмотра статистики сжатия архива

Вы можете проверить целостность файла архива с помощью опции -t (тест).

 gzip -t level1.tar.gz 

Тестирование архива с опцией -t

Если все хорошо, вы автоматически возвращаетесь в командную строку. Отсутствие новостей - хорошая новость.

Если архив поврежден или не является архивом, вам сообщат об этом.

 gzip -t не-архив.gz 

Использование параметра -t для проверки файла, который не является архивом

Скорость против сжатия

Вы можете выбрать скорость создания архива или степень сжатия. Вы делаете это, предоставляя число в качестве опции от -1 до top -9 . Параметр -1 дает максимальную скорость в ущерб сжатию, а -9 дает максимальное сжатие в ущерб скорости.

Если вы не укажете один из этих параметров, gzip использует -6 .

 gzip -1 calc-sheet.ods
 ls -lh исчисление-лист.ods.gz
 gzip -9 кальк-лист.ods
 ls -lh исчисление-лист.ods.gz
 gzip -6 кальк-лист.ods
 ls -lh исчисление-лист.ods.gz 

Использование gzip с разными приоритетами скорости и сжатия

С таким маленьким файлом мы не увидели существенной разницы в скорости выполнения, но была небольшая разница в сжатии.

Интересно, что нет никакой разницы между использованием сжатия уровня 9 и сжатия уровня 6. Вы можете выжать только определенное количество сжатия из любого данного файла, и в этом случае этот предел был достигнут при сжатии уровня 6. Увеличение до 9 не привело к дальнейшему уменьшению размера файла. С файлами большего размера разница между уровнями 6 и 9 будет более заметной.

Сжатый, без защиты

Не путайте сжатие с шифрованием или любой формой защиты. Сжатие файла не дает ему никакой безопасности или повышенной конфиденциальности. Любой, у кого есть доступ к вашему файлу, может распаковать его с помощью gzip .

СВЯЗАННЫЕ: список 10 самых больших файлов или каталогов в Linux