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


209

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

Вопросов:

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

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

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


33
Я не согласен, что это "пустая трата времени". Если вы имеете в виду производительность, для tar нет никакого фактического снижения производительности, так как формат очень эффективен. Если ты имеешь в виду, что это тратит tar xvzf7z -x
впустую

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

10
@MarcusJ: вы думаете, 7z каким-то волшебным образом знает, где каждый файл начинается в архиве? Кроме того, обычные алгоритмы сжатия (gzip, bzip2) работают с потоковым контентом: нет необходимости завершать 100% первый этап до следующего.
unperson325680

11
Также @MarcusJ вы, кажется, путаете две разные вещи: когда вы это делаете tar xvzf, несжатые данные не записываются на жесткий диск в .tarформате! Вы правы в том, что если вы запустите gunzip blah.tar.gzи затем tar xf blah.tar, он дважды запишет данные на диск (один раз как .tar, а затем как файлы в файловой системе), но на самом деле никто так не делает. В tar xzfиспользует UNIX труб ( в основном копии памяти) для передачи несжатых данных gzip(или любой другой компрессор) , чтобы tar, таким образом , данные не записываются на диск в .tarформате.
allquixotic

14
Одно я знаю, что tar(особенно сжатый) ведет себя ужасно, когда дело доходит до повреждения данных. Небольшая избыточность / восстановление данных, добавленных современными форматами, стоит золота
КПП,

Ответы:


178

Часть 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декомпрессор в памяти.
  • Когда буфер памяти заполняется данными из «блоков», ЗАПИШИТЕ несжатые данные в файл 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 является идентичным диску I / O в исполнении, скажем, Zipили 7-Zip программ, корректировки любых различий в степени сжатия.

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

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

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

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

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

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

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


Престижность за отличный ответ со всем содержимым, разделенным под тремя различными заголовками.
JFW

2
«Часть 3: Совместимость», похоже, была скопирована из ответа @ Kruug.
titaniumdecoy

23
@titaniumdecoy Вы заметили, что именно allquixotic первоначально написал эту часть и отредактировал ее в ответ Крууга?
Slhck

2
Спасибо за указание на это, я не заметил. Однако мне кажется немного глупым иметь одинаковый блок текста в двух разных ответах на этой странице.
titaniumdecoy

1
Это объясняет, почему tarвписывается в экосистему архивирования (т. Е. Объединяет файлы вместе, обеспечивая повышение производительности и некоторые другие преимущества, такие как сохранение разрешений), но не объясняет, почему современные альтернативы, такие как darне используются на месте. Другими словами, этот ответ оправдывает использование файловых агрегаторов, но не самого tarпрограммного обеспечения.
Габорист

101

На это ответили на переполнение стека .

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 использовался чаще по той же причине, по которой музыка не продается в онлайн-магазинах загрузки в совершенно новых форматах, таких как Opus , или видео в WebM . Совместимость с людьми, использующими древние или очень простые системы, важна.


7
Привет @Kruug, я отредактировал твой пост только для того, чтобы дать практическое представление о том, почему люди все еще предпочитают использовать эти форматы, когда у них есть выбор использовать что-то еще. Я не изменил текст, который у вас уже был. Это просто для того, чтобы получить полное представление о том, что представляется каноническим ответом на этот вопрос. Не стесняйтесь редактировать мои изменения, если хотите :)
allquixotic

5
@ все-таки кто-нибудь? Отредактируйте редактирование и отредактируйте так, чтобы вы могли редактировать редактирование ...
SnakeDoc

21
Этот ответ определенно относится к случаю «меня иногда сдувают незаслуженные голоса». Он не затрагивает основную проблему вопроса, связанную с перечислением содержимого сжатого tar, и даже не является оригинальным ответом!
Ярослав Рахматуллин

5
-1 за великую справедливость. это должен был быть комментарий.
Вим

