Intereting Posts

Почему люди используют tarballs?

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

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

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

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

 tar -czf output.tar.gz directory1 ... tar -cjf output.tar.bz2 directory2 ... 

Вы также можете использовать выбранный вами компрессор, если он поддерживает опции « -c » (для стандартных или автономных) и « -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 забивает; он может делать копию in-situ из одной иерархии каталогов в другую без промежуточного хранилища:

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

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

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

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

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

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

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

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

Еще одна причина, по которой он так распространен, заключается в том, что 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).

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

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

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

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

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

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

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

tar – UNIX, поскольку UNIX – это tar

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

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

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

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

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

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

    Как только вы получите новый «гипер-zip-utra» или инструмент сжатия whater, вы уже готовы использовать его, обнимая вашего нового слугу со всей силой tar .

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

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

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

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

    В то время как при использовании инструмента 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.

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

GZip = Закрепить файл

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

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

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

И проще в использовании и более портативных, чем молнии IMHO.

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

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

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

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

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

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

Как разработчик Windows, понятно, как tarball кажутся странными. Слово tar означает «Архив ленты». Подумайте о магнитофонах с катушкой.

В Windows мире программы обычно устанавливаются с помощью setup.exe или install.exe которые работают со всеми виджетами в реестре, создавая каталоги и устанавливая .dll (Dynamic Link Library).

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

 sudo apt install  

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

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

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

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