Из Википедии, бесплатной энциклопедии
  (Перенаправлено из Tar (формат файла) )
Перейти к навигации Перейти к поиску

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

История [ править ]

Утилита командной строки была впервые представлена ​​в версии 7 Unix в январе 1979 года, заменив программу tp. [2] структура файла для хранения этой информации была стандартизирована в POSIX .1-1988 [3] , а затем POSIX.1-2001, [4] и стал формат , поддерживаемый большинством современных систем файлов архивирования.

Сегодня Unix-подобные операционные системы обычно включают инструменты для поддержки файлов tar, а также утилиты, обычно используемые для их сжатия, такие как gzip и bzip2 .

BSD-tar был включен в Microsoft Windows с момента обновления Windows 10 April 2018 Update , [5] [6], а также существует множество сторонних инструментов, доступных для чтения и записи этих форматов в Windows.

Команда tar также была перенесена в операционную систему IBM i . [7]

Обоснование [ править ]

Многие старые накопители на магнитной ленте читают и записывают блоки данных переменной длины , оставляя на ленте значительное пространство между блоками (для физического запуска и остановки движения ленты). Некоторые ленточные накопители (и необработанные диски) поддерживают только блоки данных фиксированной длины. Кроме того, при записи на любой носитель, например файловую систему или сеть, для записи одного большого блока требуется меньше времени, чем для записи множества маленьких блоков. Таким образом, команда дегтя записывает данные в записях многих 512  B блоков. Пользователь может указать коэффициент блокировки, который представляет собой количество блоков на запись. Значение по умолчанию - 20, что соответствует 10  КБ записей. [8]

Формат файла [ править ]

Архив tar состоит из ряда файловых объектов, отсюда и популярный термин tarball , обозначающий , как tarball собирает объекты всех видов, которые остаются на его поверхности. Каждый файловый объект включает в себя любые данные файла, и ему предшествует 512-байтовая запись заголовка . Данные файла записываются без изменений, за исключением того, что его длина округляется до кратного 512 байт. Первоначальная реализация tar не заботилась о содержимом байтов заполнения и оставляла данные буфера неизменными, но большинство современных реализаций tar заполняют дополнительное пространство нулями. [9]Конец архива отмечается как минимум двумя последовательными нулевыми записями. (Исходным размером записи tar являются 512-байтовые секторы диска, используемые в файловой системе Unix Версии 7.) Последний блок архива дополняется нулями до полной длины.

Заголовок [ править ]

Запись заголовка файла содержит метаданные о файле. Чтобы обеспечить переносимость между разными архитектурами с разным порядком байтов , информация в записи заголовка кодируется в ASCII . Таким образом, если все файлы в архиве являются текстовыми файлами ASCII и имеют имена ASCII, то архив по существу является текстовым файлом ASCII (содержащим много символов NUL ).

Поля, определенные исходным форматом tar Unix, перечислены в таблице ниже. Таблица индикаторов ссылок / типов файлов включает некоторые современные расширения. Когда поле не используется, оно заполняется байтами NUL. Заголовок использует 257 байтов, затем заполняется байтами NUL, чтобы заполнить 512-байтовую запись. В заголовке нет «магического числа» для идентификации файла.

Заголовок tar до POSIX.1-1988 (т.е. v7):

Поле индикатора ссылки до POSIX.1-1988 может иметь следующие значения:

Некоторые реализации 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 ( Unix Standard TAR [2] [10] ), введенном стандартом POSIX IEEE P1003.1 с 1988 года. В нем были введены дополнительные поля заголовка. Старые программы tar игнорируют дополнительную информацию (возможно, извлекают частично именованные файлы), в то время как новые программы проверяют наличие строки «ustar», чтобы определить, используется ли новый формат. Формат UStar позволяет использовать более длинные имена файлов и хранить дополнительную информацию о каждом файле. Максимальный размер имени файла равен 256, но он разделен между предшествующим путем «префиксом имени файла» и самим именем файла, поэтому может быть намного меньше. [11]

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

Расширения для конкретных поставщиков 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 : имена путей неограниченной длины и кодировка набора символов
  • linkpath : целевые имена символических ссылок неограниченной длины и кодировки набора символов
  • uname , gname : имена пользователей и групп неограниченной длины и кодировки набора символов
  • size : файлы неограниченного размера (исторический формат tar - 8 ГБ)
  • uid , gid : userid и groupid без ограничения размера (этот исторический формат tar был ограничен максимальным идентификатором 2097151)
  • определение набора символов для имен путей и имен пользователей / групп ( UTF-8 )

