Вопрос В чем преимущество использования «tar» сегодня?


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

Вопросов:

  • Существует ли ограничение производительности на этапах агрегации / сжатия / декомпрессии для использования tar инкапсулированный в gzip или bzip2, по сравнению с использованием формата файла, который выполняет агрегацию и сжатие в одной и той же структуре данных? Предположим, что время работы сравниваемого компрессора идентично (например, gzip и Deflate аналогичны).

  • Существуют ли особенности tar формат файла, который поддерживает другие форматы файлов, такие как .7z а также .zip не иметь?

  • поскольку tar такой старый формат файла, и новые форматы файлов существуют сегодня, почему tar (инкапсулированный в gzip, bzip2 или даже новых xz), который так широко используется сегодня в GNU / Linux, Android, BSD и других подобных операционных системах UNIX, для передачи файлов, загрузки исходных кодов и бинарных загрузок, а иногда и в виде формата диспетчера пакетов?


206
2018-03-14 14:33


происхождения


Я не согласен, что он «тратит время». Если вы имеете в виду производительность, фактический штраф за производительность для tar не существует, так как формат очень эффективен. Если вы имеете в виду, что это отходы ваш время, я не вижу, как tar xvzf сложнее, чем 7z -x... - allquixotic
Он, похоже, сожалеет о том, что tar не сохраняет каталог с самого начала, поэтому инструменты сжатия GUI, которые хотят перечислить содержимое до извлечения, должны декомпрессировать весь tar только для того, чтобы перечислить содержимое, после чего они распаковывают его снова при извлечении , - psusi
@MarcusJ: вы думаете, что 7z каким-то волшебным образом знает, где каждый файл начинается в архиве? Кроме того, обычные алгоритмы сжатия (gzip, bzip2) работают с потоковой передачей содержимого: не нужно заполнять 100% первого этапа перед следующим. - progo
Также @MarcusJ вы, кажется, смешиваете две разные вещи: когда вы это делаете tar xvzf, несжатые данные не является записанный на жесткий диск в .tar формат! Вы правы, что если вы побежали gunzip blah.tar.gz а потом tar xf blah.tar, он будет записывать данные на диск дважды (один раз как .tar и снова как файлы в файловой системе), но никто на самом деле не делает этого. tar xzf использует Труба UNIX (в основном копия памяти) для переноса несжатых данных из gzip (или любого другого компрессора) tar, поэтому данные не записанный на диск в .tar формат. - allquixotic
Одна вещь, которую я знаю, это то, что tar (особенно сжатый) ведет себя ужасно, когда дело доходит до повреждения данных. Небольшие данные резервирования / восстановления, добавленные современными форматами, стоят золота - PPC


ответы:


Часть 1: Производительность

Вот сравнение двух отдельных рабочих процессов и их действий.

У вас есть файл на диске blah.tar.gz который, скажем, 1 ГБ сжатых данных gzip, который при несжатом состоянии занимает 2 ГБ (поэтому степень сжатия составляет 50%).

Способ создания этого, если вы собираетесь делать архивирование и сжатие отдельно, будет следующим:

tar cf blah.tar files ...

Это приведет к blah.tar который является простым агрегатом files ... в несжатой форме.

Тогда вы будете делать

gzip blah.tar

Это означало бы содержание blah.tar с диска, сжать их через алгоритм сжатия gzip, записать содержимое в blah.tar.gz, затем отсоединить (удалить) файл blah.tar,

Теперь давайте разложим!

Способ 1

У тебя есть blah.tar.gz, так или иначе.

Вы решили запустить:

gunzip blah.tar.gz

Это будет

  • ПРОЧИТАЙТЕ сжатые данные объемом 1 ГБ blah.tar.gz,
  • ПРОЦЕССА сжатые данные через gzip декомпрессора в памяти.
  • Поскольку буфер памяти заполняет «ценность блока», WRITE несжатые данные в файл blah.tar на диске и повторять до тех пор, пока не будут прочитаны все сжатые данные.
  • Отключить (удалить) файл blah.tar.gz,

Теперь у вас есть blah.tar на диске, который несжатый, но содержит один или несколько файлов в нем, с очень низкими издержками структуры данных. Размер файла, вероятно, пару байт чем сумма всех файлов данных.

Ты бежишь:

tar xvf blah.tar

