stringtranslate.com

смола (вычисления)

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

История

Утилита командной строки была впервые представлена ​​в версии 7 Unix в январе 1979 года, заменив программу tp (которая, в свою очередь, заменила «tap»). [7] Файловая структура для хранения этой информации была стандартизирована в POSIX .1-1988 [8] , а затем в POSIX.1-2001, [9] и стала форматом, поддерживаемым большинством современных систем архивирования файлов. В POSIX.1-2001 от команды tar отказались в пользу команды pax , которая должна была поддерживать формат файлов ustar; команде tar было указано на вывод в пользу команды pax как минимум с 1994 года.

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

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

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

Обоснование

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

Формат файла

Существует несколько форматов файлов tar, включая исторические и текущие. В POSIX кодифицированы два формата tar: ustar и pax. Не кодифицированный, но все еще используемый формат GNU tar.

Архив tar состоит из ряда файловых объектов, отсюда и популярный термин tarball , обозначающий, как tar-архив собирает объекты всех видов, прилипающие к его поверхности. Каждый файловый объект включает в себя любые данные файла, и ему предшествует запись заголовка длиной 512 байт . Данные файла записываются без изменений, за исключением того, что его длина округляется до кратного 512 байт. Исходная реализация tar не заботилась о содержимом заполняющих байтов и оставляла данные буфера неизмененными, но большинство современных реализаций tar заполняют дополнительное пространство нулями. [14] Конец архива отмечается как минимум двумя последовательными записями, заполненными нулями. (Похоже, что источником размера записи 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 [7] [15] ), представленном стандартом POSIX IEEE P1003.1 с 1988 года. В нем введены дополнительные поля заголовков. Старые программы tar будут игнорировать дополнительную информацию (возможно, извлечение частично именованных файлов), тогда как новые программы будут проверять наличие строки «ustar», чтобы определить, используется ли новый формат. Формат UStar позволяет использовать более длинные имена файлов и сохраняет дополнительную информацию о каждом файле. Максимальный размер имени файла — 256, но он разделен между «префиксом имени файла» предыдущего пути и самим именем файла, поэтому может быть намного меньше. [16]

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

Расширения конкретного поставщика 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/чел.

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

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

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

Использование

Синтаксис команды

tar [-опции] <имя tar-архива> [файлы или каталоги, которые добавить в архив]

Основные параметры:

Основное использование

Создайте архивный файл archive.tarиз файла README.txtи каталога src:

$ tar  -cvf  archive.tar  README.txt  src

Извлеките содержимое archive.tarв текущий каталог:

$ tar  -xvf  archive.tar

Создайте архивный файл archive.tar.gzиз файла README.txtи каталога srcи сожмите его с помощью gzip  :

$ tar  -cavf  archive.tar.gz  README.txt  src

Извлеките содержимое archive.tar.gzв текущий каталог:

$ tar  -xvf  archive.tar.gz

Брезент

tarpipe — это метод создания архива в стандартном выходном файле утилиты tar и передачи его другому процессу tar на его стандартный ввод , работающему в другом каталоге, где он распаковывается. Этот процесс копирует все дерево исходных каталогов, включая все специальные файлы, например:

$ tar  cf  -  исходный каталог | tar x -C целевой каталог     

Распространение программного обеспечения

Формат tar продолжает широко использоваться для распространения программного обеспечения с открытым исходным кодом . *NIX-дистрибутивы используют его в различных механизмах распространения исходных кодов и двоичных пакетов, при этом исходный код большинства программ доступен в сжатых архивах tar. [ нужна цитата ]

Ограничения

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

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

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

Тарбомба

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

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

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

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

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

Если правильно сформированный файл tar хранится на доступном для поиска (т.е. позволяет эффективное случайное чтение) носителе, программа tarвсе равно может относительно быстро (за линейное время относительно количества файлов) искать файл, пропуская операции чтения файла в соответствии с полем «размер». в заголовках файлов. Это основа опции -nв GNU tar. Когда файл tar сжимается целиком, формат сжатия, который обычно не доступен для поиска, не позволяет выполнить эту оптимизацию. [25] Ряд «индексированных» компрессоров, поддерживающих формат tar, могут восстановить эту функцию для сжатых файлов. [26] Чтобы обеспечить возможность поиска, файлы tar также необходимо правильно объединить, удалив конечный нулевой блок в конце каждого файла. [27]

Дубликаты

Другая проблема с форматом 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 называется archive.tar.gz , если он сжат с помощью gzip.

Популярные программы tar, такие как версии tar для BSD и GNU , поддерживают параметры командной строки Z (сжатие), z (gzip) и j (bzip2) для сжатия или распаковки архивного файла при его создании или распаковке. Относительно недавние дополнения включают --lzma ( LZMA ), --lzop ( lzop ), --xz или J ( xz ), --lzip (lzip) и --zstd . [33] Распаковка этих форматов выполняется автоматически, если используются поддерживаемые расширения имен файлов, а сжатие выполняется автоматически с использованием тех же расширений имен файлов, если опция --auto-compress (короткая форма -a ) передается в применимую версию GNU. смола. [16] BSD tar обнаруживает еще более широкий диапазон компрессоров ( lrzip , lz4 ), используя не имя файла, а содержащиеся в нем данные. [34] Нераспознанные форматы необходимо сжимать или распаковывать вручную с помощью конвейеров.

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

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

