Чому люди використовують тарбали?


90

Як головним розробником Windows, можливо, мені не вистачає чогось культурного у спільноті Linux, але це мене завжди бентежило.

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


3
Зазвичай ви просто поєднуєте стиснення та групування файлів до однієї команди. tar -zcf file.tar.gz деякі назви файлів
Juha Syrjälä

1
Ніхто не згадував, що передача 1000000 файлів із розміром 1 байт дорожча, ніж передача 1 файлу із розміром 1000000 байт.
Майло

Відповіді:


137

bzipі gzipпрацювати над окремими файлами, а не з групами файлів. Звичайні старі zippkzip) оперують групами файлів і мають вбудовану концепцію архіву.

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


2
Відповідав швидше, і трохи краще, ніж я - думаю, я повернусь до роботи!
Харпер Шелбі,

9
Я переміг вас за 4 хвилини, і це ціла вічність у переповненні стека. :-)
Стюарт Джонсон

1
Варто зазначити, що і tar, і gzip корисні самі по собі, тому вони розділені. З деяким розумним використанням каналів, одного разу я перемістив папку з одного комп’ютера на інший, розмальовуючи, стискаючи та перекладаючи через SSH, а потім розпаковуючи та знімаючи зірочку для пункту призначення. Одна команда, без тимчасових файлів.
rmeador

1
Ви також можете сказати, що вони дотримуються того, що було доведено добре, а не змінюють речі та порушують сумісність. .tar.gz можна зробити за один крок, як і так звані сучасні інструменти та техніки (зареєструйте WinZip).
JeeBee

2
Я не можу повірити, що ніхто ні редагував запитання, ні залишив коментар, в якому згадується вся (imo) суть використання tarархівів: підтримка дозволів файлової системи Linux . Що сталося б, якби ви завантажили пакет Debian, менеджер пакетів встановив його, але жоден з виконуваних файлів не був виконуваним? Це справжня причина, чому всі використовують тарбали ...;)
JamesTheAwesomeDude

28

Важливим розрізненням є характер двох видів архівів.

Файли TAR - це не що інше, як конкатенація вмісту файлу з деякими заголовками, тоді як gzip та bzip2 - це компресори потоків, які в tarballs застосовуються до всієї конкатенації.

Файли ZIP - це об’єднання окремо стислих файлів з деякими заголовками. Насправді алгоритм DEFLATE використовується як zip, так і gzip, і за допомогою відповідного двійкового налаштування ви можете взяти корисне навантаження потоку gzip і помістити його у zip-файл із відповідними заголовками та словниковими записами.

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


Дякуємо за різницю між zip та tar + gzip!
Luke

1
+1 для різниці між "стисненням агрегованого файлу" та "агрегуванням стиснених файлів".
Джессі Чисхолм,

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

@Barry, отже, на закінчення, хто перемагає? (припускаючи, що ми використовуємо сучасні ОС)
Pacerier

@Pacerier Я не думаю, що є якийсь виграш. Застібки-блискавки краще використовувати для довільного доступу та для використання людьми в Windows. Tarballs має вищу сумісність у Linux та Unix. Тарбали мають трохи більший рівень стиснення, але вам потрібно розпакувати все, щоб отримати доступ до чого-небудь. Обидва підтримують довільні алгоритми стиснення, але набагато легше змішувати та поєднувати з tarballs. Залежно від мети, будь-який може бути кращим.
Barry Kelly

26

Дивно, що ніхто інший не згадував про те, що сучасні версії GNU tarдозволяють стискати в процесі зв’язку:

tar -czf output.tar.gz directory1 ...

tar -cjf output.tar.bz2 directory2 ...

Ви також можете використовувати вибраний вами компресор за умови, що він підтримує параметри ' -c' (до stdout або від stdin) та ' -d' (розпакувати):

tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...

Це дозволить вам вказати будь-який альтернативний компресор.

