Почему люди используют тарболы? - PullRequest
89 голосов
/ 17 ноября 2008

Как разработчик Windows, я, возможно, упускаю что-то культурное в сообществе Linux, но это всегда смущало меня.

При загрузке чего-то, что файлы сначала помещаются в .tar архив, затем zip . Почему двухступенчатый процесс? Разве zipping не обеспечивает группировку файлов? Есть ли какая-то другая выгода, о которой я не знаю?

Ответы [ 16 ]

133 голосов
/ 17 ноября 2008

bzip и gzip работают с отдельными файлами, а не с группами файлов. Обычные старые zippkzip) работают с группами файлов и имеют концепцию встроенного архива.

Философия * nix - это один из небольших инструментов, которые очень хорошо выполняют определенную работу и могут быть объединены в цепочку. Вот почему здесь есть два инструмента, которые имеют конкретные задачи, и они разработаны, чтобы хорошо сочетаться друг с другом. Это также означает, что вы можете использовать tar для группировки файлов, а затем у вас есть выбор инструмента сжатия (bzip, gzip и т. Д.).

28 голосов
/ 17 ноября 2008

Важное различие заключается в характере двух видов архивов.

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

ZIP-файлы представляют собой объединение индивидуально сжатых файлов с некоторыми заголовками. На самом деле, алгоритм DEFLATE используется как zip, так и gzip, и при соответствующей двоичной настройке вы можете взять полезную нагрузку потока gzip и поместить его в zip-файл с соответствующими заголовками и словарными записями.

Это означает, что два разных типа архива имеют разные компромиссы. Для больших наборов небольших файлов TAR, за которым следует потоковый компрессор, обычно приводит к более высокой степени сжатия, чем ZIP, потому что потоковый компрессор будет иметь больше данных для построения своих словарных частот и, таким образом, сможет вытеснять больше избыточной информации. С другой стороны, ошибка (сохранение длины файла) в файле ZIP повредит только те файлы, сжатые данные которых были затронуты. Обычно потоковые компрессоры не могут эффективно восстанавливаться после ошибок в середине потока. Таким образом, ZIP-файлы более устойчивы к повреждениям, так как часть архива будет по-прежнему доступна.

26 голосов
/ 17 ноября 2008

Странно, что никто другой не упомянул, что современные версии GNU tar позволяют вам сжимать при объединении:

tar -czf output.tar.gz directory1 ...

tar -cjf output.tar.bz2 directory2 ...

Вы также можете использовать компрессор по вашему выбору при условии, что он поддерживает опции '-c' (для stdout или из stdin) и '-d' (для распаковки):

tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...

Это позволит вам указать любой альтернативный компрессор.

[ Добавлено : если вы извлекаете из сжатых файлов gzip или bzip2, GNU tar автоматически обнаруживает их и запускает соответствующую программу. То есть вы можете использовать:

tar -xf output.tar.gz
tar -xf output.tgz        # A synonym for the .tar.gz extension
tar -xf output.tar.bz2

и они будут обработаны правильно. Если вы используете нестандартный компрессор, то вам нужно указать это при выполнении извлечения.]