В 2001 году программа Star стала первым tar, поддерживающим новый формат. В 2004 году GNU tar поддерживал новый формат, хотя он еще не записывает их в качестве вывода по умолчанию из программы tar. [12]

Он разработан таким образом, что все реализации, способные читать формат UStar, смогут также читать POSIX.1-2001. Единственным исключением являются файлы, в которых используются расширенные функции, такие как более длинные имена файлов. Для совместимости они закодированы в файлах tar как специальные xили gтиповые файлы. обычно в PaxHeaders.XXXXкаталоге. [13] : exthdr.name Реализация, поддерживающая Pax, будет использовать информацию, в то время как не поддерживающие, такие как 7-Zip, будут обрабатывать их как дополнительные файлы. [14]

Ограничения [ править ]

Исходный формат tar был создан в первые дни Unix, и, несмотря на широкое распространение в настоящее время, многие его конструктивные особенности считаются устаревшими. [15]

Многие старые реализации tar не записывают и не восстанавливают расширенные атрибуты (xattrs) или списки управления доступом (ACL). В 2001 году Star представила поддержку ACL и расширенных атрибутов с помощью собственных тегов для POSIX.1-2001 pax. Bsdtar использует звездообразные расширения для поддержки ACL. [16] Более поздние версии GNU tar поддерживают расширенные атрибуты Linux, заново реализующие звездообразные расширения. [17] Ряд расширений рассматривается в руководстве по типам файлов для BSD tar, tar (5). [16]

Другие форматы были созданы для устранения недостатков tar.

Tarbomb [ править ]

Tarbomb , в хакерской жаргоне , является деготь файл , который содержит большое количество файлов , которые экстракт в рабочей директорию. Такой tar-файл может создавать проблемы, перезаписывая файлы с тем же именем в рабочем каталоге или смешивая файлы одного проекта с другим. В лучшем случае это неудобство для пользователя, который вынужден идентифицировать и удалять несколько файлов, перемежающихся другим содержимым каталога. Такое поведение считается плохим этикетом со стороны создателя архива.

Связанная проблема - использование абсолютных путей или ссылок на родительские каталоги при создании файлов tar. Файлы, извлеченные из таких архивов, часто будут создаваться в необычных местах за пределами рабочего каталога и, как tarbomb, могут перезаписывать существующие файлы. Однако современные версии FreeBSD и GNU tar по умолчанию не создают и не извлекают абсолютные пути и ссылки на родительские каталоги, если это явно не разрешено с помощью флага -Pили параметра --absolute-names. Программа bsdtar, которая также доступна во многих операционных системах и является утилитой tar по умолчанию в Mac OS X v10.6, также не следует ссылкам на родительские каталоги или символическим ссылкам. [18]

Если пользователю доступен только очень старый tar, в котором не предусмотрены эти меры безопасности, эти проблемы можно смягчить, сначала проверив tar-файл с помощью команды tar tf archive.tar, которая перечисляет содержимое и позволяет впоследствии исключить проблемные файлы.

Эти команды не извлекают файлы, но отображают имена всех файлов в архиве. Если какие-то из них проблематичны, пользователь может создать новый пустой каталог и извлечь в него архив - или полностью отказаться от tar-файла. Большинство графических инструментов могут отображать содержимое архива перед его извлечением. Vim может открывать tar-архивы и отображать их содержимое. GNU Emacs также может открывать tar-архив и отображать его содержимое в заданном буфере.

Произвольный доступ [ править ]

Формат 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 гудрон (также BSD деготь ) стал дегтем по умолчанию на большинстве Berkeley Software Distribution -На операционных системвключая Mac OS X . Основные функции доступны в виде libarchive для включения в другие приложения. Эта реализация автоматически определяет формат файла и может извлекать из образов компакт-дисков tar, pax, cpio, zip, jar, ar, xar, rpm и ISO 9660. Он также поставляется с функционально эквивалентным интерфейсом командной строки cpio.
  • Schily tar , более известный как звезда , имеет историческое значение, поскольку некоторые из его расширений были довольно популярны. Это самая старая бесплатная смола с 1982 года. Она все еще поддерживается. [19]

Кроме того, большинство реализаций pax и cpio могут читать и создавать многие типы файлов tar.

Суффиксы для сжатых файлов [ править ]

Файлы архивов tar обычно имеют суффикс .tar (например, somefile.tar ).

Файл архива tar содержит несжатые потоки байтов файлов, которые он содержит. Для сжатия архива доступны различные программы сжатия , такие как gzip , bzip2 , xz , lzip , lzma , zstd или compress , которые сжимают весь tar-архив. Обычно сжатая форма архива получает имя файла путем добавления суффикса сжатия, зависящего от формата, к имени файла архива. Например, tar-архив archive.tar при сжатии с помощью gzip называется archive.tar.gz .

