Відповіді:
TAR створює один архівний файл з багатьох файлів, але не стискає їх.
Файл tar - це об'єднання одного або декількох файлів. Кожному файлу передує запис 512-байтного заголовка. Дані файлу записуються без змін, за винятком того, що його довжина округлена до кратного 512 байт, а додатковий простір заповнений нулем. Кінець архіву позначений щонайменше двома поспіль заповненими нулями записами.
GZIP стискає один файл в інший один файл, але не створює архівів.
... Хоча його формат файлів також дозволяє об'єднувати декілька таких потоків (ZIP-файли просто декомпресуються об'єднаними, як ніби вони були спочатку одним файлом), gzip, як правило, використовується для стиснення лише окремих файлів. [4] Стислі архіви, як правило, створюються шляхом збирання колекцій файлів в єдиний архів tar, а потім стискання цього архіву gzip.
tar -xzvf tarball.tar.gz single/file.txt
. За лаштунками їй потрібно зробити додаткову роботу, але для виступів він витягує один файл.
.tar.*
стислий архів завжди "твердий", тобто. складається з одного стисненого потоку. .zip
Архів з іншого боку , це не солідно взагалі, алгоритм стиснення починається заново для кожного файлу. Він жертвує ефективністю стиснення для прискорення випадкового доступу. .7z
архіви можуть бути суцільними, нетвердими або мати суцільні блоки.
Gzip / Bzip2 - це потокові компресори. Вони стискають потік даних у щось менше. Їх можна використовувати на окремих файлах, але не на групах файлів самостійно.
З іншого боку, Tar має можливість перетворювати список файлів із шляхами, правами доступу та інформацією про право власності в єдиний безперервний потік - і навпаки.
Ось чому для архівації файлів (і якщо також потрібне стиснення) зазвичай використовується tar + деякий метод стиснення.
Тар відповідає за те, щоб добре зробити одне і лише одне: (не) архівувати в (із) одного архівного файлу. Якого? Одне і єдине: набір файлів.
Gzip відповідає за те, щоб добре зробити одне і лише одне: (не) стиснення. Якого? Тільки одне і одне: єдиний файл будь-якого типу ... і включає файл, створений за допомогою tar.
Це сходить до філософії конвеєрного проектування UNIX, основної архітектури "труби та фільтри"; трактування всього як файлу та здорової архітектурної мети "одно-що-роби-одне-тільки-і-роби-добре" (що призводить до дуже елегантної та простої підключення плей-плей .)
За своєю простотою він має майже алгебраїчний характер (здоровенна мета в дизайні систем). І це не легкий подвиг.
Багато в чому (і не без його вад) це майже вершина у використанні, модульності, нещільному з’єднанні та високій згуртованості. Якщо ви розумієте ці чотири (а я маю на увазі справді розумію ), ви розумієте, буде очевидно, чому tar і gzip працюють так у парах.
Перш за все, TAR не був створений для створення файлових архівів. Це стрічка ARchiver . Його завдання полягає в тому, щоб виписати або завантажити в архів до / зі стрічки.
Опція -f змушує використовувати файл як "віртуальну стрічку", яку потім можна стиснути іншою програмою. Насправді таке стиснення трапляється і на реальних світлицях.
Звичайно, філософія використання однієї програми, щоб зробити це добре, також враховується в цьому випадку, але можна пропустити, чому архіви TAR структуровані як потік замість каталогу вмісту + вмісту.
Традиційно системи Unix використовується одна програма для виконання одного завдання в відповідно до філософією Unix : tar
просто засіб для упаковки декількох файлів в один файл, спочатку для резервного копіювання на магнітній стрічці (отже tar
, т мавпу ар зубки). tar
не забезпечує стиснення; отриманий нестислий архів зазвичай стискають з якою - або іншою програмою , такими як gzip
, bzip2
або xz
. За старих часів вони використовували compress
команду для цього; новіші алгоритми стиснення набагато ефективніші, ніж цей.
Високомодульований підхід, продиктований філософією Unix, означає, що кожну програму можна використовувати окремо за необхідності або комбінувати для виконання більш складних завдань, включаючи створення стислих архівів, як описано тут. Для таких завдань, це також дозволяє легко замінювати окремі інструменти за потребою; ви просто змінили програму стиснення, щоб використовувати інший алгоритм стиснення, не потребуючи заміни самої tar
утиліти.
Цей модульний підхід не позбавлений своїх недоліків. Як зазначалося в коментарях до інших відповідей, виділений стислий архівний формат, подібний, .zip
може краще обробляти вилучення окремих файлів; стислі тарболи потрібно декомпресувати майже в повному обсязі, щоб витягнути файли в кінці архіву, тоді як .zip
архіви дозволяють довільно отримувати доступ до їх вмісту. (Деякі новіші формати, наприклад .7z
, підтримують суцільні та нетверді архіви, а також суцільні блоки різного розміру в більших архівах.) Постійне використання tar
спільно з окремою утилітою стиснення - це питання традиції та сумісності; також, .7z
і .zip
не підтримують метадані файлової системи Unix, такі як дозволи.