6
Я не покупаю аргумент наследства / наименьшего общего знаменателя; Я помню, что в новых системах (sun) часто приходилось загружать gzip / gunzip (из sunfreeware) только для того, чтобы установить другое упакованное программное обеспечение tar.gz (плюс gnu tar, так как tar высасывал tar). Для унаследованного / более низкого общего знаменателя у вас было tar.Z(сжимать / распаковывать). Развитие утилит было постоянным потоком (без каламбура) изменений и улучшений: Z => zip => gz => bz2 => 7z => xz (или любой другой порядок, который вы предпочитаете). Что касается роли tar, некоторые используют только un / compress и все еще требуют, чтобы tar связывал файловые иерархии.
Майкл

63

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

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

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

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

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

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

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

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

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

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

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

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

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


12
Вам не нужен GNU tar для использования произвольного компрессора: просто скажите tar написать архив для stdout f -и передать его в компрессор.
Илмари Каронен,

3
"Вы хотите несжатые данные (почему?)?" Я tarочень часто копирую дерево файловой системы из одного места в другое и сохраняю разрешения и т. Д., И сжатие в этом случае просто требует дополнительных циклов ЦП. Например tar cf - * | tar xf - -C /somewhere.
Стив

1
Кроме того, вы хотели бы получить файл .tar, когда целевая файловая система выполняет дедупликацию. Создание сжатых архивов в файловой системе, которая выполняет дедупликацию, значительно снизит коэффициент дедупликации. Пример: однажды мы удалили файл tar.gz стоимостью $ 10 000,00; это значит, что он занимал 10 тыс. долларов, потому что кто-то использовал сжатие.
Аарон

@Steve ЦП может быть дешевле, чем дисковый ввод-вывод для таких алгоритмов, как LZ4 или LZO. Вот почему они используются в zram и прозрачных файловых системах сжатия, таких как NTFS, ZFS, Btrfs ... поэтому иногда это происходит на самом деле быстрее, чем сжатие, поскольку объем дискового ввода-вывода значительно сокращается
phuclv

30

Вы путаете два разных процесса архивирования и сжатия .

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

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

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

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

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

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

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

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


1
Но если вы собираетесь архивировать, почему бы не сжать? Хорошо, да, это может сэкономить время для файлов, которые нелегко сжимаются, но тогда архиваторы, вероятно, должны знать, что музыка, например, не очень сжимаема, за исключением заголовков.
MarcusJ

2
Возможно, вам это не нужно, или ваш контент может не сжиматься.
Хастуркун

4
По соображениям производительности часто проще использовать несжатое агрегирование файлов при отправке данных по сетевым каналам с очень высокой пропускной способностью, которые превышают скорость, с которой компрессор может сжимать данные. Это достижимо, например, с помощью Gigabit Ethernet; только несколько хорошо спроектированных алгоритмов сжатия, которые также имеют очень низкую степень сжатия, могут быстро сжимать данные даже на большом настольном процессоре. На встроенном устройстве у вас еще меньше процессорного времени для работы.
allquixotic

3
это не только ускоряет работу, но и позволяет сохранить владение файлами, временные метки и атрибуты (если это позволяют привилегии пользователя)
Andre Holzner,

3
@ AndreHolzner Верно. Я часто делаю tar cf - . | (cd ~/somewhere; tar xvf -). Действительно полезно не ждать, пока будет записан центральный индекс (как, например, в zip-файле).
user239558

24

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

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

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

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


2
Я не знаю насчет rar (это ужасная программа, которая, похоже, стала популярной среди пиратов из-за ее способности разбиваться на несколько более мелких файлов), но вы можете передавать потоковые zip-файлы просто отлично. На странице руководства даже упоминается об этом. Он также имеет то преимущество, что может эффективно извлекать или обновлять файлы из середины большого архива, хотя tar имеет тенденцию к несколько лучшему сжатию. Сжатие против произвольного доступа является компромиссом.
psusi

3
@psusi неверно. Вы можете сделать хак , как это , но то , что он делает это скачать все файлы в памяти , а затем распаковать его, вместо того , чтобы распаковка во время загрузки. И funzipпросто извлекает первый файл в zipfile, а не все.
Карлос Кампдеррос

2
@ Стю, просто чтобы прояснить, это не проблема, просто оптимизировать ваше время (мне все равно, будет ли это то, о чем вы думали)
Карлос Кампдеррос

1
Обе стороны работают: вы можете смолить с одной стороны и распаковать с другой, тоже:tar zc /some/folder | ssh user@host "cd /other/folder && tar zx"
Карлос Кампдеррос

1
@psusi, как я помню со старых времен, когда pkzip использовался для хранения файлов на нескольких дискетах, каталог zip store в конце архива. Он всегда запрашивает последнюю дискету для начала распаковки или показа каталога. Так en.wikipedia.org/wiki/File:ZIP-64_Internal_Layout.svg
Михаил Москалев

13

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

Это:

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

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


1
Это бесплатное программное обеспечение. Их так много. Он хорош в том, что делает. Вряд ли по сравнению с другими вещами. Он хорошо документирован и имеет множество функций. Функции практически не используются и непривлекательно просты в использовании. Он поддерживает несколько алгоритмов сжатия - не так много, как некоторые другие
Griffin

4
Боги Unix создали это - поэтому мы должны использовать это!
SnakeDoc

28
Tar также хранит разрешения UNIX изначально и очень хорошо известен и проверен. Существует более чем несколько случаев, когда может понадобиться собрать кучу файлов в один файл или поток, но не обязательно сжать их.
LawrenceC

3
К счастью, tar не ограничивается только версиями GNU. Хотя GNU tar, безусловно, является хорошей частью программного обеспечения, связанные с libarchive + внешние интерфейсы намного быстрее и их легко внедрить в другие программные проекты. Вы можете привести аргумент в пользу tar, не превращая его в борьбу за лицензирование.
Лукас Холт,

1
Я не саркастичный. Мне нравится RMS и то, как он выражает свои убеждения.
Ярослав Рахматуллин

11

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

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

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

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


5
Нет, вы можете читать и записывать zip-файлы в виде потока из и в канал.
Марк Адлер

Тогда это может зависеть от реализации, это, конечно, не поддерживается оригинальным pkzip.
xorsyst

1
Да, программное обеспечение должно быть написано для его поддержки. Формат zip полностью поддерживает это, с дескрипторами данных, которые могут следовать за сжатыми данными с длинами и CRC.
Марк Адлер

@MarkAdler, какое программное обеспечение? Infozip не поддерживает распаковку из трубы.
Псуси


11

Кажется, есть некоторое нежелание отвечать на все ваши вопросы напрямую, с очевидным предпочтением использовать ваш вопрос в качестве отправной точки для понтификации. Так что я сделаю это.

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

Нет. Фактически, поскольку tar и gzip обычно являются двумя процессами, вы даже получаете преимущество в скорости многоядерности, которое не обеспечивает такой архиватор, как zip-файл Info-ZIP. С точки зрения степени сжатия tar + gzip обычно работает заметно лучше, чем zip с deflate, так как первый может извлечь выгоду из корреляции между файлами, тогда как последний сжимает файлы отдельно. Это преимущество сжатия приводит к выигрышу в скорости при извлечении, поскольку более сжатый архив распаковывается за меньшее время.

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

Да, tar был разработан для Unix и развивался на протяжении многих лет, чтобы иметь возможность точно записывать и восстанавливать каждую странную и непонятную часть файловых систем Unix, даже более изящную и изворотливую файловую систему Unix Mac OS X. zip может сохранять большую часть метаданных, таких как разрешения, время, владельцы, группы и символические ссылки, но все же не все. Например, ни zip, ни 7z не могут распознать или использовать разреженные файлы, а также не знают и не могут восстановить жесткие ссылки.

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

Здесь есть много других хороших ответов. Лучше всего то, что он просто работает , и вы можете постоянно обновлять его до лучших форматов сжатия (например, xz) и при этом использовать тот же формат tar и даже одну и ту же утилиту скомпилированного tar. Если вы просто хотите упаковать кучу вещей, а затем распаковать все это на другом конце, то нет особых оснований использовать что-либо, кроме одного из самых старых, самых полных и наиболее отлаженных кусков программного обеспечения.

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


CW расшифровывается как Community Wiki . Смотрите также Что такое "Community Wiki" сообщения? ,
ctype.h

Я предполагаю, что это CW, потому что у вопроса есть больше чем 15 ответов. Когда вы разместили этот ответ, потому что он 15-й, вопрос и все ответы были помечены CW.
ctype.h

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