[ Додано : Якщо ви робите gzipабо bzip2стискаєте файли, GNU їх tarавтоматично виявляє та запускає відповідну програму. Тобто ви можете використовувати:

tar -xf output.tar.gz
tar -xf output.tgz        # A synonym for the .tar.gz extension
tar -xf output.tar.bz2

і з ними буде поводитися належним чином. Якщо ви використовуєте нестандартний компресор, то вам потрібно вказати це під час витяжки.]

Причиною поділу є, як і у вибраній відповіді, розподіл обов'язків. Крім усього іншого, це означає, що люди могли використовувати програму ` cpio` для упаковки файлів (замість tar), а потім використовувати компресор на вибір (колись був кращим компресором pack, пізніше він був compress(що було набагато ефективніше, ніж pack), а потім, gzipяка оберталася навколо обох своїх попередників, і цілком конкурентоспроможна zip(яка була перенесена на Unix, але там не є рідною), і тепер, bzip2яка, на мій досвід, зазвичай має перевагу 10-20% перед gzip.

[ Додано : хтось зазначив у своїй відповіді, що cpioмає смішні умови. Це правда, але поки GNU не tarотримав відповідні параметри (' -T -'), cpioбула кращою командою, коли ви не хотіли архівувати все, що знаходилось під даним каталогом - ви насправді могли точно вибрати, які файли архівуватимуться. Недоліком cpioбуло те, що ви не тільки могли вибирати файли - ви повинні були їх вибрати. Є ще одне місце, де cpioбали; він може зробити копію на місці з однієї ієрархії каталогів в іншу без будь-якого проміжного сховища:

cd /old/location; find . -depth -print | cpio -pvdumB /new/place

До речі, параметр ' -depth' on findє важливим у цьому контексті - він копіює вміст каталогів, перш ніж встановлювати дозволи для самих каталогів. Коли я перевірив команду перед введенням доповнення до цієї відповіді, я скопіював деякі каталоги, доступні лише для читання (дозвіл 555); коли я пішов видаляти копію, мені довелося послабити дозволи на каталоги, перш ніж ' rm -fr /new/place' міг закінчити. Без цієї -depthопції cpioкоманда була б невдалою. Я згадав це лише тоді, коли пішов робити чистку - наведена формула така автоматична для мене (головним чином, завдяки багатьом повторенням протягом багатьох років). ]


Розширений формат ZIP може вмістити компресори потокових модулів так само, як TAR, але без відповідного протоколу IPC він, швидше за все, буде повільнішим через надмірне виконання підпроцесів.
Barry Kelly,

моя команда goto: tar -xfvz tarpkg.tar.gz (замінити z на aj для стиснених архівів bz2)
Брайан Ребейн,

1
@Redbeard: tar автоматично виявляє gzip та bzip2 при витягуванні - для створення вам слід сказати, що робити, але я просто використовую -xf (або -xvf) та ім'я файлу tar.
Джонатан Леффлер

15

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


Створюючи файл, пам’ятайте про шифрування після стиснення, а не раніше, оскільки результат шифрування виглядає випадковим і його важко стиснути.
Джонатан Леффлер

8

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


7

Ще одна причина, через яку він настільки поширений, полягає в тому, що tar і gzip є майже на всій базі встановлення * NIX. Я вважаю, що це, мабуть, найбільша причина. Ось чому Zip-файли надзвичайно поширені в Windows, оскільки вбудована підтримка, незалежно від чудових процедур у RAR або 7z.

GNU tar також дозволяє створювати / витягувати ці файли за допомогою однієї команди (один крок):

  • Створити архів:
  • tar -cfvj destination.tar.bz2 *.files
  • tar -cfvz destination.tar.gz *.files

  • Витягніть архів: (частина -C є необов’язковою, вона за замовчуванням є поточним каталогом)

  • tar -xfvj archive.tar.bz2 -C destination_path
  • tar -xfvz archive.tar.gz -C destination_path

