Ответы:
TAR создает один архивированный файл из множества файлов, но не сжимает их.
Файл tar представляет собой объединение одного или нескольких файлов. Каждому файлу предшествует 512-байтовая запись заголовка. Данные файла записываются без изменений, за исключением того, что их длина округляется до кратных 512 байт, а дополнительное пространство заполняется нулями. Конец архива отмечен как минимум двумя последовательными записями, заполненными нулями.
GZIP сжимает один файл в другой файл, но не создает архивы.
... Хотя его формат файла также позволяет объединять несколько таких потоков (сжатые файлы просто распаковываются, как если бы они изначально были одним файлом), gzip обычно используется для сжатия только отдельных файлов. [4] Сжатые архивы обычно создаются путем сборки наборов файлов в один архив tar, а затем сжатия этого архива с помощью gzip.
tar -xzvf tarball.tar.gz single/file.txt
, За кулисами ему нужно проделать дополнительную работу, но для внешнего вида он извлекает один файл.
.tar.*
сжатый архив всегда «сплошной», т.е. состоит из одного сжатого потока. С .zip
другой стороны, архив не является надежным, алгоритм сжатия запускается заново для каждого файла. Он жертвует эффективностью сжатия для ускорения произвольного доступа. .7z
архивы могут быть сплошными, не сплошными или иметь сплошные блоки.
Gzip / Bzip2 - это потоковые компрессоры. Они сжимают поток данных в нечто меньшее. Они могут использоваться для отдельных файлов, но не для групп файлов самостоятельно.
Tar, с другой стороны, может превращать список файлов с путями, разрешениями и информацией о владельце в один непрерывный поток - и наоборот.
Вот почему для архивирования файлов (и если требуется сжатие) обычно используют tar + некоторый метод сжатия.
Tar отвечает за выполнение одной и только одной вещи: (не) архивирование в (из) одного файла архива. Которого? Из одного-единственного: набор файлов.
Gzip отвечает за выполнение одной и только одной вещи: (не) сжатие. Которого? Одно и только одно: один файл любого типа ... и включает файл, созданный с помощью tar.
Это восходит к философии конвейеризации UNIX, лежащей в основе архитектуры «трубы и фильтры»; обработка всего как файла и звуковая архитектурная цель "один-один-один-единственный-и-все-хорошо" (что приводит к очень элегантной и простой разновидности plug-n-play .)
По своей простоте он почти алгебраичен по своей природе (здоровенная цель в проектировании систем). И это нелегкий подвиг.
Во многих отношениях (и не без его недостатков) это почти вершина в композитности, модульности, слабой связи и высокой когезии. Если вы понимаете эти четыре (и я имею в виду действительно понимаю ), вы понимаете, будет очевидно, почему tar и gzip работают так в паре.
Прежде всего, TAR не был создан для создания файловых архивов. Это лента ARchiver . Его задача - записать или загрузить в архив на / с ленты.
Параметр -f позволяет использовать файл в качестве «виртуальной ленты», который затем может быть сжат другой программой. Фактически, такое сжатие происходит и на реальных лентопротяжных устройствах.
Конечно, философия использования одной программы, чтобы сделать это хорошо, также имеет значение в этом случае, но можно не заметить, почему архивы TAR структурированы как поток, а не как каталог содержимого + содержимое.
Традиционно системы Unix используется одна программа для выполнения одной задачи в соответствии с философией Unix : tar
было только средство , чтобы упаковать несколько файлов в один файл, первоначально для резервного копирования на магнитной ленте (следовательно tar
, т обезьяну ар резанец). tar
не обеспечивает сжатие; полученный несжатый архив обычно сжимают с какой - либо другой программой , такими как gzip
, bzip2
или xz
. В старые времена они использовали compress
команду, чтобы сделать это; Более новые алгоритмы сжатия намного эффективнее, чем это.
Высоко модульный подход, продиктованный философией Unix, означает, что каждая программа может использоваться индивидуально по мере необходимости или комбинироваться для выполнения более сложных задач, включая создание сжатых архивов, как описано здесь. Для такого рода задач он также позволяет легко заменять отдельные инструменты по мере необходимости; Вы просто изменили бы программу сжатия, чтобы использовать другой алгоритм сжатия, без необходимости замены самой tar
утилиты.
Этот модульный подход не лишен недостатков. Как уже упоминалось в комментариях к другим ответам, выделенный сжатый формат архива .zip
лучше справляется с извлечением отдельных файлов; сжатые архивы должны быть распакованы почти полностью, чтобы извлечь файлы в конце архива, в то время как .zip
архивы позволяют произвольный доступ к их содержимому. (Некоторые более новые форматы, такие как .7z
, поддерживают сплошные и не сплошные архивы, а также сплошные блоки различного размера в больших архивах.) Продолжающееся использование tar
в сочетании с отдельной утилитой сжатия является вопросом традиции и совместимости; также, .7z
и .zip
не поддерживают метаданные файловой системы Unix, такие как разрешения.