Хм, хорошо Все, что вы хотели бы думать, хорошо. Ваш ответ или любой другой ответ, по-видимому, касаются вопроса о том, существует ли снижение производительности. Ваш ответ не касается заметной разницы в сжатии, в отличие от других. Так как ваш фактически не касается производительности (ваш раздел о производительности на самом деле касается рабочего процесса, ничего о производительности), ни один другой ответ не отвечает на все вопросы в одном месте. Интересно, что вы написали вопрос о снижении производительности, но не ответили на него! Пойди разберись.
Марк Адлер

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

11

Представление

Большим отличием является порядок, в котором сжатие и архивирование выполняются в tarархивах. Затем можно при желании отправить архив в компрессор, zipсоздать архив и сжать данные файла в виде фрагментов по 32 КБ по мере их вставки в архив. Разбивая данные файла на маленькие порции и сжимая их по отдельности, это позволяет извлекать определенные файлы или части файлов без необходимости распаковывать все в архиве перед ним. Это также не позволяет компрессору создавать очень большой словарь перед его перезапуском. Это означает, что сжатие будет идти быстрее, но не даст такого хорошего соотношения, как сжатие всего с большим размером словаря.

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

популярность

Есть много других форматов, которые имеют ряд преимуществ перед tar. 7-Zip не хранит права доступа к файлам Unix, но darделает и zipможет, и все три хранят индекс, который позволяет быстро просматривать, извлекать подмножество файлов и обновлять файлы в архиве. Они также могут использовать многоядерные процессоры для сжатия.

Причиной, по которой все по-прежнему пользуются, tarявляется та же причина, по которой все по-прежнему используют Windows и Flash : людям не нравятся перемены. Без веской причины для перемен люди просто придерживаются того, что знают. darне дает достаточных преимуществ, чтобы оправдать публикацию файлов в формате, когда большинство людей уже tarустановили, и очень немногие знают об этом dar, поэтому простая инерция держит нас на старом стандарте.


2
zip может хранить и восстанавливать разрешения Unix. Это делают утилиты zip и unzip из InfoZIP, которые обычно распространяются вместе с системой Unix.
Марк Адлер

3
zip не сжимает файл кусками 32K. Вы путаете размер скользящего окна 32K с тем, как выполняется сжатие.
Марк Адлер

1
У gzip -9 нет словаря 900 кБ. Все уровни gzip используют словарь 32K. Вы можете думать о bzip2.
Марк Адлер

Столько дезинформации в одном ответе.
Марк Адлер

1
Вам необходимо либо внести исправления в свой ответ, либо удалить свой ответ.
Марк Адлер

7

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

Это включает в себя все эти функции, которые отсутствуют в одном или нескольких конкурирующих инструментах:

  • владение файлами
  • права доступа к файлу
  • менее распространенные права доступа к файлу (например, setuid, sticky bit)
  • символические ссылки
  • жесткие ссылки
  • записи устройства (т.е. символьные и блочные устройства)
  • разреженные файлы
  • Записи ACL ( не поддерживаются всеми версиями )
  • расширенные / пользовательские атрибуты ( не поддерживаются всеми версиями )
  • Ярлыки SElinux ( поддерживаются не всеми версиями )

Он также имеет --one-file-systemопцию, которая чрезвычайно полезна при создании резервных копий.

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


Этот ответ является единственным, который имеет смысл. Спасибо за публикацию.
Габорист

5

Сегодня у нас много сжатых файлов: MP3, JPG, видео, файлы tar.gz, JAR-пакеты, RPM, DEB и так далее. Если вам нужно объединить их в один файл для передачи, тогда полезно иметь утилиту 'tar', которая объединяет только файлы, не пытаясь сжать их.

Мало того, что он тратит время и электричество, пытаясь сжать сжатый файл, но это часто приводит к тому, что файл больше, чем оригинал.

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

Я считаю, что tar 'очень актуален сегодня, и я предпочитаю использовать ZIP. В нашем офисе у каждого с Windows установлен 7-zip, поэтому для нас tar-файлы полностью кроссплатформенны.


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

