Я только что узнал, что cpio имеет три режима: копирование, копирование и сквозное копирование.
Мне было интересно, каковы преимущества и недостатки cpio в режимах копирования и вывода по сравнению с tar. Когда лучше использовать cpio, а когда использовать tar?
Аналогичный вопрос для cpio в сквозном режиме по сравнению с cp.
Спасибо и привет!
Это очень общий обзор:
CPIO лучше справляется с дублированием файловой системы, включая резервное копирование. Он сохраняет такие вещи, как жесткие ссылки, FIFO и другие нестандартные функции файла. Большинство реализаций CPIO делают все, что делает TAR, включая чтение и запись файлов .tar. CPIO обычно переносит список файлов из стандартного ввода в архив; это упрощает передачу списка из чего-то другого (например, find
).
Пересылка CPIO очень полезна, если у вас есть очень длинный список файлов, которые вы хотите скопировать из каталога A в каталог B. (Например, вы можете использовать find
чтобы найти все файлы, которые изменились в вашей системе за последние 2 года)
TAR лучше просто выгружает все ваши стандартные файлы на ленту (или архивный файл) или с нее. Это немного проще в использовании (для наиболее распространенных задач). Он легко удовлетворяет простые потребности большинства людей в резервном копировании; и большая часть его популярности объясняется этим фактом.
А теперь мелкий шрифт. Существует несколько различных версий и реализаций CPIO и TAR. Каждый из них имеет разные функции, а некоторые имеют разные параметры командной строки. Есть вещи, которые каждый может делать, а другой - нет; если вы обнаружите, что ограничиваетесь одним, попробуйте другое. У каждого есть любимчик, и в 99% случаев любой из них справится с задачей.
В Redhat AE 3 я обнаружил, что cpio имеет ограничение на размер выходного потока 2 ГБ. Однако у tar этого ограничения не было.
В других системах могут быть другие ограничения.
Я понимаю из комментариев и другой информации, что 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
делает все возможное, чтобы извлечь как можно больше
Я не вижу причин использовать cpio по какой-либо причине, кроме копирования открытых файлов RPM с помощью разгон или rpm2cpio, но могут быть крайние случаи, когда cpio предпочтительнее tar.
Обе деготь и cpio конкурирующие форматы архивов, которые были введены в Версия 7 Unix в 1979 г. и затем включили в POSIX.1-1988, хотя в следующем стандарте POSIX.1-2001 остался только tar.1.
Формат файла Cpio менялся несколько раз и не оставался полностью совместимым между версиями. Например, теперь существует представление данных двоичной информации файла в кодировке ASCII.
Tar стал более универсальным, с годами стал более универсальным и, скорее всего, будет поддерживаться в данной системе. Cpio все еще используется в нескольких областях, таких как Пакет Red Hat формат (RPM), хотя RPM v5 (что, по общему признанию, неясно) использует xar вместо 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
, о котором люди часто забывают, поскольку он чаще используется через сетевое соединение.
Я не сравнивал их производительность, но полагаю, что они будут очень похожи по ЦП, памяти и размеру архива (после сжатия).
Я тоже предпочитаю CPIO. Однако при использовании cpio
на наборе файлов неизвестного происхождения (например, файлы, созданные конечными пользователями) лучше работать с NUL
-терминированные имена файлов: используйте -print0
флаг, чтобы найти и добавить 0
флаг cpio
. Таким образом файлы со странными именами (например, CRNL
символы) будут обрабатываться правильно.
cd / && find . -xdev -print0 | cpio -pmdu0 /mnt/