56

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

5 ответов5

70

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

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

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

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

Формат файла

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

17

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

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

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

12

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

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

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

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

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

8

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

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

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

5

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .