Почему люди используют архивы?


91

Как разработчик в первую очередь Windows, возможно, мне не хватает чего-то культурного в сообществе Linux, но меня это всегда смущало.

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


3
Обычно вы просто объединяете сжатие и группировку файлов в одну команду. tar -zcf file.tar.gz некоторые имена файлов
Юха Сюряля

1
Никто не упомянул, что передача 1000000 файлов размером 1 байт дороже, чем передача 1 файла размером 1000000 байтов.
Майло Ламар

Ответы:


137

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

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


2
Ответили быстрее и немного лучше, чем я - думаю, я вернусь к работе!
Harper Shelby

9
Я обогнал вас на 4 минуты, и это целая вечность по времени переполнения стека. :-)
Стюарт Джонсон

1
Стоит отметить, что и tar, и gzip полезны сами по себе, поэтому они разделены. С умным использованием каналов я однажды переместил папку с одного компьютера на другой путем архивирования, архивирования и передачи по SSH, а затем разархивирования и разархивирования в месте назначения. Одна команда, никаких временных файлов.
rmeador

1
Вы также можете сказать, что они придерживаются того, что, как было доказано, работает хорошо, вместо того, чтобы что-то менять и нарушать совместимость. .tar.gz можно сделать за один шаг независимо от так называемых современных инструментов и методов (пожалуйста, зарегистрируйте WinZip).
JeeBee

2
Я не могу поверить, что никто не редактировал вопрос или не оставил комментарий, в котором упоминается (imo) весь смысл использования tarархивов: поддержка разрешений файловой системы Linux . Что произойдет, если вы загрузите пакет Debian, ваш менеджер пакетов установит его, но ни один из исполняемых файлов не будет исполняемым? Это настоящая причина, почему все используют архивы ...;)
JamesTheAwesomeDude

29

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

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

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

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


Спасибо за различие между zip и tar + gzip!
Люк,

1
+1 за различие между «сжатием агрегированного файла» и «агрегированием сжатых файлов».
Джесси Чизхолм

Причина, по которой tar обеспечивает лучшую степень сжатия, а zip более эластичен, с другой стороны, объясняется тем фактом, что tar представляет собой своего рода твердое сжатие, в то время как zip не является твердым.
gaborous 09

@Barry, так в заключение кто победит? (при условии, что мы используем современные ОС)
Pacerier

@Pacerier Я не думаю, что есть выигрыш. Zip-архивы лучше подходят для произвольного доступа и для пользователей Windows. Тарболлы имеют более высокую совместимость с Linux и Unix. Тарболы имеют немного более высокое сжатие, но вам нужно распаковать все, чтобы получить доступ к чему-либо. Оба поддерживают произвольные алгоритмы сжатия, но их намного проще смешивать и сопоставлять с архивами. В зависимости от цели любой может быть лучше.
Барри Келли

26

Странно, что никто другой не упомянул, что современные версии 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забивают; он может выполнять копирование на месте из одной иерархии каталогов в другую без какого-либо промежуточного хранилища:

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

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


В расширенном формате ZIP можно было бы разместить подключаемые компрессоры потоков в той же степени, что и в TAR, но без подходящего протокола IPC он, вероятно, был бы медленнее из-за чрезмерного выполнения подпроцессов.
Барри Келли

моя команда goto: tar -xfvz tarpkg.tar.gz (замените z на aj для сжатых архивов
bz2

1
@Redbeard: tar автоматически обнаруживает gzip и bzip2 при извлечении - для создания вы должны указать ему, что делать, но я просто использую -xf (или -xvf) и имя файла tar.
Джонатан Леффлер

15

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


При создании файла не забудьте зашифровать после сжатия, а не до него, потому что результат шифрования выглядит случайным и его сложно сжать.
Джонатан Леффлер

8

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


7

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


3
На самом деле, все наоборот: теперь zip встроен в Windows, потому что он был распространен в DOS и ранних версиях Windows.
Christian Lescuyer

Мне нравится использовать RAR в Windows, tar.bz2 в Linux,
Усама Аль-Маадид

Вы могли заметить странный (несовместимый с getopt ()) синтаксический анализ параметров, а тире не является обязательным, поскольку tar предшествует стандартным соглашениям о параметрах команд Unix.
Джонатан Леффлер

5

Я думаю, вы искали больше исторического контекста для этого. Исходный zip-архив был для одного файла. Tar используется для помещения нескольких файлов в один файл. Следовательно, архивирование и архивирование - это двухэтапный процесс. Остается только догадываться, почему он все еще так доминирует сегодня.

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

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


4

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.


3

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

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

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

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


В старых версиях tar не было заголовочной информации; новые (POSIX-совместимые, USTAR) версии tar (например, GNU tar) делают. Команда file понимает это.
Джонатан Леффлер

2

gzip и bzip2 - это просто компрессор, а не программа-архиватор. Следовательно, комбинация. Для объединения всех файлов вам понадобится программа tar.

Сам ZIP, а также RAR - это комбинация этих двух процессов.


2

Обычно в мире * nux пакеты файлов распространяются в виде tar-архивов, а затем опционально сжимаются. Gzip - это простая программа сжатия файлов, которая не выполняет объединение файлов, как tar или zip.

В свое время zip не справлялся должным образом с некоторыми вещами, которые файловые системы Unix tar и unix считали нормальными, такими как символические ссылки, файлы с разными регистрами и т. Д. Я не знаю, изменилось ли это, но именно поэтому мы используем tar.


1
* nux - Linux, Unux, Solarnux?
mackenir

1
@mackenir - не забывайте POSUX. :-)
Paul Tomblin

1
@mackenir - Или это должен быть POSNUX?
Пол Томблин

1

Tar = Группирует файлы в 1 файл

GZip = Заархивировать файл

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

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


3
Это не лучшее объяснение, учитывая, что «zip» файлы, к которым OP используется в Windows, уже включают группировку.
Гарет,

1

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

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


1

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


0

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

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

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

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

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


Строго говоря, tar - это формат файла - просто на лентах unix это просто еще один файл.
Мартин Беккет,

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

0

Как разработчику 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 для прибыли).
  • Надеюсь, запишите, что они сделали, на случай, если им придется повторить это в будущем, потому что нет aptбазы данных (подумайте о списке установленных программ Windows), для которой можно было бы создать резервную копию.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.