На додаток до того, що було сказано раніше, милосердя та Павло :
Історія
У «старі часи», CPIO (з опцією -c
використовується) був інструмент , щоб використовувати , коли він прийшов , щоб перемістити файли в інші деривати UNIX , так як це було більш портативним і гнучким , ніж смоли . Але переносимість смоли може вважатися вирішеною з кінця 1980-х.
На жаль, саме в цей час різні постачальники допрацювали -c
формат cpio (просто подивіться на сторінку керівництва для GNU cpio та опцію -H
). У той час дьоготь став більш портативним, ніж cpio ... Минуло майже ціле десятиліття, поки різні постачальники UNIX не розібралися з цим. Маючи GNU дьогтю і GNU CPIO встановлений був обов'язковим для всіх адміністраторів , які повинні були мати справу з стрічками з різних джерел , тоді (навіть в даний час я вважаю).
Інтерфейс користувача
tar може використовувати файл конфігурації стрічки, де адміністратор налаштував би стрічкові накопичувачі, підключені до системи. Потім користувач просто скаже «Добре я візьму стрічковий накопичувач 1» замість того, щоб пам’ятати точний вузол пристрою для стрічки (що може бути дуже заплутаним, а також не стандартизовано для різних платформ UNIX.
Але головна відмінність:
tar здатний самостійно здійснювати пошук у каталогах та приймає список файлів чи каталогів, які слід створити резервну копію з аргументів командного рядка.
cpio архівує лише ті файли чи каталоги, про які йому сказано, але не шукає підкаталоги рекурсивно самостійно. Також cpio отримує список елементів, які потрібно архівувати з stdin - саме тому він майже завжди використовується в поєднанні з find .
Команда cpio часто виглядає для початківця страхітливою у порівнянні з дьогтем :
$ find myfiles -depth -print0 | cpio -ovc0 | gzip -7 > myfiles.cpio.gz
$ tar czvf myfiles.tar.gz myfiles
Я думаю, що це головна причина, чому більшість людей використовують tar для створення архівних файлів: Для простих завдань, таких як поєднання повного каталогу, його просто простіше у використанні.
Також таргет GNU пропонує опцію, -z
яка змушує архів стиснутись з GNU-блискавкою на ходу, що робить речі ще простішими.
З іншого боку, ви можете робити чудові речі з функцією find & cpio . Насправді це більш схожий на UNIX підхід: навіщо включати пошук дерева каталогів у cpio, якщо вже є інструмент, який піклується про майже все, про що можна придумати: find . Речі, які приходять на розум, - це лише резервне копіювання файлів, новіших за певну дату, обмеження файлів, які перебувають у тій же файловій системі, або фільтрування знаходження-виводу, grep -v
щоб виключити певні файли ...
Люди GNU tar отримали багато роботи, щоб включити багато тих речей, які раніше були можливі лише за допомогою cpio . Насправді обидва інструменти вивчені один у одного, але лише cpio може читати формат смоли - не навпаки.
обробка смоли та виходу
Остання остання нота до того, що ви сказали:
Також мені сказали, що TAR не може стискатися з STDOUT. Я хочу архівувати / стискати знімки ZFS для створення резервних копій. Мені було цікаво, чи можна комбінувати CPIO з bzip2, щоб отримати цей ефект.
Що ж, будь-яка версія дьогтю (GNU чи ні) може використовуватися в трубі. Просто використовуйте знак мінус ( -
) як назву архіву:
$ tar cvf - myfiles | bzip > myfiles.tar.bz
Також GNU tar пропонує можливість --to-command
вказати постпроцесорну команду - хоча я все одно віддаю перевагу трубі. Можливо, це корисно при написанні на певні апаратні пристрої.
pax
: P