Популярные программы tar, такие как версии tar для BSD и GNU, поддерживают параметры командной строки 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 . [20] Распаковка этих форматов выполняется автоматически, если используются поддерживаемые расширения файлов, а сжатие выполняется автоматически с использованием тех же расширений файлов, если параметр --auto-compress (сокращенная форма -a ) передается в применимую версию GNU. смола. [11]

MS-DOS «s 8.3 имя_файла ограничение привело к дополнительным конвенциям для обозначения сжатых архивов смолы. Однако эта практика сократилась, поскольку теперь FAT предлагает длинные имена файлов .

Архивирование tar часто используется вместе с методом сжатия, таким как gzip , для создания сжатого архива. Как показано, комбинация файлов в архиве сжимается как одно целое.

См. Также [ править ]

  • Сравнение файловых архиваторов
  • Сравнение форматов архивов
  • Список форматов архивов
  • Список команд Unix

Ссылки [ править ]

  1. ^ Гилмор, Джон; Фенласон, Джей (4 февраля 2019 г.). «Базовый формат tar» . gnu.org . и другие. Фонд свободного программного обеспечения . Проверено 17 апреля 2019 года .
  2. ^ a b "страница руководства tar (5)" . FreeBSD.org . FreeBSD. 20 мая 2004 . Дата обращения 2 мая 2017 .
  3. ^ IEEE Std 1003.1-1988, Стандарт IEEE для информационных технологий - интерфейс переносимой операционной системы (POSIX)
  4. ^ IEEE Std 1003.1-2001, Стандарт IEEE для информационных технологий - интерфейс переносимой операционной системы (POSIX)
  5. ^ «Объявление о выпуске Windows 10 Insider Preview Build 17063 для ПК» . Блог Windows Experience . 2017-12-19 . Проверено 2 июля 2018 .
  6. ^ "Tar и Curl приходят в Windows!" . 2019-03-22.
  7. ^ IBM . «Qshell для программирования IBM System i версии 7.2» (PDF) . Проверено 5 сентября 2020 .
  8. ^ «Блокировка» . ftp.gnu.org . Проверено 26 августа 2020 .
  9. Ху, Джеймс. «Открыть / извлечь файл TAR с помощью бесплатного программного обеспечения для Windows / Mac / Linux» . e7z Org . Архивировано из оригинала 6 февраля 2015 года . Дата обращения 3 сентября 2019 .
  10. ^ Kientzle, Тим (1995). Форматы файлов Интернета . Книги о группах Кориолиса. ISBN 978-1-883577-56-8. Проверено 12 декабря 2015 года .
  11. ^ a b c «GNU tar 1.32: 8.1 Использование меньшего пространства за счет сжатия» . GNU . 2019-02-23 . Проверено 11 августа 2019 .
  12. ^ «GNU tar 1.32: 8. Управление форматом архива» . GNU . 2019-02-23 . Проверено 19 ноября 2020 .
  13. ^ pax  - Справочник по командам и утилитам, спецификация Single UNIX , выпуск 7 от The Open Group
  14. ^ "# 2116 Tars с не проанализированными заголовками pax" . 7-Zip / Ошибки | SourceForge .
  15. ^ Предлагаемый формат замены tar разработчиками утилиты Duplicity.
  16. ^ a b tar(5)  -  Руководство по форматам файлов FreeBSD
  17. ^ «Расширенные атрибуты: хорошее, не очень хорошее, плохое» . Les bons comptes . 15 июля 2014. Архивировано из оригинала 14 декабря 2014 года . Дата обращения 3 сентября 2019 . Расширенные атрибуты могут быть очень ценными для хранения метаданных файла (например, author = "John Smith", subject = "country landscape") во многих случаях, когда вы не хотите или не можете хранить эти данные во внутренних свойствах файла.
  18. ^ Справочная страница для "bsdtar", предоставленная Apple.
  19. ^ star(1)  -  Руководство по основным командам Linux
  20. ^ Poznyakoff Сергей (2019-01-02). "tar-1.31 выпущен [стабильный]" . Списки рассылки GNU . Проверено 6 августа 2019 .

Внешние ссылки [ править ]

  • tar(1) -  Руководство программиста Plan 9 , том 1
  • tar(1) -  Справочное руководство по командам пользователя Solaris 10
  • tar(1) -  Руководство по основным командам FreeBSD
  • tar(1) -  Руководство по командам пользователя Linux
  • TAR - Windows CMD - SS64.com