Это будет

  • ПРОЧИТАЙТЕ 2 ГБ несжатого содержимого данных blah.tar и tar файловых форматов, включая информацию о разрешениях файлов, именах файлов, каталогах и т. д.
  • НАПИСАЙТЕ 2 ГБ данных плюс метаданные на диск. Это включает в себя: перевод информации о структуре данных / метаданных в создание новых файлов и каталогов на диске по мере необходимости или переписывание существующих файлов и каталогов с новым содержимым данных.

Все данные мы ЧИТАТЬ с диска в этом процессе было 1 ГБ (для gunzip) + 2 ГБ (для tar) = 3 ГБ.

Все данные мы НАПИСАЛ на диск в этом процессе было 2 ГБ (для gunzip) + 2 ГБ (для tar) + несколько байтов для метаданных = около 4 ГБ.

Путь 2

У тебя есть blah.tar.gz, так или иначе.

Вы решили запустить:

tar xvzf blah.tar.gz

Это будет

  • ПРОЧИТАЙТЕ сжатые данные объемом 1 ГБ blah.tar.gz, блок за раз, в память.
  • ПРОЦЕССА сжатые данные через gzip декомпрессора в памяти.
  • По мере заполнения буфера памяти он будет труба эти данные в памяти до tar синтаксический анализатор формата файла, который будет считывать информацию о метаданных и т. д. и данные несжатого файла.
  • Поскольку буфер памяти заполняется в tar файловый парсер, он будет записывать несжатые данные на диск, создавая файлы и каталоги и заполняя их несжатым содержимым.

Все данные мы ЧИТАТЬ с диска в этом процессе было 1 ГБ сжатых данных, период.

Все данные мы НАПИСАЛ на диск в этом процессе было 2 ГБ несжатых данных + несколько байтов для метаданных = около 2 ГБ.

Если вы заметили, количество дискового ввода-вывода в Путь 2 является идентичный к дискретному вводу-выводу, выполняемому, скажем, Zip или 7-Zip программ, регулирующих любые различия в степени сжатия.

И если степень сжатия является вашей проблемой, используйте Xz компрессор для инкапсуляции tar, и у вас есть LZMA2'ed TAR, который так же эффективен, как и самый продвинутый алгоритм, доступный для 7-Zip :-)

Часть 2: Особенности

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

Часть 3: Совместимость

Многие инструменты распространяются в исходной или двоичной форме как .tar.gz или .tar.bz2, потому что это формат файла «самый низкий общий знаменатель»: как и большинство пользователей Windows имеют доступ к распаковкам .zip или .rar, большинство установок Linux , даже самые простые, будут иметь доступ, по крайней мере, к tar и gunzip, независимо от того, сколько лет или пошло. Даже прошивки для Android имеют доступ к этим инструментам.

Новые проекты, предназначенные для аудиторий, работающих в современных дистрибутивах, могут очень распространяться в более современном формате, таком как .tar.xz (с использованием формата сжатия Xz (LZMA), который сжимается лучше, чем gzip или bzip2) или .7z, что аналогично ZIP или RAR форматы файлов, в которых он сжимает и задает макет для инкапсуляции нескольких файлов в один файл.

Вы не видите .7z чаще используются по той же причине, что музыка не продается из магазинов онлайн-загрузки в совершенно новых форматах, таких как опус, или видео в WebM, Совместимость с людьми, использующими древние или очень простые системы.


173
2018-03-14 17:09



Престижность за отличный ответ со всем содержимым, разделенным на три разных заголовка. - JFW
«Часть 3: Совместимость», похоже, была скопирована из ответа @ Kruug. - titaniumdecoy
@titaniumdecoy Вы заметили, что это был allquixotic, который изначально написал эту часть и отредактировал ее в ответ Kruug? - slhck
Спасибо, что указал, что я этого не заметил. Однако мне кажется немного глупо иметь одинаковый блок текста в двух разных ответах на этой странице. - titaniumdecoy
Это объясняет, почему tar (например, объединять файлы вместе, обеспечивая повышение производительности и некоторые другие преимущества, такие как сохранение разрешений), но не затрагивает, почему современные альтернативы, такие как darне используются на месте. Другими словами, этот ответ оправдывает использование агрегаторов файлов, но не tar программное обеспечение само по себе. - gaborous


