В дополнение к тому, что было сказано ранее Гравитацией и Полом:
история
В "старые времена", CPIO (с опцией -c
используется) был инструмент , чтобы использовать , когда он пришел , чтобы переместить файлы в другие UNIX дериватов , так как это было более портативным и гибким , чем смолы. Но проблемы переносимости смолы можно считать решенными с конца 1980-х годов.
К сожалению, примерно в это время разные производители исправили формат -c
cpio (просто посмотрите страницу руководства для GNU cpio и опцию -H
). В то время tar стал более портативным, чем cpio ... Прошло почти целое десятилетие, пока разные производители UNIX не разобрались в этом. Установленные GNU tar и 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
для указания команды постпроцессора - хотя я бы все же предпочел канал. Может быть, это полезно при записи на определенные устройства.