GZIP без смолы? Почему они используются вместе?


60

Почему tar и gzip почти всегда используются вместе, а не только gzip? Есть ли преимущество этого метода?

Ответы:


72

TAR создает один архивированный файл из множества файлов, но не сжимает их.

Детали формата

Файл tar представляет собой объединение одного или нескольких файлов. Каждому файлу предшествует 512-байтовая запись заголовка. Данные файла записываются без изменений, за исключением того, что их длина округляется до кратных 512 байт, а дополнительное пространство заполняется нулями. Конец архива отмечен как минимум двумя последовательными записями, заполненными нулями.

GZIP сжимает один файл в другой файл, но не создает архивы.

Формат файла

... Хотя его формат файла также позволяет объединять несколько таких потоков (сжатые файлы просто распаковываются, как если бы они изначально были одним файлом), gzip обычно используется для сжатия только отдельных файлов. [4] Сжатые архивы обычно создаются путем сборки наборов файлов в один архив tar, а затем сжатия этого архива с помощью gzip.


12
Нет такой вещи как файл "tgz". Это tar.gz. Задача gzip - заархивировать или разархивировать его содержимое (в данном случае архив tar). Затем вы разархивируете его с помощью tar. Это типичная конвейерная философия Unix, и поэтому она вряд ли уникальна.
luis.espinal

5
Нет, .tar.gz не уникален: .tar.bz2, .cpio.gz и т. Д. Работают одинаково.
user46971

3
@ user36310 Я знаю, что вы имеете в виду в принципе, но на практике инструменты позволяют вам извлечь один файл. tar -xzvf tarball.tar.gz single/file.txt, За кулисами ему нужно проделать дополнительную работу, но для внешнего вида он извлекает один файл.
Rich Homolka

4
Сделайте это «много дополнительной работы», если файл находится в конце большого архива. Очевидно, что если вам нужен произвольный доступ, zip / rar / xar / 7z / lzh / arj / cab / sit и т. Д. Являются превосходными форматами.
LaC

3
Если быть точным, .tar.*сжатый архив всегда «сплошной», т.е. состоит из одного сжатого потока. С .zipдругой стороны, архив не является надежным, алгоритм сжатия запускается заново для каждого файла. Он жертвует эффективностью сжатия для ускорения произвольного доступа. .7zархивы могут быть сплошными, не сплошными или иметь сплошные блоки.
Даниэль Б,

17

Gzip / Bzip2 - это потоковые компрессоры. Они сжимают поток данных в нечто меньшее. Они могут использоваться для отдельных файлов, но не для групп файлов самостоятельно.

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

Вот почему для архивирования файлов (и если требуется сжатие) обычно используют tar + некоторый метод сжатия.


12

Tar отвечает за выполнение одной и только одной вещи: (не) архивирование в (из) одного файла архива. Которого? Из одного-единственного: набор файлов.

Gzip отвечает за выполнение одной и только одной вещи: (не) сжатие. Которого? Одно и только одно: один файл любого типа ... и включает файл, созданный с помощью tar.

Это восходит к философии конвейеризации UNIX, лежащей в основе архитектуры «трубы и фильтры»; обработка всего как файла и звуковая архитектурная цель "один-один-один-единственный-и-все-хорошо" (что приводит к очень элегантной и простой разновидности plug-n-play .)

По своей простоте он почти алгебраичен по своей природе (здоровенная цель в проектировании систем). И это нелегкий подвиг.

Во многих отношениях (и не без его недостатков) это почти вершина в композитности, модульности, слабой связи и высокой когезии. Если вы понимаете эти четыре (и я имею в виду действительно понимаю ), вы понимаете, будет очевидно, почему tar и gzip работают так в паре.


1
Эта философия UNIX прекрасна, но я наблюдаю, что она не справляется, создавая непрозрачные архивы. (Извлечение одного файла из tar.gz размером 1 ГБ не должно быть затруднительным, и из того, что я здесь понял, ZIP намного превосходит tar.gz ... верно?)
Mehrdad

@ Mehrad - Во-первых , что такое нетвердый архив? Как приписывают Вольтеру: «Если вы хотите поговорить со мной, сначала вы должны определить свои термины». , Во-вторых , да, в некоторых случаях архитектура конвейеров и фильтров не работает, как и любая другая архитектура, независимо от ее красоты. Это дано с небольшим количеством инженерных разработок, и это не аргумент, который выдвигается. В-третьих , zip превосходит gzip и tar, но вы спросили не об этом. Вы спросили, почему zip и tar работают так, как они работают, и есть ли какие-то преимущества, и вам дали технический ответ.
luis.espinal

@Mehrad - также я не знаю, с какими проблемами вы сталкиваетесь, когда распаковываете | 1gig файл tar.gz. Я делал это много раз, до 2 ГБ с более старой установкой gzip (и до 4 ГБ с более новыми версиями gzip.) Если вы делаете это по проводам или при монтировании NFS, тогда дух! Вы столкнетесь с подобными проблемами производительности, как если бы это было сделано с простым почтовым индексом. Черт возьми, я даже не зацепился от канала к удаленному процессу, выплевывая ввод gzip в сокет. Попробуйте это с почтовым индексом. Для каждой проблемы используйте соответствующий инструмент (будь то tar | gz или zip.)
luis.espinal

8

Прежде всего, TAR не был создан для создания файловых архивов. Это лента ARchiver . Его задача - записать или загрузить в архив на / с ленты.

Параметр -f позволяет использовать файл в качестве «виртуальной ленты», который затем может быть сжат другой программой. Фактически, такое сжатие происходит и на реальных лентопротяжных устройствах.

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


3
Правильно ... ZIP-файлы помещают всю информацию о файле в единый заголовок, затем все содержимое файла ... что делает невозможным добавление большего количества файлов в ZIP-файл ... вам нужно переписать весь файл ... с помощью Формат TAR, заголовок для каждого файла является отдельным, поэтому вы можете легко добавлять больше файлов без перезаписи всей ленты
JoelFan

5

Традиционно системы Unix используется одна программа для выполнения одной задачи в соответствии с философией Unix : tarбыло только средство , чтобы упаковать несколько файлов в один файл, первоначально для резервного копирования на магнитной ленте (следовательно tar, т обезьяну ар резанец). tarне обеспечивает сжатие; полученный несжатый архив обычно сжимают с какой - либо другой программой , такими как gzip, bzip2или xz. В старые времена они использовали compressкоманду, чтобы сделать это; Более новые алгоритмы сжатия намного эффективнее, чем это.

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

Этот модульный подход не лишен недостатков. Как уже упоминалось в комментариях к другим ответам, выделенный сжатый формат архива .zipлучше справляется с извлечением отдельных файлов; сжатые архивы должны быть распакованы почти полностью, чтобы извлечь файлы в конце архива, в то время как .zipархивы позволяют произвольный доступ к их содержимому. (Некоторые более новые форматы, такие как .7z, поддерживают сплошные и не сплошные архивы, а также сплошные блоки различного размера в больших архивах.) Продолжающееся использование tarв сочетании с отдельной утилитой сжатия является вопросом традиции и совместимости; также, .7zи .zipне поддерживают метаданные файловой системы Unix, такие как разрешения.

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