Эта был дан ответ на переполнение стека,

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

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

Многие инструменты распространяются в исходной или двоичной форме как .tar.gz или .tar.bz2, потому что это формат файла «самый низкий общий знаменатель»: как и большинство пользователей Windows имеют доступ к распаковкам .zip или .rar, большинство установок Linux , даже самые основные, будут иметь доступ, по крайней мере, к tar а также gunzip, независимо от того, сколько лет или пошло. Даже прошивки для Android имеют доступ к этим инструментам.

Новые проекты, ориентированные на аудиторию, использующие современные дистрибутивы, могут очень хорошо распространяться в более современном формате, например .tar.xz (используя Xz (LZMA), который сжимается лучше, чем gzip или bzip2) или .7z, что аналогично ZIP или RAR форматы файлов, в которых он сжимает и задает макет для инкапсуляции нескольких файлов в один файл.

Вы не видите .7z чаще используются по той же причине, что музыка не продается из магазинов онлайн-загрузки в совершенно новых форматах, таких как опус, или видео в WebM, Важна совместимость с людьми, использующими древние или очень простые системы.


100
2017-08-19 08:50



Привет @Kruug, я отредактировал ваш пост, чтобы дать практическую перспективу, почему люди все еще выберите использовать эти форматы, когда у них есть выбор использовать что-то еще. Я не изменил текст, который у вас уже был. Это просто, чтобы убедиться, что канонический ответ на этот вопрос будет иметь полную картину. Не стесняйтесь редактировать мое редактирование, если хотите :) - allquixotic
@allquixotic начала кем-нибудь? Отредактируйте редактирование и редактирование, чтобы вы могли редактировать редактирование ... - SnakeDoc
Этот ответ определенно является случаем: «Меня иногда сдувают незаслуженные авансы». Он не касается основной проблемы вопроса, который заключается в перечислении содержимого сжатого tar, и это даже не оригинальный ответ! - Ярослав Рахматуллин
-1 за великую справедливость. это должен был быть комментарий. - wim
Я не покупаю аргумент наследия / самого низкого общего знаменателя; Я помню, что на новых системах (солнце) часто приходилось загружать gzip / gunzip (из sunfreeware) только для установки другого tar.gz упакованного программного обеспечения (плюс gnu tar, так как смола солнца смогла). Для старого / более общего знаменателя вы имели tar.Z (Компресс / распаковывать). Прогресс утилит был постоянным потоком (без каламбура) изменения и улучшения: Z => zip => gz => bz2 => 7z => xz (или любой другой порядок, который вы предпочитаете). Что касается роли tar, некоторые utils un / compress only и по-прежнему требуют, чтобы tar собирал иерархии файлов. - michael


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

  • Вы хотите, чтобы извлеченные данные сохраняли время доступа к файлу? Тар может это сделать. Чтобы сохранить разрешения? Тар может это сделать.

  • Вы хотите сохранить символические ссылки как символические ссылки? Тар делает это по умолчанию. Хотите скопировать цель вместо этого? Тар может это сделать.

  • Вы хотите быть уверенным, что данные с жесткой привязкой сохраняются только один раз (то есть, чтобы делать правильные вещи)? Тар делает это.

  • Вы хотите хорошо обрабатывать разреженные файлы? Тар может это сделать.

  • Вы хотите несжатые данные (почему?)? Тар может это сделать. Сжать с помощью gzip? Тар может это сделать. С bzip2? Тар может это сделать. С произвольными программами внешнего сжатия? Тар может это сделать.

  • Вы хотите написать или восстановить на / из необработанного устройства? Формат Тэра отлично подходит.

  • Вы хотите добавить файлы в существующий архив? Тар может это сделать. Чтобы разделить два архива, чтобы увидеть, что изменилось? Тар может это сделать. Обновить только те части архива, которые изменились? Тар может это сделать.

  • Вы хотите, чтобы убедиться, что вы не архивируете более чем одну файловую систему? Тар может это сделать.

  • Вы хотите захватить только файлы, которые новее, чем ваша последняя резервная копия? Тар может это сделать.

  • Вы хотите сохранить имена и номера пользователей и групп? Тар может сделать одно.

  • Нужно ли сохранять узлы устройств (например, файлы в /dev), так что после извлечения система будет работать правильно? Тар может это сделать.

