В чем разница со всеми различными типами .tar-архивов?

15

Может ли кто-нибудь сказать мне, что связано с таким количеством архивов, и как они отличаются?

По крайней мере пять, о которых я могу думать, .tar.tz , .tar.gz , .tar.bz2 , .tar.lz , .tar.z

Что лучше для каких приложений? Просто глупо делать так много вариантов одного и того же файла, но я уверен, что есть причина.

    
задан Trevor Gross 27.11.2013 в 18:35
источник

2 ответа

18

Суффиксы .gz , .xz , .bz2 , .7z , .lz , .z используются, чтобы ясно показать, что файл сжат с помощью упомянутого алгоритма сжатия. Его использование не ограничено файлами .tar , вы также увидите файлы, такие как initrd.gz (сжатый начальный ramdisk) или manual.txt.gz (для сжатого текстового документа). Вы также можете увидеть file.tgz , что также указывает на сжатый gzip tarball (например, file.tar.gz ).

Расширение файла - это соглашение, оно не обязательно описывает содержимое файла. Чтобы проверить, какой файл вы обрабатываете, используйте команду file . Пример:

$ file data.tar.gz
data.tar.gz: gzip compressed data, from Unix
$ gunzip -c data.tar.gz | file -
/dev/stdin: POSIX tar archive (GNU)

По моему опыту, gzip-сжатые файлы ( .gz ) являются наиболее распространенными. Он быстро сжимается и распаковывается, хотя существуют и другие алгоритмы, которые дают лучшие коэффициенты сжатия.

    
ответ дан Lekensteyn 27.11.2013 в 18:43
источник
8

В дополнение к ответу @Lekensteyn, я хотел бы добавить, что это поведение основано на Делайте одно и делайте это хорошо - программа tar знает, как поместить несколько файлов в один поток (с .tar extension), gzip знает, как сжать один файл (добавив .gz extension) *. Объединив эти инструменты, вы можете создать команду, которая сжимает несколько файлов в один файл .tag.gz .

Этот подход очень гибкий - вы можете комбинировать несколько стандартных команд Unix, чтобы делать всевозможные вещи. Например, если вы пишете лучшую программу для сжатия файлов, вам не нужно изменять tar , чтобы она могла создавать .tar.mymegazip файлов - вместо этого вы просто отправляете tar на ваш компрессор.

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

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

(footnote) - да, tar может самостоятельно загружать файлы gzip или bzip с помощью переключателей -z и -j , они были добавлены для удобства, а GNU tar фактически порождает gzip или bzip2 as новый процесс.

    
ответ дан Sergey 03.12.2013 в 22:11