Архивация и разархивация в Linux

Работа с архивами в Linux входит в базовый набор: бэкапы, передача файлов, экономия места на диске. Ниже разобраны основные утилиты и типичные сценарии: tar и zip, gzip/bzip2, шифрование через gpg, синхронизация rsync и запуск по cron.

tar: архивация и сжатие

tar собирает каталоги в один файл и при необходимости сразу сжимает через gzip, bzip2 или xz. Это стандарт для логов, конфигов и выгрузок.

Создание архива

tar -cvf archive_name.tar /path/to/directory
  • -c создать архив
  • -v показывать ход работы
  • -f имя выходного файла

Архив со сжатием gzip

tar -czvf archive_name.tar.gz /path/to/directory

Флаг -z включает gzip. Для bzip2 используют -j, для xz: -J.

Распаковка

Обычный tar:

tar -xvf archive_name.tar

Сжатый gzip:

tar -xzvf archive_name.tar.gz

Чтобы положить файлы в конкретный каталог, добавьте -C /path/to/dest.

zip и unzip

Формат zip удобен при обмене с Windows и macOS. Для каталога нужна рекурсия:

zip -r archive_name.zip /path/to/directory
  • -r обход вложенных каталогов

Распаковка:

unzip archive_name.zip

В нужный каталог: unzip archive_name.zip -d /path/to/dest.

gzip и gunzip

gzip сжимает один файл (не каталог) и по умолчанию заменяет исходник на .gz.

gzip file.txt

Получится file.txt.gz. Обратно:

gunzip file.txt.gz

Чтобы оставить оригинал, используйте gzip -k file.txt (где поддерживается).

bzip2 и bunzip2

bzip2 часто даёт чуть лучшее сжатие, чем gzip, ценой большей нагрузки на CPU. Синтаксис похож:

bzip2 file.txt

Результат: file.txt.bz2.

bunzip2 file.txt.bz2

Архив с шифрованием (gpg)

Если архив уходит по незащищённому каналу, его можно сразу зашифровать симметричным ключом через gpg:

tar -czvf - /path/to/directory | gpg -c -o archive_name.tar.gz.gpg

Флаг -c у gpg: симметричное шифрование, пароль запросят интерактивно. Расшифровка и распаковка:

gpg -d archive_name.tar.gz.gpg | tar -xzvf -

Простой скрипт бэкапа

Пример bash-скрипта: собрать архив с датой в имени и отправить по SCP:

#!/bin/bash
DIR="/path/to/directory"
BACKUP_NAME="backup_$(date +%F).tar.gz"
REMOTE_USER="username"
REMOTE_HOST="example.com"
REMOTE_DIR="/path/to/backup"

tar -czvf "$BACKUP_NAME" "$DIR"
scp "$BACKUP_NAME" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR"

Кавычки вокруг переменных снижают риск сюрпризов с пробелами в путях. Скрипт удобно повесить на cron (см. ниже).

rsync для синхронизации

Когда нужен не разовый tar, а регулярная синхронизация, удобен rsync: копирует только изменения, умеет SSH и сжатие на лету.

rsync -avz /path/to/directory/ user@remote:/path/to/backup/
  • -a архивный режим (права, структура, ссылки)
  • -v подробный вывод
  • -z сжатие при передаче

Слэш в конце исходного пути влияет на то, копируется ли содержимое каталога или сам каталог. Для dry-run добавьте -n.

Автоматизация через cron

Планировщик cron запускает скрипты по расписанию. Редактор заданий пользователя:

crontab -e

Ежедневный запуск в 00:00:

0 0 * * * /path/to/backup_script.sh

Имеет смысл писать вывод в лог (>> /var/log/backup.log 2>&1) и проверять код возврата, иначе ошибки бэкапа легко пропустить.


Итого: tar/gzip/bzip2 для упаковки, zip для совместимости, gpg для защиты, rsync для инкрементальной синхронизации, cron для расписания. Этого набора хватает для большинства серверных и локальных задач с архивами в Linux.

Источники и ссылки


Комментарии загружаются…