Архивация и разархивация в Linux: tar, zip, gzip, zstd и rsync

Архивация и разархивация в Linux: tar, zip, gzip, zstd и rsync

Архивы в Linux нужны каждый день: бэкапы, перенос сайта на другой сервер, отправка логов, экономия места. Ниже основные утилиты и типовые команды: tar с gzip, xz и zstd, zip для обмена с Windows, шифрование через gpg, синхронизация rsync (21 сентября 2026 года вышла версия 3.5.1) и запуск бэкапа по cron.

tar: упаковка и сжатие

tar собирает каталог в один файл и при желании сразу сжимает его. Это стандарт для логов, конфигов и выгрузок сайта. Все ключи описаны в руководстве GNU tar, а основные такие:

# просто архив без сжатия
tar -cvf archive.tar /path/to/directory

# архив со сжатием gzip
tar -czvf archive.tar.gz /path/to/directory

# распаковка (GNU tar сам определит сжатие)
tar -xvf archive.tar.gz

# распаковка в нужный каталог
tar -xvf archive.tar.gz -C /path/to/dest
  • -c создать архив, -x распаковать, -t показать содержимое без распаковки;
  • -v показывать, что происходит, -f имя файла архива;
  • -z gzip, -j bzip2, -J xz, --zstd zstd;
  • -a выбрать сжатие по расширению: tar -caf archive.tar.xz каталог сожмёт архив через xz.

Какое сжатие выбрать: gzip, bzip2, xz или zstd

gzip быстрый и есть везде, поэтому для обмена файлами он по-прежнему вариант по умолчанию. bzip2 жмёт чуть лучше, но заметно медленнее. xz даёт самые маленькие архивы ценой времени и памяти, им пакуют исходники и образы. zstd сейчас самый удобный компромисс: жмёт примерно как gzip или лучше, а работает в разы быстрее, поэтому его любят для бэкапов. В GNU tar для него есть ключ --zstd, а распаковка через tar -xvf определяет формат сама.

tar --zstd -cvf archive.tar.zst /path/to/directory
tar -xvf archive.tar.zst

gzip и bzip2 для одного файла

gzip и bzip2 сжимают один файл, а не каталог, и по умолчанию заменяют исходник сжатым. Чтобы оригинал остался, нужен ключ -k. Подробности в руководстве gzip.

gzip file.txt        # получится file.txt.gz, file.txt исчезнет
gzip -k file.txt     # оригинал останется
gunzip file.txt.gz

bzip2 file.txt       # file.txt.bz2
bunzip2 file.txt.bz2

zip и unzip для обмена с Windows и macOS

Если архив пойдёт человеку на Windows или macOS, проще отдать zip: он открывается там без дополнительных программ. Для каталога нужен ключ -r.

zip -r archive.zip /path/to/directory
unzip archive.zip
unzip archive.zip -d /path/to/dest

Архив с шифрованием через gpg

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

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

# расшифровать и распаковать
gpg -d archive.tar.gz.gpg | tar -xzvf -

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

Скрипт собирает архив с датой в имени и отправляет его на другой сервер по scp. Кавычки вокруг переменных защищают от сюрпризов с пробелами в путях, а set -e останавливает скрипт на первой ошибке, чтобы не отправить пустой архив.

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

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

rsync для регулярной синхронизации

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

rsync -avz /path/to/directory/ user@remote:/path/to/backup/

# сначала посмотреть, что будет скопировано
rsync -avzn /path/to/directory/ user@remote:/path/to/backup/
  • -a архивный режим: права, владельцы, ссылки, структура каталогов;
  • -v подробный вывод, -z сжатие при передаче, -n пробный прогон без изменений;
  • слэш в конце исходного пути важен: с ним копируется содержимое каталога, без него сам каталог.

Бэкап по расписанию через cron

Чтобы скрипт запускался сам, его вешают на cron. Задания пользователя редактируются командой crontab -e. Вывод лучше писать в лог, иначе ошибка бэкапа пройдёт незамеченной.

# каждый день в 00:00
0 0 * * * /path/to/backup_script.sh >> /var/log/backup.log 2>&1

В итоге для упаковки хватает tar с gzip или zstd, zip нужен для обмена с Windows, gpg для защиты, rsync для регулярной синхронизации, а cron запускает всё это по расписанию. Этого набора хватает почти для всех задач с архивами на сервере и на рабочей машине.

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


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