Я работаю в среде Linux и хочу знать о командах tar и zip.
Что является более эффективным - tar или zip? Мне также нужно знать различия между командами tar и zip. Кто-нибудь может мне их объяснить?
tar
создает только один файл из нескольких файлов, он не выполняет сжатие, если не объединяет программу сжатия, такую как gzip
или bzip2
(которую можно вызывать из tar
, используя параметры -z
или -j
соответственно). zip
объединяет архивирование и сжатие в одной программе.
деготь
застежка-молния
Тот факт, что zip сжимает файлы по отдельности, будет влиять на степень сжатия, особенно для многих небольших похожих файлов.
(По крайней мере, это было точно правильно десять лет назад.)
Tar сохраняет гораздо больше метаданных, чем Zip, посмотрите мое сравнение (оно немного устарело):
(Нажмите, чтобы увеличить)
Тар проходит 65% тестов, где Zip только 17%. Я сделал тестовый набор доступным на github под лицензией BSD, чтобы вы могли попробовать сами, если у вас есть Mac. Для Linux там я не уверен, есть ли какие-либо метаданные, поэтому эти тесты могут быть неактуальными.
Эффективность может быть измерена различными способами:
Есть и другие вопросы, например: «Насколько распространены инструменты для работы с полученными архивами?"
Так, например, bzip2
создает файлы меньшего размера, чем gzip
, но это может занять значительно больше времени. Кроме того, по моему опыту, gzip
универсален для Unix-подобных систем, но bzip2
все еще нет (хотя он очень распространен и обычно его легко получить).
Как заметил Вим, сам tar не сжимается. Если вы добавляете сжатие tar (например, чтобы получить .tar.gz или .tar.bz2), вы сжимаете весь файл tar одновременно. Напротив, zip сжимает каждый файл в отдельности.
Эффективность зависит от рабочей нагрузки. В частности, zip позволяет получить доступ к отдельным файлам напрямую. С помощью tar вы должны сначала найти ненужные (сжатые) файлы. Производительность сжатия зависит от того, что вы сжимаете. tar
с bzip2
часто лучше подходит для большого количества похожих файлов (например, исходного каталога). zip
может быть лучше, если каждый файл имеет очень разный контент.
Zip-архивы содержат центральный каталог их содержимого в конце (скорее всего, вам не придется создавать каталог заранее, когда вы еще не знаете, что будет внутри). Это позволяет быстро извлечь отдельные файлы без необходимости распаковывать весь архив: просто прочитайте каталог архива и извлеките только то, что нужно. Однако это требует доступности всего архива и произвольного доступа, который доступен только на блочных устройствах (дискеты, жесткие диски). Кроме того, каталог архива уязвим: если архив по какой-то причине усекается, ему требуется сложная магия для извлечения чего-либо полезного из архива.
Zip-архивы были созданы для использования BBS, где было важно иметь возможность объединить содержимое каталога в один (и сжатый) файл - вместо того, чтобы загружать, возможно, тысячи отдельных файлов. Как и большинство веб-сайтов, даже сегодня они загружают свои файлы по тем же причинам.
Tar архивы были разработаны для объединения резервных копий, которые будут использоваться для ленточных накопителей, следовательно, для последовательного доступа. Там нет центрального каталога; вместо этого архив содержит блоки заголовка через равные промежутки времени, которые указывают, какие файлы будут следовать в следующих нескольких блоках. Архив tar предназначен для чтения одним махом; если должен быть извлечен только один файл, архив читается последовательно, начиная с самого начала до тех пор, пока не будет найден запрошенный файл (который также может быть в самом конце). Сжатие применяется поверх этого; каждая из различных программ сжатия, которые применяются к архивам tar (compress
, gzip
, bzip2
и т. д.), являются потоковыми компрессорами и не изменяют последовательную природу архива в любом случае. В худшем случае вам понадобится немного больше блоков, чтобы начать извлечение.
Это может звучать как банальное различие, но на самом деле представляет собой противоположность философии. При использовании zip-архивов всегда требуется иметь под рукой весь файл, чтобы делать с ним что-нибудь полезное, тогда как архив tar может быть передан в конвейер. Я могу скачать большой архив tar и начать извлекать его с самого начала, как только появятся первые несколько блоков (и, возможно, прервать загрузку, как только я получу искомый файл). Для Zip-архива мне нужно подождать, пока не появится каталог архива, который находится в самом конце архива. Но как только у меня будет весь файл под рукой, извлечение частичного содержимого из него будет намного быстрее из файла tar.
Оба формата имеют одну сильную сторону, в зависимости от того, где и как они используются. Поскольку конвейеры (и, следовательно, понятие потоковой передачи данных от одного процесса к другому) реально существуют только в мире Unix, главное преимущество архивов tar теряется в других системах, поэтому архивы Zip там гораздо более популярны. Но архивы tar более гибкие, поэтому я предпочитаю их всякий раз, когда у меня есть выбор.
Как уже говорилось, tar создает большой "блок" из всех файлов, которые могут быть сжаты с помощью потокового редактора, такого как gzip или bzip2.
Недостатком этого является то, что вам нужно распаковать весь файл, чтобы получить доступ к одному файлу внутри архива.
Преимущество этого состоит в том, что степень сжатия обычно выше, особенно когда сжатые файлы очень похожи.
Другие упаковщики, такие как "rar", имеют "блочный режим" (или аналогичный), чтобы иметь такой же эффект.