Работа с архиватором tar в Linux

tar (Tape ARchive) — стандартный инструмент в Linux для создания, просмотра и распаковки архивов. Несмотря на название, он изначально разрабатывался для ленточных накопителей, но сегодня повсеместно применяется для упаковки файлов и директорий без сжатия либо в связке со средствами сжатия (gzip, bzip2, xz и др.). Важно понимать: tar не сжимает данные сам по себе — он только собирает файлы в один архив; сжатие добавляется через внешние утилиты либо встроенные флаги.


Базовые принципы и терминология

  • Архив — один файл (обычно с расширением .tar), содержащий метаданные (права, владельцев, временные метки) и содержимое файлов.
  • Флаги (опции) — буквенные параметры, управляющие поведением tar. Часто используются без дефиса (например, cvf), что исторически сложилось в Unix.
  • Путь к архиву — аргумент, определяющий, куда сохраняется или откуда читается архив.
  • Список файлов/директорий — аргументы, указывающие, какие объекты обрабатывать.

Ключевое правило: порядок аргументов важен. Флаги задают режим, затем идёт имя архива, затем — целевые файлы/директории.


Основные режимы работы

Режим Флаг Описание
Создание c Создать новый архив
Добавление r Добавить файлы в существующий архив
Обновление u Добавить/обновить только файлы, которые новее в файловой системе
Просмотр содержимого t Показать список файлов в архиве
Извлечение x Распаковать архив

Дополнительные часто используемые флаги:

  • v (verbose) — подробный вывод (показывает каждый обрабатываемый файл).
  • f — указать имя файла архива (обязательно, если архив не на ленте).
  • z — сжатие/распаковка через gzip.
  • j — сжатие/распаковка через bzip2.
  • J — сжатие/распаковка через xz.
  • --exclude=ШАБЛОН — исключить файлы по шаблону.
  • -C ДЕРЕКТОРИЯ — распаковать в указанную директорию.

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

Без сжатия

  • c — создать.
  • v — подробный вывод.
  • f — имя файла архива.
  • /path/to/dir — целевая директория.

С сжатием gzip

Здесь z подключает gzip на лету. Расширение .tar.gz (или .tgz) — общепринятое.

Сжатие bzip2 и xz


Просмотр содержимого архива

Перед распаковкой полезно проверить, что внутри:

Флаг t выводит список файлов, v делает его читаемым (с правами, размерами, датами).


Извлечение архива

По умолчанию tar распаковывает в текущую директорию, сохраняя относительные пути:

Распаковка в другую директорию

-C указывает целевую директорию. Это важно для скриптов и автоматизации, чтобы не засорять текущую папку.

Извлечение отдельных файлов/папок

Можно указать конкретные пути из архива:

Пути должны точно соответствовать тем, что хранятся в архиве (можно проверить через tar tvf).


Добавление и обновление файлов

Добавление новых файлов в существующий архив

Это удобно, если нужно доложить файлы без пересборки всего архива.

Обновление архива только новыми версиями

tar сравнит даты модификации и обновит только те файлы, которые в файловой системе новее, чем в архиве.


Исключения и фильтрация

При архивации больших директорий часто нужно исключить временные файлы, логи, кэш и т.п.:

Шаблоны интерпретируются относительно пути, который архивируется. Можно указывать несколько --exclude.


Практические сценарии

Резервное копирование домашней директории

Исключаем кэш и корзину, чтобы уменьшить размер и ускорить процесс.

Создание архива для передачи по сети

xz даёт хорошее сжатие, что удобно при передаче по медленным каналам.

Проверка целостности архива (без распаковки)

Если вывод чистый и нет ошибок — архив, скорее всего, цел. Для более строгой проверки можно использовать контрольные суммы:


Важные нюансы и лучшие практики

  1. Абсолютные пути в архиве. По умолчанию tar сохраняет относительные пути. Если указать абсолютный путь (например, /etc), архив будет содержать /etc/.... При распаковке это может перезаписать системные файлы. Безопаснее запускать tar из нужной директории или использовать -C при распаковке.
  2. Права и владельцы. tar по умолчанию сохраняет права и владельцев (UID/GID). При распаковке от root эти права будут восстановлены. При распаковке обычным пользователем владелец станет этим пользователем, а права — согласно маске umask.
  3. Символические ссылки. По умолчанию tar архивирует сами ссылки (не их цели). Для архивации целей используйте --dereference:
  4. Безопасность. Не распаковывайте архивы из непроверенных источников в системные директории. Всегда просматривайте содержимое (tar tvf) перед распаковкой.
  5. Автоматизация. В скриптах обязательно проверяйте код возврата tar и добавляйте обработку ошибок.

Пример безопасного скрипта:


Частые ошибки и как их избежать

  • «Не указан файл архива»: всегда используйте f и сразу указывайте имя файла.
  • Путаница между c, x, t: один неверный флаг — и архив перезаписывается вместо просмотра. Проверяйте команду перед запуском.
  • Распаковка поверх существующих файлов: tar молча перезапишет файлы. Если нужно избежать этого, используйте --skip-old-files (в новых версиях tar) или предварительно проверяйте содержимое.
  • Большие архивы и нехватка места: перед созданием архива проверяйте свободное место.

Совместимость и версии

tar есть в любом Linux-дистрибутиве. В GNU tar (стандарт в большинстве дистрибутивов) функционал шире, чем в BSD tar (используется в macOS и некоторых Unix). В Linux почти всегда стоит GNU tar, поэтому описанные флаги и опции будут работать.

Для проверки версии:


Примеры для типовых задач (шпаргалка)

Задача Команда
Создать архив без сжатия tar cvf backup.tar /data
Создать сжатый архив gzip tar czvf backup.tar.gz /data
Создать сжатый архив xz tar cJvf backup.tar.xz /data
Посмотреть содержимое tar tvf backup.tar.gz
Распаковать в /opt tar xzvf backup.tar.gz -C /opt
Добавить файл в архив tar rvf backup.tar file.txt
Обновить архив новыми файлами tar uvf backup.tar updated.txt
Исключить папку tmp tar czvf backup.tar.gz --exclude='*/tmp/*' /home

Эта статья даёт строгое, ориентированное на практику описание работы с tar в Linux, достаточное для повседневной эксплуатации, автоматизации и написания надёжных скриптов.

Оставьте комментарий