Що ефективніше - стиснення смоли або блискавки? Яка різниця між дьогтем та блискавкою?


68

Я працюю в середовищі Linux і хочу знати про команди tar та zip.

Що ефективніше - дьоготь або блискавка? Мені також потрібно знати відмінності між командами tar та zip. Хтось може мені їх пояснити?

Відповіді:


77

tarтільки робить один файл з декількох файлів, він не робить компресію , якщо не змішана програма стиснення , такі як gzipабо bzip2(які ви можете викликати з tar, використовуючи -zабо -jваріанти, відповідно). zipпоєднує як архівування, так і стиснення в одній програмі.


60

дьоготь

  • Припускаємо, що ви будете читати з одного кінця на інший - "Архівний стрічка". (Вік команди показує ...)
  • Не робить стиснення, але ви можете стиснути весь отриманий потік, пропускаючи його, наприклад, через gzip та bzip2 (зроблено внутрішньо за допомогою -z або -j)
  • Зберігає атрибути файлу unix : uid, gid, дозволи (найбільш помітно виконувані). За замовчуванням може залежати ваш розподіл, і його можна перемикати за допомогою параметрів.

блискавка

  • Зберігає атрибути MSDOS . (Архів, Readonly, приховано, система)
  • Стискає кожен файл, після чого додає їх до архіву
  • Включає таблицю файлів у кінці файлу
  • і в результаті попередніх двох дозволяє читати лише точні частини про потрібний файл.

Той факт, що zip стискає файли окремо, впливатиме на коефіцієнт стиснення, особливо на багатьох малих подібних файлах.

(Принаймні, це було точно правильно десятиліття тому.)


22

Тар зберігає набагато більше метаданих, ніж Zip, дивіться моє порівняння (воно трохи застаріло):

введіть тут опис зображення

(Клацніть для збільшення)

Дьоготь проходить 65% тестів, де Zip проходить лише 17%. Я зробив тестовий набір доступним на github за ліцензією BSD, щоб ви могли спробувати самі, якщо у вас Mac. Для Linux там я не впевнений, чи є якісь метадані, тому ці тести можуть не бути актуальними.


Цікаво! +1 для цього. Але знову ж таки, це була величезна програма. Ви це писали з іншою метою? Просто цікаво.
CppLearner

Я написав тести для файлового менеджера, над яким працював кілька років тому. Ніколи не випускав його, хоча.
neoneye

1
У Linux є також метадані, тому для цього слід працювати.
zeitue

14

Ефективність може бути виміряна різними способами:

  1. Скільки часу займає процес?
  2. Наскільки великі отримані файли?

Є й інші питання, наприклад "Наскільки поширені інструменти для маніпулювання архівами, що виникають в результаті?"

Так, наприклад, bzip2створюються менші файли ніж gzip, але це може зайняти значно більше часу. Також, на мій досвід gzip, універсальний для Unix-подібних систем, але bzip2все ще немає (хоча це дуже часто і зазвичай легко отримати).


