В дополнение к тому, что было сказано ранее Гравитацией и Полом :
история
В «старые времена», CPIO (с опцией -c
используется) был инструмент, чтобы использовать, когда он пришел, чтобы переместить файлы в другие дериваты UNIX, так как это было более портативным и гибким, чем смолы . Но проблемы переносимости смолы можно считать решенными с конца 1980-х годов.
К сожалению, примерно в это время разные поставщики внедрили -c
формат cpio (просто посмотрите на страницу руководства по GNU cpio и опцию -H
). В то время tar стал более переносимым, чем cpio ... Потребовалось почти целое десятилетие, чтобы разные поставщики UNIX разобрались в этом. Имея GNU дегтя и GNU CPIO установлен было обязательным для всех администраторов, которые должны были иметь дело с лентами из различных источников, тогда (даже в настоящее время я полагаю).
Пользовательский интерфейс
tar может использовать файл конфигурации ленты, где администратор может настроить накопители на магнитной ленте, подключенные к системе. Затем пользователь просто сказал бы: «Ну, я возьму ленточный накопитель 1», вместо того, чтобы запоминать точный узел устройства для ленты (что может быть очень запутанным, а также не стандартизированным на разных платформах UNIX.
Но главное отличие заключается в следующем:
tar может самостоятельно искать каталоги и берет список файлов или каталогов, которые должны быть скопированы из аргументов командной строки.
cpio архивирует только те файлы или каталоги, к которым оно относится, но не выполняет рекурсивный поиск в подкаталогах. Также cpio получает список элементов, которые будут заархивированы из stdin - поэтому он почти всегда используется в сочетании с find .
Команда cpio часто выглядит пугающе для новичка по сравнению с tar :
$ find myfiles -depth -print0 | cpio -ovc0 | gzip -7 > myfiles.cpio.gz $ tar czvf myfiles.tar.gz myfiles
Я думаю, что это основная причина, по которой большинство людей используют tar для создания архивных файлов: для простых задач, таких как создание полного каталога, его просто использовать.
Также GNU tar предлагает опцию, -z
которая заставляет архив сжиматься с помощью GNU zip на лету, что делает вещи еще проще.
С другой стороны, можно делать отличные вещи с помощью команды find & cpio . На самом деле это более UNIX-подобный подход: зачем включать поиск по дереву каталогов в cpio, если уже есть инструмент, который позаботится почти обо всем, что только можно придумать: find . На ум приходят только резервные копии файлов, которые новее определенной даты, ограничение файлов теми, которые находятся в одной файловой системе, или фильтрация поиска-вывода с помощью grep -v
исключения определенных файлов ...
Люди из GNU tar потратили много времени на то, чтобы включить те вещи, которые раньше были возможны только с помощью cpio . На самом деле оба инструмента учились друг у друга - но только cpio может читать формат tar - не наоборот.
обработка смолы и выходных данных
Последнее замечание к тому, что вы сказали:
Также мне сказали, что TAR не может сжимать из STDOUT. Я хочу заархивировать / сжать моментальные снимки ZFS для резервного копирования. Мне было интересно, смогу ли я объединить CPIO с bzip2, чтобы получить этот эффект.
Ну, любая версия tar (GNU или нет) может использоваться в конвейере. Просто используйте знак минус ( -
) в качестве имени архива:
$ tar cvf - myfiles | bzip > myfiles.tar.bz
Также GNU tar предлагает опцию --to-command
для указания команды постпроцессора - хотя я бы все же предпочел трубу. Может быть, это полезно при записи на определенные устройства.