Cpio linux как распаковать

CPIO(1)

cpio — архивизация и извлечение, а также копирование файлов

СИНТАКСИС

ОПИСАНИЕ

Команда cpio -o (архивизация) читает со стандартного ввода список маршрутных имен и копирует эти файлы на стандартный вывод вместе с маршрутными именами и информацией о файлах. Вывод дополняется до размера, кратного 512 байт.

Команда cpio -i (извлечение) выделяет отдельные файлы из стандартного ввода, который, как предполагается, является результатом работы cpio -o . Извлекаются только файлы, имена которых соответствуют хотя бы одному из указанных шаблонов, построенных по принятым в shell’е правилам для генерации имен файлов. Символу / могут соответствовать в шаблоне метасимволы ? , * , и […]. Может быть указано несколько шаблонов, а если не указано ни одного, то по умолчанию шаблоном будет * (то есть будут извлечены все файлы). Каждый шаблон должен быть окружен двойными кавычками. Извлекаемые файлы создаются и копируются в текущее дерево каталогов в соответствии с описанными ниже опциями. Режим доступа к файлу будет тем же, что при выполнении команды cpio -o . Владелец файла и группа будут взяты у текущего пользователя, если он не суперпользователь, в противном случае cpio сохранит владельца и группу файла, которые он имел при выполнении команды cpio -o .

Если команда cpio -i пытается создать уже существующий файл, и время последней модификации у извлекаемого файла то же самое или более раннее, чем у существующего, то cpio выдает предупреждение и не изменяет существующий файл. (Используя опцию -u , можно добиться безусловной замены существующего файла, без учета времени последней модификации.)

Команда cpio -p (копирование) читает со стандартного ввода список маршрутных имен и, в соответствии с опциями командной строки, копирует заданные файлы в дерево каталогов с указанным корневым каталогом.

Опциям команды cpio приписан следующий смысл:

-a Не изменять время последнего доступа к исходному файлу при его копировании. -B Установить размер блока равным 5120 байт. Эта опция не применяется с опцией -p и имеет смысл, только если ввод/вывод происходит на специальное символьное устройство (например /dev/mt). -d Создавать каталоги в случае необходимости. -c Заголовки файлов записывать в виде ASCII -символов. Настоятельно рекомендуется использовать эту опцию, если файлы переносятся на компьютер другого типа. -r Интерактивно переименовывать файлы. Для каждого извлекаемого файла у пользователя запрашивается новое имя, а если пользователь ответил пустой строкой, то файл пропускается. Опция не применяется с опцией -p . -t Вывести оглавление архива, ранее созданного с помощью команды cpio . Никакие файлы не создаются. -u Безусловно заменять существующий файл архивным с тем же именем (обычно старый файл не заменяет файл, изменявшийся позднее). -v Вывести список имен обработанных файлов. Если использована опция -t, то оглавление выглядит как вывод команды ls -l [см. LS(1) ]. -l Везде, где это возможно, не копировать файлы, а создавать ссылки. Эта опция употребляется только с опцией -p . -m Сохранять прежнее время последней модификации (то есть то время, которое указано в заголовке файла). При отсутствии этой опции время последней модификации устанавливается равным текущему времени. Эта опция не действует на время последней модификации скопированных каталогов. Заметим, что в команде cpio смысл опции -m противоположен ее смыслу в команде tar . -f Извлекать все файлы, кроме тех, имена которых соответствуют шаблонам. -s Переставлять байты в каждой половине слова. Эта опция используется только с опцией -i . -S Переставлять половины слов в слове. Предполагается, что слово содержит четыре байта. Опция -S используется только с опцией -i . -b Порядок байт в слове изменять на противоположный. Используется только с опцией -i . -6 Обрабатывать старые файлы. Имеет смысл только с опцией -i .

Читайте также:  Tp link wn822n driver windows

Если в процессе записи на специальное символьное устройство (опция -o ) или чтения с него (опция -i ) кончился физический носитель (например, дискета), команда cpio выводит сообщение:

Чтобы продолжить, Вы должны заменить носитель и ввести имя специального символьного устройства (например, /dev/rdsk/fd ) и символ возврат_каретки. Можно продолжить, указав для cpio другое устройство. Например, если Вы имеете два дисковода для гибких дисков, можно указывать их по очереди, чтобы cpio выводил на другой дисковод, пока Вы будете менять дискету. (Один символ возврат_каретки заставляет cpio окончить работу.)

ПРИМЕРЫ

СМ. ТАКЖЕ

ПРИМЕЧАНИЯ

Маршрутные имена обрезаются до 256 символов.

Только суперпользователь может копировать специальные файлы.

Количество блоков сообщается в предположении, что размер блока равен 512 байт.

Источник

Архивирование и компрессия. Утилита cpio

Автор: Алексей Федорчук
Мир Linux. Наброски к книге

