Почему люди используют тарболы?


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

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

16 81

16 ответов:

bzip и gzip работа с отдельными файлами, а не с группами файлов. Просто старый zippkzip) работать с группами файлов и иметь понятие архива.

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

странно, что никто больше не упомянул, что современные версии 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 сжатые файлы, ГНУ 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 счеты; он может сделать in-situ копирование из одной иерархии каталогов в другую без промежуточного хранения:

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

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

важное различие в природе двух видов архивов.

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

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

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

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

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

еще одна причина, по которой это так распространено, заключается в том, что tar и gzip находятся почти на всей *Nix install base. Я считаю, что это, вероятно, самая большая причина. Именно поэтому 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).

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

из Википедии Tar_ (file_format)

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

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

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

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

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

деготь является Unix, а Unix-это деготь

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

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

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

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

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

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

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

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

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

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

    нет необходимости помнить, что разрешения восстановить, используя инструмент, вы должны пройти функцию --i-hope-you-rember-this-one и с помощью инструмента B вы должны использовать --this-time-its-another-one при использовании инструмента с `--надеюсь-вы-не-попробовать-с-инструмент-как-переключателя.

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

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

ZIP сам по себе, и RAR также являются комбинацией двух процессов.

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

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

Tar = группирует файлы в 1 файл

GZip = Zip файл

они разделили процесс на 2. Вот и все.

в среде Windows, что вы могли бы быть более использованы для использования WinZip или WinRar, которые делают Zip. Процесс Zip этого программного обеспечения группировать файл и молнии, но вы просто не видите, что процесс.

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

и проще в использовании и более портативный, чем молнии ИМХО.

в мои дни Altos-XENIX (1982) мы начали использовать tar (tape archiver) для извлечения файлов с 5 1/4 дискет или потоковой ленты, а также копирования на эти носители. Это функциональность очень похожа на резервное копирование.EXE и восстановление.EXE-команды в DOS 5.0 и 6.22 в качестве дополнений, что позволяет охватывать несколько носителей, если он не может поместиться только в одном. Недостатком было то, что если у одного из нескольких средств массовой информации были проблемы, все это было бесполезно. tar и dd происходят из системы UNIX III и имеют осталась стандартная утилита выпуска с UNIX-подобной ОС ' вероятно, по причинам обратной совместимости.

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

позже появились программы сжатия, и *nix все еще имел только один метод создания одного файла, который содержал несколько файлов.

Я считаю, что это просто инерция, которая продолжили с дегтем.тенденция ГЗ. Pkzip начал с сжатия и архивирования одним махом,но тогда в системах DOS обычно не было ленточных накопителей!

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

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

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

в мире Windows программы обычно устанавливаются с setup.exe или install.exe которые работают все виды волшебства в реестре, создавая каталоги и устанавливая .dll (динамическая библиотека) файлов.

в Linux, Ubuntu в частности, из моего собственного опыта, менеджеры пакетов позаботьтесь о принятии приложения и его установке большую часть времени. В Ubuntu разработчик создает пакет, заканчивающийся на .deb (Debian, на котором основан Ubuntu). Основной синтаксис для установки .deb - это:

sudo apt install <package_name>

хотя это относительно прямо вперед для пользователя, это много работы для разработчиков, чтобы создать .deb пакет и ассоциированный PPA.

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

  • скачать тарбол (обычно заканчивается на .tar.gz).
  • распаковать исходный код в каталог.
  • скомпилируйте исходный код (неслыханный в Windows for Profit world).
  • надеюсь, запишите, что они сделали в случае, если они должны повторить в будущем, потому что нет apt база данных (думаю, список установленных программ Windows), которые могут быть сохранены вверх.

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