Архивирование и сжатие данных с помощью Linux

За фразой «архивирование данных» скрывается основная идея резервного копирования файлов или целых каталогов и хранения их в безопасном месте, часто в сжатом виде. По причинам безопасности данных, архивирование было важным фактором в серверных средах на ранней стадии: Первоначально серверные данные хранились на ленточных накопителях — метод резервного копирования, который до сих пор используется для больших объемов данных. Чтобы сделать этот метод архивирования как можно более эффективным, в 1979 году для Unix-систем была разработана упаковочная программа tar (сокращение от tape archiver). С помощью tar файлы и каталоги и по сей день могут быть упакованы в один файл данных, а затем восстановлены с сохранением прав пользователя — при условии, что источник и цель поддерживают каталоги файлов данных Unix или Linux.

Для процесса архивирования, чтобы освободить дополнительное пространство для хранения, файлы .tar-данных часто сжимаются с помощью различных инструментов, таких как gzip, bzip2 или lzop. Но что представляют собой различные программы и форматы сжатия? И почему они все еще так важны сегодня для таких систем, как Linux tar?

Самые популярные программы сжатия для Linux

Существует множество бесплатных инструментов сжатия для дистрибутивов Linux, все они имеют одну общую черту: ими можно управлять через командную строку или терминал. С помощью коротких команд можно быстро сжимать файлы данных, например, HTML-документы, для экономии места в памяти и пропускной способности при передаче по сетям или Интернету. Кроме того, существуют стандартные графические интерфейсы для этих инструментов, а также менеджеры архивов, которые объединяют несколько программ сжатия — которые также должны быть установлены — в единый визуальный пользовательский интерфейс. Управление графическим интерфейсом, очевидно, требует дополнительных системных ресурсов, поэтому использование терминала, как правило, остается лучшим выбором для сжатия.

Основное различие между отдельными программами заключается в скорости сжатия, которая сопровождается различной продолжительностью сжатия. Однако в большинстве случаев различные режимы можно выбрать и в самой программе, чтобы обеспечить либо максимальное сокращение объема хранимых данных, либо максимально быстрое время сжатия. Еще одна особенность, которая отличает программы сжатия, — это формат вывода. Из-за различных алгоритмов, используемых разными программами, сжатые файлы имеют разный формат упаковки и требуют определенных программ для распаковки.

gzip

gzip (GNU zip) — один из наиболее используемых методов сжатия в Linux. Этот инструмент особенно играет важную роль в веб-разработке. Он основан на алгоритме deflate и изначально был разработан как преемник оригинального Unix-компрессора rock compress для платформы GNU. Сегодня приложение, запрограммированное на языке C, может использоваться для извлечения и упаковки файлов не только в Linux, но и в системах Windows и macOS. gzip строит блоки данных размером 32 000 байт (32 КБ), поэтому в современных программах сжатия он считается устаревшим.

По скорости работы бесплатная пакетная программа по-прежнему находится среди лучших вариантов, поэтому распространенные программы веб-серверов, такие как Apache, IIS или NGINX, обычно реализуют ее в виде собственных модулей, чтобы отвечать на запросы пользователей сжатыми пакетами данных в кратчайшие сроки. Дополнительную информацию о функциональности и использовании инструмента сжатия под лицензией GPL можно найти в нашей статье об этой программе.

Преимущества Недостатки
Быстрый процесс сжатия Небольшой размер блока
Стандартное программное обеспечение популярных веб-серверов Низкая степень сжатия

bzip2

Для высококачественного сжатия файлов без потерь под Linux используется программа bzip2, практически продаваемая под лицензией BSD. Приложение использует трехслойный метод сжатия: Сначала используется преобразование Берроуза-Уиллера для сортировки входящих данных на различные блоки. Они имеют размер 900 000 байт (900 КБ) каждый, а затем подвергаются преобразованию Move-to-front. Наконец, кодирование Хаффмана обеспечивает фактическое сжатие данных. Файлы, упакованные с помощью bzip2, получают форматирование .bz2.

