cpio против tar и cp

cpio против tar и cp

Я только что узнал, что у cpio есть три режима: копирование из сети, копирование в сеть и сквозное копирование.

Мне было интересно, каковы преимущества и недостатки cpio в режимах копирования извне и копирования в сравнении с tar. Когда лучше использовать cpio, а когда tar?

Аналогичный вопрос для cpio в режиме сквозного пропускания по сравнению с cp.

Спасибо и привет!

решение1

Это крайне общий обзор:

CPIO лучше справляется с дублированием файловой системы, включая создание резервных копий. Он сохраняет такие вещи, как жесткие ссылки, fifo и другие нестандартные функции файлов. Большинство реализаций CPIO делают все, что делает TAR, включая чтение и запись файлов .tar. CPIO обычно берет список файлов из стандартного ввода в архив; это позволяет очень легко передать список из чего-то еще (например, find).

Сквозная передача CPIO очень полезна, если у вас есть очень длинный список файлов, которые вы хотите скопировать из каталога A в каталог B. (Например, вы можете использовать его findдля поиска всех файлов, которые были изменены за последние 2 года в вашей системе)

TAR лучше справляется с простой записью всех стандартных файлов на/с ленты (или архивного файла). Он немного проще в использовании (для большинства обычных задач). Он легко удовлетворяет простым требованиям резервного копирования большинства людей; и большая часть его популярности обусловлена ​​этим фактом.

А теперь мелкий шрифт. Существует несколько различных версий и реализаций как CPIO, так и TAR. У каждой из них разные функции, а у некоторых разные параметры командной строки. Есть вещи, которые каждый может делать там, где другой не может; если вы обнаружили, что ограничены одним, попробуйте другой. У каждого есть любимый, и в 99% случаев любой из них справится с задачей.

решение2

На AE 3 redhat я обнаружил, что cpio имеет ограничение по размеру в 2 ГБ на выходном потоке. Однако tar не имеет этого ограничения.

Другие системы могут иметь иные ограничения.

решение3

Я понимаю из комментариев и другой предыстории, что cpioсейчас это менее распространено и непоследовательно между версиями. Но cpioесть одно преимущество, которое я недавно обнаружил бесценным при работе с большим количеством поврежденных архивов tar. Он не останавливается на первой ошибке в файле tar, а пытается пропустить плохие данные и извлечь как можно больше. Например,

tar xf ./sample.corrupt.tar

напечатает

tar: Skipping to next header
tar: Exiting with failure status due to previous errors

после первой обнаруженной ошибки, тогда как

cpio -F ./sample.corrupt.tar -i -v

распечатает извлеченные файлы и для каждой ошибки выведет:

cpio: invalid header: checksum error
cpio: warning: skipped 6 bytes of junk

cpio: invalid header: checksum error
cpio: warning: skipped 2 bytes of junk

etc...

Формат tar предполагает, что каждый заголовок архива будет выровнен по границе 512, но если из-за повреждения заголовки будут выровнены неправильно, то cpioбудут предприняты все усилия для извлечения как можно большего количества данных.

решение4

Я не вижу причин использовать cpio ни для каких других целей, кроме копирования открытых RPM-файлов черезdisrpmилиrpm2cpio, но могут быть особые случаи, в которых cpio предпочтительнее tar.

История и популярность

Обасмолаиcpioявляются конкурирующими форматами архивов, которые были введены вВерсия 7 Unixв 1979 году, а затем включен вPOSIX.1-1988, хотя в следующем стандарте, POSIX.1-2001, остался только tar1.

Формат файла Cpio менялся несколько раз и не оставался полностью совместимым между версиями. Например, теперь существует представление двоичных данных файла в кодировке ASCII.

Tar более известен, стал более универсальным с годами и, скорее всего, будет поддерживаться в данной системе. Cpio все еще используется в нескольких областях, таких какПакет Red Hatформат (RPM), хотяРПП v5(что, по общему признанию, неясно) используетксарвместо cpio.

Оба существуют в большинстве Unix-подобных систем, хотя tar более распространен. ВотСтатистика установок Debian:

#rank  name    inst    vote    old  recent  no-files  (maintainer)
   13   tar  189206  172133   3707   13298        68  (Bdale Garbee)
   61  cpio  189028   71664  96346   20920        98  (Anibal Monsalve Salazar)

Режимы

Копирование: Это для создания архива, похожего наtar -pc

Копирование в: Это для извлечения архива, похоже наtar -px

Пройти через: Это в основном оба вышеперечисленных, похожие на , tar -pc … |tar -pxно в одной команде (и поэтому микроскопически быстрее). Это похоже на cp -pdr, хотя и cpio, и (особенно) tar имеют больше возможностей для настройки. Также рассмотрите rsync -a, о котором люди часто забывают, поскольку он чаще используется через сетевое соединение.

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

Связанный контент