Я всегда использовал TAR и ZIP для сжатия, но недавно я услышал об *.Z
алгоритме сжатия. Это подняло вопрос для меня:
Со всеми этими системами сжатия, какая из них лучше всего подходит для общего использования и сжатия?
Выполнив несколько тестов, я обнаружил, что tar
, как я обнаружил, на самом деле НЕ сжимается (если не указано явно). То есть, чем это хорошо по сравнению с другими методами сжатия?
Я уже знал , что ZIP является наиболее широко используемой системой сжатия, но я должен использовать это вместо того , чтобы *.Z
, *.7z
, .tar
или .tar.<insert ending here>
?
Сообщение Резюме:
- Должен ли я использовать
*.tar
,*.Z
,*.7z
,.tar
, или.tar.<insert ending here>
для лучшего сжатия? - Если обычный
*.tar
файл не сжимается, зачем мы его используем?
РЕДАКТИРОВАТЬ: Не все алгоритмы позволяют хранить разрешения Linux (из того, что я узнал). Что делать, и есть ли какой-нибудь взлом (или скрипт), который я мог бы использовать для хранения разрешений?
источник
Ответы:
tar
выступает за ленточный архив. Все, что он делает - это упаковывает файлы и их метаданные (права доступа, владельца и т. Д.) В поток байтов, который можно сохранить на ленточном накопителе (или в файле) и восстановить позже. Сжатие - это совершенно отдельный вопрос, который вы привыкли передавать по конвейеру через внешнюю утилиту для сжатия, если хотите. GNU tar был достаточно хорош, чтобы добавить переключатели, чтобы он автоматически фильтровал вывод через соответствующую утилиту в качестве ярлыка.Zip и 7z объединяют архивирование и сжатие вместе в свой собственный контейнерный формат, и они предназначены для упаковки файлов в системе DOS / Windows, поэтому они не хранят разрешения и владение Unix. Таким образом, если вы хотите хранить разрешения для правильного резервного копирования, вам нужно придерживаться tar. Если вы планируете обмениваться файлами с пользователями Windows, тогда zip или 7z - это хорошо. Фактические алгоритмы сжатия zip и 7zip могут использоваться с tar, используя uzing
gzip
иlzma
соответственно.lzma (aka. * .xz) имеет один из лучших коэффициентов сжатия и довольно быстро распаковывает файлы, что делает его лучшим выбором в наши дни. Однако для сжатия требуется тонна оперативной памяти и процессорного времени. Преподобный
gzip
немного быстрее при сжатии, поэтому может быть использован, если вы не хотите посвящать так много процессорного времени. У этого также есть еще более быстрый вариант, названный lzop.bzip2
все еще довольно популярен, так как он в значительной степени заменил gzip некоторое время до появления 7zip / lzma, так как он получил лучшие коэффициенты сжатия, но в наши дни он не пользуется популярностью, так как 7z / lzma быстрее при распаковке и получает лучшие коэффициенты сжатия.compress
Утилита, которая обычно имена файлов * .Z, древний и давно забыли.Одно из других важных различий между zip и tar состоит в том, что zip сжимает данные небольшими порциями, тогда как при сжатии файла tar вы сжимаете все это сразу. Последний дает лучшие коэффициенты сжатия, но чтобы извлечь один файл в конце архива, вы должны распаковать все это, чтобы добраться до него. Таким образом, формат zip лучше при извлечении одного или двух файлов из большого архива. 7z и
dar
позволяют выбрать сжатие всего объекта (называемого «твердым» режимом) или небольших кусков для легкого извлечения по частям.источник
gzip
.tar cfp
сохранит разрешения. Файл tar распакован, поэтому zip (7-zip), gzip2, gzip, lzo и т. Д. Будут хорошо сжимать файл tar (в общем, архив сжатых файлов вряд ли будет сжимаемым).Детали алгоритмов здесь не по теме 1, так как они никак не связаны с Linux, не говоря уже об Ubuntu. Однако, вы найдете здесь полезную информацию .
Теперь
tar
, как вы сказали,tar
программа сжатия не является и никогда не была. Вместо этого это архиватор ; его основная цель - сделать один большой файл из множества маленьких. Исторически это облегчало хранение на ленточных накопителях, отсюда и название: Tape ARchive.Сегодня основной причиной использования
tar
является уменьшение количества файлов в вашей системе. Каждый файл в файловой системе Unix занимает инод , чем больше у вас файлов, тем меньше доступных инодов, и когда у вас заканчиваются иноды, вы больше не можете создавать новые файлы. Проще говоря, тот же объем данных, который хранится в тысячах файлов, займет больше вашего жесткого диска, чем те же файлы в одном архиве tar.Чтобы проиллюстрировать это, поскольку это оспаривалось в комментариях, на моем
/
разделе 68G у меня есть следующее количество общих и используемых инодов (имейте в виду, что число инодов зависит от типа файловой системы и размера раздела):Если я сейчас попытаюсь создать больше файлов, чем у меня есть inode:
Нет места? Но у меня есть много места:
Как вы можете видеть выше, создание нескольких сотен тысяч пустых файлов быстро истощает мои иноды, и я больше не могу создавать новые. Если бы я был к
tar
этому, я был бы в состоянии начать создавать файлы снова.Наличие меньшего количества файлов также значительно ускоряет ввод-вывод файловой системы, особенно в смонтированных файловых системах NFS. Я всегда сохраняю свои старые рабочие каталоги, когда проект закончен, поскольку чем меньше у меня файлов, тем быстрее
find
будут работать подобные программы .На Super User есть отличный ответ, в который
tar
входят гораздо более подробные сведения, но в дополнение к вышесказанному есть и другие основные причины, по-прежнему популярные сегодня:Эффективность: использование
tar
для конвейерной передачи подобной программы сжатияgzip
более эффективно, поскольку позволяет избежать создания промежуточных файлов.tar
поставляется со всевозможными наворотами, функциями, которые были разработаны в течение его долгой истории, что делает его особенно полезным для * nix-резервных копий (разрешения на размышления, владение файлами, возможность передавать данные прямо в STDOUT и по каналу SSH ... )Инерция. Мы привыкли
tar
. Можно с уверенностью предположить, что он будет доступен на любом * nix, который вы можете использовать, что делает его очень переносимым и удобным для архивов исходного кода.1 Это абсолютно верно и не имеет ничего общего с тем, что я недостаточно знаю о них, чтобы объяснить :)
источник
tar
«для уменьшения количества файлов», поскольку, честно говоря, большинству файловых систем это безразлично, и в любом случае это не совсем оптимально, посколькуtar
не поддерживает простой произвольный доступ к файлам. Скорее, основное использование (для меня и большинства людей) - это простой обмен файлами (например, исходным кодом) с другими людьми.ARG_MAX
, это может затруднить работу с вашими файлами и фактически может привести к (плохо) настроенной сети, где файлы хранятся на центральном сервере и совместно используются с NFS на коленях. Что касается уменьшения количества файлов в целом, вам понадобится гораздо больше файлов, чем это нужно заметить, но в многопользовательских настройках число inode может действительно стать ограничивающим.tune2fs -l
в разделе, содержащем мой $ HOME, говорит, что у меня 19 300 352 инодов. Я не смогу создать больше файлов, чем это. Как вы сказали, 10 ^ 6 - это не сумасшествие, даже в верхних диапазонах. В зависимости от того, что вы делаете , вы можете иметь нужду в пути больше , чем это.Есть две разные, но связанные задачи. Упаковка дерева файлов (включая имена файлов, структуру каталогов, разрешения файловой системы, владельца и любые другие метаданные) в поток байтов называется архивированием . Удаление избыточности в байтовом потоке для создания меньшего байтового потока называется сжатием .
В 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, так как они тесно связаны.Наконец: если вы архивируете данные для чего-то другого, кроме кратковременного хранения, вы должны выбрать что-то с открытым исходным кодом и, желательно, широко распространенное, чтобы минимизировать головные боли в дальнейшем.
источник
lzo, gz, b2, lzma (.lzma2 =.xz)
являются «потоковыми» компрессорами: они сжимают поток байсов, которые не знают и не заботятся о файлах, каталогах и метаданных, таких как разрешения. Вы должны использовать архиватор, такой как tar, чтобы объединить все эти данные в поток байтов (файл tar) и сжать их с помощью компрессора. Если это данные одного файла, который вас интересует, вы можете также передать этот файл одному из этих компрессоров.Tar, cpio and pax
являются архиваторами: они берут кучу файлов и каталогов и кодируют данные и метаданные в один файл. tar является самым популярным и наиболее совместимым, хотя технические достоинства между ними достаточно минимальны, чтобы на заре времен происходили религиозные войны.7z и zip - это компрессоры и дуги: затем сохраните все данные и метаданные и сожмите их. Однако AFAICT, ни один из них не сохраняет Unix-разрешения.
Zip использует тот же алгоритм, что и gzip, который называется DEFLATE. 7z использует алгоритм lzma
чтобы прочитать один файл из tar.gz или чего-то подобного, вам нужно будет распаковать весь поток gz до тех пор, пока не будет открыто достаточное количество файла tar, чтобы вы могли извлечь его. Zip позволяет сжимать и извлекать каждый файл в отдельности. 7z может иметь любое поведение.
Коэффициенты сжатия и скорости: gzip и lzo имеют очень очень высокую скорость сжатия и декомпрессии, но низкие коэффициенты сжатия. Это также не займет много памяти для сжатия. gzip немного медленнее и дает немного лучшую степень сжатия, чем lzo.
Это так быстро, что может быть быстрее считывать сжатый файл gz или lzo с диска и распаковывать его на лету, а не читать несжатый файл прямо с диска.
LZMA (xz) обеспечивает отличное сжатие общих данных, но для сжатия и распаковки требуется очень много времени, а для сжатия требуется значительное количество памяти.
bz2 был предпочтительным алгоритмом с высокой степенью сжатия, но он потерял популярность, так как он медленнее lzma и требует больше времени для сжатия и распаковки. Однако для определенных типов данных (последовательности ДНК, файлы с очень большими сериями одного и того же байта и т. Д.) Bzip2 может превзойти все остальное. Например, однажды мне пришлось сжать файл размером 4 ГБ, равный 1, а b2 уменьшил i до нескольких десятков килобайт, в то время как lzma потребовала около 10 MB, если я правильно помню.
источник
Для особо больших файлов вы можете использовать
rzip
. Сначала он просматривает избыточные данные внутри больших блоков размером 900 МБ, кодирует их, а затем передает данные в bzip2 (не совсем, но используются те же алгоритмы).Эффект? Гораздо быстрее, чем
xz
,lzma
илиbzip2
, и, по моему опыту, его степень сжатия конкурентов, чтоlzma
. Впрочем, это ОЗУ.http://en.wikipedia.org/wiki/Rzip
источник