Тар развивается, чтобы обрабатывать множество и множество вариантов использования на протяжении десятилетий и действительно знает много о том, что люди хотят делать с файловыми системами Unix.


61



Вам не нужен GNU tar для использования произвольного компрессора: просто скажите tar, чтобы записать архив в stdout с помощью f - и переведите его в компрессор. - Ilmari Karonen
«Вам нужны несжатые данные (почему?)?» я использую tar очень часто копировать дерево файловой системы из одного места в другое и сохранять разрешения и т. д., а сжатие в этом случае просто требует дополнительных циклов ЦП. Например. tar cf - * | tar xf - -C /somewhere, - Steve
Кроме того, вам нужен файл .tar, когда целевая файловая система выполняет дедупликацию. Создание сжатых архивов в файловой системе, которая выполняет дедупликацию, существенно снизит коэффициент дедупликации. Пример: однажды мы удалили файл tar.gz стоимостью 10 000,00 долларов США; то есть он занимал место хранения на 10 000 долларов, потому что кто-то использовал сжатие. - Aaron
Циклы @Steve CPU могут быть дешевле, чем диск IO для таких алгоритмов, как LZ4 или LZO. Вот почему они используются в zram и прозрачных файловых системах сжатия, таких как NTFS, ZFS, Btrfs ... поэтому иногда это происходит быстрее, чем сжимать, поскольку количество дискового ввода-вывода значительно уменьшается - phuclv


Вы смешиваете два разных процесса архивирование а также компрессия,

Причины использования архиватора

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

tar cf - some_directory | ssh host "(cd ~/somewhere | tar xf -)"

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

Причины использования архиватора с сжатием gzip

Одна из причин, по которой я использую tar с gzip является: скорость! Если я хочу передать несколько GiB текстовых файлов из одного места в другое, я не заботятся о том, чтобы выжать последние байты, поскольку только сжатие используется для транзита, а не для длительного хранения. В тех случаях я использую gzip, который не максимизирует процессор (в отличие от 7-Zip, например), означает, что я I / O снова связаны, а не связаны с ЦП. И опять: gzip возможно считается доступным во всем мире.

Причины использования tar в пользу scp, rsync, и т.д.

Это бьет scp если у вас есть много небольших файлов для копирования (например, почтовые каталоги со сто тысячами файлов). rsync, удивительный, как есть, может быть недоступен повсюду. В дальнейшем, rsync только реально окупается, если часть файлов - или более старая версия - уже присутствует в пункте назначения. Для первоначальной копии tar является самым быстрым, с сжатием или без, в зависимости от фактических данных.


28



Но если вы собираетесь архивировать, почему бы не сжать? Хорошо, да, это может сэкономить время для файлов, которые не легко сжимаются, но тогда архиваторы должны, вероятно, знать, что музыка, например, не очень сжимаемая, за исключением заголовков. - MarcusJ
Возможно, вам это не понадобится, или ваш контент может не сжиматься. - Hasturkun
По соображениям производительности часто проще использовать несжатую агрегацию файлов при отправке данных по сетям с очень высокой пропускной способностью, которые превышают скорость, с которой компрессор может сжимать данные. Это достигается, например, с помощью Gigabit Ethernet; только несколько хорошо разработанных алгоритмов сжатия, которые также имеют очень низкую степень сжатия, могут быстро сжимать данные, даже на большом настольном процессоре. На встроенном устройстве у вас еще меньше времени на процессор. - allquixotic
это не только ускоряет работу, но также позволяет сохранять права собственности на файлы, временные метки и атрибуты (если это позволяют пользовательские привилегии) - Andre Holzner
@AndreHolzner Право. Я часто делаю tar cf - . | (cd ~/somewhere; tar xvf -), Очень полезно не ждать, пока будет записан центральный индекс (например, в zip-файле). - user239558


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

Мне нужно распаковать файл, доступный в Интернете. Либо с zip или rar Форматы, которые я должен сначала загрузить, а затем распаковать. С tar.{gz,bz2,xz} Я могу загружать и распаковывать один и тот же шаг, без необходимости архивирования сжатого архива на диске:

curl -s http://example.com/some_compressed_file.tar.gz | tar zx