Це те, що я віддав пам’яті за свої багато років у Linux та нещодавно на Nexenta (OpenSolaris).


3
Насправді все навпаки: zip вбудований в Windows зараз, оскільки він переважав у DOS та ранніх версіях Windows.
Крістіан Лескуер

Мені подобається використовувати RAR у Windows, tar.bz2 у Linux
Усама Аль-Маадід

Ви можете відзначити дивний (не сумісний з getopt ()) розбір опції, а тире необов’язкове, оскільки tar попередньо датує стандартні домовленості параметрів команд Unix.
Джонатан Леффлер,

5

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

З Вікіпедії для Tar_ (формат_файлу)

У обчисленнях tar (похідний із стрічкового архіву) - це як формат файлу (у вигляді типу потоку архівів), так і назва програми, яка використовується для обробки таких файлів. Формат стандартизований POSIX.1-1988 та пізніше POSIX.1-2001. Спочатку розроблений як необроблений формат, використовуваний для резервного копіювання на стрічці та інших пристроїв послідовного доступу для цілей резервного копіювання, зараз він широко використовується для збору колекцій файлів в один більший файл, для розповсюдження або архівування, зберігаючи при цьому інформацію про файлову систему, таку як користувач та група дозволи, дати та структури каталогів.


4

tar - це UNIX, як UNIX - tar

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

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

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

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

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

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

    Як тільки з'явиться абсолютно новий "гіпер-zip-utra" або інструмент для стиснення води, ви вже готові використовувати його, охоплюючи свого нового слугу всією силою 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

смола популярна переважно з історичних причин. Є декілька альтернатив. Деякі з них існують майже так само довго, як смола, але не можуть перевершити смолу за популярністю з кількох причин.

  • cpio (чужий синтаксис; теоретично більш послідовний, але людям подобається те, що вони знають, переважає смола)
  • ar (популярний давно, зараз використовується для пакування бібліотечних файлів)
  • шар (саморозпаковуються сценарії оболонки, мали всілякі проблеми; раніше популярні були тим не менше)
  • zip (через проблеми з ліцензуванням він не був легко доступний на багатьох Unices)

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

Очевидно, єдиним недоліком tar.gz (або ar.Z, що стосується цього) є те, що вам потрібно розпакувати весь архів для вилучення окремих файлів та переліку вмісту архіву, ніколи не завдайте шкоди людям, щоб змусити їх дефектувати із tar у значній кількості .


У старих версіях tar не було інформації про заголовки; роблять нові (сумісні з POSIX, USTAR) версії tar (наприклад, GNU tar). Команда 'файл' це розуміє.
Джонатан Леффлер

2

gzip і bzip2 - це просто компресор, а не програмне забезпечення-архіватор. Отже, поєднання. Вам потрібно програмне забезпечення tar, щоб об’єднати всі файли.

Сам ZIP та RAR також є поєднанням двох процесів.


2

Зазвичай у світі * nux пакети файлів розповсюджуються у вигляді tarballs, а потім за бажанням створюються у стилі gzipped. Gzip - це проста програма для стиснення файлів, яка не виконує групування файлів, як це робить tar або zip.

Свого часу zip не працював належним чином з деякими речами, які Unix tar та файлові системи unix вважали нормальними, наприклад, символічні посилання, змішані файли справи тощо. Я не знаю, чи це змінилося, але саме тому ми використовуємо tar.


1
* nux - Linux, Unux, Solarnux?
mackenir

1
@mackenir - не забувайте про POSUX. :-)
Пол Томблін,

1
@mackenir - Або це повинен бути POSNUX?
Пол Томблін,

1

Tar = Групує файли в 1 файлі

GZip = Заархівуйте файл

Вони розділили процес на 2. Ось і все.

У середовищі Windows ви могли б бути більш звикли використовувати WinZip або WinRar, які роблять Zip. Процес Zip цього програмного забезпечення робить групування файлів та архівування, але ви просто не бачите цього процесу.


