tar — утилита для сбора множества файлов в один архивный файл, часто называемый tarball, для распространения или резервного копирования. Название происходит от «tape archive» (ленточный архив), поскольку изначально он был разработан для записи данных на последовательные устройства ввода-вывода, не имеющие собственной файловой системы, такие как устройства, использующие магнитную ленту. Архивные наборы данных, созданные tar, содержат различные параметры файловой системы, такие как имя, временные метки, владелец, права доступа к файлам и структура каталогов. POSIX отказался от tar в пользу pax, но tar по-прежнему широко используется.
История Утилита командной строки была впервые представлена в Version 7 Unix в январе 1979 года, заменив программу tp (которая, в свою очередь, заменила "tap"). Структура файла для хранения этой информации была стандартизирована в POSIX.1-1988IEEE Std 1003.1-1988, IEEE Standard for Information Technology - Portable Operating System Interface (POSIX) а затем в POSIX.1-2001IEEE Std 1003.1-2001, IEEE Standard for Information Technology - Portable Operating System Interface (POSIX), и стала форматом, поддерживаемым большинством современных систем архивирования файлов. Команда tar была исключена из POSIX.1-2001 в пользу команды pax, которая должна была поддерживать формат файла ustar; команда tar была указана для исключения в пользу команды pax, по крайней мере, с 1994 года.
Сегодня Unix-подобные операционные системы обычно включают инструменты для поддержки файлов tar, а также утилиты, обычно используемые для их сжатия, такие как xz, gzip и bzip2.
Команда также была портирована на операционную систему IBM i.
BSD-tar включен в Microsoft Windows начиная с Windows 10 April 2018 Update, в противном случае существует несколько сторонних инструментов, доступных для чтения и записи этих форматов в Windows.
Обоснование Многие исторические накопители на магнитной ленте считывают и записывают блоки данных переменной длины, оставляя значительное неиспользуемое пространство на ленте между блоками (для физического запуска и остановки движения ленты). Некоторые накопители на магнитной ленте (и необработанные диски) поддерживают только блоки данных фиксированной длины. Кроме того, при записи на любой носитель, такой как файловая система или сеть, требуется меньше времени для записи одного большого блока, чем множества маленьких блоков. Поэтому команда tar записывает данные в записях из множества блоков по 512 Б. Пользователь может указать коэффициент блокировки, который представляет собой количество блоков в записи. По умолчанию используется значение 20, что дает записи размером 10 КиБ.
Формат файла Существует несколько форматов файлов tar, включая исторические и текущие. Два формата tar кодифицированы в POSIX: ustar и pax. Не кодифицирован, но все еще используется формат GNU tar.
Архив tar состоит из последовательности объектов файлов, отсюда и популярный термин tarball, отсылающий к тому, как смоляной шар собирает объекты всех видов, которые прилипают к его поверхности. Каждый файловый объект включает любые данные файла и предваряется 512-байтовой записью заголовка. Данные файла записываются без изменений, за исключением того, что его длина округляется до кратного 512 байтам. Исходная реализация tar не заботилась о содержимом байтов заполнения и оставляла данные буфера без изменений, но большинство современных реализаций tar заполняют дополнительное пространство нулями. Конец архива отмечается как минимум двумя последовательными записями, заполненными нулями. (Происхождение размера записи tar, по-видимому, связано с 512-байтными секторами диска, используемыми в файловой системе Version 7 Unix.) Последний блок архива дополняется нулями до полной длины.
Заголовок Запись заголовка файла содержит метаданные о файле. Для обеспечения переносимости между различными архитектурами с разным порядком байтов информация в записи заголовка кодируется в ASCII. Таким образом, если все файлы в архиве являются текстовыми файлами ASCII и имеют имена ASCII, то архив, по сути, является текстовым файлом ASCII (содержащим множество нулевых символов).
Поля, определенные исходным форматом Unix tar, перечислены в таблице ниже. Таблица индикатора ссылки/типа файла включает некоторые современные расширения. Когда поле не используется, оно заполняется нулевыми байтами. Заголовок использует 257 байт, затем дополняется нулевыми байтами, чтобы заполнить 512-байтную запись. В заголовке нет "магического числа" для идентификации файла.
Заголовок tar до POSIX.1-1988 (т.е. v7): Смещение поля Размер поля Поле 0 100 Путь и имя файла 100 8 Режим файла (восьмеричный) 108 8 Числовой идентификатор пользователя владельца (восьмеричный) 116 8 Числовой идентификатор пользователя группы (восьмеричный) 124 12 Размер файла в байтах (восьмеричный) 136 12 Время последнего изменения в числовом формате времени Unix (восьмеричное) 148 8 Контрольная сумма для записи заголовка 156 1 Индикатор ссылки (тип файла) 157 100 Имя связанного файла
Поле Индикатор ссылки до POSIX.1-1988 может иметь следующие значения:
+ Поле индикатора ссылки Значение Значение '0' или (ASCII NUL) Нормальный файл '1' Жесткая ссылка '2' Символическая ссылка
Некоторые реализации tar до POSIX.1-1988 указывали каталог, добавляя косую черту (/) в конец имени.
Числовые значения кодируются восьмеричными числами с использованием цифр ASCII, с ведущими нулями. По историческим причинам также должен использоваться завершающий нулевой символ или пробел. Таким образом, хотя для хранения размера файла зарезервировано 12 байтов, можно сохранить только 11 восьмеричных цифр. Это дает максимальный размер файла 8 гигабайт в архивных файлах. Чтобы преодолеть это ограничение, в 2001 году star представил кодировку base-256, которая обозначается установкой старшего бита самого левого байта числового поля. GNU-tar и BSD-tar последовали этой идее. Кроме того, версии tar, выпущенные до первого стандарта POSIX 1988 года, дополняют значения пробелами, а не нулями.
Контрольная сумма вычисляется путем суммирования значений неподписанных байтов записи заголовка с восемью байтами контрольной суммы, принимаемыми за пробелы ASCII (десятичное значение 32). Он хранится в виде шестизначного восьмеричного числа с ведущими нулями, за которыми следует нулевой символ, а затем пробел. Различные реализации не придерживаются этого формата. Кроме того, некоторые исторические реализации tar рассматривали байты как знаковые. Реализации обычно вычисляют контрольную сумму обоими способами и считают ее правильной, если либо знаковая, либо беззнаковая сумма соответствует включенной контрольной сумме.
Файловые системы Unix поддерживают несколько ссылок (имен) для одного и того же файла. Если в архиве tar встречается несколько таких файлов, только первый из них архивируется как обычный файл; остальные архивируются как жесткие ссылки, причем в поле "имя связанного файла" указывается имя первого. При извлечении такие жесткие ссылки должны быть воссозданы в файловой системе.
Формат UStar Большинство современных программ tar читают и записывают архивы в формате UStar (Unix Standard TAR), введенном стандартом POSIX IEEE P1003.1 от 1988 года. Он ввел дополнительные поля заголовка. Старые программы tar будут игнорировать дополнительную информацию (возможно, извлекая частично именованные файлы), в то время как новые программы будут проверять наличие строки "ustar", чтобы определить, используется ли новый формат.
Формат UStar допускает более длинные имена файлов и хранит дополнительную информацию о каждом файле. Максимальный размер имени файла составляет 256, но он делится между предшествующим путем "префикс имени файла" и самим именем файла, поэтому может быть намного меньше.
Смещение поля Размер поля Поле 0 156 (Несколько полей, как в старом формате) 156 1 Флаг типа 157 100 (То же поле, что и в старом формате) 257 6 Индикатор UStar, "ustar", затем NUL 263 2 Версия UStar, "00" 265 32 Имя пользователя владельца 297 32 Имя группы владельца 329 8 Старший номер устройства 337 8 Младший номер устройства 345 155 Префикс имени файла
Поле флаг типа может иметь следующие значения:
+ Поле флага типа Значение Значение '0' или (ASCII NUL) Нормальный файл '1' Жесткая ссылка '2' Символическая ссылка '3' Специальный символ '4' Специальный блок '5' Каталог '6' FIFO '7' Непрерывный файл 'g' Глобальный расширенный заголовок с метаданными (POSIX.1-2001) 'x' Расширенный заголовок с метаданными для следующего файла в архиве (POSIX.1-2001) 'A'–'Z' Расширения, специфичные для поставщика (POSIX.1-1988) Все остальные значения Зарезервировано для будущей стандартизации
Специфичные для поставщика расширения POSIX.1-1988, использующие значения флага ссылки 'A'–'Z', частично имеют разное значение у разных поставщиков и поэтому рассматриваются как устаревшие и замененные расширениями POSIX.1-2001, которые также включают тег поставщика.
Тип '7' (Непрерывный файл) формально помечен как зарезервированный в стандарте POSIX, но предназначался для обозначения файлов, которые должны быть непрерывно размещены на диске. Немногие операционные системы поддерживают явное создание таких файлов, и поэтому большинство программ TAR не поддерживают их и будут обрабатывать файлы типа 7 так, как если бы они были типа 0 (обычный). Исключением являются старые версии GNU tar, работающие в операционной системе MASSCOMP RTU (Real Time Unix), которая поддерживала флаг O_CTG для функции open() для запроса непрерывного файла; однако эта поддержка была удалена из GNU tar, начиная с версии 1.24.
POSIX.1-2001/pax В 1997 году Sun предложила метод добавления расширений в формат tar. Этот метод был позже принят для стандарта POSIX.1-2001. Этот формат известен как формат extended tar или формат pax. Новый формат tar позволяет пользователям добавлять любые типы расширений, помеченных поставщиком. Следующие теги определены стандартом POSIX: atime, mtime: все временные метки файла с произвольным разрешением (большинство реализаций используют наносекундную точность) path: имена путей неограниченной длины и кодировки набора символов linkpath: целевые имена символических ссылок неограниченной длины и кодировки набора символов uname, gname: имена пользователей и групп неограниченной длины и кодировки набора символов size: файлы неограниченного размера (исторический формат tar составляет 8 ГБ) uid, gid: идентификатор пользователя и идентификатор группы без ограничения размера (исторический формат tar ограничен максимальным идентификатором 2097151) определение набора символов для имен путей и имен пользователей/групп (UTF-8)
В 2001 году программа Star стала первой tar, поддерживающей новый формат. В 2004 году GNU tar поддержал новый форматNEWS , git.savannah.gnu.org - search for "Added support for POSIX.1-2001 and ustar archive formats.", хотя он еще не записывает его как вывод по умолчанию из программы tar.
Формат pax разработан таким образом, что все реализации, способные читать формат UStar, также смогут читать формат pax. Единственными исключениями являются файлы, которые используют расширенные функции, такие как более длинные имена файлов. Для совместимости они кодируются в файлах tar как специальные файлы типа или , обычно в каталоге . Реализация, поддерживающая pax, будет использовать эту информацию, в то время как неподдерживающие, такие как 7-Zip, будут обрабатывать их как дополнительные файлы.
Возможности утилит архивирования Помимо создания и извлечения архивов, функциональность различных утилит архивирования различается. Например, реализации могут автоматически определять формат сжатых архивов TAR для извлечения, чтобы пользователю не нужно было его указывать, и позволять пользователю ограничивать добавление файлов теми, которые были изменены после указанной даты.
Использование Синтаксис команды tar [-options] <name of the tar archive> [files or directories which to add into archive] Основные опции: -c, --create — создать новый архив;