В этой статье обсудим архивацию данных — частая и весьма полезная операция любого разработчика или системного администратора.
Начнем мы с алгоритма .zip и неспроста. Данный формат очень популярен и является универсальным для многих операционных систем, будь то Windows или MacOS — а это значит, что полученный zip-архив сможет распознать (зачитать) почти любая операционная система.
Отмечу, что архивация и сжатие — это разные понятия. Это небольшое примечание не играет в нашей статье особой роли, но желательно сразу эти термины разделять.
Задача: Архивировать файлы в архив ZIP, определённой директории на сервере, для дальнейшей работы с их копией в заархивированном виде.
Решение: Первым делом нам нужно проверить наличие пакета zip для дальнейшей работы. В этом нам поможет пакет dpkg — менеджер пакетов для Debian.
Чтобы получить подробный отчёт о состоянии определённого пакета, выполните команду:
dpkg --status zip
или при помощи инструмента dpkg-query — чтобы сделать запрос в базу данных пакета dpkg
dpkg-query -s unzip
Ключ -s это сокращение от —status
Вот пример выполнения запроса на боевом сервере одного из моих заказчиков:
Мы видим, что пакет для архивации данных zip отсутствует в нашей ОС. А в свою очередь следующий запрос, который я сделал для разнообразия по второму примеру в коде выше, выдаст нам противоположный результат. Мы видим, что пакет unzip существует в нашей ОС:
Для разнообразия, можно было осуществить проверку следующей командой:
zip --version
Следовательно, если пакет отсутствует, то требуется его установка в нашу ОС:
sudo apt install zip
Если отсутствовали оба пакета, то можно исправить эту неприятность вот такой командой:
sudo apt install zip unzip
Архивация пакетом zip
Подготовительная часть позади и теперь мы можем перейти непосредственно к выполнению поставленной задачи. Файлы, которые нам нужно заархивировать находятся в директории /var/www/site
cd /var/www/site
Убедимся, что мы находимся в нужной директории и в ней находятся нужные для архивации файлы. Воспользуемся для этого командой ls или dir. Вывод файлов после выполнения:
Перейдем непосредственно к делу и нехитрой командой сделаем наш архив:
sudo zip -r archive.zip *
Произойдёт магия… и после выполнения, введя повторно ls — выводит содержимое каталога, мы должны обнаружить наш архив
Разберёмся в этой магии…
ключик -r предписывает утилите zip рекурсивно проходить все директории и архивировать их содержимое. А звездочка в конце команды — равносильно слову «ВСЁ», т.е. — архивировать всё, что есть в директории, в которой мы и находимся.
Как вариант можно указать путь к той директории которую мы архивируем. Это полезно когда вы находитесь в другом месте в системе и вместо звездочки просто указываете нужный, относительно корня ОС, путь:
zip -r filename.zip /path/to/folder
## Наш пример
zip -r archive.zip /var/www/site
Рассмотрим более сложный пример, в котором мы добавим в архив изображения с расширением файлов: .jpg, .jepg, .png
zip -R archive_image "*.jpg" "*.jepg" "*.png"
В архив archive_image.zip попадут картинки с перечисленными расширениями. Учтите, что в архив попадает и структура директорий:
В принципе, на этом всё. Да, есть много нюансов при работе с zip, таких как: включение в архив только нужных типов файлов (используется ключ -i), можно указать степень сжатия по шкале от 0 до 9, где 0 — это отсутствие сжатия, можно при помощи параметра -P задать пароль на архив. Но все это уже частные случаи.
Распаковка пакетом unzip
Разархивирование данных происходит проще простого. Вместо команды zip нам следует использовать — unzip. Пакет unzip — это распаковщик файлов .zip
И перед распаковкой, начать стоит с проверки целостности данных. Это осуществимо при помощи ключика -t (test). Обратимся к нашему архиву указав следующую команду:
unzip -t archive.zip
Данный синтаксис подразумевает, что вы находитесь в той же директории где и ваш архив. В противном случае необходимо указать относительный путь, например:
unzip -t /var/www/site/archive.zip
Результат выполнения:
Убедившись в отсутствии ошибок, мы приступаем к разархивированию данных. И здесь нам необходимо придерживаться правила ЧТО / КУДА.
То есть первый путь мы задаем то ЧТО подлежит разархивированию, а второй — КУДА требуется выгрузить файлы из архива. Единственное что нужно тут учесть, так то, что после архива мы указываем ключик -d (директория) и далее путь к папке куда произойдет разархивация:
unzip /var/www/site/archive.zip -d /var/www/html
Эта инструкция распакует наш архив в директорию html. На скриншоте ниже можно посмотреть как отработала эта строка. В данном примере, мы подымаемся на уровень выше из директории site, далее выбираем директорию html и смотрим её содержимое. Файлы из архива на месте!
Если вы забыли ( добро пожаловать в клуб 🙂 ), что находится в вашем архиве, то его содержимое можно посмотреть при помощи параметра -l (list)
unzip -l /var/www/site/archive.zip