Архиватор tar (Tape ARchive) – один из самых универсальных инструментов в UNIX‑подобных системах․ Он позволяет объединять множество файлов и каталогов в один файл‑архив, а при необходимости добавлять сжатие (gzip, bzip2, xz и др․)․ Ниже – подробное руководство по созданию архивов tar с практическими примерами, которые можно сразу применять в работе․
Основной синтаксис команды tar
Общий вид команды:
tar [опции] файл_архива [файлы_или_каталоги]Главные опции, которые нам понадобятся:
- -c – создать (create) архив;
- -x – извлечь (extract) архив;
- -t – показать содержимое (list) архива;
- -f – указать имя файла архива;
- -v –verbose (подробный вывод);
- -z – сжать через gzip (․tar․gz);
- -j – сжать через bzip2 (․tar․bz2);
- -J – сжать через xz (․tar․xz);
- --exclude=ШАБЛОН – исключить файлы/каталоги по шаблону;
- -P – сохранять абсолютные пути (по умолчанию tar удаляет ведущий slash);
- -r – добавить файлы в существующий архив;
- -u – обновить архив (добавить только новые/изменённые файлы)․
Создание несжатого архива tar
Самый простой вариант – архив без сжатия․ Подходит, когда нужно просто собрать файлы вместе, а размер не критичен․
Пример 1: архив из нескольких файлов
tar -cf archive․tar file1․txt file2․log file3․conf
Пример 2: архив всего каталога
tar -cf backup․tar /home/user/docs
После выполнения получится файл archive․tararchive․tar (или backup․tar), содержащий все указанные данные в оригинальном виде․
Сжатые архивы tar
Для уменьшения размера архива обычно применяют одно из трёх популярных сжатий․
Gzip (расширение ․tar․gz или ․tgz)
tar -czf archive․tar․gz /path/to/data
Опция -z активирует gzip․
Bzip2 (расширение ․tar․bz2)
tar -cjf archive;tar․bz2 /path/to/data
Опция -j активирует bzip2 (более сильное сжатие, но медленнее)․
Xz (расширение ․tar․xz)
tar -cJf archive․tar․xz /path/to/data
Опция -J активирует xz (лучшее współczynnik сжатия среди трёх)․
Исключение файлов и каталогов
Часто нужно создать архив, но не включать в него временные файлы, логи или определённые подкаталоги․ Для этого используется флаг --exclude․ Его можно указывать несколько раз – все условия логически объединяются через AND․
Пример: архив проекта без каталога node_modules и файлов ․log
tar -czf project․tar․gz --exclude='node_modules' --exclude='*․log' /var/www/myproject
Подробный вывод и проверка содержимого
Опция -v показывает, какие файлы добавляются в архив․ Это удобно для отладки․
tar -cvf archive․tar /etc/nginx
Чтобы посмотреть, что уже находится в архиве, без его распаковки, используем -t:
tar -tf archive․tar․gz
Извлечение (распаковка) архива
Для распаковки применяем опцию -x вместе с соответствующим флагом сжатия (если архив сжат)․
Несжатый tar
tar -xf archive․tar
Gzip
tar -xzf archive․tar․gz
Bzip2
tar -xjf archive․tar․bz2
Xz
tar -xJf archive․tar․xz
По умолчанию файлы распаковываются в текущий каталог․ Чтобы указать целевую директорию, добавляем -C:
tar -xzf archive․tar․gz -C /opt/backup
Добавление и обновление файлов в существующем архиве
Если архив уже создан и нужно добавить новые файлы без полной перепаковки, используем -r (добавить) или -u (обновить только новые/изменённые)․
Пример добавления файла
tar -rf archive․tar newfile․txt
Пример обновления (добавит только изменившиеся файлы)
tar -uf archive․tar changed_file․conf
Обратите внимание: эти операции работают только с несжатыми архивами (․tar)․ Для сжатых архивов придётся сначала распаковать, внести изменения и снова запаковать․
Разбиение большого архива на части
Иногда требуется переместить архив на носитель с ограничением размера (например, на флешку 4 ГБ)․ Tar умеет разбивать вывод на части при помощи утилиты split или непосредственно через опцию -M (multi‑volume)․ Ниже показан способ через split․
Создание и разбиение архива tar․gz на части по 100 МБ
tar -czf ⎻ /var/www | split -b 100M ⎻ site_backup․tar․gz․
Получим файлы site_backup․tar․gz․aa, site_backup․tar․gz․ab и т․д․ Для восстановления:
cat site_backup․tar․gz․* | tar -xzf -
Полезные советы и лучшие практики
- Всегда проверяйте содержимое архива перед распаковкой (tar -tf), особенно если архив получен из ненадёжного источника․
- Для резервного копирования системных каталогов (/etc, /var/log) используйте абсолютные пути и опцию -P, чтобы сохранить ведущий slash․
- При работе с большими объёмами данных предпочтительно использовать --exclude для игнорирования кэша, временных файлов и логов․
- Если нужно создать архив сразу нескольких каталогов, перечислите их через пробел:
tar -czf full_backup․tar․gz /home /etc /var/www
- Автоматизируйте процесс создания архивов в cron‑заданиях, добавляя дату в имя файла:
tar -czf /backups/backup_$(date +%Y%m%d_%H%M)․tar․gz /important_data
Команда tar остаётся незаменимым инструментом для архивации в Linux благодаря своей простоте, гибкости и поддержке различных методов сжатия․ Освоив основные опции (-c, -x, -z, -j, -J, --exclude и др․), вы сможете быстро создавать резервные копии, переносить данные между системами и эффективно управлять большими наборами файлов․
Надеюсь, данное руководство окажется полезным как для начинающих системных администраторов, так и для опытных DevOps‑инженеров․ Удачной работы с архивами!