Причиной разделения, как и в выбранном ответе, является разделение обязанностей. Среди прочего, это означает, что люди могут использовать программу «cpio» для упаковки файлов (вместо tar), а затем использовать выбранный компрессор (когда-то предпочтительным компрессором был pack, позже это был compress (который был намного эффективнее, чем pack), а затем gzip, который обвивал кольца вокруг обоих своих предшественников и полностью конкурировал с zip (который был перенесен в Unix, но не является нативным там), а теперь bzip2, который, по моему опыту, обычно имеет преимущество в 10-20% над gzip.

[ Добавлено : кто-то заметил в своем ответе, что cpio имеет забавные соглашения. Это правда, но до тех пор, пока GNU tar не получит соответствующие параметры ('-T -'), cpio была лучшей командой, когда вы не хотели архивировать все, что находилось под данным каталогом - вы могли фактически выбрать, какой именно файлы были заархивированы. Недостатком cpio было то, что вы не только могли выбирать файлы - у вас было для их выбора. Есть еще одно место, где cpio забивает; он может сделать копию на месте из одной иерархии каталогов в другую без промежуточного хранилища:

cd /old/location; find . -depth -print | cpio -pvdumB /new/place

Кстати, опция -depth в find важна в этом контексте - она ​​копирует содержимое каталогов перед установкой разрешений для самих каталогов. Когда я проверил команду перед вводом дополнения к этому ответу, я скопировал некоторые каталоги только для чтения (разрешение 555); когда я удалил копию, мне пришлось ослабить права доступа к каталогам, прежде чем 'rm -fr /new/place' мог закончиться. Без опции -depth команда cpio не состоялась бы. Я вспомнил об этом только тогда, когда пошел на уборку - цитируемая формула является для меня автоматической (в основном благодаря многим повторениям в течение многих лет). ]

15 голосов
/ 17 ноября 2008

Самое смешное, что вы можете получить поведение, не ожидаемое создателями tar и gzip. Например, вы можете не только распаковать tar-файл, вы также можете распаковать tar-архивированные файлы, чтобы получить files.gz.tar (технически это будет ближе к работе pkzip). Или вы можете поместить в конвейер другую программу, например, некоторую криптографию, и вы можете выбрать произвольный порядок заимствования, сжатия и шифрования. Кто бы ни написал криптографическую программу, он не должен иметь ни малейшего представления о том, как будет использоваться его программа, все, что ему нужно, - это читать со стандартного ввода и записывать в стандартный вывод.

8 голосов
/ 17 ноября 2008

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

7 голосов
/ 17 ноября 2008

Другая причина, по которой он так распространен, заключается в том, что tar и gzip находятся почти на всей базе установки * NIX. Я считаю, что это, вероятно, единственная причина. Именно поэтому zip-файлы чрезвычайно распространены в Windows, потому что встроенная поддержка существует независимо от превосходящих подпрограмм в RAR или 7z.

GNU tar также позволяет создавать / извлекать эти файлы из одной команды (один шаг):

  • Создать архив:
  • tar -cfvj destination.tar.bz2 *.files
  • tar -cfvz destination.tar.gz *.files

  • Извлечение архива: (часть -C необязательна, по умолчанию используется текущий каталог)

  • tar -xfvj archive.tar.bz2 -C destination_path
  • tar -xfvz archive.tar.gz -C destination_path

Это то, что я посвятил памяти из своих многих лет в Linux и недавно в Nexenta (OpenSolaris).

5 голосов
/ 17 ноября 2008

Я думаю, вы искали больше исторического контекста для этого. Оригинальный почтовый индекс был для одного файла. Tar используется для размещения нескольких файлов в одном файле. Поэтому tarring и zipping - двухэтапный процесс. Почему это все еще так доминирует сегодня, можно только догадываться.

Из википедии для Tar_ (file_format)

В вычислениях tar (полученный из архива на магнитной ленте) - это и формат файла (в виде типа битового потока архива), и название программы, используемой для обработки таких файлов. Формат был стандартизирован POSIX.1-1988 и позже POSIX.1-2001. Изначально разработанный как необработанный формат, используемый для резервного копирования на ленту и других устройств с последовательным доступом для целей резервного копирования, теперь он обычно используется для объединения коллекций файлов в один более крупный файл для распространения или архивирования при сохранении информации о файловой системе, такой как пользователь и группа. разрешения, даты и структуры каталогов.

4 голосов
/ 19 марта 2013

tar - это UNIX, а UNIX - это tar

По моему мнению, причина того, что до сих пор использует tar сегодня, заключается в том, что это один из (вероятно, редких) случаев, когда подход UNIX просто сделал его совершенно правильным с самого начала.

При более внимательном рассмотрении этапов создания архивов, я надеюсь, вы согласитесь с тем, что здесь происходит разделение различных задач Философия UNIX в своих лучших проявлениях:

  • один инструмент (tar, чтобы дать ему имя здесь), специализирующийся на преобразовании любой выбор файлов, каталогов и символических ссылок, включая все соответствующие метаданные, такие как метки времени, владельцы и разрешения в одном байтовом потоке.

  • и просто еще один произвольно заменяемый инструмент (gzip bz2 xz, чтобы назвать только несколько опций), который преобразует любой входной поток байтов в другой (мы надеемся) выходной поток меньшего размера ,

Использование такого подхода обеспечивает целый ряд преимуществ как для пользователя, так и для разработчика:

  • расширяемость Позволяет соединить tar с любым алгоритмом сжатия, который уже существует, или любым алгоритмом сжатия, который еще не разработан без необходимости что-либо менять во внутренней работе tar на всех.

    Как только выйдет совершенно новый "hyper-zip-utra" или инструмент для сжатия воды, вы уже готовы использовать его, охватывая нового слугу со всей силой tar.

  • стабильность tar находился в интенсивном использовании с начала 80-х годов, тестировался и работал на множестве операционных систем и машин.

    Предотвращение необходимости переизобретать колесо для реализации хранения прав собственности, разрешений, временных отметок и т. П. снова и снова для для каждого нового инструмента архивации не только экономит много (в противном случае излишне затрачивается) времени на разработку, но также гарантирует одинаковую надежность для каждого нового приложения.

  • согласованность Пользовательский интерфейс постоянно остается неизменным.

    Нет необходимости помнить, что для восстановления прав доступа с помощью инструмента A необходимо передать параметр --i-hope-you-rember-this-one, а с помощью инструмента B вы должны использовать --this-time-its-another-one, а при использовании инструмента C это `- hope-you-didnt-try- с инстр-в-переключателя.

    Принимая во внимание, что при использовании инструмента D вы действительно испортили бы его, если бы не использовали --if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now.

3 голосов
/ 17 ноября 2008

tar популярен в основном по историческим причинам. Есть несколько доступных альтернатив. Некоторые из них существуют почти столько же, сколько tar, но не могут превзойти его по популярности по нескольким причинам.

  • cpio (инопланетный синтаксис; теоретически более последовательный, но людям нравится то, что они знают, смола преобладает)
  • ar (популярный давно, теперь используется для упаковки файлов библиотеки)
  • shar (самораспаковывающиеся сценарии оболочки, имели всевозможные проблемы; раньше пользовались популярностью)
  • zip (из-за проблем с лицензированием он не был доступен во многих Unices)

Основным преимуществом (и недостатком) tar является то, что у него нет ни заголовка файла, ни центрального каталога содержимого. В течение многих лет он никогда не страдал от ограничений размера файлов (до этого десятилетия, когда ограничение в 8 Гб для файлов внутри архива стало проблемой, решаемой годами назад).

В сущности, единственный недостаток tar.gz (или ar.Z в этом отношении), заключающийся в том, что вам нужно распаковывать весь архив для извлечения отдельных файлов и перечисления содержимого архива, никогда не причинять людям достаточного вреда, чтобы сделать их дефектными из tar в значительном количестве.

2 голосов
/ 17 ноября 2008

Обычно в мире * nux пакеты файлов распространяются в виде tar-архивов, а затем при желании распаковываются. Gzip - это простая программа сжатия файлов, которая не выполняет связывание файлов, как tar или zip.

В свое время zip неправильно обрабатывал некоторые вещи, которые Unix tar и файловые системы unix считали нормальными, такие как символические ссылки, смешанные файлы и т. Д. Я не знаю, изменилось ли это, но именно поэтому мы используем деготь.

...