Забавное исключение состоит в том, что исходный код gzip доступен в виде простого tar по очевидным причинам.
Марк Адлер

4

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

Насколько я понимаю, существуют исторические причины (связанные с историей ОС, «защитой» патентов, способностью поставщика программного обеспечения продавать инструменты и т. Д.).

Теперь, как указывал другой ответ, даже сейчас tar явно не уступает другим решениям и может быть лучше по другим аспектам, таким как способность работать с потоками или управление правами Unix.

Если вы прочитаете статью про tar из Википедии, вы увидите еще один интересный факт. В статье признаются некоторые недостатки tar ... но не предлагается использовать zip (действительно, формат zip не устраняет эти недостатки), но DAR.

Я закончу с личным контактом. Несколько раз назад мне пришлось создать формат файла для хранения зашифрованных данных. Использовать tar в качестве основы было удобно (другие сделали такой же выбор, например, tar является внутренним форматом агрегации для пакетов .deb). Для меня было очевидно, что пытаться сжимать данные после шифрования совершенно бесполезно, я должен был выполнить сжатие как независимый шаг перед шифрованием, и я не был готов использовать zip-шифрование (я хотел шифрование с двумя ключами с открытым и закрытым ключами) , Используя смолу это работало как ветер.


3

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


3

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-with-tool-as-switch.

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


3

Много хороших ответов, но все они игнорируют важный факт. Tar имеет устоявшуюся экосистему пользователей и разработчиков в Unix-подобном мире. Это продолжает работать так же, как ZIP продолжает свою экосистему DOS / Windows. Наличие такой экосистемы - это то, что поддерживает технологию, а не ее технические преимущества.


Действительно хороший комментарий, я даже не думал об этом, и это действительно хорошее замечание.
MarcusJ

3

Причина - «закрепление в культуре». Есть множество таких людей, как я, чьи глаза закрываются, если их просят обработать что-либо, кроме сжатого tar-архива или случайного ZIP-файла, если это происходит из мира Windows.

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

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

Реальный вопрос заключается в следующем: почему некоторые люди так одержимы экономией еще одного байта пространства, что просят всех остальных тратить время на установку какой-то экзотической утилиты и обучение ее использованию? И затем есть глупое использование экзотических форматов сжатия и архивирования. Действительно ли видео H.264 со звуком AAC необходимо поместить в RAR с несколькими частями?

Формат tar может быть старым, но в нем хранится все, что имеет отношение: содержимое файла, пути, временные метки, разрешения и владельцы. Он хранит не только символические ссылки, но и сохраняет жесткую структуру ссылок. Он также хранит специальные файлы, поэтому архив на магнитной ленте может использоваться для таких вещей, как миниатюрный /devкаталог, который используется во время начальной загрузки. Вы можете объединить дистрибутив Linux, формат двоичного пакета которого состоит из ничего, кроме тарболов, которые не сжаты относительно корня файловой системы.


«Так одержим» ... представьте, что вы оказались в зоне боевых действий с одним закаленным ноутбуком, а жесткий диск 20G почти полного размера, возможно, оставлен концерт, и, услышав выстрелы издалека, вы действительно хотели бы просмотреть руководство по 100 МБ .PDF, которое показывает, как отремонтировать джип, но файл находится в 2-гигабайтном файле .tgz. Ноутбук работает под управлением странной проприетарной ОС с закрытым исходным кодом, и у вас нет прав root для удаления системных файлов, не то чтобы было очевидно, как удалить 4G +, не нарушая работу деархивера или программы просмотра PDF. Если бы вы могли просто извлечь этот файл
размером

2

Непосредственно отвечая на конкретные вопросы, которые вы задали:

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