3
7zip ( 7-zip.org ) - ще один хороший варіант для отримання відмінної компресії за рахунок часу процесора. Менш поширений, ніж bzip2 (не встановлений за замовчуванням де-небудь, про який я знаю), але простий у встановленні в більшості місць (він є в стандартних сховищах для більшості дистрибутивів Linux і є простий пакет встановлення для Windows. Як і tar + gzip, він несе в собі вікно стиснення вхідних файлів, завдяки чому отримує ще більшу економію за рахунок zip, включаючи багато невеликих файлів
Девід Спіллетт,

3
Ефективність можна також виміряти тим, наскільки добре він зберігає дані, дивіться мою відповідь на це запитання. Дьоготь набагато краще, ніж блискавка при збереженні даних.
neoneye

1
ще одним вимірювальним кудом є сумісність поза UNIX. Windows прекрасно працює з zip (вбудований у Windows), зазвичай може легко обробляти tar.gz з умовно-безкоштовним програмним забезпеченням, але bzip2 зустрічається рідко. На жаль, оригінальне запитання не згадало про ці критерії, тому не можу зрозуміти, чи є вони відповідні.
Багата Гомолка

1
Я одного разу провів ретельний огляд коефіцієнта стиснення та часу, необхідного для деяких звичайних компресорів, і який був би найефективнішим залежно від того, як ви цінуєте простір порівняно з часом: blog.grandtrunk.net/2004/07/practical-compressor-test
Wim

9

Як зазначив Вім, дьоготь сам по собі не стискається. Якщо ви додаєте стискати дьоготь (наприклад, щоб отримати .tar.gz або .tar.bz2), ви стискаєте весь файл смоли відразу. На відміну від цього, zip стискає кожен файл окремо.

Ефективність залежить від завантаженості. Зокрема, zip дозволяє отримати доступ до окремих файлів безпосередньо. За допомогою дьогтю ви повинні спочатку шукати непотрібні (стиснуті) файли раніше. Ефективність стиснення залежить від того, що ви стискаєте. tarз bzip2часто краще для великої кількості подібних файлів (наприклад, вихідний каталог). zipможе бути краще, якщо кожен файл має дуже різний вміст.


4
... з іншого боку, ви повинні отримати весь zip-файл, перш ніж ви зможете отримати доступ до вмісту, оскільки ток розміщується в кінці. навпаки, ви можете знімати дьоготь так само швидко, як приходять байти ...
akira

6

Архіви Zip містять в кінці центральний каталог їх вмісту (швидше за все, щоб уникнути необхідності створювати каталог заздалегідь, де ви ще не знаєте, що буде всередині). Це дозволяє швидко витягнути окремі файли без розпакування всього архіву: Просто прочитайте каталог архівів і витягніть лише те, що потрібно. Однак для цього потрібен доступ до всього архіву та вимагає випадкового доступу, який доступний лише на блокових пристроях (дискети, жорсткі диски). Крім того, каталог архівів є вразливим: якщо архів з якоїсь причини обрізається, для його отримання потрібні значні майстри, щоб витягти з архіву все корисне.

Архіви Zip були створені для використання BBS, де було важливо вміти зв'язувати каталог в один єдиний (і стислий) файл, а не завантажувати, можливо, тисячі одиничних файлів. Так само, як і більшість веб-сайтів, вони завантажують свої завантаження навіть сьогодні, з тих же причин.

Архів дьогтю був розроблений для створення резервних копій для використання для стрічкових накопичувачів, отже, для послідовного доступу . Центрального каталогу немає; натомість архів містить блоки заголовків через рівні проміжки часу, які вказують, які файли будуть слідувати в наступних кількох блоках. Архів дьогтю призначений для читання одним махом; якщо потрібно витягнути лише один файл, архів читається послідовно, починаючи з самого початку до знайденого потрібного файлу (що може бути і в самому кінці). Стиснення застосовується поверх цього; кожен з різних програм стиснення, які застосовуються до бітумінозних архівів ( compress, gzip,bzip2тощо) - це потокові компресори і не змінюють послідовний характер архіву ні в якому разі. У гіршому випадку вам знадобиться трохи більше блоків, поки ви не зможете розпочати видобуток.

Це може здатися тривіальною різницею, але насправді являє собою полярну протилежність у філософії. У архівах zip завжди є необхідність мати весь файл під рукою, щоб зробити з ним все корисне, тоді як архів смоли може бути переданий у конвеєр. Я можу завантажити великий архів дьогтю і почати витягувати його з самого початку, як тільки з’являться перші кілька блоків (і, можливо, перервати завантаження, як тільки я отримаю шуканий файл). Для архіву Zip мені потрібно чекати, поки з’явиться каталог архіву, який приходить в самому кінці архіву. Але як тільки я зробити є весь файл під рукою, витягуючи часткове утримання від нього буде набагато швидше з файлу дьогтю.

Обидва формати мають для них один дуже сильний момент, залежно від того, де і як вони використовуються. Оскільки трубопроводи (і, отже, поняття потокової передачі даних з одного процесу в інший) дійсно існують лише у світі Unix, головне перевагу архівів дьогтю втрачається в інших системах, тому Zip-архіви там набагато популярніші. Але архіви з дьогтем більш гнучкі, тому я віддаю перевагу їм, коли маю вибір.


5

Як уже було сказано, tar створює великий "блок" усіх файлів, які можна стиснути компресором потоку, як gzip або bzip2.

Недоліком цього є те, що вам потрібно розпакувати весь файл, щоб отримати доступ до одного файлу всередині архіву.

Перевагою цього є те, що коефіцієнт стиснення зазвичай вище, особливо коли стислі файли дуже схожі.

Інші пакети, такі як "rar", мають "режим блоку" (або подібний), щоб мати той же ефект.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.