Команда cpio — наверное, древнейшее средство архивирования в UNIX, существующее с незапамятных времён. Архивные файлы в создаваемой ей формате понимаются в любых Unix-системах. И хотя она сама как архиватор пользовательских данных практически вышла из употребления, именно ею собираются воедино компоненты пакетов в формате rpm. По этим причинам о cpio необходимо сказать несколько слов.

Как можно понять из названия, утилита cpio (Copy Input/Outup) занимается копированием входящих файлов в выходящий архив и наоборот, развёртыванием входящего архива в выходящие файлы. Существует три режима её работы.

Первый режим, copy-out, задаваемый опцией -o (или —create ), предусматривает считывание списка файлов (name list) со стандартного ввода и объединяет их в архив, который может быть направлен в архивный файл или непосредственно на устройство для записи резервных копий. Список файлов для архивирования может представлять собой вывод какой-либо иной команды. Так, в примере

файлы текущего каталога, найденные командой find , при посредстве команды cpio будут направлены в архивный файл arch.cpio .

Второй режим, copy-in, вызываемый опцией -i , или —extract ) осуществляет обратную процедуру: развертывание ранее созданного архива в текущем каталоге:

Здесь нужно заметить, что если разворачиваемый архив включает подкаталоги, автоматически они созданы не будут, и последует сообщение об ошибке. Для создания промежуточных каталогов команда cpio должна использоваться с опцией -d ( —make-directories ).

В третьем режиме (copy-pass, опция -p , или —pass-through ) команда cpio выполняет копирование файлов из одного дерева каталогов в другой, комбинируя режимы copy-out и copy-in, но без образования промежуточного архива. Список файлов для копирования (name list) считывается со стандартного ввода, а каталог назначения указывается в качестве аргумента:

Команда cpio имеет множество опций, позволяющих создавать, в частности, архивы в различных форматах (для межплатформенной переносимости). Однако я на них останавливаться не буду, отсылая заинтересованных к соответствующей man-странице: она не кажется мне удобной в применении. А затрону только вопрос о «потрошении» rpm-пакетов — такая необходимость время от времени возникает не только у пользователей основанных на нём дистрибутивов.

На этот предмет существует специальная утилита rpm2cpio . Она считывает данные с rpm-файла (или, если таковой не указан, со стандартного ввода), преобразуя их в формат архива cpio.

Делается это так:

Далее образовавшийся cpio-архив распаковывается стандартным образом:

Обращаю внимание на опцию -d, предписывающую создавать промежуточные подкаталоги при распаковке архива — она почти наверняка понадобится.

Читайте также:  Не работает sudo mac os

Источник

CPIO архив

Архивация cpio по сути представляет собой поток файлов и каталогов в единый архив, зачастую получающий расширение .cpio. Архив имеет заголовочную информацию, позволяющую приложению, такому, как например, GNU cpio, извлекать файлы и каталоги в файловую систему. Заголовок архива cpio также содержит дополнительную информацию, как например, имя файла, время создания, владельца и права доступа (разрешения).
cpio-архив по функциональности схож с tar-архивом и создавался для хранения бэкапов на ленточных устройствах (например, стримерах) последовательным способом. Как и формат tar, CPIO-архивы часто сжимаются при помощи Gzip и поставляются в виде файлов с расширением .cpgz (или .cpio.gz).
Oracle поставляет значительную часть своего программного обеспечения в формате cpio.

Использование cpio

Архивация