В некоторых случаях наблюдается конкретное улучшение производительности, tarособенно при использовании встроенной библиотеки сжатия ( командные строки tar xvzfили tar xvjfстиль, где используется библиотека сжатия, а не второй процесс). Это происходит от двух основных причин:

  • при обработке большого количества относительно небольших файлов, особенно тех, которые обычно используются при распространении программного обеспечения, существует высокая избыточность. Сжатие во многих файлах приводит к более высокому общему сжатию, чем сжатие отдельных файлов. И «словарь» вычисляется один раз для каждого блока ввода, а не для каждого файла.

  • tarпонимает файловые системы. Он предназначен для сохранения и восстановления работающей / работоспособной операционной системы. Он глубоко понимает, что именно важно в файловой системе UNIX, и точно фиксирует и восстанавливает это. Другие инструменты ... не всегда, особенно семейство zip, которое лучше предназначено для совместного использования файлов в семействе ОС, где важен документ, а не точная копия, чувствительная к ОС.

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

Разреженная обработка файлов. Некоторые из прямых библиотек баз данных полагаются на разреженные файлы - файлы, в которых данные номинально являются ГБ, но фактических записанных и сохраненных данных намного, намного меньше, и фактически используется только несколько блоков диска. Если вы используете незнакомый инструмент, то при декомпрессии вы получите огромное потребление дисковых блоков, все с нулями. Превратить это обратно в редкий файл ... больно. Если у вас даже есть комната, чтобы сделать это. Вам нужен инструмент, который понимает, что такое разреженный файл, и уважает его.

Метаданные. Unix развил некоторые странные вещи за эти годы. 14-символьные имена файлов, длинные имена файлов, ссылки sym-ссылок, липкие биты, биты суперпользователя, унаследованные права доступа к группе и т. Д. Tar понимает и воспроизводит их. Инструменты для обмена файлами ... не так много. Многие люди используют ссылки не так, как могли бы ... Если вы когда-либо работали с программным обеспечением, которое использует ссылки, а затем использовали неосведомленный инструмент для резервного копирования и восстановления, теперь у вас есть много независимых файлы, а не один файл со многими именами. Боль. Ваше программное обеспечение дает сбой, и у вас есть раздувание диска.

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

tarработает. Это делает работу, для которой это разработано, хорошо. Там были другие рекламируемые замены ( cpio,pax и т.д., и т.д.). Но tar установлен практически на все, и библиотеки сжатия, которые он использует, также очень распространены по другим причинам. Ничего другого не произошло, что существенно превосходит то, что делает смола. Без явных преимуществ, большого количества встроенного использования и знаний в сообществе замены не будет. Тар много лет использовался. Если мы получим серьезные изменения в том, как мы думаем о файловых системах, или нетекстовые файлы каким-то образом станут способом передачи кода (в настоящее время не могу себе представить, как, но проигнорируйте это ...), тогда вы можете найти другой инструмент. Но тогда это будет не тот тип ОС, который мы сейчас используем. Это было бы по-другому, организовано по-другому, и для этого потребовались бы свои собственные инструменты.

Я думаю, что самый важный вопрос, который вы не задавали, заключается в том, для каких рабочих мест «тар» не подходит.

tarс компрессией хрупкий. Вам нужен весь архив, бит за битой. По моему опыту, это не устойчиво. У меня были ошибки в одном бите, в результате чего архивы из нескольких частей стали непригодными для использования. Он не вводит избыточность для защиты от ошибок (что может решить один из заданных вами вопросов о сжатии данных). Если существует вероятность повреждения данных, вам нужна проверка ошибок с избыточностью, чтобы вы могли восстановить данные. По определению это означает, что вы не максимально сжаты. Вы не можете иметь оба бита данных, которые требуются и несут максимальное значение (максимальное сжатие), и каждый бит данных может быть потерян и восстановлен (избыточность и исправление ошибок). Итак ... какова цель вашего архива?tarотлично подходит для сред с высокой надежностью и когда архив может быть снова воспроизведен из исходного кода. ИМХ, на самом деле хуже оригинальной вещи, которую предлагают ее названия - архивирование на магнитной ленте. Однобитовые ошибки на ленте (или, что еще хуже, однобитовые ошибки в головке ленты, когда вы теряете один бит на каждый байт всей ленты или архива), приводят к невозможности использования данных. При достаточной избыточности, обнаружении и исправлении ошибок вы можете пережить любую из этих проблем.

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

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


-3

TAR - это Ленточный Архив. Это было вокруг в течение десятилетий, и это широко используется и поддерживается. Это зрелый продукт, который отвечает как текущим, так и устаревшим потребностям.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.