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