TAR — это архивный формат, который собирает множество файлов и каталогов в один последовательный поток данных, сохраняя при этом права доступа, владельцев, временные метки и структуру каталогов. Важный нюанс, который часто удивляет новичков: сам по себе TAR не сжимает данные. Он только объединяет файлы, а сжатием занимаются отдельные утилиты — gzip, bzip2, xz и другие. Именно поэтому файлы с расширением .tar.gz или .tar.xz — это «двухслойная» конструкция: сначала архив TAR, затем сжатый контейнер.
Если коротко: TAR устроен как лента. Файлы идут друг за другом, каждый предваряется служебным заголовком, а в конце потока находятся маркеры завершения. Такая линейная организация — наследие магнитных лент, откуда формат и получил имя: Tape ARchive. Понимание этого принципа объясняет и сильные стороны формата (простота, сохранность метаданных, потоковая обработка), и его ограничения (нельзя быстро заменить один файл внутри архива).
- Зачем нужен TAR, если есть ZIP
- Внутреннее устройство: блоки, заголовки и конец архива
- Заголовок файла
- Завершающие блоки
- Ограничения базового формата и расширения
- Сжатие: почему .tar.gz — это два формата сразу
- Базовые команды: создание, просмотр, распаковка
- Типичные ошибки и как их избежать
- Когда TAR — правильный выбор, а когда нет
- Практические рекомендации
Зачем нужен TAR, если есть ZIP
ZIP знаком большинству пользователей, и на первый взгляд TAR решает ту же задачу. Разница — в приоритетах. ZIP создавался как самодостаточный формат для персональных компьютеров: он хранит каждый файл отдельной записью со собственным сжатием и централизованным каталогом в конце архива. TAR создавался для Unix-систем, где критично было точно переносить файлы вместе со всей служебной информацией операционной системы.
Что TAR сохраняет, а ZIP в классическом виде — нет или не полностью:
- Права доступа Unix — биты чтения, записи и выполнения для владельца, группы и остальных;
- Владельца и группу — числовые идентификаторы UID и GID;
- Расширенные временные метки — время изменения, а при использовании дополнительных расширений и время доступа;
- Символические ссылки и специальные файлы — устройства, FIFO-каналы, которые встречаются в системных каталогах;
- Точную иерархию каталогов — включая пустые каталоги.
Из-за этого TAR стал стандартом де-факто для распространения исходного кода, резервного копирования в Linux и передачи файлов между Unix-системами. Распаковав такой архив, вы получаете файлы в том состоянии, в котором они были у автора, — с рабочими правами на исполнение скриптов и корректными путями.
Обратная сторона: на Windows TAR исторически менее удобен. Современные версии Windows 10 и 11 умеют работать с tar через командную строку, а сторонние архиваторы открывают такие файлы, но привычный двойной клик и контекстное меню работают не так гладко, как с ZIP.
Внутреннее устройство: блоки, заголовки и конец архива
Формально TAR-файл — это последовательность блоков по 512 байт. Такой размер выбран не случайно: он совпадает с физическим размером записи на магнитных лентах, для которых формат проектировался. Всё содержимое архива выравнивается по этой границе.
Заголовок файла
Перед данными каждого файла идёт заголовок размером ровно 512 байт. В нём компактно уложена вся служебная информация:
- имя файла (в базовом формате — до 100 символов);
- режим доступа в восьмеричном виде (например, 755 или 644);
- идентификаторы владельца и группы;
- размер файла в байтах;
- время последнего изменения;
- контрольная сумма заголовка для проверки целостности;
- тип записи: обычный файл, каталог, символическая ссылка, устройство и так далее;
- имя связанного файла для ссылок.
Сразу после заголовка идут данные файла, дополненные нулями до кратности 512 байт. Затем — заголовок следующего файла, и так до конца архива. Каталоги тоже записываются как отдельные записи со своим заголовком, что позволяет восстановить пустые каталоги при распаковке.
Завершающие блоки
Архив заканчивается минимум двумя блоками из нулевых байтов. Это «конец ленты» — маркер, по которому программа понимает, что данных больше нет. На практике архиваторы часто дополняют архив до полного размера физического блока записи, поэтому в конце файла может оказаться больше пустых блоков — это нормально и не является повреждением.
Ограничения базового формата и расширения
Изначальный формат из стандарта POSIX имел жёсткие лимиты: имя файла до 100 символов, размер файла до 8 ГБ. Со временем появились расширения, снявшие эти ограничения:
- USTAR — стандартизированное расширение, увеличившее лимит имени примерно до 256 символов за счёт префиксного поля;
- PAX — гибкий механизм дополнительных заголовков, позволяющий хранить длинные имена, файлы больше 8 ГБ, точные временные метки и Unicode-имена;
- GNU tar extensions — собственный вариант GNU с аналогичными возможностями.
Современные архиваторы читают все три варианта прозрачно, поэтому на практике вы редко столкнётесь с проблемами совместимости. Исключение — очень старые системы или встраиваемые устройства с урезанными утилитами: там длинные имена или крупные файлы могут не распаковаться.
Сжатие: почему .tar.gz — это два формата сразу
TAR хранит данные «как есть». Чтобы уменьшить размер, архив сжимают целиком внешней утилитой. Отсюда привычные расширения:
| Расширение | Чем сжато | Характеристика |
|---|---|---|
| .tar | без сжатия | максимальная скорость, размер равен сумме файлов с округлением до блоков |
| .tar.gz (tgz) | gzip | быстрое сжатие, универсальная поддержка, умеренная степень уплотнения |
| .tar.bz2 (tbz2) | bzip2 | сильнее сжимает, но заметно медленнее |
| .tar.xz | xz (LZMA) | лучшее сжатие из распространённых, самое медленное и требовательное к памяти |
| .tar.zst | zstd | современный баланс скорости и степени сжатия, поддержка растёт |
Ключевое следствие такой схемы: сжатие применяется ко всему архиву как к единому потоку. Чтобы добраться до файла в середине .tar.gz, программе придётся распаковать всё содержимое от начала до нужного места. В ZIP, где каждый файл сжимается независимо, произвольный доступ работает быстрее. Для разовой распаковки это неважно, но при частичном извлечении из огромных архивов разница ощутима.
Базовые команды: создание, просмотр, распаковка
Утилита tar есть в Linux, macOS и современных Windows. Синтаксис строится вокруг трёх режимов и пары полезных опций:
- Создать архив:tar -czf archive.tar.gz папка/ — ключи означают «создать» (c), «пропустить через gzip» (z), «в файл» (f).
- Посмотреть содержимое без распаковки:tar -tzf archive.tar.gz — режим списка (t). Полезно всегда делать перед распаковкой незнакомого архива.
- Распаковать:tar -xzf archive.tar.gz — режим извлечения (x). Современные версии сами определяют тип сжатия, поэтому часто достаточно tar -xf archive.tar.gz.
Полезные дополнительные опции: -v показывает список обрабатываемых файлов, -C путь указывает каталог назначения при распаковке, —exclude=шаблон исключает файлы при создании. Например, чтобы распаковать архив в конкретную папку: tar -xzf archive.tar.gz -C /tmp/dest.
Типичные ошибки и как их избежать
- Распаковка «в кучу». Если архив создавался без корневого каталога, файлы высыплются прямо в текущую директорию. Проверяйте содержимое командой списка и при необходимости распаковывайте в отдельный каталог.
- Потеря абсолютных путей. Архив, созданный с абсолютными путями (например, от корня файловой системы), при распаковке может перезаписать системные файлы. Современный tar по умолчанию убирает ведущий слэш, но при работе со старыми архивами и ключами вроде —absolute-names нужна осторожность.
- Путаница с расширением. Файл .tar.gz нельзя распаковать одной командой gunzip и получить готовые файлы — на выходе будет .tar, который нужно распаковать вторым шагом (или сразу использовать tar -xzf).
- Права после распаковки на Windows. Файловая система NTFS не хранит Unix-права, поэтому исполняемые биты и владельцы при переносе на Windows теряются. Если архив предназначен для Linux-сервера, распаковывайте его там.
- Дублирование сжатия. Нет смысла сжимать gzip-архив из уже сжатых данных — JPEG, видео, ZIP. Размер почти не уменьшится, а время уйдёт.
Когда TAR — правильный выбор, а когда нет
TAR оправдан в следующих сценариях:
- перенос исходного кода или конфигураций между Unix-системами с сохранением прав и ссылок;
- резервное копирование каталогов на Linux-серверах, особенно в связке с инкрементальными возможностями GNU tar;
- потоковая передача данных между машинами по сети: tar умеет писать прямо в стандартный вывод, минуя создание файла на диске;
- пакетирование больших наборов файлов для последующего сжатия сильными алгоритмами.
Когда лучше выбрать другое решение:
- обмен файлами с обычными пользователями Windows — удобнее ZIP;
- нужен быстрый доступ к отдельным файлам внутри большого архива без полной распаковки — ZIP или специализированные форматы справятся лучше;
- нужна защита паролем «из коробки» — в TAR шифрование не предусмотрено, придётся комбинировать с GPG или OpenSSL;
- постепенное обновление содержимого — изменять файлы внутри TAR неудобно из-за линейной структуры; проще пересоздать архив.
Практические рекомендации
Если вы работаете в Unix-окружении, TAR — надёжный инструмент по умолчанию для упаковки и резервного копирования. Перед распаковкой чужого архива всегда смотрите его содержимое списком: это занимает секунды и защищает от перезаписи файлов и «мусора» в текущем каталоге. Для больших объёмов данных выбирайте алгоритм сжатия осознанно: gzip, когда важна скорость, xz — когда важен размер и время не критично, zstd — когда нужен баланс. И помните про главное ограничение формата: TAR — это контейнер-лента, а не база данных с произвольным доступом, поэтому операции «заменить один файл внутри» он выполняет плохо.
Материал носит информационный характер. Перед работой с важными данными проверяйте актуальные параметры утилиты tar в вашей системе (команда man tar) и делайте резервную копию перед массовыми операциями с архивами.