Эта программа, разработанная Джулианом Сьюардом, значительно превосходит другие инструменты по степени сжатия, но также требует гораздо больше времени для завершения процесса. Одним из самых больших преимуществ является то, что при распаковке bz2 можно работать с частично поврежденными архивами. С помощью bzip2recover можно, по крайней мере, извлечь и распаковать все читаемые блоки. bzip2 является официальным преемником bzip, который работал с арифметическим кодом и не получил дальнейшего развития по патентным причинам.

Преимущества Недостатки
Сильная степень сжатия Очень медленный
Возможна распаковка частично поврежденных архивов  

p7zip

p7zip — это портал свободной, лицензированной под LGPL архивной программы 7-zip для POSIX-платформ. Портал является единственным решением под Linux, которое полностью поддерживает формат .7z. Программа упаковки основана на алгоритме Лемпеля-Зива-Маркова (LZMA), разработанном Игорем Павловым в 1998 году, который работает по словарному методу и в принципе может рассматриваться как дальнейшее развитие Deflate (с примерно 50% более сильным сжатием). Созданный файловый архив может быть разделен на столько частей, сколько требуется, с защитой паролем и опциональным шифрованием с помощью AES-256 (заголовок).

LZMA обеспечивает отличные результаты благодаря высокой степени сжатия, а также демонстрирует хорошие показатели скорости. Но этот инструмент архивирования также предъявляет очень высокие требования к производительности системы. Хороший процессор (не менее 2 ГГц) и достаточный объем памяти (2 ГБ или более) являются основными условиями, особенно для высоких уровней сжатия. Помимо использования через терминал или менеджер архивов, p7zip-gui также имеет собственный графический интерфейс для портированного приложения 7-zip.

Преимущества Недостатки
Отличное соотношение степени сжатия и продолжительности Очень высокие системные требования
Возможна защита паролем и шифрование заголовков  

lzop

Программа сжатия lzop (Lempel-Ziv-Oberhumer-Packer), как и gzip, фокусируется на скорости процессов упаковки и распаковки и показывает даже лучшие результаты, чем инструмент GNU. Он основан на своем одноименном алгоритме Лемпеля-Зива-Оберхумера (LZO), который был опубликован в 1996 году под лицензией GNU General Public License (GPL). Ресурсосберегающее сжатие работает по методу словаря: Повторяющиеся строки заменяются символом, который указывает на соответствующую запись той же самой, впервые записанной строки в словаре. Файлы обрабатываются блоками по 256 000 байт (256 КБ). По умолчанию исходный файл остается в процессе обработки.

Помимо высочайшей скорости сжатия и совместимости с gzip, при разработке lzop основное внимание уделялось портативности программы. По этой причине существуют версии практически для всех платформ, включая macOS и Windows. Сжатые файлы содержат формат .lzo.

Преимущества Недостатки
Очень быстрое сжатие Коэффициент сжатия довольно низкий из-за высокой скорости
Высокая переносимость  

Популярные инструменты и форматы: Табличное сравнение

  gzip bzip2 p7zip lzop
Операционные системы Кросс-платформа Linux/Unix, Windows Unix-подобные Кросс-платформенный
Лицензия GNU GPL BSD-подобная GNU LGPL GNU GPL
Процедура сжатия Алгоритм Deflate Преобразование Берроуза-Уиллера, преобразование с перемещением вперед, кодирование Хаффмана Алгоритм LZMA Алгоритм LZO
Формат данных .gz .bz2 .7z .lzo
Шифрование     AES-256  
Режим сжатия 1-9 1-9 0-9 1, 3, 7-9
Сильные стороны Очень быстро Очень хорошая степень сжатия Превосходная степень сжатия, сжимает каталоги файлов Очень быстро, сжимает каталоги файлов
Слабые стороны Сжимает только отдельные файлы Умеренная скорость, сжимает только отдельные файлы Высокие требования к производительности системы Слабая степень сжатия

