gzip без дьогтю? Чому їх використовують разом?


Відповіді:


72

TAR створює один архівний файл з багатьох файлів, але не стискає їх.

Форматування деталей

Файл tar - це об'єднання одного або декількох файлів. Кожному файлу передує запис 512-байтного заголовка. Дані файлу записуються без змін, за винятком того, що його довжина округлена до кратного 512 байт, а додатковий простір заповнений нулем. Кінець архіву позначений щонайменше двома поспіль заповненими нулями записами.

GZIP стискає один файл в інший один файл, але не створює архівів.

Формат файлу

... Хоча його формат файлів також дозволяє об'єднувати декілька таких потоків (ZIP-файли просто декомпресуються об'єднаними, як ніби вони були спочатку одним файлом), gzip, як правило, використовується для стиснення лише окремих файлів. [4] Стислі архіви, як правило, створюються шляхом збирання колекцій файлів в єдиний архів tar, а потім стискання цього архіву gzip.


12
Файлу "tgz" немає такого поняття. Це tar.gz. Завдання gzip полягає в тому, щоб копіювати або розпаковувати його вміст (у цьому випадку - архів дьогтю). Це типова конвеєрна філософія Unix, і тому навряд чи унікальна.
luis.espinal

5
Ні, .tar.gz не є унікальним: .tar.bz2, .cpio.gz тощо працюють однаково.
користувач46971

3
@ user36310 Я знаю, що ви маєте на увазі в принципі, але на практиці інструменти дозволяють вам витягти один файл. tar -xzvf tarball.tar.gz single/file.txt. За лаштунками їй потрібно зробити додаткову роботу, але для виступів він витягує один файл.
Багата Гомолка

4
Зробіть це "багато зайвої роботи", якщо файл знаходиться в кінці великого архіву. Зрозуміло, що якщо вам потрібен випадковий доступ, zip / rar / xar / 7z / lzh / arj / cab / sit тощо - це вищі формати.
LaC

3
Якщо бути точним, .tar.*стислий архів завжди "твердий", тобто. складається з одного стисненого потоку. .zipАрхів з іншого боку , це не солідно взагалі, алгоритм стиснення починається заново для кожного файлу. Він жертвує ефективністю стиснення для прискорення випадкового доступу. .7zархіви можуть бути суцільними, нетвердими або мати суцільні блоки.
Даніель Б

17

Gzip / Bzip2 - це потокові компресори. Вони стискають потік даних у щось менше. Їх можна використовувати на окремих файлах, але не на групах файлів самостійно.

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

Ось чому для архівації файлів (і якщо також потрібне стиснення) зазвичай використовується tar + деякий метод стиснення.


12

Тар відповідає за те, щоб добре зробити одне і лише одне: (не) архівувати в (із) одного архівного файлу. Якого? Одне і єдине: набір файлів.

Gzip відповідає за те, щоб добре зробити одне і лише одне: (не) стиснення. Якого? Тільки одне і одне: єдиний файл будь-якого типу ... і включає файл, створений за допомогою tar.

Це сходить до філософії конвеєрного проектування UNIX, основної архітектури "труби та фільтри"; трактування всього як файлу та здорової архітектурної мети "одно-що-роби-одне-тільки-і-роби-добре" (що призводить до дуже елегантної та простої підключення плей-плей .)

За своєю простотою він має майже алгебраїчний характер (здоровенна мета в дизайні систем). І це не легкий подвиг.

Багато в чому (і не без його вад) це майже вершина у використанні, модульності, нещільному з’єднанні та високій згуртованості. Якщо ви розумієте ці чотири (а я маю на увазі справді розумію ), ви розумієте, буде очевидно, чому tar і gzip працюють так у парах.


1
Ця філософія UNIX прекрасна, все гаразд, але я зауважую, що вона не вистачає, створюючи нетверді архіви. (Витяг одного файлу з 1 ГБ tar.gz не повинен бути болем, і з того, що я тут зрозумів, ZIP набагато перевершує tar.gz ... правда?)
Мехрдад

@Mehrad - По-перше , що таке несолідний архів? Як приписують Вольтеру, "Якщо ти поговориш зі мною, спочатку ти повинен визначити свої умови". . По-друге , так, архітектура труб і фільтрів в конкретних випадках не вистачає, як і будь-яка інша архітектура, незалежно від її краси. Це дана технологія, і це не аргумент, який робиться. По-третє , поштовий індекс перевершує gzip та tar, але ви цього не просили. Ви запитали, чому працюють так, як вони роблять поштові та дьогтьові та чи є якісь переваги, і вам дали технічну відповідь.
luis.espinal

@Mehrad - також я не знаю, з якими проблемами ви стикаєтесь при розпакуванні | untar 1gig tar.gz файла. Я це робив багато разів, до 2 Гб із старішими встановленнями gzip (і до 4 ГБ з новішими версіями gzip.) Якщо ви робите це через провід або на NFS-кріпленні, то духу! Ви зіткнетеся з подібними проблемами виступу, як якщо б це було зроблено за допомогою звичайного блискавки. Чорт забираю, я навіть знімався з труби до віддаленого процесу, плюючи вхід gzip в сокет. Спробуйте це на блискавці. Для кожної проблеми використовуйте відповідний інструмент (будь то tar | gz або zip.)
luis.espinal

8

Перш за все, TAR не був створений для створення файлових архівів. Це стрічка ARchiver . Його завдання полягає в тому, щоб виписати або завантажити в архів до / зі стрічки.

Опція -f змушує використовувати файл як "віртуальну стрічку", яку потім можна стиснути іншою програмою. Насправді таке стиснення трапляється і на реальних світлицях.

Звичайно, філософія використання однієї програми, щоб зробити це добре, також враховується в цьому випадку, але можна пропустити, чому архіви TAR структуровані як потік замість каталогу вмісту + вмісту.


3
Правильно ... ZIP-файли вміщують усю інформацію про файл в єдиний заголовок, потім весь вміст файлу ... що унеможливлює додавання більше файлів до ZIP-файлу ... вам доведеться переписати весь файл ... з Формат TAR, заголовок для кожного файлу окремий, тому ви можете легко додавати більше файлів, не переписуючи всю стрічку
JoelFan

5

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

Високомодульований підхід, продиктований філософією Unix, означає, що кожну програму можна використовувати окремо за необхідності або комбінувати для виконання більш складних завдань, включаючи створення стислих архівів, як описано тут. Для таких завдань, це також дозволяє легко замінювати окремі інструменти за потребою; ви просто змінили програму стиснення, щоб використовувати інший алгоритм стиснення, не потребуючи заміни самої tarутиліти.

Цей модульний підхід не позбавлений своїх недоліків. Як зазначалося в коментарях до інших відповідей, виділений стислий архівний формат, подібний, .zipможе краще обробляти вилучення окремих файлів; стислі тарболи потрібно декомпресувати майже в повному обсязі, щоб витягнути файли в кінці архіву, тоді як .zipархіви дозволяють довільно отримувати доступ до їх вмісту. (Деякі новіші формати, наприклад .7z, підтримують суцільні та нетверді архіви, а також суцільні блоки різного розміру в більших архівах.) Постійне використання tarспільно з окремою утилітою стиснення - це питання традиції та сумісності; також, .7zі .zipне підтримують метадані файлової системи Unix, такі як дозволи.

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