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

17545
Mehrdad

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

56

5 ответов на вопрос

69
Matt Ball

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

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

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

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

Формат файла

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

и это делает файлы "tgz" довольно уникальными по сравнению с другими форматами сжатых архивов, например, вы, как правило, не можете извлечь один конкретный файл без предварительной распаковки того, что находится перед этим файлом. sylvainulg 13 лет назад 0
Нет такой вещи как файл "tgz". Это tar.gz. Задача gzip - заархивировать или разархивировать его содержимое (в данном случае архив tar). Затем вы разархивируете его с помощью tar. Это типичная Unix конвейерная философия, и, следовательно, вряд ли уникальная. luis.espinal 13 лет назад 12
Нет, .tar.gz не уникален: .tar.bz2, .cpio.gz и т. Д. Работают одинаково. user46971 13 лет назад 5
@ user36310 Я знаю, что вы имеете в виду в принципе, но на практике инструменты позволяют вам извлечь один файл. tar -xzvf tarball.tar.gz single / file.txt. За кулисами ему нужно проделать дополнительную работу, но, по-видимому, он извлекает один файл. Rich Homolka 13 лет назад 3
Сделайте это «много дополнительной работы», если файл находится в конце большого архива. Очевидно, что если вам нужен произвольный доступ, zip / rar / xar / 7z / lzh / arj / cab / sit и т. Д. Являются превосходными форматами. LaC 13 лет назад 4
Если быть точным, сжатый архив `.tar. *` Всегда «сплошной», т.е. состоит из одного сжатого потока. С другой стороны, архив `.zip` не является надежным, алгоритм сжатия запускается заново для каждого файла. Он жертвует эффективностью сжатия для ускорения произвольного доступа. Архивы `.7z` могут быть сплошными, не сплошными или иметь сплошные блоки. Daniel B 8 лет назад 3
16
Dan

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

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

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

11
luis.espinal

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

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

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

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

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

Эта философия UNIX прекрасна, но я наблюдаю, что она не справляется, создавая непрозрачные архивы. (Извлечение отдельного файла из tar.gz размером 1 ГБ не должно быть проблемой, и из того, что я здесь понял, ZIP намного превосходит tar.gz ... верно?) Mehrdad 13 лет назад 1
@Mehrad - ** Первый **, что такое нетвердый архив? Как приписывается Вольтеру: «Если вы хотите поговорить со мной, сначала вы должны определить свои термины». ** Во-вторых **, да, архитектура конвейеров и фильтров в определенных случаях не работает, как и любая другая архитектура, независимо от ее красоты. Это дано с небольшим количеством инженерных разработок, и это не аргумент, который выдвигается. ** В-третьих **, zip превосходит gzip и tar, но это не то, что вы просили. Вы спросили, почему zip и tar работают так, как они работают, и есть ли какие-то преимущества, и вам дали технический ответ. luis.espinal 13 лет назад 0
@Mehrad - также я не знаю, с какими проблемами вы сталкиваетесь, когда распаковываете | 1gig файл tar.gz. Я делал это много раз, до 2 ГБ с более старой установкой gzip (и до 4 ГБ с более новыми версиями gzip.) Если вы делаете это по проводам или при монтировании NFS, тогда дух! Вы столкнетесь с подобными проблемами производительности, как если бы это было сделано с простым почтовым индексом. Черт возьми, я даже отправил трубку в удаленный процесс, выплевывая ввод gzip в сокет. ** Попробуйте это с zip. ** Для каждой проблемы используйте соответствующий инструмент (будь то tar | gz или zip.) luis.espinal 13 лет назад 0
8
p_l

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

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

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

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

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

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

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

Похожие вопросы