Казалось бы, архивация файлов — базовая задача, с которой начинается знакомство с терминалом Linux. Но именно на ней чаще всего сыплются новички. Типичная ошибка: распаковал архив с сайтом или бэкапом на новом сервере, а всё сломалось — веб-сервер выдает ошибку доступа (классическая Forbidden 403), скрипты не исполняются, права улетели в дефолтные.
В Linux права доступа (Permissions) и владельцы файлов (Ownership) — это основа безопасности. Обычные утилиты компрессии при слепом копировании могут сбросить эти метаданные. Чтобы этого не происходило, стандартном автоматизации де-факто является утилита tar (Tape Archive). Она умеет не просто сжимать данные, а упаковывать их в один поток, намертво вшивая внутрь информацию о владельцах и масках прав. Сегодня разберем чистые CLI-команды для повседневной работы.
Анатомия флагов: Что означают буквы
Команды утилиты tar часто выглядят как случайный набор букв. Чтобы не заучивать их вслепую, разберем физику основных флагов:
c(Create) — создать новый архив.x(eXtract) — извлечь (распаковать) данные из существующего архива.v(Verbose) — интерактивный режим. Выводит список обрабатываемых файлов в консоль в реальном времени. Если архивируете терабайты данных, этот флаг лучше отключать, чтобы не тратить такты процессора на вывод миллионов строк в терминал.f(File) — указывает, что работа идет с физическим файлом архива, а не с ленточным накопителем (наследие старых Unix-систем). Этот флаг всегда должен идти последним в блоке опций, прямо перед именем архива.z(gzip) — пропускать архив через утилиту сжатия gzip. На выходе получаем файл с расширением.tar.gz.j(bzip2) — сжатие через bzip2 (работает медленнее, но сжимает плотнее). Расширение —.tar.bz2.p(Preserve permissions) — **самый важный флаг для админа**. Принудительно сохраняет все маски прав (chmod) и владельцев (chown) для каждого файла внутри архива. При запуске от имениrootэтот режим включается автоматически, но явное указание флага страхует от системных дефолтов.
Упаковка: Как правильно создать архив
Синтаксис создания архива жесткий: сначала пишем флаги, затем имя будущего архива, и только в самом конце — путь к папке или файлам, которые упаковываем.
Базовая упаковка папки со сжатием gzip и сохранением прав:
tar -czpf backup_site.tar.gz /var/www/html/
Продвинутый прием: Исключение мусора (Исключения)
Часто внутри папки лежит огромный кэш, логи или временные файлы, которые упаковывать в бэкап нет никакого смысла. Для этого используется директива --exclude. Обратите внимание: путь в исключении пишется без корневого слэша, относительно упаковываемой директории:
tar --exclude='html/wp-content/cache' -czpf backup_clean.tar.gz /var/www/html/
Распаковка: Как развернуть данные без потери прав
При извлечении данных критически важно находиться под учетной записью суперпользователя (root) или использовать sudo. Если распаковывать архив от имени обычного пользователя, система физически не сможет присвоить файлам нужных владельцев (например, системного юзера www-data), и права сбросятся на того, кто запустил команду.
Распаковка в текущую директорию:
sudo tar -xzpf backup_site.tar.gz
Распаковка в конкретную целевую папку (Флаг -C):
По умолчанию утилита извлекает файлы туда, где вы сейчас находитесь. Чтобы направить поток данных в другую директорию, используйте заглавную букву -C:
sudo tar -xzpf backup_site.tar.gz -C /opt/deploy/
Шпаргалка по быстрым командам
Сводная таблица для повседневного использования в терминале:
| Задача / Команда | Флаги и синтаксис | Что происходит в системе |
|---|---|---|
| Посмотреть содержимое архива без распаковки | tar -tzf archive.tar.gz |
Выводит дерево файлов прямо в терминал. Флаг t отвечает за чтение оглавления. |
| Добавить файл в существующий архив | tar -rvf archive.tar file.txt |
Флаг r дописывает данные в конец. Внимание: не работает со сжатыми (gzip) архивами. |
| Максимальное сжатие (bzip2) | tar -cjpf archive.tar.bz2 /path/ |
Процессор нагружается сильнее, но итоговый вес файла выходит меньше, чем при gzip. |
| Распаковать только один конкретный файл | tar -xzpf archive.tar.gz path/to/file.txt |
Извлекает из огромного архива строго один указанный элемент, не трогая остальное. |
Заключение
Использование утилиты tar с флагом -p от имени суперпользователя гарантирует, что разметка вашей файловой системы, права на запуск скриптов и владельцы директорий веб-сервера перенесутся на новую машину в первозданном виде. Это исключает появление скрытых ошибок прав доступа после миграции.
