Может ли кто-нибудь сказать мне, что случилось с таким количеством архивов, и чем они отличаются?
Есть по крайней мере пять, о которых я могу думать, .tar.tz
, .tar.gz
, .tar.bz2
, .tar.lz
, .tar.z
Что лучше для каких применений? Просто кажется глупым делать так много вариаций одного и того же файла, но я уверен, что есть причина.
Суффиксы .gz
, .xz
, .bz2
, .7z
, .lz
, .z
используются, чтобы прояснить, что файл сжат с помощью указанного алгоритма сжатия. Его использование не ограничено файлами .tar
, вы также увидите такие файлы, как initrd.gz
(сжатый начальный виртуальный диск) или manual.txt.gz
(для сжатого текстового документа). Вы также можете увидеть file.tgz
, который также указывает на сжатый gzip архив (например, 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, я хотел бы добавить, что это поведение основано на . Делай одну вещь и делай это хорошо Философия - tar
программа знает, как поместить несколько файлов в один поток (с расширением .tar
), gzip
знает, как сжать один файл (с расширением .gz
) *. Комбинируя эти инструменты, вы можете создать команду, которая сжимает несколько файлов в один файл .tag.gz
.
Этот подход очень гибкий - вы можете комбинировать несколько стандартных команд Unix для выполнения самых разных задач. Например, если вы пишете лучшую программу для сжатия файлов, вам не нужно изменять tar
, чтобы позволить ей создавать .tar.mymegazip
файлы - вместо этого вы просто передаете вывод tar
на ваш компрессор.
Аналогично, tar
ничего не знает о SSH, но, комбинируя команды, вы можете создать скрипт, который архивирует файлы, загружает их на удаленный компьютер через SSH и разархивирует их там.
Сравните это с командой zip
, которая не была создана в Unix - она имеет встроенные инструменты для сжатия целых каталогов, шифрования файлов, разделения архива на более мелкие zip-файлы и т. Д.
( сноска) - да, tar
умеет сам gzip или bzip файлы, используя переключатели -z
и -j
, они были добавлены для удобства, и GNU tar фактически порождает gzip
или bzip2
как новый процесс.