Почему люди используют архивы?
Вопрос
Как разработчик преимущественно Windows, я, возможно, упускаю что-то культурное в сообществе Linux, но меня это всегда смущало.
При загрузке чего-либо файлы сначала помещаются в .tar
архивируй тогда на молнии.Почему двухэтапный процесс?Не застегивание молнии добиться группировки файлов?Есть ли еще какое-то преимущество, о котором я не знаю?
Решение
bzip
и gzip
работают с отдельными файлами, а не с группами файлов. Обычные старые zip
(и pkzip
) работают с группами файлов и имеют концепцию встроенного архива.
Философия * nix - это один из небольших инструментов, которые хорошо выполняют определенные задачи и могут быть объединены в цепочку. Вот почему здесь есть два инструмента, которые имеют конкретные задачи, и они разработаны, чтобы хорошо сочетаться друг с другом. Это также означает, что вы можете использовать tar для группировки файлов, а затем у вас есть выбор инструмента сжатия ( bzip
, gzip
и т. Д.).
Другие советы
Важное различие заключается в характере двух видов архивов.
TAR-файлы - это не более, чем конкатенация содержимого файла с некоторыми заголовками, в то время как gzip и bzip2 являются потоковыми компрессорами, которые в tar-архивах применяются ко всей конкатенации.
ZIP-файлы представляют собой объединение индивидуально сжатых файлов с некоторыми заголовками. На самом деле, алгоритм DEFLATE используется как zip, так и gzip, и с соответствующей двоичной настройкой вы можете взять полезную нагрузку потока gzip и поместить его в zip-файл с соответствующими заголовками и словарными записями.
Это означает, что два разных типа архива имеют разные компромиссы. Для больших наборов небольших файлов TAR, за которым следует потоковый компрессор, обычно приводит к более высокой степени сжатия, чем ZIP, потому что потоковый компрессор будет иметь больше данных для построения своих словарных частот и, таким образом, сможет вытеснять больше избыточной информации. С другой стороны, ошибка (сохранение длины файла) в файле ZIP повредит только те файлы, сжатые данные которых были затронуты. Обычно потоковые компрессоры не могут эффективно восстанавливаться после ошибок в середине потока. Таким образом, ZIP-файлы более устойчивы к повреждениям, так как часть архива будет по-прежнему доступна.
Странно, что никто другой не упомянул, что современные версии 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
, 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
забивает; он может сделать копию на месте из одной иерархии каталогов в другую без какого-либо промежуточного хранилища:
cd /old/location; find . -depth -print | cpio -pvdumB /new/place
Кстати, параметр -depth
в find
важен в этом контексте - он копирует содержимое каталогов перед настройкой разрешений для самих каталогов. Когда я проверил команду перед вводом дополнения к этому ответу, я скопировал некоторые каталоги только для чтения (разрешение 555); когда я решил удалить копию, мне пришлось ослабить права доступа к каталогам, прежде чем « rm -fr / new / place
» мог завершиться. Без опции -depth
команда cpio
не была бы выполнена. Я вспомнил об этом только тогда, когда пошел на уборку - цитируемая формула является для меня автоматической (в основном благодаря многим повторениям в течение многих лет).
] Р>
Самое смешное, что вы можете получить поведение, не ожидаемое создателями tar
и gzip
. Например, вы можете не только распаковать tar-файл, вы также можете распаковать сжатые файлы tar, чтобы создать files.gz.tar
(технически это было бы ближе к тому, что pkzip
работает). Или вы можете поместить в конвейер другую программу, например, некоторую криптографию, и вы можете выбрать произвольный порядок заимствования, сжатия и шифрования. Кто бы ни написал криптографическую программу, он не должен иметь ни малейшего представления о том, как будет использоваться его программа, все, что ему нужно, - это читать со стандартного ввода и записывать в стандартный вывод.
В мире 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).
Я думаю, что вы искали больше исторического контекста для этого. Оригинальный почтовый индекс был для одного файла. Tar используется для размещения нескольких файлов в одном файле. Поэтому tarring и zipping - двухэтапный процесс. Почему это все еще так доминирует сегодня, никто не знает.
Из википедии для Tar_ (file_format)
В вычислениях tar (полученный из архива на магнитной ленте) - это и формат файла (в виде типа битового потока архива), и название программы, используемой для обработки таких файлов. Формат был стандартизирован POSIX.1-1988 и позже POSIX.1-2001. Изначально разработанный как необработанный формат, используемый для резервного копирования на ленту и других устройств с последовательным доступом для целей резервного копирования, теперь он обычно используется для сопоставления коллекций файлов в один более крупный файл для распространения или архивирования при сохранении информации о файловой системе, такой как пользователь и группа. разрешения, даты и структуры каталогов.
tar — это UNIX, поскольку UNIX — это tar
На мой взгляд причина все еще с использованием tar
Сегодняшний день заключается в том, что это один из (вероятно, редких) случаев, когда подход UNIX с самого начала оказался совершенно правильным.
Рассмотрев этапы создания архивов, я надеюсь, вы согласитесь, что здесь происходит разделение различных задач следующим образом: Философия UNIX в лучшем виде:
один инструмент (
tar
чтобы дать этому имя здесь) специализируется на преобразовании любой выбор файлов, каталогов и символических ссылок, включая все соответствующие метаданные, такие как метки времени, владельцы и разрешения, в один поток байтов.и просто еще один сколь угодно взаимозаменяемый инструмент(
gzip
bz2
xz
и это лишь несколько вариантов), который преобразует любой входной поток байтов в другой (надеюсь) меньший выходной поток.
Использование такого подхода дает ряд преимуществ как пользователю, так и разработчику:
расширяемостьРазрешение на пару
tar
с любой алгоритм сжатия уже существует или любой алгоритм сжатия еще предстоит разработать без необходимость менять что-либо во внутренней работеtar
совсем.Как только появится совершенно новый инструмент сжатия «hyper-zip-utra» или какой-нибудь другой, вы уже будете готовы использовать его, охватив своего нового слугу всей мощью
tar
.стабильность
tar
активно используется с начала 80-х годов, протестирован и запущен на множестве операционных систем и машин.Предотвращение необходимости изобретать заново колесо реализации хранения прав собственности, разрешений, меток времени и т. п. снова и снова для каждый новый инструмент архивирования не только экономит много (в противном случае излишне потраченного) времени на разработку, но и гарантирует то же самое. надежность для каждого нового приложения.
последовательность Пользовательский интерфейс всегда остается одинаковым.
Нет необходимости помнить, что для восстановления разрешений с помощью инструмента А вам необходимо пройти опцию
--i-hope-you-rember-this-one
и используя инструмент B, вы должны использовать--this-time-its-another-one
при использовании инструмента C это `--надеюсь-вы-не-попробовали-с-инструментом-как-переключателем.В то время как при использовании инструмента D вы бы действительно все испортили, если бы не использовали
--if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now
.
смола популярен в основном по историческим причинам.Есть несколько легко доступных альтернатив.Некоторые из них существуют почти так же давно, как tar, но не смогли превзойти tar по популярности по нескольким причинам.
- cpio (чужой синтаксис;теоретически более последовательно, но людям нравится то, что они знают, деготь преобладал)
- ar (популярный давно, сейчас используется для упаковки файлов библиотек)
- shar (самораспаковывающиеся сценарии оболочки, были всевозможные проблемы;раньше был популярен, но не меньше)
- zip (из-за проблем с лицензированием он был недоступен на многих Unix)
Основным преимуществом (и недостатком) tar является то, что он не имеет ни заголовка файла, ни центрального каталога содержимого.Таким образом, в течение многих лет он никогда не страдал от ограничений размера файлов (до этого десятилетия, когда ограничение размера файлов внутри архива в 8 ГБ стало проблемой, решенной много лет назад).
По-видимому, единственным недостатком tar.gz (или ar.Z, если уж на то пошло) является то, что вам приходится распаковывать весь архив для извлечения отдельных файлов и вывода списка содержимого архива, но никогда не причиняйте людям столько вреда, чтобы заставить их в значительном количестве отказываться от tar. .
gzip и bzip2 - это просто компрессор, а не программа-архиватор. Отсюда и комбинация. Вам нужно программное обеспечение tar, чтобы связать все файлы.
ZIP и RAR также являются комбинацией двух процессов.
Обычно в мире * nux пакеты файлов распространяются в виде tar-архивов, а затем при желании распаковываются. Gzip - это простая программа сжатия файлов, которая не выполняет связывание файлов, как tar или zip.
Одно время zip неправильно обрабатывал некоторые вещи, которые Unix tar и файловые системы unix считали нормальными, такие как символические ссылки, смешанные файлы и т. д. Я не знаю, изменилось ли это, но именно поэтому мы используем деготь.
Tar = группирует файлы в 1 файле
GZip = Zip файл
Они разделили процесс на 2. Вот и все.
В среде Windows вы можете использовать WinZip или WinRar, которые делают Zip. Процесс Zip этого программного обеспечения группирует файл и архивирует, но вы просто не видите этот процесс.
По той же причине, по которой пользователи Mac любят образы дисков: они представляют собой действительно удобный способ архивировать файлы, а затем передавать их, загружать / скачивать или отправлять по электронной почте и т. д.
И проще в использовании, и более портативным, чем почтовые индексы ИМХО.
В мои дни в Altos-XENIX (1982) мы начали использовать tar (ленточный архиватор) для извлечения файлов с 5 1/4 дискет или потоковой ленты, а также для копирования на эти носители. Его функциональность очень похожа на команды BACKUP.EXE и RESTORE.EXE в DOS 5.0 и 6.22 в качестве дополнений, позволяя вам охватить несколько носителей, если он не может поместиться только в один. Недостатком было то, что если у одного из множества СМИ были проблемы, все это было бесполезно. tar и dd происходят из UNIX SYstem III и остаются стандартной утилитой выпуска с UNIX-подобной ОС, вероятно, по причинам обратной совместимости. Р>
Tar - это не только формат файла, но и формат ленты. Ленты хранят данные побитно. Каждая реализация хранилища была индивидуальной. Tar был методом, с помощью которого можно было извлечь данные с диска и сохранить их на ленте таким образом, чтобы другие люди могли получить их без вашей пользовательской программы.
Позже появились программы сжатия, и * nix все еще имел только один метод создания одного файла, содержащего несколько файлов.
Я считаю, что это просто инерция, которая продолжилась с тенденцией tar.gz. Pkzip начал с сжатия и архивирования одним махом, но затем к системам DOS обычно не подключали стримеры!
Из википедии для Tar_ (file_format)
В вычислениях tar (полученный из архива на магнитной ленте) - это и формат файла (в виде типа битового потока архива), и название программы, используемой для обработки таких файлов. Формат был стандартизирован POSIX.1-1988 и позже POSIX.1-2001. Изначально разработанный как необработанный формат, используемый для резервного копирования на ленту и других устройств с последовательным доступом для целей резервного копирования, теперь он обычно используется для сопоставления коллекций файлов в один более крупный файл для распространения или архивирования при сохранении информации о файловой системе, такой как пользователь и группа. разрешения, даты и структуры каталогов.
Разработчику Windows понятно, как архивы кажутся странными.Слово 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).
- надеюсь, запишите, что они сделали, на случай, если им придется повторить в будущем, потому что нет
apt
база данных (например, список установленных программ Windows), для которой можно создать резервную копию.
Как уже сказано в другом ответе на другой вопрос, который вы задали, вы МОЖЕТЕ создать архив и сжать данные одновременно.Двухпроходной процесс НЕ требуется.