Яка перевага використання 'tar' сьогодні?


209

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

Запитання:

  • Чи передбачено покарання продуктивності на етапах агрегації / стиснення / декомпресії за використання tarінкапсульованого в, gzipабо bzip2, порівняно з використанням формату файлів, який здійснює агрегацію та стиснення в одній структурі даних? Припустимо, що тривалість порівняння компресора однакова (наприклад, gzip і Deflate схожі).

  • Чи є функції tarформату файлів, які інші формати файлів, такі як .7zі .zipне мають?

  • Оскільки tarтакий старий формат файлів існує і сьогодні існують новіші формати файлів, чому він tar(як інкапсульований gzip, bzip2чи навіть новий xz) все ще настільки широко використовується сьогодні в GNU / Linux, Android, BSD та інших таких операційних системах UNIX для файлу перекази, джерело програми та бінарні завантаження, а іноді навіть у форматі менеджера пакунків?


33
Я не згоден, що це "витрачає час". Якщо ви маєте на увазі продуктивність, фактична сума покарання за tar не має, оскільки формат дуже ефективний. Якщо ви маєте на увазі, що він витрачає ваш час, я не бачу, як tar xvzfважче, ніж 7z -x...
allquixotic

41
Він, здається, нарікає на те, що дьоготь не зберігає каталог на початку, тому інструменти стиснення Gui, які хочуть перерахувати вміст до вилучення, повинні розпакувати весь дьоготь лише для того, щоб перерахувати вміст, після чого вони знову розпакують його при вилученні. .
psusi

10
@MarcusJ: ти думаєш, що 7z якось магічно знає, звідки починається кожен файл в архіві? Крім того, звичайні алгоритми стиснення (gzip, bzip2) працюють із потоковим вмістом: не потрібно виконати 100% перший етап перед наступним.
souser12345

