Частина 1: Продуктивність
Ось порівняння двох окремих робочих процесів і того, що вони роблять.
У вас на диску blah.tar.gz
є файл, який, скажімо, становить 1 ГБ даних, стиснених gzip, який при нестисненні займає 2 ГБ (тобто коефіцієнт стиснення 50%).
Спосіб, який ви створили б це, якби архівувати та стискати окремо, буде:
tar cf blah.tar files ...
Це призвело б blah.tar
до простого агрегування files ...
неспресованого вигляду.
Тоді ви зробили б
gzip blah.tar
Це дозволить прочитати вміст blah.tar
диска, стиснути їх за допомогою алгоритму стиснення gzip, записати вміст у нього blah.tar.gz
, а потім від’єднати (видалити) файл blah.tar
.
Тепер давайте розпакуємо!
Шлях 1
У вас є blah.tar.gz
, так чи інакше.
Ви вирішили запустити:
gunzip blah.tar.gz
Це буде
- ЧИТАЙТЕ вміст стислих даних 1 Гб
blah.tar.gz
.
- ОБРОБКАЙТЕ стислі дані через
gzip
декомпресор в пам'яті.
- Коли буфер пам'яті заповнюється даними, що вартують "блок", ЗАПИСЬТЕ нестиснені дані у файл
blah.tar
на диску і повторюйте, доки всі стислі дані не будуть прочитані.
- Від’єднайте (видаліть) файл
blah.tar.gz
.
Тепер у вас є blah.tar
диск, який не стискається, але містить один або кілька файлів всередині нього з дуже низькою структурою даних. Розмір файлу, ймовірно, на пару байтів більший, ніж сума всіх файлових даних.
Біжи:
tar xvf blah.tar
Це буде
- ЧИТАЙТЕ 2 ГБ вмісту нестиснених даних
blah.tar
та tar
структур даних файлового формату, включаючи інформацію про дозволи файлів, назви файлів, каталоги тощо.
- ЗАПИСЬ 2 ГБ даних плюс метадані на диск. Це включає: переклад інформації про структуру даних / метаданих у створення нових файлів і каталогів на диску, якщо це доречно, або перезапис існуючих файлів і каталогів з новим вмістом даних.
Загальна кількість даних, яку ми читали з диска в цьому процесі, становила 1 ГБ (для gunzip) + 2 ГБ (для смоли) = 3 ГБ.
Загальна кількість даних, які ми ВИРОБИЛИ на диск у цьому процесі, склала 2 ГБ (для gunzip) + 2 ГБ (для смоли) + кілька байт для метаданих = близько 4 ГБ.
Шлях 2
У вас є blah.tar.gz
, так чи інакше.
Ви вирішили запустити:
tar xvzf blah.tar.gz
Це буде
- ЧИТАЙТЕ 1 Гб стислий вміст даних
blah.tar.gz
, блок за один раз, в пам'ять.
- ОБРОБКАЙТЕ стислі дані через
gzip
декомпресор в пам'яті.
- Оскільки буфер пам'яті заповнюється, то це буде труба , що дані в пам'яті, аж до
tar
формату файлу парсер, який буде зчитувати інформацію про метаданих і т.д. , а також дані незжатих файлів.
- Коли буфер пам’яті заповнюється в
tar
аналізаторі файлів, він запише некомпресовані дані на диск, створюючи файли та каталоги та заповнюючи їх нестисненим вмістом.
Загальна інформація, яку ми читали з диска в цьому процесі, становила 1 ГБ стислих даних, період.
Загальна кількість даних, які ми ВИРОБИЛИ на диск у цьому процесі, становила 2 ГБ нестиснених даних + кілька байт для метаданих = близько 2 ГБ.
Якщо ви помітили, обсяг дискового введення - виведення в / Шлях 2 є ідентичним диску I / O в виконанні, скажімо, Zip
або 7-Zip програм, коригування будь-яких відмінностей в ступені стиснення.
І якщо коефіцієнт стиснення викликає занепокоєння, використовуйте Xz
компресор для інкапсуляції tar
, і у вас є архів LZMA2'ed TAR, який настільки ж ефективний, як і найдосконаліший алгоритм, доступний для 7-Zip :-)
Частина 2: Особливості
tar
зберігає дозволи Unix у своїх метаданих файлів, і він дуже добре відомий і перевірений для успішного упаковки каталогу з усіма різними дозволами, символічними посиланнями і т. д. Існує більше декількох випадків, коли може знадобитися глобувати купу файлів в один файл або потік, але не обов’язково стискати його (хоча стиснення корисне і часто використовується).
Частина 3: Сумісність
Багато інструментів поширюються у вихідній чи двійковій формі як .tar.gz або .tar.bz2, оскільки це формат файлу "найнижчий загальний знаменник": так само, як і більшість користувачів Windows має доступ до .zip або .rar декомпресорів, більшості установок Linux , навіть найосновніший, матиме доступ до принаймні дьогтю та пістолета, незалежно від того, чи виповнилось це віком. Навіть прошивки Android мають доступ до цих інструментів.
Нові проекти, орієнтовані на аудиторії, які працюють із сучасними дистрибутивами, можуть дуже добре поширюватись у більш сучасному форматі, наприклад .tar.xz (використовуючи формат стиснення Xz (LZMA), який стискає краще, ніж gzip або bzip2), або .7z, що схоже на формати файлів ZIP або RAR тим, що вони одночасно стискають і задають макет для інкапсуляції декількох файлів в один файл.
Ви не бачите .7z, які використовуються частіше з тієї ж причини, що музика не продається в інтернет-магазинах завантажень у абсолютно нових форматах, таких як Opus або відео в WebM . Сумісність з людьми, що керують давніми або дуже базовими системами.
tar xvzf
важче, ніж7z -x
...