3
Це не найкраще пояснення, враховуючи, що файли "zip", до яких OP використовується в Windows, вже включають групування.
Гарет,

1

З тієї ж причини, чому користувачі mac люблять образи дисків: це дійсно зручний спосіб архівувати матеріали, а потім передавати їх, завантажувати / завантажувати чи надсилати електронною поштою тощо.

І простіший у використанні та портативний, ніж блискавки IMHO.


1

У мої дні Altos-XENIX (1982) ми почали використовувати tar (архіватор стрічки) для вилучення файлів з 5 1/4 дискет або потокової стрічки, а також копіювання на ці носії. Ця функціональність дуже схожа на команди BACKUP.EXE та RESTORE.EXE у DOS 5.0 та 6.22 як доповнення, що дозволяє охоплювати декілька носіїв, якщо вони не можуть поміститися лише в одному. Недоліком було те, що якщо у одного з багатьох засобів масової інформації виникали проблеми, то все це було ні до чого. tar і dd походять від UNIX SYstem III і залишаються стандартною утилітою випуску з UNIX-подібними ОС, ймовірно, з причин зворотної сумісності.


0

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

Пізніше з'явилися програми стиснення, і * nix все ще мав лише один спосіб створення одного файлу, який містив кілька файлів.

Я вважаю, що це просто інерція, яка продовжилася з тенденцією tar.gz. Pkzip починався як із стиснення, так і з архівування одним махом, але тоді системи DOS зазвичай не мали приєднаних магнітних накопичувачів!

З Вікіпедії для Tar_ (формат_файлу)

У обчисленнях tar (похідний із стрічкового архіву) - це як формат файлу (у вигляді типу потоку архівів), так і назва програми, яка використовується для обробки таких файлів. Формат стандартизований POSIX.1-1988 та пізніше POSIX.1-2001. Спочатку розроблений як необроблений формат, використовуваний для резервного копіювання на стрічці та інших пристроїв послідовного доступу для цілей резервного копіювання, зараз він широко використовується для збору колекцій файлів в один більший файл, для розповсюдження або архівування, зберігаючи при цьому інформацію про файлову систему, таку як користувач та група дозволи, дати та структури каталогів.


Строго кажучи tar - це формат файлу - це просто те, що на стрічках unix є просто інший файл.
Мартін Беккет

Насправді tar для початку не був форматом файлу. Стрічки не мали файлових систем, тому tar створювався як патч для відсутності файлової системи.
Kieveli

0

Як розробнику Windows зрозуміло, як tarballs здаються дивними. Словоtar розшифровується як Tape Archive. Подумайте про магнітофони на котушці.

У світі Windows програми, як правило, встановлюються з setup.exeабо install.exeякі працюють з усіма видами майстрів у реєстрі, створюючи каталоги та встановлюючи.dll файли (Dynamic Link Library).

У Linux, зокрема Ubuntu, з мого власного досвіду, менеджери пакунків більшу частину часу подбають про те, щоб взяти програму та встановити її . В Ubuntu розробник створює пакет, що закінчується на .deb(Debian, на якому базується Ubuntu). Основний синтаксис для встановлення .deb:

sudo apt install <package_name>

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

Більш простим методом для розробників є створення tarball. Тоді тягар встановлення розподіляється кінцевим користувачем. Вони мусять:

  • завантажити tarball (зазвичай закінчується на .tar.gz ).
  • розпакувати вихідний код до каталогу.
  • скомпілювати вихідний код (нечувано в Windows для світу прибутку).
  • сподіваємось, запишіть, що вони зробили на випадок, якщо їм доведеться повторити це в майбутньому, оскільки немає aptбази даних (думаю, що список встановлених програм Windows), для якої можна створити резервну копію.

Оскільки інша відповідь вже говорить на інше запитання, яке ви задали, ви МОЖЕТЕ створити tarball і стиснути дані одночасно. Двопрохідний процес НЕ потрібен.

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