Введение

Формат файла cpio — это универсальная утилита для архивирования файлов и соответствующий формат файла. Она в основном устанавливается на Unix-подобные компьютерные операционные системы. Изначально программная утилита была разработана как программа для архивирования на магнитную ленту в составе Программистской рабочей станции (PWB/UNIX) и впоследствии стала компонентом практически каждой выпущенной операционной системы Unix. Название происходит от фразы "copy in and out" (копировать внутрь и наружу), точно описывающей использование программой стандартного ввода и стандартного вывода в процессе работы. Все варианты Unix также поддерживают другие программы для резервного копирования и архивирования, такие как tar, которая получила более широкое распространение. Использование cpio в менеджере пакетов RPM, в initramfs ядра Linux начиная с версии 2.6 и в программе установки Apple (pax) делает cpio важным инструментом архивирования. С момента первоначальной разработки cpio и его формат архивных файлов претерпели несколько, иногда несовместимых, изменений. Наиболее заметным является переход, теперь реализованный как опция, от использования бинарного формата метаданных архивного файла к представлению на основе ASCII. Стандарт POSIX отказался от поддержки cpio в пользу pax.

История

cpio впервые появился в Unix версии 7 как часть проекта Programmer's Workbench.

Формат работы и архива

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

Экстракция

Во время операции копирования, инициированной флагом командной строки, cpio считывает архив из стандартного ввода и воссоздает архивированные файлы в файловой системе операционной системы. Например: $ cpio i vd < archive.cpio.
Флаг командной строки -t указывает cpio создавать необходимые каталоги. Флаг -v (подробный режим) выводит имена файлов по мере их извлечения. Любые оставшиеся аргументы командной строки, отличные от флагов опций, являются шаблонами globbing, как в оболочке; из архива копируются только файлы с совпадающими именами. Следующий пример извлекает файл /etc/fstab из архива:
$ cpio i d /etc/fstab < archive.cpio.

Стандартизация POSIX

Утилита cpio была стандартизирована в POSIX.1 1988, но была исключена из POSIX.1 2001 из-за ограничений по размеру файлов и других недостатков. Например, версия GNU предлагает различные варианты формата вывода, такие как "bin" (по умолчанию, но устаревший) и "ustar" (POSIX tar), с ограничениями на размер файла в 2 147 483 647 байт (2 ГБ) и 8 589 934 591 байт (8 ГБ) соответственно. Форматы файлов cpio, ustar и pax определены в POSIX.1 2001 для утилиты pax, которая в настоящее время соответствует стандарту POSIX 1003.1 2008, и поэтому может читать и записывать архивы в форматах cpio и ustar.

Реализация

Большинство дистрибутивов Linux предоставляют версию cpio от GNU. FreeBSD и macOS используют bsdcpio, распространяемый с libarchive под лицензией BSD.