Обзор таблицы показывает, что не существует единственного незаменимого инструмента сжатия, а наоборот, выбор программы зависит от сценария работы. p7zip, например, имеет явные преимущества, такие как сильная степень сжатия и возможность шифрования AES-256, что стоит немало, когда безопасность играет большую роль. Кроме того, p7zip и lzop позволяют сжимать целые каталоги файлов, в то время как gzip и bzip2 сжимают только отдельные файлы. С другой стороны, p7zip также предъявляет высокие требования к производительности системы, что делает его менее подходящим для сжатия данных в небольших масштабах.

Как работает сжатие данных с помощью инструментов Linux

Упомянутые программы-упаковщики существенно различаются по степени сжатия и скорости. Однако, когда дело доходит до синтаксиса и использования этих инструментов, сходство становится заметным. Все программы можно использовать без специального графического интерфейса или менеджера архивов, через командную строку. Новички могут быстро освоиться с различными параметрами и командами. В качестве примера мы покажем, как сжимать файлы с помощью bzip2 в Linux, а затем распаковывать их в формат .bz2.

Универсальный синтаксис bzip2 имеет следующий вид:

bzip2 Optional file(s)

Для стандартного процесса сжатия нет необходимости указывать опции. Это требуется, только если вы хотите изменить параметры сжатия, получить доступ к меню обзора или распаковать файл .bz2. Например, чтобы упаковать текстовый документ test.txt, достаточно выполнить команду

bzip2 test.txt

чтобы удалить исходный файл и заменить его сжатым файлом test.txt.bz2. Помещая документы вместе, вы также можете упаковать несколько файлов одной командой:

bzip2 text.txt test2.txt test3.txt

Если вы хотите распаковать упакованный документ, необходимо — как уже упоминалось ранее — установить соответствующие параметры опции (-d):

bzip2 –d test.txt

Вот обзор некоторых других параметров команды bzip2:

Команда Описание
-1 … -9 Дает степень сжатия по шкале от 1 до 9, где 1 — самая слабая степень, а 9 — самая сильная; значение по умолчанию — 5
-f Начинает сжатие, даже если файл .bz2 с таким же именем уже существует; в этом случае существующий файл перезаписывается
-c Записывает упакованный документ на стандартный вывод (обычно на рабочий стол)
-q Блокирует все сообщения bzip2
-v Показывает дополнительную информацию, например, степень сжатия для всех обработанных файлов
-t Проверяет целостность выбранного файла
-k Если вы добавите этот параметр к команде сжатия, исходный файл останется
-h Открывает меню обзора

Причины высокой востребованности tar

Программа архивации tar работает уже более 30 лет и почти не потеряла своей ценности. Отчасти это объясняется тем, что программа позволяет архивировать данные, сохраняя при этом определения файлов. Но в основном это связано с тем, что он позволяет упаковывать полные каталоги файлов. Это делает tar идеальным партнером таких инструментов сжатия, как gzip и bzip2, которые позволяют сжимать данные только в одном файле.

На первом этапе программа упаковки компилирует все файлы данных в выбранном каталоге в один архивный файл, не развязывая ни один из содержащихся в нем файлов. На втором этапе файлы сжимаются с помощью одной из специальных программ сжатия. В результате такого сжатия, которое описывается как прогрессивное, компактное или сплошное, архивные файлы получают расширенные форматы, такие как .tar.gz (.tgz для краткости) или .tar.bz2 (.tbz2 для краткости). Программа упаковки также позволяет последующую распаковку таких файлов (например, тип файла .tar.gz).

Архив Tar: Как (не)упаковывать .tar.gz и Co. в Linux

Комбинация tar и инструмента сжатия не обязательна, поэтому вы также можете объединить в архив файлы, которые вы ранее не упаковывали или не хотите сжимать. Например, если вы хотите объединить несжатые тестовые документы test.txt и test2.txt в один архив с именем archive.tar, достаточно выполнить следующую команду:

tar –cf archive.tar test.txt test2.txt