Если вы хотите заархивировать целиком дерево каталогов (перед этим: cd нужная папка), то команда find может передать список файлов и папок в cpio:
% find ./* | cpio -o > tree.cpio

Копирование

Cpio копирует файлы из одного дерева каталогов в другой при этом сочетая шаги copy-out и copy-in без «настоящего» использования архивации. Она считывает список файлов для копирования из стандартного потока ввода; целевой каталог, в который их нужно скопировать, указывается как обязательный аргумент.

Извлечение

Для извлечения файлов из cpio-архива, передайте имя архива утилите cpio через стандартный ввод.
Внимание! Это произведёт перезапись файлов без подтверждения!

Флаг -i указывает cpio считать архив для извлечения файлов, а флаг -d говорит cpio создать при необходимости соответствующие каталоги. Вы также можете указать флаг -v для вывода списка имён извлечённых файлов.
Все дополнительные аргументы командной строки являются shell-образными glob-шаблонами; только те файлы в архиве, чьи имена совпадают по крайней мере с одним шаблоном, могут быть скопированы из архива. В следующем примере извлекается etc/fstab из архива (формат содержимого архива должен сначала проверяться командой `cpio -l` для проверки того, как хранится путь) :

Как распаковать архив, созданный CPIO и GZIP

В чём разница между CPIO и TAR

Хорошее описание про различие между этими программами:

Если коротко, то tar — это команда «всё в одном», которая умеет заархивировать файлы из каталога и сразу запаковать их.

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

При этом команда для запуска выглядит более сложной, предоставляя больше гибкости.

Источник

CPIO под микроскопом

CPIO — это достаточно старый (1990 год), но в то же время очень удобный вариант архива. Он достаточно прост, и, возможно поэтому, получил широкое распространение. Например данный формат используют RPM, initramfs ядра Linux, а также установщик архивов «pax» от Apple.

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

Давайте на примерах рассмотрим формат этого архива.

Каждый объект файловой системы в таком архиве состоит из заголовка с базовыми метаданными, за которым следует полный путь к объекту и содержимое этого объекта. Заголовок содержит набор целочисленных значений, которые во многом повторяют поля структуры stat(2) файла в *nix системах. Конец архива помечается специальной записью (аналогичной остальным) с названием ‘TRAILER. ‘.

Формат Файла.

На данный момент самым распространенным является старый формат записей файла CPIO. Именно его описание и будет приведено.

Заголовок формата записи имеет следующую структуру:

Здесь предполагается, что тип unsigned short имеет размер 16 бит.

Читайте также:  Internet explorer 11 для windows 10 будет работать

c_magic
Целочисленное значение, равное 070707 (в восьмеричной СС), или 0x71c7 (в шестнадцатеричной СС). Используется для определения порядка байт (little-endian vs big-endian).

c_dev,c_ino
Номера устройства и инода (inode) с диска. Соответствуют значениям, в структуре stat. Если значение inode больше 65535, то старшие разряды будут утеряны.

c_mode
Поле одновременно определяет права доступа и тип объекта:

0170000 Маскирует биты типа файла
0140000 Сокет
0120000 Символическая ссылка. Для символических ссылок, тело ссылки будет содержать путь к файлу, на который та ссылается.
0100000 Обычный файл
0060000 Специальное блочное устройство
0040000 Каталог
0020000 Специальное символьное устройство
0010000 Именованный канал(named pipe) или очередь(FIFO).
0004000 SUID
0002000 SGID
0001000 Sticky bit.
0000777 Младшие 9 бит определяют права доступа к объекту.

c_uid,c_gid
Идентификаторы пользователя и группы владельца файла.

c_nlink
Количество ссылок на этот файл. Для каталогов значение этого поля всегда не меньше двух.

c_rdev
Только для специальных символьных и блочных устройств. Поле содержит
ассоциированный номер устройства. Для всех остальных типов файлов значение
данного поля должно быть нулевым.

c_mtime
Время последнего изменения файла. Формат соответствует количеству секунд,
прошедшего с начала эпохи UNIX. 32-битное целое записывается как массив двух
16-битных целых: сначала старшие разряды, потом младшие.

c_namesize
Длина строки полного пути к файлу включая терминальный NULL.

c_filesize
Размер файла.

Сразу за заголовком помещается полный путь к объекту. Если длина строки пути не кратна степени двойки, то в конец добавляется еще один NULL. Затем помещается содержимое файла. Если размер содержимого не кратен степени двойки, то дополняется нулями.

Пример архива.

Теперь давайте возьмем микроскоп. Я в качестве микроскопа возьму Bless. Не скажу, что мне этот hex-редактор очень нравится, но название того, который мне нравится я забыл.

Создадим простой каталог:

Здесь testl.txt — это символическая ссылка на файл test.txt.
Содержимое файла test.txt:

Затем создадим архив:

и откроем получившийся архив в любимом hex-редакторе.

У меня этот архив выглядит так:

Ну что ж, давайте разбираться.

0x71c7 = 070707 — начало заголовка. И мы уже можем сказать, что порядок байт при создании архива — little-endian.
0x0809 — это c_dev — номер устройства на котором находится файл.
0x349a — это c_ino — inode. В данном случае как раз старшие разряды были утеряны.
0x41fd = 0040775 — c_mode. То есть заголовок описывает каталог с правами доступа 0775.
0x01f4 = 500 — c_uid.
0x01f4 = 500 — c_gid.
0x0002 — c_nlink. На каждый каталог существует как минимум две ссылки (. и ..)
0x0000 — c_rdev.
0x4e8c и 0x3109 — это старший и младший разряды 32-битного значения времени модификации файла. 0x31094e8c = 1317810441.
0x000a — длина имени каталога.
0x00000000 — у каталога нет тела.
Далее идет название каталога.

Затем сразу следует заголовок следующей записи. Не будем подробно на ней останавливаться — только заметим некоторые отличия:
c_mode: 0x34a2 = 0100664 — показывает, что это обычный файл с правами доступа 664.
0x0000001e — размер содержимого файла.
В остальном запись похожа не описание каталога.

Далее идет запись символической ссылки. Содержимое символической ссылки — название файла, на который она указывает. В остальном и заголовок с метаданными и путь к файлу похожи на структуры для обычного файла.

Вот таким не хитрым образом создается архив CPIO. В будущем хотелось бы в аналогичной манере рассмотреть формат файла, создаваемого Gzip. В частности при помощи связки cpio+gzip создается ramfs, используемая ядром GNU/Linux.

Источник

Оцените статью