tar (Tape ARchive) — утилита Linux для создания архивов: объединяет несколько файлов и директорий в один файл с сохранением структуры, прав доступа и временных меток. В сочетании с gzip, bzip2 или zstd обеспечивает сжатие. Встроена в каждый Linux-дистрибутив.
Как работает
tar создаёт поток байт: сначала заголовок с метаданными файла (имя, права, владелец, размер, временная метка), затем содержимое. При добавлении сжатия поток передаётся через компрессор. Формат tar не индексирован — для извлечения конкретного файла приходится читать архив с начала до нужного элемента. Для частого доступа к отдельным файлам используйте BorgBackup с дедупликацией.
Основные команды
# Создать архив с gzip-сжатием
tar -czf backup.tar.gz /var/www/site/
# Создать архив с lz4 (быстрее gzip, чуть хуже сжатие)
tar -I lz4 -cf backup.tar.lz4 /var/www/site/
# Создать архив с zstd (лучший баланс скорость/сжатие)
tar -I zstd -cf backup.tar.zst /var/www/site/
# Просмотр содержимого без распаковки
tar -tzf backup.tar.gz | head -20
# Извлечь в текущую директорию
tar -xzf backup.tar.gz
# Извлечь в конкретную папку
tar -xzf backup.tar.gz -C /restore/
# Извлечь только один файл
tar -xzf backup.tar.gz var/www/site/config.php
# Архив с исключениями
tar -czf backup.tar.gz /var/www/ --exclude='*.log' --exclude='cache/'
История
tar создан в 1979 году для операционной системы Unix как инструмент записи данных на магнитные ленты (отсюда «Tape ARchive»). Стандарт POSIX (1988) и GNU tar (1988) — наиболее распространённая реализация. Формат tar.gz (tarball) стал стандартом распространения исходных кодов Unix-программ. BSD tar (libarchive) добавил поддержку форматов zip, 7z, rar. В 2020-х zstd вытесняет gzip как предпочтительный компрессор: в 5-10 раз быстрее распаковка при сопоставимой степени сжатия.
Практические применения
Быстрое копирование директории с сохранением прав через tar pipe:
tar -cf - /source/ | tar -xf - -C /destination/
Передача по сети (заменяет rsync для разовых задач):
tar -czf - /var/www/ | ssh user@server 'tar -xzf - -C /var/www/'
Бекап MariaDB через tar (только при остановленной БД или LVM-снапшоте):
tar -czf mysql_backup.tar.gz /var/lib/mysql/
tar vs zip
tar — потоковый формат: создан для Unix, сохраняет права и симлинки, не имеет встроенного сжатия (используется внешний компрессор). zip — контейнер с индексом: каждый файл сжимается независимо, позволяет извлечь один файл без распаковки всего архива. Для Linux-серверов tar.gz/tar.zst — стандарт. zip чаще используется для обмена файлами с Windows-пользователями.
На что обращать внимание
tar по умолчанию сохраняет абсолютные пути — при распаковке файлы могут перезаписать системные файлы. Флаг -P разрешает абсолютные пути, без него tar автоматически убирает ведущий слэш. Для резервного копирования продакшен-систем tar уступает специализированным инструментам: нет дедупликации, шифрования и инкрементальных снимков из коробки. Используйте tar для разовых архивов и переноса данных, BorgBackup — для систематического резервного копирования.
При использовании tar для бекапов на VPS комбинируйте с cron: 0 3 * * * tar -czf /backup/site-$(date +%Y%m%d).tar.gz /var/www/ — ежедневный снимок в 3:00. Автоматическое удаление старых архивов: find /backup/ -name "site-*.tar.gz" -mtime +30 -delete.