Как архивировать и разархивировать файлы в Debian?

В этой статье обсудим архивацию данных — частая и весьма полезная операция любого разработчика или системного администратора.

Начнем мы с алгоритма .zip и неспроста. Данный формат очень популярен и является универсальным для многих операционных систем, будь то Windows или Mac OS — полученный zip-архив смогут прочитать.

Отмечу, что архивация и сжатия — это разные понятия. Это небольшое примечание не играет в нашей статье особой роли, но сразу стоит эти термины разделять.

Для исключительно архивирования в Linux давным-давно используется команда tar — она прекрасно справляется с этой задачей.

Tar — это программа для упаковки группы файлов в единый архив в формате tar. Эта программа постоянно используется системой управления пакетами Debian и полезна при создании резервных копий и обмене файлами.

https://packages.debian.org/ru/sid/tar

Установка в Debian / Ubuntu

Если у вас не установлены утилиты zip и unzip, то исправить это можно очень просто:

sudo apt install zip unzip

sudo apt-get install zip unzip

Создание архива в Debian / Ubuntu

Рассмотрим простую ситуацию: у нас на сервере есть куча файлов, директорий и наша задача упаковать их все в архив и после скачать на нашу локальную машину или передать на другой сервер.

Директории на сервере

Первым делом пройдем в нужную директорию (хотя это и не обязательно)

cd /var/www

После выполнения команды можете убедиться, что вы находитесь в нужном месте при помощи команды:

pwd

Результатом выполнения данной команды будет путь в консоли: /var/www (ну или тот, который вы указали)

Для того чтобы увидеть директории и файлы введите команду

ls -l

Результат ее выполнения явно продемонстрирует в консоли директории и файлы, которые в ней находятся. Если добавить параметр -a, то мы можем увидеть и скрытые файлы, что бывает весьма полезным в некоторых ситуациях.

Получим:

drwxr-xr-x  2 root     root     4096 Sep 30 03:50 html
drwxrwxr-x  5 www-data www-data 4096 Oct 26 13:38 shavrin-rf
drwxr-xr-x 13 root     root     4096 Sep  6 07:27 site-ru

Мы видим подробную информацию о директориях/файлах:

  • Тип файла (бука d — директория)
  • Права (разрешения) на файл
  • Количество жестких ссылок на файл
  • Владелец файла
  • К какой группе относится файл
  • Размер файла
  • Дата и время
  • Имя файла

d – файл является каталогом;
b – файл является специальным блочным файлом;
c – файл является специальным символьным файлом;
p – файл является именованным каналом;
 – обычный файл.

Перейдем непосредственно к делу и нехитрой командой сделаем наш архив:

zip -r archive.zip *

ключик -r предписывает утилите zip рекурсивно проходить все директории и архивировать их содержимое. А звездочка в конце команды — равносильно слову «ВСЁ», т.е. — архивировать всё, что есть в директории, в которой мы и находимся.

Как вариант можно указать путь к той директории которую мы архивируем. Это полезно когда вы находитесь в другом месте в системе и вместо звездочки просто указываете нужный, относительно корня ОС, путь:

zip -r filename.zip /path/to/folder

## Наш пример
zip -r archive.zip /var/www

Ну вот и всё. Да, есть много нюансов при работе с zip, таких как: включение в архив только нужных типов файлов (используется ключ -i), можно указать степень сжатия по шкале от 0 до 9, где 0 — это отсутствие сжатия, можно при помощи параметра -P задать пароль на архив. Но все это уже частные случаи.

Разархивация данных (unzip)

Разархивирование данных происходит проще простого. Вместо команды zip нам следует использовать — unzip. Пакет unzip — это распаковщик файлов .zip

И начать стоит с проверки целостности данных. Это осуществимо при помощи ключика -t (test). Обратимся к нашему архиву указав следующую команду:

unzip -t archive.zip

Данный синтаксис подразумевает, что вы находитесь в той же директории где и ваш архив. В противном случае необходимо указать относительный путь, например:

unzip -t /var/www/archive.zip

Получим что то вроде этого:

    testing: var/www/site/wp-includes/sitemaps/class-wp-sitemaps-provider.php   OK
    testing: var/www/site/wp-includes/sitemaps/class-wp-sitemaps-renderer.php   OK
    testing: var/www/site/wp-includes/locale.php   OK
    testing: var/www/site/wp-includes/taxonomy.php   OK
    testing: var/www/site/wp-includes/registration.php   OK
    testing: var/www/site/wp-includes/update.php   OK
    testing: var/www/site/wp-includes/date.php   OK
    testing: var/www/site/wp-includes/nav-menu.php   OK
    testing: var/www/site/wp-includes/post.php   OK
    testing: var/www/site/wp-login.php   OK
    testing: var/www/site/wp-trackback.php   OK
    testing: var/www/site/xmlrpc.php   OK
    testing: var/www/site/wp-blog-header.php   OK
No errors detected in compressed data of /var/www/archive.zip.

Убедившись в отсутствии ошибок, мы приступаем к разархивированию данных. И здесь нам необходимо придерживаться правила ЧТО / КУДА. То есть первый путь мы задаем то ЧТО подлежит разархивированию, а второй — КУДА требуется выгрузить файлы из архива. Единственное что требуется учесть, так то, что после архива мы указываем ключик -d (директория) и далее путь к папке куда произойдет разархивация:

unzip /var/www/archive.zip -d /var/www/html

Если вы забыли ( * добро пожаловать в клуб 🙂 ), что из себя представляет ваш архив, то его содержимое можно посмотреть при помощи параметра -l (list)

unzip -l /var/www/archive.zip