11
Крім того, @MarcusJ вас, схоже, бентежать дві різні речі: коли ви робите tar xvzf, нестиснені дані не записуються на жорсткий диск у .tarформаті! Ви маєте рацію, що якби ви запустили gunzip blah.tar.gzі потім tar xf blah.tar, вони записували б дані на диск двічі (один раз у форматі .tar та знову як файли у файловій системі), але насправді ніхто так не робить. В tar xzfвикористовує UNIX труб ( в основному копії пам'яті) для передачі незжатих даних gzip(або будь-який інший компресор) , щоб tar, таким чином , дані НЕ записуються на диск в .tarформаті.
allquixotic

14
Я знаю одне, що tar(особливо стиснене) поводиться жахливо, коли мова йде про корупцію даних. Малі дані про надмірність / відновлення, додані сучасними форматами, коштують золота
PPC

Відповіді:


178

Частина 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 . Сумісність з людьми, що керують давніми або дуже базовими системами.


Kudos для чудової відповіді з усім вмістом, розділеним під три чіткі заголовки.
JFW

2
"Частина 3: Сумісність", здається, була скопійована з відповіді @ Kruug.
titaniumdecoy

23
@titaniumdecoy Ви помітили, що все це було тихо, хто спочатку написав цю частину та відредагував її у відповідь Крюга?
slhck

2
Дякую, що вказали на це, я не помітив. Однак мені здається трохи дурним мати однаковий блок тексту у двох різних відповідях на цій сторінці.
titaniumdecoy

1
Це дає відповідь, чому tarвписується в архіваційну екосистему (тобто для об'єднання файлів разом, забезпечуючи підвищення продуктивності та деякі інші переваги, такі як збереження дозволів), але це не стосується того, чому сучасні альтернативи, такі як darне використовуються на місці. Іншими словами, ця відповідь виправдовує використання файлових агрегаторів, але не самого tarпрограмного забезпечення.
габоровий

101

На це відповіли на "Переповнення стека" .

bzip і gzip працюють над окремими файлами, а не групами файлів. Простий старий zip (і pkzip) працює над групами файлів і має вбудовану концепцію архіву.

Філософія * nix - це один з невеликих інструментів, який дуже добре виконує конкретні завдання і може бути пов'язаний між собою. Ось чому тут є два інструменти, які мають конкретні завдання, і вони розроблені так, щоб вони добре поєднувалися. Це також означає, що ви можете використовувати tar для групування файлів, а потім у вас є вибір інструменту стиснення (bzip, gzip тощо).

Багато інструментів поширюються у вихідній чи двійковій формі як .tar.gz або .tar.bz2, оскільки це формат файлу "найнижчий загальний знаменник": так само, як і більшість користувачів Windows має доступ до .zip або .rar декомпресорів, більшості установок Linux , навіть найосновніший, матиме принаймні доступ tarі gunzip, незалежно від того, скільки років він чи зрівняний. Навіть прошивки Android мають доступ до цих інструментів.

Нові проекти, орієнтовані на аудиторії, які працюють із сучасними дистрибутивами, можуть дуже добре розповсюджуватись у більш сучасному форматі, наприклад, .tar.xz(використовуючи формат стиснення Xz ( LZMA ), який стискає краще, ніж gzip або bzip2), або .7z, що схоже на ZIP або RAR формати файлів у тому, що він одночасно стискає і вказує макет для інкапсуляції декількох файлів в один файл.

Ви не бачите .7z, які використовуються частіше з тієї ж причини, що музика не продається в інтернет-магазинах завантажень у абсолютно нових форматах, таких як Opus або відео в WebM . Сумісність з людьми, що керують старовинними або дуже основними системами, є важливою.


7
Привіт @Kruug, я відредагував вашу публікацію лише для того, щоб зрозуміти, чому люди все-таки вирішили використовувати ці формати, коли у них є вибір використовувати щось інше. Я не змінив текст, який ви вже мали. Це лише для того, щоб те, що, як видається, є канонічною відповіддю на це питання, матиме повну картину. Ви можете редагувати мою
редакцію,

5
@allquixotic створення кого? Відредагуйте правки та відредагуйте, щоб ви могли змінити редагування ...
SnakeDoc

21
Ця відповідь, безумовно, є випадком "мене іноді здувають незаслужені результати". Це не стосується основної проблеми питання, що стосується переліку вмісту стисненого дьогтю, і це навіть не оригінальна відповідь!
Ярослав Рахматуллін

5
-1 за велику справедливість. це повинен був бути коментарем.
Вім

6
Я не купую спадковий / найнижчий аргумент загального знаменника; Я пам’ятаю, що в нових системах (НД) часто доводиться завантажувати gzip / gunzip (з sunfreeware) просто для встановлення іншого програмного забезпечення, яке упаковано tar.gz (плюс gnu tar, оскільки смола сонце всмоктується). Для знахідки / нижнього загального знаменника ви мали tar.Z(стиснути / скасувати). Прогресування утиліт - це постійний потік (не призначений каламбур) змін і вдосконалень: Z => zip => gz => bz2 => 7z => xz (або в будь-якому порядку, який ви віддаєте перевагу). Що стосується ролі tar, то деякі утиліти знімають / стискають, і все ще потребують tar для з’єднання ієрархій файлів.
Майкл

63

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

  • Ви хочете, щоб витягнуті дані зберегли час доступу до файлів? Дьоготь може це зробити. Щоб зберегти дозволи? Дьоготь може це зробити.

  • Ви хочете зберегти символічні посилання як символьні посилання? Тар робить це за замовчуванням. Хочете скопіювати ціль замість цього? Дьоготь може це зробити.

  • Ви хочете бути впевненими, що дані з твердими посиланнями зберігаються лише один раз (тобто робити правильно)? Тар робить це.

  • Ви хочете добре обробляти розріджені файли? Дьоготь може це зробити.

  • Ви хочете нестиснених даних (чому?)? Дьоготь може це зробити. Компрес з gzip? Дьоготь може це зробити. За допомогою bzip2? Дьоготь може це зробити. За допомогою довільних програм зовнішнього стиснення? Дьоготь може це зробити.

  • Ви хочете записати або відновити на / з нерозробленого пристрою? Формат Тар справляється із цим чудово.

  • Ви хочете додати файли до наявного архіву? Дьоготь може це зробити. Відрізнити два архіви, щоб побачити, що змінилося? Дьоготь може це зробити. Оновити лише ті частини архіву, які змінилися? Дьоготь може це зробити.

  • Ви хочете бути впевнені, що ви не архівуєте більш ніж одну файлову систему? Дьоготь може це зробити.

  • Ви хочете захопити лише ті файли, які новіші за останню резервну копію? Дьоготь може це зробити.

  • Ви хочете зберегти імена користувачів або групи користувачів чи номери? Дьоготь може робити будь-який.

  • Чи потрібно зберегти вузли пристрою (як файли в /dev), щоб після вилучення система запустилася правильно? Дьоготь може це зробити.

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


12
Для використання довільного компресора вам не потрібен гугл GNU: просто скажіть tar, щоб написати архів для stdout f -і передати його на компресор.
Ільмарі Каронен

3
"Ви хочете нестиснених даних (чому?)?" Я tarдуже часто використовую для копіювання дерева файлової системи з одного місця в інше і збереження дозволів тощо, і стиснення в цьому випадку просто займає додаткові цикли процесора. Напр tar cf - * | tar xf - -C /somewhere.
Стів

1
Крім того, ви хочете, щоб .tar файл, коли файлова система призначення виконує дедублювання. Створення стислих архівів у файловій системі, яка виконує дедуплікацію, істотно знизить коефіцієнт дедупінгу. Приклад: Одного разу ми видалили файл $ 10 000,00 tar.gz; Це означає, що він займав 10 тисяч доларів США, тому що хтось використовував стиснення.
Аарон

Цикли процесора @Steve можуть бути дешевшими, ніж дискові введення для таких алгоритмів, як LZ4 або LZO. Ось чому вони використовуються в системах зрам і прозорих файлів стиснення, таких як NTFS, ZFS, Btrfs ... так що іноді це насправді швидше, ніж стискати, оскільки кількість дискового
вводу

30

Ви плутаєте два чіткі процеси архівації та стиснення .

Причини використання архіватора

Однією з причин використання архівування без стиснення є, наприклад, якщо купа файлів копіюється з одного хоста на інший. Така команда, як наступна

tar cf - some_directory | ssh host "(cd ~/somewhere | tar xf -)"

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

Причини використання архіватора зі стисканням gzip

Одна з причин , що я використовую tarз gzipце: швидкість! Якщо я хочу перенести кілька GiB текстових файлів з одного місця в інше, мені не байдуже видавлювати останні байти, оскільки стиснення використовується лише для транзиту, а не для тривалого зберігання. У тих випадках я використовую gzip, що не збільшує процесор (на відміну від 7-Zip , наприклад), це означає, що я знову пов'язаний вводу / виводу, а не пов'язаний з процесором. І знову: gzipможна вважати доступними всюди.

Причини для використання tarна користь scp, rsyncі т.д.

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


1
Але якщо ви збираєтесь архівувати, то чому б і не стиснути? Гаразд, так, це може заощадити час для файлів, які не легко стискаються, але тоді архіватори, мабуть, знають, що музика, наприклад, не дуже стислива, за винятком заголовків.
MarcusJ

2
Вам може не знадобитися, або ваш вміст може не бути стислим.
Hasturkun

4
З міркувань продуктивності часто простіше використовувати агрегацію стислих файлів під час надсилання даних по мережі з дуже високою пропускною здатністю, що перевищує швидкість, з якою компресор може стискати дані. Це можна досягти, наприклад, з Gigabit Ethernet; лише декілька добре розроблених алгоритмів стиснення, які також мають дуже поганий коефіцієнт стиснення, можуть стискати дані, які швидко навіть на великому настільному процесорі. На вбудованому пристрої у вас ще менше часу для роботи процесора.
allquixotic

3
Це не тільки прискорює роботи, але також дозволяє зберегти право власності на файли, часові позначки та атрибути (якщо користувацькі привілеї дозволяють)
Андре Хольцнер

3
@AndreHolzner Правильно. Я часто це роблю tar cf - . | (cd ~/somewhere; tar xvf -). Дійсно корисно не чекати, поки буде записаний центральний індекс (як, наприклад, у zip-файл).
user239558

24

Додаючи до цього хороші відповіді, я віддаю перевагу комбінації tar+ gzip|bzip2|xzголовним чином тому, що ці стислі файли схожі на потоки, і ви можете їх легко передати.

Мені потрібно розпакувати файл, доступний в Інтернеті. З будь-яким zipабо з rarформатів я мушу спочатку завантажити його, а потім розпакувати. З tar.{gz,bz2,xz}я можу скачати і розпакувати на тій же стадії, без необхідності маючи стислий архів на диску Спеціальні умови :

curl -s http://example.com/some_compressed_file.tar.gz | tar zx

Це залишить лише нестиснені файли на моєму диску і пришвидшить весь процес, тому що я не витрачаю часу спочатку завантажувати весь файл і після завершення завантаження я його розпаковую. Натомість я розтискаю його під час завантаження. Ви не можете цього зробити з файлами zipабо rarфайлами.


2
Я не знаю про rar (це жахлива програма, яка, здається, стала популярною піратами через її здатність розбиватися на кілька менших файлів), але ви можете передавати поштовий індекс просто чудово. Сторінка людини навіть згадує про це. Він також має перевагу в тому, що він може ефективно витягувати або оновлювати файли з середини великого архіву, хоча tar вимагає трохи кращого стиснення. Стиснення та випадковий доступ є компромісом.
psusi

3
@psusi неправильний. Ви можете робити такі хаки , але це все , що це - завантажити весь файл у пам'ять, а потім розпакувати його, а не розпаковувати під час завантаження. І funzipпросто витягує перший файл із zipfile, не всі.
Карлос Кампдеррос

2
@Stu просто для уточнення, це не проблема, це просто оптимізація вашого часу (мені не байдуже про місце, якщо це ви думали)
Carlos Campderrós

1
Обидві сторони працюють: Ви можете націлити на один бік і зняти з іншої сторони також:tar zc /some/folder | ssh user@host "cd /other/folder && tar zx"
Карлос Кампдеррос

1
@psusi, як я пам’ятаю з давніх часів, коли pkzip використовував для зберігання файлів на декількох дискетах, каталог магазинів zip в кінці архіву. Він завжди вимагає останню дискети для початку вилучення або показу каталогу. Так en.wikipedia.org/wiki/File:ZIP-64_Internal_Layout.svg
Михайло Москальов

13

Є кілька причин дотримуватися (GNU) Tar.

Це є:

  • Ліцензія GPL
  • добре в розумінні філософії Unix
    • інструмент єдиного призначення, здатний виконувати кілька завдань
  • добре документований і має багато довірених функцій
  • сумісний з декількома алгоритмами стиснення
  • проста у використанні, і люди мають з цим розвинені звички
  • широко доступні
  • Я відчуваю тепло і нечітке всередині, коли використовую програмне забезпечення, запущене RMS (за винятком Emacs )

Якщо ваша конкретна яловичина потребує "розпакування" тарболу, перш ніж зможете прочитати вміст, то ви, мабуть, праві. WinRAR і 7-Zip роблять це автоматично. Однак існують найпростіші вирішення цієї проблеми, такі як документування вмісту архіву у нестисненому вигляді.


1
Це безкоштовне програмне забезпечення - так їх багато, це добре в тому, що він робить - Навряд чи порівняно з іншими речами Це добре документовано і має багато можливостей - Особливості майже не використовуються і жахливо прості у використанні. Він підтримує кілька алгоритмів стиснення - Не так багато, як деякі інші
Гриффін

4
боги Unix створили його - тому ми повинні ним користуватися!
SnakeDoc

28
Також смола зберігає дозволи UNIX на самому своєму розпорядженні, і це дуже добре відомо і перевірено. Існує більше кількох випадків, коли, можливо, потрібно буде згрупувати купу файлів в один файл або потік, але не обов’язково стискати його.
LawrenceC

3
На щастя, смола не обмежується лише версіями GNU. У той час як гугл GNU, безумовно, є хорошим програмним забезпеченням, лібархів + пов'язані з ним передні кінці набагато швидше і простіше вбудувати в інші програмні проекти. Ви можете зробити аргумент для дьогтю, не перетворюючи його на бій за ліцензування.
Лукас Холт

1
Я не саркастичний. Мені подобається RMS і те, як він виконує свої переконання.
Ярослав Рахматуллін

11

Формати файлів, такі як .zip, вимагають, щоб програмне забезпечення спочатку зчитувало кінець файлу, читав каталог імен файлів. І навпаки, дьоготь зберігає цю інформацію в стисненому потоці.

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

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

Обидва мають своє використання, залежно від того, що ти робиш.


5
Ні, ви можете як читати, так і писати поштові файли як потік з каналу та до нього.
Марк Адлер

Це може бути специфічно для впровадження, але воно, звичайно, не підтримується оригінальним pkzip.
xorsyst

1
Так, програмне забезпечення має бути написане для його підтримки. Формат zip підтримує його повністю, з дескрипторами даних, які можуть слідувати за стислими даними по довжині та CRC.
Марк Адлер

@MarkAdler, яке програмне забезпечення? Infozip не підтримує розпакування з труби.
psusi


11

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

Чи передбачено покарання продуктивності на етапах агрегації / стиснення / декомпресії для використання смоли, інкапсульованої в gzip або bzip2, порівняно з використанням файлового формату, який робить агрегацію та стиснення в одній структурі даних? Припустимо, що тривалість порівняння компресора однакова (наприклад, gzip і Deflate схожі).

Ні. Насправді, оскільки tar і gzip зазвичай є двома процесами, ви навіть отримуєте козир з багатоядерною швидкістю, яку не дає архіватор, як поштовий індекс Info-ZIP. Що стосується коефіцієнта стиснення, tar + gzip, як правило, помітно краще, ніж zip з дефлятом, оскільки перший може отримати користь від кореляції між файлами, тоді як другий стискає файли окремо. Ця вигода стиснення перетворюється на швидкість вигоди при витягуванні, оскільки більш стислий архів розкладається за менший час.

Чи є функції формату файлу tar, яких немає у інших форматах файлів, таких як .7z та .zip?

Так, смола була розроблена для Unix, і вона розвивалася протягом багатьох років, щоб мати можливість точно записувати та відновлювати кожен дивний куточок файлових систем Unix, навіть файлову систему Nookier і crannier Mac OS X Unix. zip здатний зберегти велику частину метаданих, таких як дозволи, часи, власники, групи та символічні посилання, але все ще не все. Як приклад, ні zip, ні 7z не можуть розпізнати або скористатися розрідженими файлами, а також не знають і не можуть відновити жорсткі посилання.

Оскільки tar - такий старий формат файлів, і новіші формати файлів існують сьогодні, чому tar (будь то інкапсульований у gzip, bzip2 чи навіть новий xz) все ще настільки широко використовується сьогодні в GNU / Linux, Android, BSD та інших подібних UNIX операційні системи, для передачі файлів, джерела програми та бінарних завантажень, а іноді навіть у форматі менеджера пакунків?

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

Якщо ви хочете випадкового доступу, часткових оновлень або інших речей, які потребують розгляду зі змістом, або ви хочете мати змогу дізнатися, що в ньому, не читаючи всі речі, тоді ви хочете використовувати інший формат.


CW означає співтовариство Wiki . Дивіться також Що таке публікації у спільноті Wiki? .
ctype.h

Я думаю, що це CW, оскільки на запитання більше 15 відповідей. Коли ви опублікували цю відповідь, оскільки це 15-а, питання та всі відповіді були позначені CW.
ctype.h

Я не бачу, як ця відповідь говорить щось таке, що жодна з інших відповідей не робить, крім прямого цитування питань (про які я писав, BTW, тому що оригінальний перегляд питання був досить жахливим, щоб бути закритим як NARQ). Хороша спроба, хоча.
allquixotic

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

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

11

Продуктивність

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

Ви можете візуалізувати його, подумавши про два файли, де перші 500 байт другого файлу такі ж, як і останні 500 байт першого файлу. За допомогою zipметоду компресор перезапускається для другого файлу, тому не пам’ятає, що перший файл закінчувався тими ж даними, тому він не може видалити повторювані дані з другого файлу.

Популярність

Є багато інших форматів, які мають низку переваг перед tar. 7-Zip не зберігає дозволи на файл Unix, але darробить і zipможе, і всі три зберігають індекс, що дозволяє швидко переглядати, витягувати підмножину файлів та оновлювати файли в архіві. Вони також можуть використовувати багатоядерні процесори для стиснення.

Причина, по якій все ще користуються, tarє тією ж причиною, що всі досі використовують Windows та Flash : людям не подобаються зміни. Не маючи серйозних причин змінюватися, люди просто дотримуються того, що знають. darне дає достатньо користі для виправдання публікації файлів у форматі, коли більшість людей вже tarвстановлено, і про них мало хто знає dar, тому проста інерція тримає нас за старим стандартом.


2
ZIP може зберігати та відновлювати дозволи Unix. Утиліти zip та unzip з InfoZIP, зазвичай розповсюджені в системі Unix, це роблять.
Марк Адлер

3
zip не стискає файл у 32K шматки. Ви плутаєте розмір розсувного вікна 32K з тим, як робиться стиснення.
Марк Адлер

1
gzip -9 не має словника 900 кБ. На всіх рівнях gzip використовується словник 32K. Можливо, ви думаєте про bzip2.
Марк Адлер

Стільки дезінформації в одній відповіді.
Марк Адлер

1
Вам потрібно або внести виправлення у відповідь, або видалити свою відповідь.
Марк Адлер

7

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

Сюди входять усі ці функції, яких немає в одному чи кількох конкуруючих інструментах:

  • право власності на файл
  • дозволи на файл
  • менш поширені дозволи для файлів (наприклад, встановлений, клейкий біт)
  • символічні посилання
  • жорсткі посилання
  • записи пристрою (тобто символьні та блокові пристрої)
  • розріджені файли
  • Записи ACL ( підтримуються не всіма версіями )
  • розширені / атрибути користувача ( підтримуються не всіма версіями )
  • Мітки SElinux ( підтримуються не всіма версіями )

Він також має --one-file-systemможливість, яка надзвичайно корисна при створенні резервних копій.

Щоразу, коли у файлові системи додається нова функція, спочатку додається підтримка tar(або навіть виключно). Тож це як і раніше є найбільш сумісним способом збереження файлів.


Ця відповідь є єдиною, яка має сенс. Дякуємо, що опублікували це.
габоровий

5

У нас сьогодні плаває багато стислих файлів, MP3, JPG, відео, файли tar.gz, JAR-пакети, RPM, DEB і так далі. Якщо вам потрібно зв’язати купу цих файлів в єдиний файл для передачі, тоді корисно мати утиліту 'tar', яка лише зв'язує файли, не намагаючись їх стиснути.

Вона не тільки витрачає час і електроенергію на спробу стиснути стиснутий файл, але часто призводить до того, що файл перевищує оригінал.

Ще одне його використання - це підвищення рівня стиснення. Наприклад, якщо ви 'tar' пакет пакет файлів журналів і потім gzip результат, ви, ймовірно, вийде файл менший розмір, ніж якщо ви стиснули спочатку, а потім в комплекті з 'tar'. І звичайно, використовуючи tar, ви можете вибрати будь-який алгоритм стиснення, який ви хочете, і вказати варіанти оптимізації стиснення для вашого конкретного випадку використання.

Я вважаю, що дьоготь сьогодні дуже актуальний, і я вважаю за краще використовувати ZIP. У нашому офісі для всіх, хто має Windows, встановлено 7-zip, тому для нас файли tar повністю сумісні між платформами.


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

Кумедним винятком є ​​те, що вихідний код gzip доступний у вигляді чистого дьогтю з очевидних причин.
Марк Адлер

4

Можливо, нам слід задуматися, чому такі "нові" формати файлів виконують як стиснення, так і агрегацію (і я б додавав шифрування), де з самого початку не будувались на tar, а не зовсім інші інструменти.

Як я розумію, це є історичні причини (пов'язані з історією ОС, захистом патентів, можливістю постачальника програмного забезпечення продавати інструменти тощо).

Як вже вказували інші відповіді, він навіть зараз тар не явно поступається іншим рішенням і може бути кращим в інших аспектах, таких як здатність працювати в потоках або управління правами Unix.

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

Я закінчу особистим штрихом. Деякий раз тому мені довелося створити формат файлу для зберігання зашифрованих даних. Використання tar в якості основи було зручним (інші зробили той самий вибір, наприклад, tar - це внутрішній формат агрегації для .deb пакетів). Мені було очевидно, що намагатися стиснути дані після шифрування було абсолютно марним, мені довелося виконувати стиснення як самостійний крок перед шифруванням, і я не був готовий використовувати шифрування zip (мені хотілося два шифрування ключа за допомогою публічного та приватного ключів) . Використовуючи дьоготь, він працював як вітер.


3

Я здивований, що ніхто про це не згадував, але одна з причин - насправді не перевага, а необхідність - полягає в зворотній сумісності. Є багато систем, де працює десятиліття програмного забезпечення, які можуть вимагати tarархівації. Не вигідно найняти когось, щоб "виправити" всі старі системи.


3

tar - це UNIX, як UNIX - смола

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

Детальніше ознайомившись із етапами створення архівів, сподіваюся, ви погодиться, що спосіб поділу різних завдань відбувається тут найкраще: філософія UNIX :

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

  • і просто ще один довільно взаємозамінний інструмент ( gzip bz2 xzщоб назвати лише кілька варіантів), який перетворює будь-який вхідний потік байтів в інший (сподіваємось) менший вихідний потік.

Використання такого підходу дає цілу пару переваг як користувачеві, так і розробнику:

  • розширюваність Дозволяючи пару tarз будь-яким стиснення алгоритму вже існуючого або будь-якого алгоритму стиснення поки ще належить розробити без необхідності міняти що - або на внутрішню роботу tarна всіх.

    Як тільки з'явиться абсолютно новий "гіпер-zip-утра" або інструмент для стиснення китеїв, ви вже готові використовувати його, охоплюючи нового службовця з усією силою tar.

  • стабільність tar використовується в інтенсивному застосуванні з початку 80-х випробовуваних і використовувалася на численних операційних системах і машинах.

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

  • послідовність Інтерфейс користувача просто залишається однаковим весь час.

    Не потрібно пам’ятати, що для відновлення дозволів за допомогою інструменту A вам потрібно пройти опцію --i-hope-you-rember-this-oneта за допомогою інструменту B, який ви повинні використовувати --this-time-its-another-one під час використання інструменту C, це `- hope-you-didnt-try-with-tool-as-switch.

    Тоді як при використанні інструменту D ви б дійсно зіпсували його, якби не використовували --if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now.


3

Багато хороших відповідей, але всі вони нехтують важливим фактом. Тар має добре налагоджену екосистему користувачів та розробників у світі, подібному Unix. Це продовжує працювати так само, як ZIP продовжує діяти в його екосистемі DOS / Windows. Наявність такої екосистеми - це те, що підтримує технологію, а не її технічні переваги.


Дійсно хороший коментар, я навіть не думав про це, і це дійсно хороший момент зробити.
MarcusJ

3

Причина - «закріплення в культурі». Як і я, є такі численні люди, чиї очі засліплюють, якщо їх попросять обробити що-небудь, крім стислого архіву дьогтю чи випадкового ZIP, якщо він прийшов із світу Windows.

Я не хочу чути про 7-Zip, RAR або щось інше. Якщо мені доведеться встановити програму для розпакування вашого файлу, це робота. Я зроблю це, якщо це призведе до того, що мені виплатять, або якщо вміст - це те, що я "повинен мати" і не доступний іншим чином.

Однією з переваг дьогтю є те, що якщо ви надіслаєте комусь тарбол, він моментально розпізнається. Одержувач може вводити команди вилучення за допомогою м’язової пам’яті.

Справжнє питання: чому деякі люди настільки одержимі економити ще один байт простору, що вони просять усіх інших витрачати час на встановлення якоїсь екзотичної утиліти та навчитися ними користуватися? А потім є тупі використання екзотичних форматів стиснення та архіву. Чи потрібно відео H.264 із звуком AAC насправді містити в RAR з декількома частинами?

Формат смоли може бути старим, але він зберігає все, що є релевантним: вміст файлу, шляхи, часові позначки, дозволи та права власності. Він зберігає не лише символічні посилання, але може зберігати жорстку структуру посилань. У ньому також зберігаються спеціальні файли, тому стрічковий архів можна використовувати для таких речей, як мініатюрний /devкаталог, який використовується під час завантаження. Можна скласти дистрибутив Linux разом, чий формат двійкового пакету складається ні з чого, а лише тарболів, які не стискаються відносно кореня файлової системи.


Повторно "Настільки одержимий" ... уявіть, що ви опинилися в бойовій зоні з одним загартованим ноутбуком, і низькорозмірний жорсткий диск 20 Г майже повний, може бути, Gig залишився, і, почувши стрілянину здалеку, ви б дуже хотіли переглядати. посібник .PDF розміром 100 Мб, який показує, як відремонтувати джип, але файл знаходиться у файлі 2 Gig .tgz. А ноутбук працює з дивовижною власною ОС з закритим джерелом, і ви не маєте кореневого доступу для видалення системних файлів, не те, що було б очевидно, як видалити 4G +, не порушуючи програму пошуку або PDF-переглядача. Якщо ви могли просто витягти цей файл на 100 Мб ...
agc

2

Безпосередньо відповідаючи на конкретні поставлені вами питання:

Чи передбачено покарання продуктивності на етапах агрегації / стиснення / декомпресії для використання смоли, інкапсульованої в gzip або bzip2, порівняно з використанням файлового формату, який робить агрегацію та стиснення в одній структурі даних? Припустимо, що тривалість порівняння компресора однакова (наприклад, gzip і Deflate схожі).

У загальних випадках спостерігається специфічне поліпшення продуктивності, tarособливо з використанням вбудованої бібліотеки стиснення ( командних рядків tar xvzfабо tar xvjfстилів, де використовується бібліотека стиснення, а не другий процес). Це пов'язано з двома основними причинами:

  • при обробці великої кількості відносно невеликих файлів, особливо тих, що зазвичай використовуються для розповсюдження програмного забезпечення, спостерігається велика надмірність. Стиснення над багатьма файлами призводить до більшого загального стиснення, ніж стискання окремих файлів. І "словник" обчислюється один раз для кожного фрагменту введення, а не для кожного файлу.

  • tarрозуміє файлові системи. Він призначений для збереження та відновлення робочої / працездатної операційної системи. Він глибоко розуміє, що саме важливо для файлової системи UNIX, і сумлінно фіксує та відновлює це. Інші інструменти ... не завжди, особливо сімейство zip, яке краще призначене для обміну файлами серед сімейства ОС, де документ є важливою справою, а не вірною копією, чутливою до ОС.

Чи є функції формату файлу tar, яких немає у інших форматах файлів, таких як .7z та .zip?

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

Метадані. Протягом багатьох років Unix розвивала деякі дивні речі. 14 імен файлів символів, довгі імена файлів, посилання sym посилання, липкі біти, біти суперрусера, успадковані дозволи групового доступу тощо. Тар розуміє та відтворює їх. Засоби обміну файлами ... не так вже й багато. Дуже багато людей не використовують посилання так, як могли ... Якщо ви коли-небудь працювали з програмним забезпеченням, яке використовує посилання, а потім використовували невідомий інструмент для резервного копіювання та відновлення, у вас зараз багато незалежних файли замість одного файлу з багатьма іменами. Біль. Програмне забезпечення виходить з ладу, і у вас є роздуття диску.

Оскільки tar - такий старий формат файлів, і новіші формати файлів існують сьогодні, чому tar (будь то інкапсульований у gzip, bzip2 чи навіть новий xz) все ще настільки широко використовується сьогодні в GNU / Linux, Android, BSD та інших подібних UNIX операційні системи, для передачі файлів, джерела програми та бінарних завантажень, а іноді навіть у форматі менеджера пакунків?

tarпрацює. Добре виконує роботу, для якої призначений. Там були і інші розхвалювали заміни ( cpio, paxі т.д., і т.д.). Але дьоготь встановлений майже на всьому, і компресійні мастики, які він використовує, також дуже поширені з інших причин. Нічого іншого не зустрічається, що суттєво б'є те, що робить дьоготь. Без чітких переваг та багато вбудованого використання та знань у громаді заміни не буде. Катран багато років використовував. Якщо ми отримаємо серйозні зміни в тому, як ми думаємо про файлові системи або нетекстові файли, якимось чином стають способом передачі коду (наразі не уявляю, як, але ігнорувати це ...), то можна знайти інший інструмент. Але тоді це був би не тип ОС, яким ми зараз користуємося. Це була б інша річ, організована по-різному, і для цього були б потрібні власні інструменти.

Я вважаю, що найважливіше питання, яке ви не запитували, - це те, на яку посаду «дьоготь» не підходить.

tarпри стисненні крихкий. Вам потрібен весь архів, потроху. На мій досвід, вона не є стійкою. У мене були одні-єдині бітові помилки, які призводять до того, що архіви з кількох частин стають непридатними. Це не вводить надмірності для захисту від помилок (що призведе до перемоги над одним із заданих вами питань щодо стиснення даних). Якщо є можливість пошкодження даних, ви хочете перевірити помилки із надмірністю, щоб ви могли реконструювати дані. Це означає, за визначенням, що ви не максимально стиснуті. Ви не можете одночасно мати кожен потрібний біт даних і нести його максимальне значення (максимальне стиснення), а кожен біт даних здатний втратити та відновити (надмірність та виправлення помилок). Отже ... яка мета вашого архіву?tarчудово підходить у середовищах з високою надійністю та коли архів можна знову відтворити з джерела. IME, це насправді гірше оригінальної речі, яку підказують його назви - архівування стрічок. Поодинокі бітові помилки на стрічці (або ще гірше, поодинокі бітові помилки в головці стрічки, де ви втрачаєте один біт у кожному байті цілої стрічки чи архіву) призводять до того, що дані стають непридатними. Маючи достатню надмірність та виявлення та виправлення помилок, ви зможете пережити будь-яку з цих проблем.

Отже ... скільки шуму і корупції існує в оточенні, на яке ви дивитесь, і чи можна джерело використовувати для відновлення невдалого архіву? Відповідь із наведених нами підказок полягає в тому, що система не шумить, і це джерело здатне відновлювати архів. У цьому випадку tarє адекватним.

tarстискання також не добре відтворюється для попередньо стислих файлів. Якщо ви надсилаєте вже стиснуті дані ... просто використовуйте tar, і не турбуйтеся на етапі стиснення - це просто додає циклів процесора, щоб не дуже багато. Це означає, що вам потрібно знати, що ви надсилаєте і чому. Якщо вам байдуже. Якщо ви не дбаєте про тих особливих випадках, то дьоготь буде точно копіювати дані навколо, і стиснення буде точно НЕ в змозі зробити багато корисного , щоб зробити його менше. Немає великих проблем, крім деяких циклів процесора.


-3

TAR - Архів стрічок. Це існує десятиліттями, і він широко використовується та підтримується. Це зрілий продукт і піклується про поточні потреби, а також про старі потреби.

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