Введение
Утилита cpio — один из фундаментальных инструментов Linux, лежащий в основе формирования образов initramfs и низкоуровневого резервного копирования данных. В этом практическом руководстве мы детально разберем три базовых сценария взаимодействия с программой: экспорт в архив (copy-out, -o), извлечение содержимого (copy-in, -i) и сквозное дублирование файловых иерархий (copy-pass, -p). Разбор реальных примеров с сопутствующими параметрами позволит системным администраторам эффективно автоматизировать задачи бэкапа и миграции данных.
1. Развертывание пакета cpio и основы сборки архива (режим copy-out)
Перед началом экспериментов обновим локальный индекс репозиториев Ubuntu и убедимся в наличии бинарного пакета cpio в операционной системе.

Подготовим изолированное рабочее пространство: создадим тестовый каталог и наполним его демонстрационными текстовыми файлами.

Архитектурная особенность cpio заключается в получении перечня обрабатываемых путей исключительно через стандартный поток ввода (stdin).
Передав вывод утилиты списка файлов через конвейер, сформируем упакованный архив под именем archive.cpio.
⚙️ [Справочник ключевых ключей]
-o (--create) : активирует сценарий copy-out, упаковывая переданный список файлов в единый архивный поток.-i (--extract) : запускает режим copy-in, выполняя чтение архива и восстановление файлов на диск.-p (--pass-through) : режим прямого клонирования copy-pass, переносящий файловые деревья между путями без создания промежуточного файла.-v (--verbose) : выводит подробный журнал обрабатываемых файлов прямо в терминал.-t (--list) : генерирует таблицу содержимого архива без его фактической распаковки.-d (--make-directories) : автоматически воссоздает недостающие каталоги в целевой структуре.-u (--unconditional) : принудительно перезаписывает существующие объекты аналогичными версиями из архива.-H (--format) : определяет формат заголовков контейнера (например, crc, newc, tar).

Проверим корректность создания файла archive.cpio, оценив его атрибуты и размер в человекочитаемом формате.

2. Инспекция состава контейнера и восстановление файлов (режим copy-in)
Чтобы проинспектировать содержимое упакованного архива archive.cpio вместе с правами доступа без вмешательства в файловую систему, объединим флаги -t и -v.
Такой подход позволяет безопасно оценить состав контейнера через перенаправление ввода до извлечения данных.

Выделим чистую директорию для проверки процедуры развертывания и перейдем в нее.

Для развертывания исходных файлов из archive.cpio в текущий каталог применим команду cpio -idv.
Флаг -d позаботится об автоматическом формировании вложенных папок, а флаг -v обеспечит наглядную индикацию хода восстановления каждого объекта.

Убедимся в успешном завершении процедуры извлечения, запросив детальный листинг директории с атрибутами файлов.

3. Прямое клонирование файловых иерархий без промежуточного архива (режим copy-pass)
Смоделируем многоуровневую файловую структуру: добавим в исходную папку вложенный каталог и запишем туда проверочный файл.

Сконфигурируем директорию назначения, куда предстоит скопировать сформированное дерево.

Перейдем в исходный каталог и передадим найденные утилитой find пути в cpio в режиме copy-pass (-p).
Комбинация флагов -d (построение каталогов), -m (сохранение оригинальных временных меток mtime) и -v (подробный протокол) позволяет филигранно дублировать структуру напрямую в целевую директорию без создания временного .cpio файла.

Выполним рекурсивную проверку целевой директории, чтобы удостовериться в целостности перенесенных подкаталогов и файлов.

4. Сборка архива стандартного формата (SVR4/CRC) и компрессия с помощью gzip
Перейдя в рабочий каталог, направим вывод команды find в поток cpio с указанием формата newc — общепринятого стандарта для образов начального загрузочного диска Linux (initramfs). Затем пропустим поток через компрессор gzip с максимальным сжатием (-9), сохранив готовый сжатый архив под именем initramfs_sample.cpio.gz.

Верифицируем структуру файла initramfs_sample.cpio.gz с помощью утилиты file, чтобы убедиться в корректности gzip-заголовков.

Создадим изолированное окружение для отработки сценария распаковки сжатого образа.

Свяжем команду потоковой декомпрессии zcat и режим извлечения cpio -idv через пайплайн для мгновенного развертывания содержимого архива в текущую рабочую директорию.

Проверим финальный результат: убедимся, что все структурные элементы, включая скрытые объекты и поддиректории, благополучно извлечены.

Мы подробно рассмотрели практическое использование cpio в среде Ubuntu: от генерации базовых архивных файлов до интеграции с компрессионными потоками и прямого клонирования директорий. Грамотное сочетание конвейеров ввода-вывода и флагов cpio открывает широкие возможности для создания надежных скриптов обслуживания системы и восстановления критически важных данных.