В этой статье обсудим архивацию данных — частая и весьма полезная операция любого разработчика или системного администратора.
Начнем мы с алгоритма .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