Чтобы разархивировать этот архив в Linux, замените параметр -c (создать новый архив) на -x (извлечь файлы из архива). Если необходимо разархивировать не только определенный компонент архива, то файл(ы) можно опустить:

tar –xf archiv.tar

Если же вы хотите упаковать сжатый архив — например, на основе сжатия gzip, включая расширенное форматирование .tar.gz — то tar также предлагает соответствующие опции. Поскольку в программе реализованы опции для сжатия и распаковки с помощью программ bzip2, xz, compress и gzip pack, это также возможно с помощью одной команды:

tar –czf archive.tar.gz test.txt test2.txt

 Команда распаковки .tar.gz отличается от аналогичной команды для несжатых каталогов только указанием параметра программы pack:

tar –xzf archive.tar.gz
Совет

Параметр -f, позволяющий выбрать соответствующий архивный файл, всегда должен быть на последнем месте — следующие символы всегда интерпретируются как файл.

Наиболее важные команды приложения архивации

Помимо ранее перечисленных параметров команд для простого архивирования файлов, существует несколько дополнительных параметров для задания процесса упаковки или распаковки. К ним относятся уже упомянутые методы сжатия, параметры для настройки каталогов, а также параметры для проверки и предварительного просмотра tar-архивов:

Команда Описание
—help Доступ к меню tar
-c Создать новый архив
-d Позволяет сравнить файлы в архиве и в файловой системе
-f Записывает выбранные файлы в архив с указанным именем файла; Считывает данные из архива с указанным именем файла
-j Сжимает архивы с помощью bzip2 или распаковывает такие же архивы.
-J Сжимает архивы с помощью xz или разархивирует те же архивы
-k Предотвращает перезапись существующих файлов при извлечении их из архива
-p Обеспечивает сохранение привилегий доступа во время извлечения
-r Добавляет файлы в ранее созданный архив
-t Отображает содержимое выбранного архива
-u Добавляет в архив только те файлы, которые моложе версии архива
-x Распаковывает файлы из архива
-z Сжимает архив с помощью gzip или разархивирует тот же архив
-Z Сжимает файлы с помощью compress или unzips same archive
-A Вкладывает содержимое архива в другой архив
-C Переход в указанный каталог для распаковки выбранного архива
-M Опция для создания, отображения или дополнительного архива, состоящего из нескольких частей
-W Проверяет архив после процесса архивирования
Совет

Некоторые опции, например, добавление файлов в существующий архив (-r), не работают со сжатыми архивами. Их необходимо сначала разархивировать.

Примеры:

Отобразить содержимое архива

tar –tf archive.tar

Обновить содержимое архива (не включает подкаталоги!)

tar –uf archive.tar file(s)

Раскрыть содержимое архива

tar –rf archive.tar New File

Сравнить содержимое архива с файловой системой (запускать в директории архива!)

tar –dvf archive.tar

File Roller: менеджер архивов для GNOME

File Roller — это графический пользовательский интерфейс для различных инструментов сжатия и программ упаковки, который является стандартным для работы в командной строке. Менеджер архивов доступен для настольных сред GNOME и Unity и распространяется под лицензией GNU General Public License с 2001 года. Он позволяет просматривать содержимое различных архивных файлов, а также извлекать, удалять или добавлять в них файлы. Также можно создавать новые сжатые или неизмененные файлы и архивы, а также конвертировать их в другой формат. Для этого в главном окне программы предусмотрены различные кнопки и меню, а также функция drag-and-drop.

Помимо форматов архивов tar, таких как tar.gz, File Roller поддерживает следующие форматы:

  • .7z
  • .tar
  • .gzip
  • .bzip2
  • .ar
  • .jar
  • .cpio

File Roller предустановлен в некоторых дистрибутивах Linux, таких как Ubuntu, по умолчанию, но также может быть установлен вручную с помощью соответствующего менеджера пакетов или с официальной домашней страницы. Альтернативой для среды рабочего стола KDE является Ark.

Оцените статью
cdelat.ru
Добавить комментарий