Есть две разные, но связанные задачи. Упаковка дерева файлов (включая имена файлов, структуру каталогов, разрешения файловой системы, владельца и любые другие метаданные) в поток байтов называется
архивированием . Удаление избыточности в байтовом потоке для создания меньшего байтового потока называется сжатием .
В 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, так как они тесно связаны.
Наконец: если вы архивируете данные для чего-то другого, кроме кратковременного хранения, вы должны выбрать что-то с открытым исходным кодом и, желательно, широко распространенное, чтобы минимизировать головные боли в дальнейшем.