Как разработчик в первую очередь Windows, возможно, мне не хватает чего-то культурного в сообществе Linux, но меня это всегда смущало.
При загрузке что - то , что файлы сначала помещаются в .tar
архив , то архивный . Почему двухэтапный процесс? Не удается ли при архивировании группировать файлы? Есть ли еще какие-то преимущества, о которых я не знаю?
Ответы:
bzip
иgzip
работайте с отдельными файлами, а не с группами файлов. Обычные старыеzip
(иpkzip
) работают с группами файлов и имеют встроенную концепцию архива.Философия * nix - это один из небольших инструментов, которые очень хорошо выполняют определенные задачи и могут быть связаны друг с другом. Вот почему здесь есть два инструмента, у которых есть определенные задачи, и они разработаны, чтобы хорошо сочетаться друг с другом. Это также означает, что вы можете использовать tar для группировки файлов, а затем у вас есть выбор инструмента сжатия (
bzip
,gzip
и т. Д.).источник
tar
архивов: поддержка разрешений файловой системы Linux . Что произойдет, если вы загрузите пакет Debian, ваш менеджер пакетов установит его, но ни один из исполняемых файлов не будет исполняемым? Это настоящая причина, почему все используют архивы ...;)Важное различие заключается в характере двух типов архивов.
Файлы TAR представляют собой не более чем конкатенацию содержимого файла с некоторыми заголовками, в то время как gzip и bzip2 - это потоковые компрессоры, которые в tarballs применяются ко всей конкатенации.
ZIP-файлы представляют собой объединение индивидуально сжатых файлов с некоторыми заголовками. Фактически, алгоритм DEFLATE используется как zip, так и gzip, и с соответствующей двоичной настройкой вы можете взять полезную нагрузку потока gzip и поместить его в zip-файл с соответствующими заголовками и записями словаря.
Это означает, что два разных типа архивов имеют разные компромиссы. Для больших коллекций небольших файлов TAR, за которым следует компрессор потока, обычно дает более высокий коэффициент сжатия, чем ZIP, потому что компрессор потока будет иметь больше данных для построения частот словаря и, таким образом, сможет выжать больше избыточной информации. С другой стороны, ошибка (сохранение длины файла) в ZIP-файле приведет к повреждению только тех файлов, сжатые данные которых были затронуты. Обычно потоковые компрессоры не могут полноценно восстановиться после ошибок в середине потока. Таким образом, ZIP-файлы более устойчивы к повреждениям, поскольку часть архива по-прежнему будет доступна.
источник
Странно, что никто другой не упомянул, что современные версии GNU
tar
позволяют сжимать при связывании:Вы также можете использовать компрессор по вашему выбору при условии, что он поддерживает параметры '
-c
' (в стандартный вывод или из стандартного ввода) и '-d
' (распаковать):Это позволит вам указать любой альтернативный компрессор.
[ Добавлено : если вы распаковываете из
gzip
илиbzip2
сжатые файлы, GNUtar
автоматически обнаруживает их и запускает соответствующую программу. То есть можно использовать:и они будут обработаны должным образом. Если вы используете нестандартный компрессор, вам необходимо указать это при извлечении.]
Причина разделения, как и в выбранном ответе, разделение обязанностей. Среди прочего, это означает, что люди могут использовать
cpio
программу для упаковки файлов (вместоtar
), а затем использовать выбранный компрессор (когда-то предпочтительным был компрессорpack
, позже он былcompress
(который был намного эффективнее, чемpack
), а затемgzip
он обошел обоих своих предшественников и полностью конкурирует с нимzip
(который был портирован на Unix, но не является родным), и теперьbzip2
, по моему опыту, обычно имеет преимущество на 10-20%gzip
.[ Добавлено : кто-то отметил в своем ответе
cpio
забавные условности. Это правда, но до тех пор, пока GNU неtar
получит соответствующие параметры ('-T -
'), этоcpio
была лучшая команда, когда вы не хотели архивировать все, что находится в данном каталоге - вы действительно могли выбрать, какие именно файлы были заархивированы. Обратной сторонойcpio
было то, что вы не только могли выбирать файлы - их нужно было выбирать. Есть еще одно место, гдеcpio
забивают; он может выполнять копирование на месте из одной иерархии каталогов в другую без какого-либо промежуточного хранилища:Между прочим, в этом контексте важна
-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).
источник
Я думаю, вы искали больше исторического контекста для этого. Исходный zip-архив был для одного файла. Tar используется для помещения нескольких файлов в один файл. Следовательно, архивирование и архивирование - это двухэтапный процесс. Остается только догадываться, почему он все еще так доминирует сегодня.
Из википедии для Tar_ (file_format)
источник
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
.источник
tar популярен в основном по историческим причинам. Есть несколько доступных альтернатив. Некоторые из них существуют почти столько же, сколько tar, но не могут превзойти tar по популярности по нескольким причинам.
Основным преимуществом (и недостатком) tar является то, что у него нет ни заголовка файла, ни центрального каталога содержимого. Поэтому в течение многих лет он никогда не страдал от ограничений по размеру файлов (до этого десятилетия, когда ограничение в 8 ГБ для файлов внутри архива стало проблемой, решенной много лет назад).
По-видимому, один недостаток tar.gz (или ar.Z в этом отношении) заключается в том, что вам нужно распаковать весь архив для извлечения отдельных файлов и перечисления содержимого архива, никогда не причиняйте людям достаточно вреда, чтобы заставить их отказаться от tar в значительном количестве .
источник
gzip и bzip2 - это просто компрессор, а не программа-архиватор. Следовательно, комбинация. Для объединения всех файлов вам понадобится программа tar.
Сам ZIP, а также RAR - это комбинация этих двух процессов.
источник
Обычно в мире * nux пакеты файлов распространяются в виде tar-архивов, а затем опционально сжимаются. Gzip - это простая программа сжатия файлов, которая не выполняет объединение файлов, как tar или zip.
В свое время zip не справлялся должным образом с некоторыми вещами, которые файловые системы Unix tar и unix считали нормальными, такими как символические ссылки, файлы с разными регистрами и т. Д. Я не знаю, изменилось ли это, но именно поэтому мы используем tar.
источник
Tar = Группирует файлы в 1 файл
GZip = Заархивировать файл
Они разделили процесс на 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)
источник
Как разработчику Windows понятно, насколько странные архивы архивов . Это слово
tar
означает архив ленты. Подумайте о катушечных магнитофонах.В мире Windows программы обычно устанавливаются с помощью
setup.exe
или,install.exe
которые работают с различными мастерами в реестре, создавая каталоги и устанавливая.dll
файлы (Библиотека динамической компоновки).В Linux, Ubuntu, в частности, исходя из моего собственного опыта, менеджеры пакетов берут приложение и устанавливают его большую часть времени . В Ubuntu разработчик создает пакет, заканчивающийся на
.deb
(Debian, на котором основана Ubuntu). Основной синтаксис для установки.deb
:Хотя это относительно просто для пользователя, разработчикам требуется много работы, чтобы создать
.deb
пакет и связать PPA.Более простой способ для разработчиков - создать архив. Затем бремя установки ложится на конечного пользователя. Они должны:
.tar.gz
).apt
базы данных (подумайте о списке установленных программ Windows), для которой можно было бы создать резервную копию.Как уже сказано в другом ответе на другой вопрос, который вы задали, вы МОЖЕТЕ создать tarball и одновременно сжимать данные. Двухпроходный процесс НЕ требуется.
источник