Автор (ы) | ATT Bell Laboratories |
---|---|
Разработчик (и) | Различные разработчики с открытым исходным кодом и коммерческие разработчики |
Первоначальный выпуск | Январь 1979 г.; 41 год назад (1979-01) |
Стабильный выпуск | 1.32 / 23 февраля 2019 г.; 20 месяцев назад (23.02.2019) |
Операционная система | Unix, Unix-like, Plan 9, Microsoft Windows, IBM i |
Платформа | Кросс-платформенность |
Тип | Команда |
Расширение имени файла | .tar |
---|---|
Тип Интернет-носителя | application / x -tar |
Унифицированный идентификатор типа (UTI) | public.tar-archive |
Магическое число | ustar \ 0 0 0 со смещением байта 257 (для версий POSIX)
|
Последний выпуск | различный. (различный) |
Тип формата | Файловый архиватор |
Стандартный | POSIX, начиная с POSIX.1, в настоящее время в определении pax [1] |
Открытый формат ? | Да |
В вычислениях, tar - это компьютерная программная утилита для сбора множества файлов в один архивный файл, часто называемый tarball, для распространения или целей резервного копирования. Название происходит от «ленточного архива», так как изначально он был разработан для записи данных на устройства с последовательным вводом / выводом без собственной файловой системы. Наборы архивных данных, созданные tar, содержат различные параметры файловой системы, такие как имя, временные метки, владение, права доступа к файлам и каталог организации.
Утилита командной строки была впервые представлена в версии 7 Unix в январе 1979 года, заменив программу tp. Файловая структура для хранения этой информации была стандартизирована в POSIX.1-1988 и позже POSIX.1-2001, и стала форматом, поддерживаемым большинством современных систем архивирования файлов.
Сегодня Unix-подобные операционные системы обычно включают инструменты для поддержки файлов tar, а также утилиты, обычно используемые для их сжатия, такие как gzip и bzip2.
BSD-tar был включен в Microsoft Windows начиная с Windows 10 April 2018 Update, и в остальном существует множество сторонних инструментов, доступных для чтения и записи этих форматов в Windows.
Команда tar также была перенесена в операционную систему IBM i.
Многие исторические ленточные накопители читают и записывают переменную -length блоки данных, оставляя на ленте значительное пространство между блоками (для физического запуска и остановки движения ленты). Некоторые ленточные накопители (и необработанные диски) поддерживают только блоки данных фиксированной длины. Кроме того, при записи на любой носитель, например файловую систему или сеть, для записи одного большого блока требуется меньше времени, чем для записи множества маленьких блоков. Следовательно, команда tar записывает данные в записи многих блоков 512 B. Пользователь может указать коэффициент блокировки, который представляет собой количество блоков на запись. Значение по умолчанию - 20, что дает 10 КБ записей.
Архив tar состоит из серии файловых объектов, отсюда и популярный термин tarball, обозначающий, как tarball собирает предметы всех видов, которые прилипают к его поверхности. Каждый файловый объект включает любые данные файла, и ему предшествует 512-байтовая запись заголовка. Данные файла записываются без изменений, за исключением того, что его длина округляется до кратного 512 байт. Исходная реализация tar не заботилась о содержимом байтов заполнения и оставляла данные буфера неизменными, но большинство современных реализаций tar заполняют дополнительное пространство нулями. Конец архива отмечается как минимум двумя последовательными нулевыми записями. (Исходным размером записи tar являются 512-байтовые секторы диска, используемые в файловой системе Unix Версии 7.) Последний блок архива дополняется нулями до полной длины.
Запись заголовка файла содержит метаданные о файле. Для обеспечения переносимости между разными архитектурами с разным порядком байтов информация в записи заголовка кодируется в ASCII. Таким образом, если все файлы в архиве являются текстовыми файлами ASCII и имеют имена ASCII, то архив по существу представляет собой текстовый файл ASCII (содержащий много символов NUL ).
Поля, определенные исходным форматом tar Unix, перечислены в таблице ниже. Таблица индикаторов ссылок / типов файлов включает некоторые современные расширения. Когда поле не используется, оно заполняется байтами NUL. Заголовок использует 257 байтов, затем заполняется байтами NUL, чтобы заполнить 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 с ведущими нулями. По историческим причинам также следует использовать последний символ NUL или пробел. Таким образом, хотя для хранения размера файла зарезервировано 12 байтов, можно сохранить только 11 восьмеричных цифр. Это дает максимальный размер архивных файлов 8 гигабайт. Чтобы преодолеть это ограничение, в 2001 году компания Star ввела кодировку base-256, которая указывается установкой старшего бита крайнего левого байта числового поля. GNU-tar и BSD-tar последовали этой идее. Кроме того, в версиях tar, предшествующих первому стандарту POSIX 1988 г., значения добавляются пробелами вместо нулей.
Контрольная сумма вычисляется путем взятия суммы значений байтов без знака записи заголовка с восемью байтами контрольной суммы, взятыми как пробелы ASCII (десятичное значение 32). Оно хранится в виде шестизначного восьмеричного числа с ведущими нулями, за которыми следует NUL и пробел. Различные реализации не придерживаются этого формата. Кроме того, некоторые исторические реализации tar обрабатывали байты как подписанные. Реализации обычно вычисляют контрольную сумму в обоих направлениях и считают ее правильной, если сумма со знаком или без знака совпадает с включенной контрольной суммой.
Файловые системы Unix поддерживают несколько ссылок (имен) для одного и того же файла. Если в tar-архиве появляется несколько таких файлов, как обычный файл архивируется только первый; остальные архивируются как жесткие ссылки, причем в поле «имя связанного файла» указано имя первого. При извлечении такие жесткие ссылки следует воссоздать в файловой системе.
Большинство современных программ tar читают и записывают архивы в формате UStar (стандартный TAR Unix), введенном стандартом 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 (Unix реального времени), которая поддерживала флаг O_CTG для функции open () для запроса непрерывного файла; однако эта поддержка была удалена из GNU tar версии 1.24 и новее.
В 1997 году Sun предложила метод добавления расширений к формату tar. Позже этот метод был принят в стандарте POSIX.1-2001. Этот формат известен как расширенный формат tar или формат pax. Новый формат tar позволяет пользователям добавлять любые типы расширений, помеченных поставщиком, для конкретных поставщиков. Следующие теги определены стандартом POSIX:
В 2001 году программа Star стала первым tar для поддержки нового формата. В 2004 году GNU tar поддерживал новый формат, хотя он еще не записывает их в качестве вывода по умолчанию из программы tar.
Он спроектирован таким образом, что все реализации могут читать формат UStar также сможет читать POSIX.1-2001. Единственным исключением являются файлы, в которых используются расширенные функции, такие как более длинные имена файлов. Для совместимости они закодированы в файлах tar как специальные файлы типа x
или g
. обычно в каталоге PaxHeaders.XXXX
. Реализация, поддерживающая Pax, будет использовать эту информацию, а не поддерживающие, такие как 7-Zip, будут обрабатывать их как дополнительные файлы.
Исходный формат tar был создан на заре UNIX, и, несмотря на широкое распространение в настоящее время, многие его конструктивные особенности считаются устаревшими.
Многие старые реализации tar не записывают и не восстанавливают расширенные атрибуты (xattrs) или контроль доступа списки (ACL). В 2001 году Star представила поддержку ACL и расширенных атрибутов с помощью собственных тегов для POSIX.1-2001 pax. Bsdtar использует звездообразные расширения для поддержки ACL. Более поздние версии GNU tar поддерживают расширенные атрибуты Linux, переопределяя расширения звездочки. В руководстве по типам файлов для BSD tar, tar (5) рассматривается ряд расширений.
Для устранения недостатков tar были созданы другие форматы.
A tarbomb на хакерском сленге - это tar-файл, содержащий множество файлов, которые извлекаются в рабочий каталог. Такой tar-файл может создавать проблемы, перезаписывая файлы с тем же именем в рабочем каталоге или смешивая файлы одного проекта с другим. В лучшем случае это неудобство для пользователя, который вынужден идентифицировать и удалять несколько файлов, перемежающихся другим содержимым каталога. Такое поведение считается плохим этикетом со стороны создателя архива.
Связанная проблема заключается в использовании абсолютных путей или ссылок на родительский каталог при создании файлов tar. Файлы, извлеченные из таких архивов, часто создаются в необычных местах за пределами рабочего каталога и, как тарбомбы, могут перезаписывать существующие файлы. Однако современные версии FreeBSD и GNU tar по умолчанию не создают и не извлекают абсолютные пути и ссылки на родительские каталоги, если это явно не разрешено с помощью флага -P
или параметра --absolute- имена
. Программа bsdtar, которая также доступна во многих операционных системах и является утилитой tar по умолчанию в Mac OS X v10.6, также не следует ссылкам на родительские каталоги или символическим ссылкам.
Если пользователю доступен только очень старый tar, в котором не предусмотрены эти меры безопасности, эти проблемы можно уменьшить, сначала проверив tar-файл с помощью команды tar tf archive.tar
, которая перечисляет содержимое и позволяет впоследствии исключить проблемные файлы.
Эти команды не извлекают файлы, но отображают имена всех файлов в архиве. Если какие-либо из них проблематичны, пользователь может создать новый пустой каталог и извлечь в него архив - или полностью отказаться от tar-файла. Большинство графических инструментов могут отображать содержимое архива перед его извлечением. может открывать tar-архивы и отображать их содержимое. GNU Emacs также может открывать tar-архив и отображать его содержимое в dired буфере.
Формат tar был разработан без централизованного индекса или таблицы содержимого для файлов и их свойств для потоковой передачи на ленточные устройства резервного копирования. Для вывода списка или извлечения файлов архив необходимо читать последовательно. Для больших архивов tar это приводит к снижению производительности, что делает архивы tar непригодными для ситуаций, которые часто требуют произвольного доступа к отдельным файлам.
Другая проблема с форматом tar заключается в том, что он позволяет нескольким (возможно различным) файлам в архиве иметь одинаковый путь и имя файла. При извлечении такого архива обычно последняя версия файла перезаписывает первую.
Это может создать неявный (неочевидный) tarbomb, который технически не содержит файлов с абсолютными путями или ссылающихся на родительские каталоги, но все же вызывает перезапись файлов вне текущего каталога (например, архив может содержать два файла с тот же путь и имя файла, первая из которых является символической ссылкой на некоторое место за пределами текущего каталога, а вторая - обычным файлом; затем извлечение такого архива в некоторых реализациях tar может привести к записи в указанное место по символической ссылке).
Исторически сложилось так, что многие системы реализовали tar, и многие файловые архиваторы имеют хотя бы частичную поддержку tar (часто с использованием одной из реализаций ниже). История tar - это история несовместимости, известная как «tar войны». Большинство реализаций tar также могут читать и создавать cpio и pax (последний на самом деле является tar-форматом с расширениями POSIX -2001).
Ключевые реализации в порядке происхождения:
Кроме того, большинство реализаций pax и cpio могут читать и создавать многие типы tar. файлы.
файлы архивов tar обычно имеют суффикс файла.tar (например, somefile.tar).
Файл архива tar содержит несжатые потоки байтов файлов, которые он содержит. Для сжатия архивов доступны различные программы сжатия, такие как gzip, bzip2, xz, lzip, lzma, zstd или compress, которые сжимают весь архив tar. Обычно сжатая форма архива получает имя файла путем добавления суффикса сжатия, зависящего от формата, к имени файла архива. Например, tar-архив archive.tar при сжатии с помощью gzip называется archive.tar.gz.
Популярные программы tar, такие как BSD и GNU версии tar, поддерживают параметры командной строки Z (сжатие), z (gzip), и j (bzip2) для сжатия или распаковки файла архива при создании или распаковке. GNU tar, начиная с версии 1.20, также поддерживает параметр --lzma (LZMA ). 1.21 добавлена поддержка lzop с --lzop. 1.22 добавлена поддержка xz с --xz или -J. 1.23 добавлена поддержка lzip с --lzip. 1.31 добавлена поддержка zstd с --zstd. Распаковка этих форматов выполняется автоматически, если используются поддерживаемые расширения файлов, а сжатие выполняется автоматически с использованием тех же расширений файлов, если параметр --auto-compress (сокращенная форма -a) передается в применимую версию GNU tar.
Ограничения 8.3 filename MS-DOS привели к дополнительным соглашениям для именования сжатых архивов tar. Однако эта практика уменьшилась с появлением FAT, теперь предлагающего длинные имена файлов..
Архивирование tar часто используется вместе с методом сжатия, таким как gzip, для создания сжатого архива.. Как показано, комбинация файлов в архиве сжимается как одна единица.Long | Short |
---|---|
.tar.bz2 | .tb2,.tbz,.tbz2,.tz2 |
.tar.gz | .taz,.tgz |
.tar.lz | |
.tar.lzma | .tlz |
.tar.lzo | |
.tar.xz | |
.tar.Z | .tZ,.taZ |
.tar.zst | .tzst |
Wikibook Руководство по В Unix есть страница по теме: Команды / Сжатие файлов # tar |
В Викиучебниках есть книга по теме: Пакетные сценарии Windows |
tar ( 1)
– Plan 9 Руководство программиста, том 1tar (1)
– Solaris 10 Справочник по командам пользователя Руководство tar (1)
– FreeBSD Общие команды Руководство tar (1)
– Linux Команды пользователя Руководство