Как архивировать и распаковывать файлы с помощью Gzip в Linux
Опубликовано: 2022-06-28 Существует много утилит для сжатия файлов, но в каждом дистрибутиве Linux вы обязательно найдете gzip
. Если вы учитесь использовать только один инструмент сжатия, это должен быть gzip
.
СВЯЗАННЫЕ С: Как работает сжатие файлов?
Алгоритмы и деревья
Инструмент сжатия данных gzip
был написан в начале 1990-х годов и до сих пор присутствует в каждом дистрибутиве Linux. Существуют и другие инструменты сжатия, но независимо от того, на каком компьютере Linux вам нужно работать, вы найдете на нем gzip
. Так что, если вы знаете, как использовать gzip
, вам не нужно ничего устанавливать.
gzip
— это реализация алгоритма DEFLATE, изобретенного и запатентованного Филом Кацем из PKZIP. Алгоритм DEFLATE улучшил более ранние алгоритмы сжатия, которые все работали с вариациями темы. Сжимаемые данные сканируются, идентифицируются уникальные строки, которые добавляются в двоичное дерево.
Уникальным строкам назначается уникальный маркер ID в зависимости от их положения в дереве . Маркеры используются для замены строк в данных, и, поскольку маркеры меньше, чем данные, которые они заменили, файл сжимается. Замена токенов на исходные строки повторно увеличивает данные до их несжатого состояния.
Алгоритм DEFLATE добавил изюминку, заключающуюся в том, что наиболее часто встречающимся строкам выделялись наименьшие токены, а наименее часто встречающимся строкам выделялись более крупные. Алгоритм DEFLATE также включает в себя идеи двух более ранних методов сжатия, кодирования Хаффмана и сжатия LZ77.
На момент написания алгоритму DEFLATE уже почти три десятилетия. Три десятилетия назад стоимость хранения данных была высокой, а скорость передачи — низкой. Сжатие данных было жизненно важно.
Хранение данных сегодня намного дешевле, а скорость передачи на порядки выше. Но у нас есть гораздо больше данных для хранения, и люди во всем мире получают доступ к облачным хранилищам и потоковым сервисам. Сжатие данных по-прежнему жизненно важно, даже если все, что вы делаете, это сжимаете то, что вам нужно загрузить или передать, или вы пытаетесь освободить место на локальном жестком диске.
Команда 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
удалил файл архива после извлечения исходного файла. Чтобы сохранить файл архива, нам нужно снова использовать параметр -k
(сохранить), а также параметр -d
(распаковать).
ls расчетный лист.*
gzip -d calc-лист.ods.gz
ls расчетный лист.*
На этот раз gzip не удаляет файл архива.
СВЯЗАННЫЕ С: Почему удаленные файлы можно восстановить и как это предотвратить
Распаковка и перезапись
Если вы попытаетесь извлечь файл в каталог, где существует исходный файл или другой файл с таким же файлом, gzip
предложит вам отказаться от извлечения или перезаписать существующий файл.
gzip -d текстовый файл.txt.gz
Если вы заранее знаете, что вас устраивает перезапись файла в каталоге файлом из архива, используйте параметр -f (принудительно).
gzip -df текстовый файл.txt.gz
Файл будет перезаписан, и вы автоматически вернетесь в командную строку.
Сжатие деревьев каталогов
Параметр -r
(рекурсивный) заставляет gzip
сжимать файлы во всем дереве каталогов. Но результат может быть не таким, как вы ожидаете.
Вот дерево каталогов, которое мы собираемся использовать в этом примере. Каждый каталог содержит текстовый файл.
уровень дерева 1
Давайте воспользуемся gzip
для дерева каталогов и посмотрим, что произойдет.
gzip -r уровень1/
уровень дерева 1
В результате gzip
создал архивный файл для каждого текстового файла в структуре каталогов. Он не создал архив всего дерева каталогов. На самом деле gzip
может поместить в архив только один файл.
Мы можем создать архивный файл, содержащий дерево каталогов и все его файлы, но нам нужно ввести в действие еще одну команду. Программа tar
используется для создания архивов многих файлов, но у нее нет собственных процедур сжатия. Но, используя соответствующие параметры с tar
, мы можем заставить tar
протолкнуть файл архива через gzip
. Таким образом, мы получаем сжатый файл архива и многофайловый или многокаталоговый архив.
tar -czvf level1.tar.gz level1
Параметры tar
:
- c : Создать архив.
- z : Протолкните файлы через
gzip
. - v : Подробный режим. Напечатайте в окне терминала, чем занимается
tar
. - f level1.tar.gz : Имя файла для архивного файла.
Это архивирует структуру дерева каталогов и все файлы в дереве каталогов.
СВЯЗАННЫЕ: Как сжимать и извлекать файлы с помощью команды tar в Linux
Получение информации об архивах
Параметр -l
(список) предоставляет некоторую информацию о файле архива. Он показывает сжатый и несжатый размеры файла в архиве, степень сжатия и имя файла.
gzip -l уровень1.tar.gz
gzip -l текстовый файл.txt.gz
Вы можете проверить целостность файла архива с помощью опции -t
(тест).
gzip -t level1.tar.gz
Если все хорошо, вы автоматически возвращаетесь в командную строку. Отсутствие новостей - хорошая новость.
Если архив поврежден или не является архивом, вам сообщат об этом.
gzip -t не-архив.gz
Скорость против сжатия
Вы можете выбрать скорость создания архива или степень сжатия. Вы делаете это, предоставляя число в качестве опции от -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
С таким маленьким файлом мы не увидели существенной разницы в скорости выполнения, но была небольшая разница в сжатии.
Интересно, что нет никакой разницы между использованием сжатия уровня 9 и сжатия уровня 6. Вы можете выжать только определенное количество сжатия из любого данного файла, и в этом случае этот предел был достигнут при сжатии уровня 6. Увеличение до 9 не привело к дальнейшему уменьшению размера файла. С файлами большего размера разница между уровнями 6 и 9 будет более заметной.
Сжатый, без защиты
Не путайте сжатие с шифрованием или любой формой защиты. Сжатие файла не дает ему никакой безопасности или повышенной конфиденциальности. Любой, у кого есть доступ к вашему файлу, может распаковать его с помощью gzip
.
СВЯЗАННЫЕ: список 10 самых больших файлов или каталогов в Linux