Вопрос

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top