Есть две разные, но связанные задачи. Упаковка дерева файлов (включая имена файлов, структуру каталогов, разрешения файловой системы, владельца и любые другие метаданные) в поток байтов называется
архивированием . Удаление избыточности в байтовом потоке для создания меньшего байтового потока называется сжатием .
В Unix две операции разделены, с разными инструментами для каждой. На большинстве других платформ (текущих и исторических) комбинированные инструменты выполняют как архивирование, так и сжатие.
(gzip и другие программы, имитирующие интерфейс gzip, часто имеют возможность сохранить исходное имя файла в сжатом выводе, но это, наряду с CRC или другой проверкой для обнаружения повреждения, является единственной метаданной, которую они могут сохранить.)
Есть преимущества отделения сжатия от архивирования. Архивирование зависит от платформы (метаданные файловой системы, требующие сохранения, сильно различаются), но реализация проста, в основном связана с вводом-выводом и мало меняется со временем. Сжатие не зависит от платформы, но реализации зависят от процессора, и алгоритмы постоянно совершенствуются, чтобы воспользоваться преимуществами увеличения ресурсов, которые современные аппаратные средства могут использовать для решения этой проблемы.
Самый популярный архиватор Unix есть tar
, хотя существуют и другие, такие как cpio
и ar
. (Пакеты Debian являются ar
архивами, хотя
cpio
часто используются для начальных виртуальных дисков.) tar
Или часто комбинируются с такими инструментами сжатия, как compress
(.Z), gzip
(.gz),
bzip2
(.bz2) и xz
(.xz), от самого старого до самого младшего и не случайно от худшего к лучшему сжатию.
Создание tar
архива и его сжатие - это разные шаги: компрессор ничего не знает о tar
формате файла. Это означает, что извлечение одного файла из сжатого tar
архива требует распаковки всех предыдущих файлов. Это часто называют «солидным» архивом.
Точно так же, поскольку tar является «потоковым» форматом - необходим для того, чтобы он был полезен в конвейере, - в архиве tar нет глобального индекса, и перечисление содержимого архива tar столь же дорого, как и его извлечение.
Напротив, Zip и RAR и 7-zip (самые популярные архиваторы на современных платформах Windows) обычно сжимают каждый файл отдельно и слегка сжимают метаданные, если вообще. Это дает возможность дешевого перечисления файлов в архиве и извлечения отдельных файлов, но означает, что избыточность между несколькими файлами в одном архиве не может быть использована для увеличения сжатия. Хотя в общем случае сжатие уже сжатого файла не приводит к дальнейшему уменьшению размера файла, иногда вы можете увидеть zip-файл в zip-файле: первое сжатие превратило множество маленьких файлов в один большой файл (возможно, с отключенным сжатием), а второе молния затем сжимается как единое целое.
Существует взаимное опыление между различными платформами и философиями: gzip
по сути, zip
это компрессор без своего архиватора, и, xz
по сути 7-zip
, компрессор без своего архиватора.
Есть и другие, специализированные компрессоры. Варианты PPM и их преемник ZPAQ
оптимизированы для максимального сжатия без учета потребления ресурсов. Они могут легко поглотить столько ЦП и ОЗУ, сколько вы можете использовать для них, и декомпрессия так же обременительна, как и сжатие (для сравнения, наиболее широко используемые инструменты сжатия
асимметричны : распаковка дешевле, чем сжатие).
На другом конце спектра, lzo
, snappy
и LZ4
являются «легкими» компрессорами для максимальной скорости и минимального потребления ресурсов, при стоимости сжатия. Они широко используются в файловых системах и других хранилищах объектов, но в меньшей степени, как автономные инструменты.
Так что вы должны выбрать?
Архивирование:
Поскольку вы работаете в Ubuntu, нет никакой реальной причины использовать что-либо кроме tar
архивирования, если только вы не пытаетесь создавать файлы, которые легко читаются в другом месте.
zip
Трудно превзойти вездесущность, но он не ориентирован на Unix и не будет хранить разрешения на доступ к вашей файловой системе и информацию о владельце, а встроенное сжатие устарело. 7-zip и RAR (и ZPAQ) имеют более современное сжатие, но одинаково не подходят для архивирования файловых систем Unix (хотя ничто не мешает вам использовать их только в качестве компрессоров); RAR также является частной собственностью.
Сжатие:
Для максимального сжатия вы можете взглянуть на эталонный тест, например, на http://mattmahoney.net/dc/text.html . Это должно дать вам лучшее представление о компромиссах.
Вы, вероятно, не хотите максимального сжатия, хотя. Это слишком дорого.
xz
является наиболее популярным инструментом сжатия общего назначения в современных системах Unix. Я верю, что 7-zip тоже может читать файлы xz, так как они тесно связаны.
Наконец: если вы архивируете данные для чего-то другого, кроме кратковременного хранения, вы должны выбрать что-то с открытым исходным кодом и, желательно, широко распространенное, чтобы минимизировать головные боли в дальнейшем.