Это оставит только несжатые файлы на моем диске и ускорит весь процесс, потому что я не откладываю время, сначала загружая весь файл, и после завершения загрузки я распаковываю его. Вместо этого я раскалываю его во время загрузки. Вы не можете сделать это с помощью zip или rar файлы.


24



Я не знаю о rar (это страшная программа, которая, похоже, стала популярной среди пиратов, которая способна разделить ее на несколько файлов меньшего размера), но вы можете легко обновить zip. Страница руководства даже упоминает об этом. Это также имеет то преимущество, что можно эффективно извлекать или обновлять файлы из середины большого архива, хотя дег имеет тенденцию к чуть лучшему сжатию. Сжатие или случайный доступ - это компромисс. - psusi
@psusi неверно. Вы можете делать хаки как это, но то, что он делает, загружает весь файл в память, а затем распаковывает его, а не распаковывает при загрузке. А также funzip просто извлекает первый файл в zipfile, не все. - Carlos Campderrós
@Stu просто для того, чтобы уточнить, не проблема, просто оптимизирует ваше время (я не забочусь о пространстве, если это то, что вы думали) - Carlos Campderrós
Обе стороны работают: вы можете смолоть с одной стороны и разворачиваться в другой: tar zc /some/folder | ssh user@host "cd /other/folder && tar zx" - Carlos Campderrós
@psusi, как я помню из старых времен при использовании pkzip для хранения файлов на нескольких дискетах, каталог zip store в конце архива. Он всегда запрашивает последнюю дискету для начала извлечения или каталога показа. Так en.wikipedia.org/wiki/File:ZIP-64_Internal_Layout.svg - Mikhail Moskalev


Есть несколько причин придерживаться (GNU) Tar.

Это:

  • Лицензия GPL
  • хорошо в смысле философии Unix
    • единый инструмент, способный выполнять несколько задач
  • хорошо документированы и имеют много доверенных функций
  • совместим с несколькими алгоритмами сжатия
  • просты в использовании, и у людей сложились привычки с ним
  • широкодоступный
  • Я чувствую себя теплым и нечетким внутрь при использовании программного обеспечения, запускаемого RMS (без учета Emacs)

Если ваша конкретная говядина должна «декомпрессировать» архив, прежде чем вы сможете прочитать содержимое, то вы, вероятно, правы. WinRAR а также 7-Zip сделайте это автоматически. Тем не менее, есть простые способы решения этой проблемы, такие как документирование содержимого архива в несжатой форме.


13



Это бесплатное программное обеспечение - так много из них. Хорошо, что он делает. Вряд ли по сравнению с другими вещами. Он хорошо документирован и имеет множество функций. Особенности едва ли используются и отвратительно просты в использовании. Он поддерживает несколько алгоритмов сжатия - не так много, как некоторые другие - Griffin
боги Unix создали его, поэтому мы должны использовать его! - SnakeDoc
Tar также сохраняет разрешения UNIX изначально и хорошо известен и проверен. Существует несколько примеров, когда может понадобиться объединить кучу файлов в один файл или поток, но не обязательно сжать его. - LawrenceC
К счастью, tar не ограничивается только версиями GNU. Хотя GNU tar, безусловно, является хорошим компонентом программного обеспечения, интерфейсы libarchive +, связанные с ними, намного быстрее и проще внедряются в другие программные проекты. Вы можете сделать аргумент для tar, не превращая его в битву лицензирования. - Lucas Holt
Я не саркастичен. Мне нравится RMS и то, как он верит. - Ярослав Рахматуллин


Форматы файлов, такие как .zip требовать программное обеспечение, чтобы сначала прочитать конец файла, прочитать каталог имен файлов. И наоборот, tar хранит эту информацию в сжатом потоке.

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

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

Оба имеют свои возможности, в зависимости от того, что вы делаете.


11



Нет, вы можете читать и писать zip-файлы в виде потока из и в канал. - Mark Adler
Это может быть специфично для реализации, но, конечно же, не поддерживается исходным pkzip. - xorsyst
Да, программное обеспечение должно быть написано для его поддержки. Формат zip поддерживает его полностью, с дескрипторами данных, которые могут следовать сжатым данным с длиной и CRC. - Mark Adler
@MarkAdler, какое программное обеспечение? Infozip не поддерживает распаковку с трубы. - psusi
zlib.net/sunzip033.c.gz - Mark Adler