tar (вычисления) - tar (computing)

редактировать
Формат компьютерного файла, который может объединять несколько файлов в один файл под названием «tarball» This simple diagram shows how Tar and Tar compression works. It first takes the ungrouped data and groups it, then compresses it using the "gzip" compression algorithm to form a smaller package that takes up less storage. На этой простой диаграмме показано, как Tar и сжатие гудрона работает. Сначала он берет разгруппированные данные и группирует их, а затем сжимает их, используя алгоритм сжатия gzip, чтобы сформировать пакет меньшего размера, занимающий меньше места.
tar
Автор (ы) 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
Расширение имени файла .tar
Тип Интернет-носителя application / x -tar
Унифицированный идентификатор типа (UTI) public.tar-archive
Магическое число ustar \ 0 0 0со смещением байта 257 (для версий POSIX)

ustar \ 040 \ 040 \ 0(для старого формата GNU tar)

отсутствует в версиях до POSIX
Последний выпуск различный. (различный)
Тип форматаФайловый архиватор
Стандартный POSIX, начиная с POSIX.1, в настоящее время в определении pax [1]
Открытый формат ?Да

В вычислениях, tar - это компьютерная программная утилита для сбора множества файлов в один архивный файл, часто называемый tarball, для распространения или целей резервного копирования. Название происходит от «ленточного архива», так как изначально он был разработан для записи данных на устройства с последовательным вводом / выводом без собственной файловой системы. Наборы архивных данных, созданные tar, содержат различные параметры файловой системы, такие как имя, временные метки, владение, права доступа к файлам и каталог организации.

Содержание

  • 1 История
  • 2 Обоснование
  • 3 Формат файла
    • 3.1 Заголовок
    • 3.2 Формат UStar
    • 3.3 POSIX.1-2001 / pax
  • 4 Ограничения
    • 4.1 Tarbomb
    • 4.2 Произвольный доступ
    • 4.3 Дубликаты
  • 5 Ключевые реализации
  • 6 Суффиксы для сжатых файлов
  • 7 См. Также
  • 8 Ссылки
  • 9 Внешние ссылки

История

Утилита командной строки была впервые представлена ​​в версии 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):

Смещение поляРазмер поляПоле
0100Имя файла
1008Файловый режим
1088Цифровой идентификатор пользователя владельца
1168Цифровой идентификатор пользователя группы
12412Размер файла в байтах (восьмеричное основание)
13612Время последнего изменения в числовом формате времени Unix (восьмеричное)
1488Контрольная сумма для записи заголовка
1561Индикатор ссылки (тип файла)
157100Имя связанного файла

Предварительная версия 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-архиве появляется несколько таких файлов, как обычный файл архивируется только первый; остальные архивируются как жесткие ссылки, причем в поле «имя связанного файла» указано имя первого. При извлечении такие жесткие ссылки следует воссоздать в файловой системе.

Формат UStar

Большинство современных программ tar читают и записывают архивы в формате UStar (стандартный TAR Unix), введенном стандартом POSIX IEEE P1003.1 с 1988 года. В нем были введены дополнительные поля заголовка. Старые программы tar игнорируют дополнительную информацию (возможно, извлекают частично именованные файлы), в то время как новые программы проверяют наличие строки «ustar», чтобы определить, используется ли новый формат. Формат UStar позволяет использовать более длинные имена файлов и хранить дополнительную информацию о каждом файле. Максимальный размер имени файла - 256, но он разделен между предшествующим путем «префиксом имени файла» и самим именем файла, поэтому может быть намного меньше.

Смещение поляРазмер поляПоле
0156(Несколько полей, как в старом формате)
1561Флаг типа
157100(То же поле, что и в старом формате)
2576Индикатор UStar "ustar", затем NUL
2632Версия UStar "00"
26532Имя пользователя владельца
29732Имя группы владельцев
3298Главный номер устройства
3378Младший номер устройства
345155Префикс имени файла

Поле флага типа может иметь следующие значения:

Поле флага типа
ЗначениеЗначение
'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 и новее.

POSIX.1-2001 / pax

В 1997 году Sun предложила метод добавления расширений к формату tar. Позже этот метод был принят в стандарте POSIX.1-2001. Этот формат известен как расширенный формат tar или формат pax. Новый формат tar позволяет пользователям добавлять любые типы расширений, помеченных поставщиком, для конкретных поставщиков. Следующие теги определены стандартом POSIX:

  • atime, mtime : все временные метки файла в произвольном разрешении (в большинстве реализаций используется наносекундная детализация)
  • path : path имена неограниченной длины и кодировка набора символов
  • путь ссылки : целевые имена символических ссылок неограниченной длины и кодировка набора символов
  • uname, gname : имена пользователей и групп неограниченной длины и кодировка набора символов
  • размер : файлы неограниченного размера (исторический формат tar - 8 ГБ)
  • uid, gid : идентификатор пользователя и groupid без ограничения размера (этот исторический tar формат был ограничен макс. идентификатором 2097151)
  • определение набора символов для имен путей и имен пользователей / групп (UTF-8 )

В 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 были созданы другие форматы.

Tarbomb

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).

Ключевые реализации в порядке происхождения:

  • Solaris tar, основанный на исходном tar UNIX V7 и по умолчанию в операционной системе Solaris
  • GNU tar является значением по умолчанию для большинства дистрибутивов Linux. Он основан на публичной реализации pdtar, которая была запущена в 1987 году. Последние версии могут использовать различные форматы, включая форматы ustar, pax, GNU и v7.
  • FreeBSD tar (также BSD tar ) стал tar-файлом по умолчанию в большинстве операционных систем на базе Berkeley Software Distribution, включая Mac OS X. Основные функции доступны как libarchive для включения в другие приложения. Эта реализация автоматически определяет формат файла и может извлекать из образов компакт-дисков tar, pax, cpio, zip, jar, ar, xar, rpm и ISO 9660. Он также поставляется с функционально эквивалентным интерфейсом командной строки cpio.
  • Schily tar, более известный как star, имеет историческое значение, поскольку некоторые из его расширений были довольно популярны. Это самый старый бесплатный tar с 1982 года. Он все еще поддерживается.

Кроме того, большинство реализаций 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, для создания сжатого архива.. Как показано, комбинация файлов в архиве сжимается как одна единица.
Эквиваленты суффиксов файлов
LongShort
.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
Последняя правка сделана 2021-06-09 09:58:23
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте