Являясь главным разработчиком 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 популярен в основном по историческим причинам. Доступно несколько альтернатив. Некоторые из них находятся примерно столько же, сколько смола, но не могут превзойти популярность смолы по нескольким причинам.
Основным преимуществом (и недостатком) tar является то, что он не имеет ни заголовка файла, ни центрального каталога содержимого. В течение многих лет он никогда не страдал от ограничений размера файла (до этого десятилетия, когда ограничение на 8 Гб на файлы внутри архива стало проблемой, решена много лет назад).
Явно сторонник tar.gz (или ar.Z, если на то пошло), который заключается в том, что вам нужно распаковать весь архив для извлечения отдельных файлов и содержимого содержимого архива, никогда не причинять людям вреда, чтобы сделать их дефектными из 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
). apt
(думаю, список программ, установленных Windows), которые можно скопировать. Поскольку другой ответ уже указывает на другой вопрос, который вы задали, вы можете создать архив и сжать данные одновременно. НЕ требуется двухпроходный процесс.