Смотрите также

Рекомендации

  1. ^ "Библиоархив".
  2. Сергей Позняков (18 июля 2023 г.). «Выпущен tar-1.35 [стабильный]» . Проверено 26 июля 2023 г.
  3. ^ Джон Гилмор (10 декабря 1986). «v07i088: Программа TAR, являющаяся общественным достоянием». Группа новостей : mod.sources. Архивировано из оригинала 07 февраля 2022 г. Проверено 7 февраля 2022 г.
  4. Ссылки
  5. ^ "звезда".
  6. ^ Гилмор, Джон; Фенласон, Джей (4 февраля 2019 г.). «Базовый формат Tar». gnu.org . и другие. Фонд свободного программного обеспечения . Проверено 17 апреля 2019 г.
  7. ^ ab "Страница руководства по tar(5)". FreeBSD.org . FreeBSD. 20 мая 2004 года . Проверено 2 мая 2017 г.
  8. ^ IEEE Std 1003.1-1988, Стандарт IEEE для информационных технологий - интерфейс портативной операционной системы (POSIX)
  9. ^ IEEE Std 1003.1-2001, Стандарт IEEE для информационных технологий - интерфейс портативной операционной системы (POSIX)
  10. ^ IBM . «IBM System i Версия 7.2 Программирование Qshell» (PDF) . ИБМ . Проверено 05 сентября 2020 г.
  11. ^ «Анонсируем сборку Windows 10 Insider Preview Build 17063 для ПК» . Блог об опыте работы с Windows . 19 декабря 2017 г. Проверено 2 июля 2018 г.
  12. ^ «Tar и Curl приходят в Windows!». 22 марта 2019 г.
  13. ^ «Блокировка». ftp.gnu.org . Проверено 26 августа 2020 г.
  14. ^ Ого, Джеймс. «Открыть/извлечь файл TAR с помощью бесплатной программы для Windows/Mac/Linux». e7z орг . Архивировано из оригинала 6 февраля 2015 года . Проверено 3 сентября 2019 г.
  15. ^ Кинцле, Тим (1995). Форматы файлов Интернета. Книги о группах Кориолиса. п. 196. ИСБН 978-1-883577-56-8. Проверено 10 ноября 2022 г.
  16. ^ abc «GNU tar 1.32: 8.1 Использование меньшего пространства за счет сжатия». ГНУ . 2019-02-23 . Проверено 11 августа 2019 г.
  17. ^ НОВОСТИ, git.savannah.gnu.org — найдите «Добавлена ​​поддержка POSIX.1-2001 и форматов архивов ustar».
  18. ^ «GNU tar 1.34: 8. Управление форматом архива». ГНУ . Проверено 11 июля 2022 г.
  19. ^ pax  - Справочник по оболочке и утилитам, Единая спецификация UNIX , версия 4 от Open Group
  20. ^ "# 2116 Tars с заголовками pax не анализируются" . 7-Zip / Ошибки | СоурсФордж .
  21. ^ Формат, предложенный разработчиками утилиты Duplicity для замены tar.
  22. ^ ab tar(5) -  Руководство по форматам файлов FreeBSD
  23. ^ «Расширенные атрибуты: хороший, не очень хороший, плохой». Les bons comptes . 15 июля 2014 года. Архивировано из оригинала 14 декабря 2014 года . Проверено 3 сентября 2019 г. Расширенные атрибуты могут быть очень полезны для хранения метаданных файла (например,author="John Smith", subject="country Landscape") во многих случаях, когда вы не хотите или не можете хранить эти данные во внутренних свойствах файла.
  24. ^ Страница руководства по «bsdtar».
  25. BillThor (28 июля 2017 г.). «Что делает архив tar доступным для поиска?». Супер пользователь . Проверено 15 декабря 2023 г.
  26. Василевский, Дэйв (6 декабря 2023 г.). "пикс".
  27. ^ «GNU tar 1.35: 4.2.4 Объединение архивов с помощью --concatenate» . www.gnu.org .
  28. ^ Шиллинг, Йорг. «Star - очень быстрый архиватор tar для UNIX, совместимый с Posix 1003.1». Архивировано из оригинала 9 июля 2023 г. Проверено 2 сентября 2023 г.
  29. Томас Э. Дики (4 января 2015 г.). «TAR против портативности: смола Шили» . Проверено 23 октября 2021 г.
  30. Йорг Шиллинг (4 сентября 2021 г.). "star - уникальный стандартный ленточный архиватор" . Проверено 23 октября 2021 г.
  31. ^ модуль tarfile, python.org
  32. ^ tarfile.py, github.com
  33. ^ Позняков, Сергей (2 января 2019 г.). «Выпущен tar-1.31 [стабильный]». Списки рассылки GNU . Проверено 6 августа 2019 г.
  34. ^ tar(1)  -  Руководство по общим командам FreeBSD.

Внешние ссылки