В Linux / Unix имеет значение .tar.gz против .zip?

69

Кроссплатформенные программы иногда распространяются как .tar.gz для версии Unix и .zip для версии Windows. Это имеет смысл, когда содержимое каждого должно быть различным.

Однако, если содержимое будет одинаковым, было бы проще иметь одну загрузку. Windows предпочитает .zip, потому что это формат, который она может обрабатывать сразу после установки. Имеет ли это значение в Unix? То есть я сегодня пробовал разархивировать файл в Ubuntu Linux, и он работал нормально; Есть ли проблемы с этим в любой текущей Unix-подобной операционной системе, или это нормально, просто предоставить файл .zip по всем направлениям?

rwallace
источник

Ответы:

28

Necromancing.
Да, это важно
На самом деле, это зависит.

tar.gz

  • Хранит атрибуты файлов unix : uid, gid, permissions (особенно исполняемые). Значение по умолчанию может зависеть от вашего дистрибутива и может быть переключено с параметрами.
  • Объединяет все файлы, подлежащие архивированию, в один файл («Tape ARchive»).
  • Фактическое сжатие выполняется GZIP на одном файле .tar

застежка-молния

  • Хранит атрибуты MSDOS . (Архив, Только для чтения, Скрытый, Система)
  • Сжатие каждого файла в отдельности, затем объединение отдельно сжатых файлов в один файл
  • Включает таблицу файлов в конце файла

Поскольку zip сжимает файлы по отдельности, zip-архив, скорее всего, будет иметь больший размер (особенно со многими меньшими файлами - подумайте о файлах конфигурации).

Итак, вы видите, начиная с размера файла, если вы заархивируете кучу файлов в Linux / Unix, а затем разархивируете их, атрибуты файла исчезнут (по крайней мере те, которые не поддерживаются MS-DOS - зависит от того, какой ZIP -программное обеспечение вы используете). Это может иметь значение, а может и не иметь, и в этом случае это не имеет значения (поскольку разница в размере файла в большинстве случаев незначительна).

затруднительное положение
источник
10
стандартный дистрибутив zip в unix-подобных системах (info-zip) также хранит атрибуты файлов unix.
Эрик Аронесты
35

tar gz лучше подходит для Linux / Unix, поскольку он сохраняет разрешения, такие как «исполняемый файл» в сценариях.

Zam
источник
8
Утилита архивирования OS X и zip / unzip сохраняют разрешения, но могут быть и другие утилиты, которые этого не делают.
Lri
4
Стандартные инструменты zip / unzip (info-zip) сохраняют права на linux и временные метки на окнах. см. en.wikipedia.org/wiki/Info-ZIP для типичных возможностей ... которые преодолевают проблемы с разрешениями и ограничениями размера файлов при сохранении желаемого произвольного доступа и редактируемых свойств архива.
Эрик Аронесты
33

В наши дни большинство популярных дистрибутивов Linux по умолчанию оснащены zipсовместимостью. Но , как заявил nc3b, tarи gzipявляются более распространенными в системах Linux / Unix. Если вам нужна 95% совместимость с этими системами, рассмотрите возможность использования tarи gzip. Если вам нужно только 85%, все zipбудет хорошо.

BloodPhilia
источник
2
Хорошо, 95% лучше, чем 85% :-) Очень незначительный вопрос, имеет ли значение вообще, является ли расширение файла .tgz вместо .tar.gz?
rwallace
8
Расширение не имеет значения вообще, оно просто используется для справки пользователями и программами. Если расширение - .XXX, и вы знаете, что это .tar, вы все равно можете использовать tar для его распаковки. .tgz и .tar.gz на самом деле являются одинаковыми расширениями, и файлы с этими расширениями будут похожи.
BloodPhilia
2
С другой стороны, для 100% совместимости с Windows вам потребуется использовать cab.
киноюф
3
tar будет хранить uid, gid и разрешения, такие как + x в системах Unix. zip хранит архив, только для чтения, скрытый и системный на системах Windows.
Эндрю Де Андраде
1
@mtak вы всегда можете просто использовать gunzip --suffix .zip npm-debug.log.zipилиgunzip -c < npm-debug.log.zip > npm-debug.log
Iwan Aucamp
19

tar / gzip - довольно дурацкий формат, поскольку к архиву нельзя получить произвольный доступ, обновить, проверить или даже добавить ... без необходимости распаковывать весь архив.

zip намного лучше в этом отношении .... вы можете быстро получить содержимое zip-файла, добавить его без повторного сжатия первой части и т. д.

zip имеет некоторые ограничения по размеру ... в зависимости от используемой версии "zip" ... и это может быть проблемой. но стандартный инструмент info-zip, который поставляется с большинством linux-подобных ОС, не имеет ограничений по размеру и прекрасно сохраняет права доступа к файлам.

см: https://en.wikipedia.org/wiki/Info-ZIP для возможностей

Эрик Аронесты
источник
О каких ограничениях вы говорите?
Pacerier
отредактировал и предоставил ссылку
Erik Aronesty
9

Установки Barebones Unix не содержат unzip (т.е. серверные установки), но они всегда содержат tar и gzip . Если ваша аудитория - серверы, я бы пошел на gzip .

Также gzip имеет большую степень сжатия, чем zip , поэтому файл будет меньше.

Rwky
источник
1
Я бы не сказал, что gzip сжимает лучше, чем ZIP. Оба используют один и тот же алгоритм DEFLATE, и все проведенные мной сравнения дают схожие результаты по размеру файла.
Гравитация
4
Tar.gz сжимает весь файл за один раз, тогда как zip сжимает файлы по отдельности. Для многих маленьких файлов первый подход обычно генерирует заметно меньшие файлы, потому что избыточность может использоваться между файлами. Разница не огромная, хотя.
слеске
3

Да, это важно Тар является архиватором. И в tar.gz мы сжимаем этот архив.

Zip - это и архиватор, и компрессор.

Если сравнить сжатие, по моему опыту, gzip намного лучше, чем zip.

И другая существенная разница упоминается в другом ответе . Если у вас очень большой файловый архив и вы хотите извлечь небольшой файл, Zip позволяет вам это сделать. Но с tar.gz вам нужно извлечь весь архив.

Ракеш Редди
источник
Не архив сжатых файлов, а архив архивных файлов. Вот почему вы должны извлечь весь архив.
m93a
2

Решение в основном сводится к этим:

  • GZIP сохраняет права доступа к файлам Unix как разрешенные для выполнения файлы.

  • С другой стороны ZIP работает из коробки в Windows.

Альберто Сальвия Новелла
источник
1

tarи gzipгораздо чаще встречаются на * nix-es, чем unzip. Например, на данный момент на моей арке-2009.08 нет unzip.

nc3b
источник
6
Но есть bsdtar(часть libarchive), которая прекрасно справляется с ZIP.
Гравитация
Упс: "> Не знал об этом. Спасибо! :-)
nc3b