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

Обновлено: 03.07.2024

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

В отличие от многих других утилит, cpio считывает данные со стандартного ввода. Чтобы извлечь данные из файла .cpio, перенаправьте содержимое файла в команду cpio с помощью $ cpio -idmv

Использование zip и unzip для сжатия и распаковки файлов

Программное обеспечение часто поставляется в zip-файлах, поскольку утилиты для извлечения доступны почти во всех современных операционных системах. Zip-файлы можно легко извлечь с помощью команды unzip, указав в качестве аргумента только имя файла.

Архив: 10201_database_linux32.zip
создание: database/
создание: database/doc/
создание: database/doc/dcommon/
создание: database/doc/dcommon/ css/
наполнение: database/doc/dcommon/css/blafdoc.css
наполнение: database/doc/dcommon/css/darbbook.css
наполнение: database/doc/dcommon/css/ darbbook.css~
раздувание: database/doc/dcommon/css/doccd.css
создание: database/doc/dcommon/gifs/
раздувание: database/doc/dcommon/gifs/bookbig .jpg
раздувание: database/doc/dcommon/gifs/bookicon.jpg
.

Команда unzip распечатывает список созданных каталогов и файлов, извлеченных из исходного файла.

Создание zip-файла похоже на создание tar-файла, но без дополнительных параметров. Имя целевого файла указывается в качестве первого аргумента, затем файлы, которые будут добавлены в zip-файл, могут быть указаны в одном или нескольких дополнительных аргументах.

$ zip oracle_profile.zip oracle_profile
добавление: oracle_profile (уменьшено на 15%)
$ ls
devl emrep oracle_profile oracle_profile.zip orcl TEST

Обратите внимание, что в отличие от Windows исходный файл не удаляется при создании ZIP-файла. Если нужно сэкономить место, вернитесь и удалите оригинал.

Чтобы создать ZIP-файл с содержимым каталога, используйте параметр -r (рекурсивный).

$ zip -r devl_admin_dir.zip devl
добавление: devl/ (сохранено 0%)
добавление: devl/dpdump/ (сохранено 0%)
добавление: devl/dpdump/dp .log (уменьшен на 16%)
добавлено: devl/pfile/ (сохранено 0%)
добавлено: devl/pfile/init.ora.22201013228 (уменьшено на 71%)
добавлено: devl/ adump/ (сохранено 0%)
.

При извлечении этого ZIP-файла структура каталогов и файлы создаются заново.

Использование gzip и gunzip для сжатия и распаковки файлов

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

$ gzip notes_chapter1.txt
$ ls -l

всего 48
drwxr-xr-x 2 jemmons jemmons 4096 16 сент. 13:19 Рабочий стол
drwxrwxr-x 2 jemmons jemmons 4096 17 янв. 13:17 notes
-rw-rw- rw- 1 jemmons jemmons 589 17 января 07:46
notes_chapter1.txt.gz
-rw-rw-r-- 1 jemmons jemmons 1525 17 января 13:07 notes.tar.gz
drwxrwxr-x 2 jemmons jemmons 4096 17 января 11:18 old_notes
drwxr-xr-x 2 jemmons jemmons 4096 8 ноября 08:37 сценарии

В отличие от tar, gzip удаляет исходный файл после создания сжатой версии. Расширение имени файла .gz также автоматически добавляется к имени файла. Чтобы распаковать файл gzip, используется команда gunzip с именем файла в качестве аргумента.

$ gunzip notes_chapter1.txt.gz
$ ls -l

всего 48
drwxr-xr-x 2 jemmons jemmons 4096 16 сент. 13:19 Рабочий стол
drwxrwxr-x 2 jemmons jemmons 4096 17 янв. 13:17 notes
-rw-rw- rw- 1 jemmons jemmons 1027 17 января 07:46 notes_chapter1.txt
-rw-rw-r-- 1 jemmons jemmons 1525 17 января 13:07 notes.tar.gz
drwxrwxr-x 2 jemmons jemmons 4096 17 января 11:18 old_notes
drwxr-xr-x 2 jemmons jemmons 4096 8 ноября 08:37 скрипты

Опять же, сжатая версия файла удаляется после распаковки.

Избавление от неправильных символов новой строки

Если вы работали с другими платформами UNIX или более ранними версиями Linux, вы, вероятно, видели файлы, в которых каждая новая строка сопровождалась символами ^M. Они происходят из файла, который создается или передается в систему Windows или более раннюю версию Macintosh, где символы новой строки представлены по-другому. RHEL5 и некоторые его аналоги UNIX теперь правильно отображают или, по крайней мере, скрывают эти символы, но они все еще присутствуют и могут иногда создавать проблемы с приложениями, которые не готовы к их обработке.

По этой причине существует утилита для преобразования файлов из формата Windows в формат, ожидаемый UNIX. Поскольку RHEL5 правильно отображает файлы независимо от их формата, используйте команду file для идентификации файлов в формате Windows. Если команда файла возвращает формат «с разделителями строк CRLF», это новые строки в стиле Windows.В этом случае используйте команду dos2unix для их преобразования.

hosts.txt: текст на английском языке ASCII с разделителями строк CRLF

dos2unix: преобразование файла hosts.txt в формат UNIX.

hosts.txt: английский текст в формате ASCII

Аналогично, при копировании файлов из системы Linux в систему Windows может оказаться, что в некоторых редакторах, особенно в Блокноте, все отображается в одной строке. Чтобы этого избежать, используйте аналогичную утилиту под названием unix2dos. Это приводит к противоположному результату, добавляя символы новой строки, ожидаемые Windows.

Полная информация об
управлении системой Linux для администраторов баз данных Oracle

Знаменитая книга «Linux для администратора баз данных Oracle: полный справочник» содержит всесторонние, но конкретные знания по администрированию Oracle в Linux. . Обязательный справочник для каждого администратора баз данных, работающего или планирующего использовать Oracle на платформе Linux.

Купите его со скидкой 30% непосредственно у издателя.


Бурлесон — американская команда


Примечание. Эта документация по Oracle была создана в качестве справочника по поддержке и обучению Oracle для использования нашими специалистами-консультантами по настройке производительности администраторов баз данных. Не стесняйтесь задавать вопросы на нашем форуме Oracle.

Проверьте опыт! Любой, кто рассматривает возможность использования услуг эксперта службы поддержки Oracle, должен самостоятельно проверить свои полномочия и опыт, а не полагаться на рекламу и самопровозглашенный опыт. Все законные эксперты Oracle публикуют свои квалификации Oracle.

Ошибки? Технология Oracle меняется, и мы стараемся обновлять нашу информацию о поддержке BC Oracle. Если вы обнаружите ошибку или у вас есть предложение по улучшению нашего контента, мы будем признательны за ваш отзыв. Просто электронная почта:


и укажите URL-адрес страницы.


Burleson Consulting

Оракул поддержки баз данных

Хотя утилита архивации cpio в настоящее время используется реже, чем другие инструменты архивации, такие как tar, все же полезно знать, как она работает, поскольку она все еще используется, например, для создания образов initramfs в Linux и для пакетов rpm, которые используются в основном в семействе дистрибутивов Red Hat. В этом руководстве мы увидим, как создавать и извлекать архивы cpio с помощью утилиты GNU cpio и как получить список содержащихся в них файлов.

В этом уроке вы узнаете:

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

Как создавать и извлекать архивы cpio в Linux

Как создавать и извлекать архивы cpio в Linux

Требования к программному обеспечению и используемые соглашения

Знакомство с cpio

Cpio означает «Copy In and Out»: как мы уже говорили, это утилита архивации, которая обычно включена во все Unix и Unix-подобные операционные системы, включая Linux. Cpio имеет два основных режима использования: «Копирование вне» и «Копирование на входе». В первом режиме приложение считывает список имен файлов из стандартного ввода и по умолчанию создает архив для стандартного вывода; когда используется в последнем режиме, вместо этого он копирует файлы из архива. Существует еще один режим, «копирование-пасс», но в этом туториале мы о нем говорить не будем.

Создание архива (режим копирования)

Cpio сам по себе не может исследовать деревья каталогов, поэтому, в отличие от того, что мы делаем с tar, мы не можем передать каталог в качестве аргумента и ожидать, что cpio рекурсивно создаст архив со всем его содержимым. Вместо этого в духе Unix «делай что-то одно и делай это хорошо» мы должны использовать другую утилиту, например find, для создания списка файлов, которые должны быть включены в архив. Давайте посмотрим на пример.

Предположим, мы хотим создать архив cpio с содержимым нашего домашнего каталога. Вот команда, которую мы могли бы запустить:

Давайте проанализируем, что мы сделали выше. Мы использовали утилиту find для получения списка файлов, которые должны быть частью архива. В качестве первого аргумента утилиты мы передавали путь к каталогу, содержимое которого нужно заархивировать, и использовали две опции: -depth и -print0. Первый изменяет поведение find таким образом, что каждое содержимое каталога обрабатывается перед самим каталогом; зачем это нужно?

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

С опцией -print0 мы сделали так, что полные имена файлов печатаются в стандартном выводе, разделенные нулевым символом вместо стандартной новой строки. Это мера, которая позволяет нам включать файлы, которые содержат символы новой строки в своем имени.

Мы передали вывод find на стандартный ввод cpio, чтобы файлы из списка были включены в архив. При запуске cpio мы использовали опции -o, -v, -c и -0. Первый — это краткая форма --create, и он нужен, чтобы указать, что мы хотим использовать cpio в режиме «копирования». Опция -v ( --verbose ) используется для вывода списка файлов, которые обрабатываются приложением, а с помощью -c мы указываем используемый формат cpio. При запуске в режиме копирования для создания архива по умолчанию используется очень старый формат «bin». Использование -c в основном является сокращением для -H newc (опция -H позволяет указать формат cpio), благодаря чему cpio использует новый переносимый формат SVR4. Наконец, мы использовали опцию -0, которая является сокращенной формой --null. Этот последний параметр используется для указания того, что файлы в списке разделяются нулевым символом.

Последнее, что мы сделали, это перенаправили вывод cpio в файл, архив, который мы неожиданно назвали /tmp/archive.cpio (расширение файла совершенно произвольное). В качестве альтернативы этому последнему перенаправлению мы могли бы использовать параметр cpio -F ( --file ) с именем файла в качестве аргумента, чтобы указать приложению писать в него вместо стандартного вывода.

Что делать, если нам нужно сжать архив при создании? Мы могли бы просто использовать другой канал для передачи стандартного вывода cpio другому приложению, специально предназначенному для сжатия файлов, например, gzip. Мы бы написали:

Извлечение архива (режим копирования)

Мы только что увидели, как создать архив cpio, теперь давайте посмотрим, как его распаковать. Первое, что мы должны сказать, это то, что в режиме копирования нам нужно указать используемый формат архива (если мы хотим использовать что-то отличное от «корзины» по умолчанию), при извлечении формат распознается автоматически.

Чтобы заставить cpio работать в режиме копирования, мы запускаем утилиту cpio с параметром -i, который является сокращением от --extract. При работе в этом режиме нам необходимо передать архив как стандартный ввод cpio. Вот как мы можем извлечь ранее созданный архив:

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

Если мы хотим переключиться в другое место перед выполнением фактического извлечения, все, что нам нужно сделать, это указать его с параметром -D (сокращение от --directory ).

Точно так же, как и в режиме копирования, мы можем указать cpio читать из файла, отличного от стандартного ввода, используя параметр -F с именем файла в качестве аргумента.

Что делать, если архив, который мы хотим извлечь, сжат? Предположим, мы хотим извлечь архив, сжатый с помощью gzip, нам нужно сначала прочитать сжатые данные, а затем передать их в cpio. В случае файла, сжатого gzip, мы можем использовать утилиту zcat для выполнения такой задачи:

Список файлов, содержащихся в архиве cpio

Получить список файлов, содержащихся в архиве cpio, без его распаковки очень просто. Достаточно запустить приложение вместе с опцией -t, которая является краткой формой --list. Просто в качестве примера, чтобы перечислить все файлы в архиве, который мы создали в первом разделе этого руководства, мы запустим:

Команда создает список файлов, хранящихся в архиве. Если мы добавим к нему параметр -v, мы получим вывод, аналогичный результату ls -l , который включает права доступа к файлам и каталогам.

Выводы

В этой статье мы узнали, как использовать утилиту cpio в Linux. Хотя в настоящее время он используется меньше, чем tar, важно знать, как он работает, поскольку он все еще используется для определенных целей, например, для создания пакетов программного обеспечения rpm. Мы увидели, как создать архив, как его распаковать и, наконец, как составить список его содержимого.

команда cpio используется для обработки архивных файлов (например, файлов *.cpio или *.tar).

cpio означает "копировать, копировать".

cpio выполняет следующие три операции.

  • Копирование файлов в архив
  • Извлечение файлов из архива
  • Передача файлов в другое дерево каталогов

cpio берет список файлов из стандартного ввода при создании архива и отправляет вывод на стандартный вывод.

1.Создать архивный файл *.cpio

Вы можете создать архив *.cpio, содержащий файлы и каталоги, используя cpio -ov

Как показано выше, команда ls передает имена трех файлов объектов команде cpio, и cpio создает архив object.cpio.

2. Извлечь архивный файл *.cpio

Извлечение cpio: чтобы извлечь заданный файл *.cpio, используйте cpio -iv, как показано ниже.

3. Создать архив *.cpio с выбранными файлами

В следующем примере создается архив *.cpio только с файлами *.c.

4. Создайте архивный файл *.tar, используя cpio -F

Мы уже знаем, как эффективно использовать команду tar.

Знаете ли вы, что вы также можете использовать команду cpio для создания файлов tar, как показано ниже?

Как показано выше, вместо перенаправления стандартного вывода вы можете указать имя файла выходного архива с параметром -F.

5. Извлеките архивный файл *.tar с помощью команды cpio

Вы также можете извлечь tar-файл с помощью команды cpio, как показано ниже.

6. Просмотр содержимого файла архива *.tar

Чтобы просмотреть содержимое файла *.tar, выполните следующие действия.

7. Создайте архив *.cpio с исходными файлами, на которые указывает символическая ссылка

Архив cpio можно создать из исходных файлов, на которые ссылается символическая ссылка, как показано ниже.

8. Сохранить время модификации файла при восстановлении *.cpio

Время модификации файлов может быть сохранено при восстановлении архивных файлов cpio, как показано ниже.

9. Управление файлами образов Linux и ядра с помощью cpio

Как просматривать, изменять и воссоздавать initrd.img. Как мы уже обсуждали некоторое время назад, мы также можем использовать команду cpio для управления файлом initrd.img.

10. Копировать дерево каталогов из одного в другое

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

В приведенном ниже примере файлы и подкаталоги каталога объектов копируются в каталог /mnt/out.

GNU cpio — это инструмент для создания и извлечения архивов или копирования файлов из одного места в другое. Он поддерживает множество форматов cpio, а также чтение и запись файлов tar.

Поддерживаются следующие форматы архивов: двоичный, старый ASCII, новый ASCII, CRC, двоичный файл HP-UX, старый ASCII HP-UX, старый tar и tar POSIX.1. Формат tar предоставляется для совместимости с программой tar. По умолчанию cpio создает архивы в двоичном формате для совместимости со старыми программами cpio. При извлечении из архивов cpio автоматически распознает тип читаемого архива и может читать архивы, созданные на машинах с другим порядком байтов.

Синтаксис

Синтаксис режима копирования:

В режиме копирования cpio копирует файлы в архив. Он читает список имен файлов, по одному в строке, на стандартный ввод и записывает архив на стандартный вывод. Типичный способ создания списка имен файлов — с помощью команды find; дайте найти параметр -depth, чтобы свести к минимуму проблемы с разрешениями на нечитаемые каталоги. Синтаксис режима копирования:

Синтаксис режима копирования:

В режиме копирования cpio копирует файлы из архива или выводит список содержимого архива. Он читает архив со стандартного ввода. Любые аргументы командной строки, не являющиеся параметрами, являются шаблонами оболочки; из архива копируются только файлы в архиве, имена которых соответствуют одному или нескольким из этих шаблонов. В отличие от оболочки, начальный '.' в имени файла соответствует подстановочному знаку в начале шаблона, а '/' в имени файла может соответствовать подстановочным знакам. Если шаблоны не заданы, извлекаются все файлы. Синтаксис режима копирования:

Синтаксис режима копирования-передачи:

В режиме копирования-прохода cpio копирует файлы из одного дерева каталогов в другое, объединяя шаги копирования и копирования без фактического использования архива. Он читает список файлов для копирования из стандартного ввода; каталог, в который он их копирует, задается как необязательный аргумент. Синтаксис режима копирования-передачи:

Параметры

< /tr>
-0, --null Чтение списка имен файлов, оканчивающихся нулевым символом вместо символа новой строки, чтобы файлы, имена которых содержат символы новой строки, могли архивироваться. GNU find — это один из способов создать список имен файлов, заканчивающихся нулем. Эту опцию можно использовать в режимах копирования и прохода.
-a, --reset-access-time Сбросить время доступа файлов после их чтения, чтобы не было похоже, что они были прочитаны.
-A, --append Добавить в существующий архив. Работает только в режиме копирования. Архив должен быть файлом на диске, указанным с опцией -O или -F (-file).
-b, --swap Поменять местами оба полуслов слов и байтов полуслов в данных. Эквивалент -sS. Эту опцию можно использовать в режиме копирования. Используйте этот параметр для преобразования 32-битных целых чисел между машинами с обратным порядком байтов и прямым порядком байтов.
-B Установите размер блока ввода/вывода равным 5120 байт. Первоначально размер блока составляет 512 байт.
--block-size=BLOCK-SIZE Установите ввод-вывод размер блока равен BLOCK-SIZE * 512 байт.
-c Идентичен '-H newc'; использует новый переносимый формат (SVR4). Если вам нужен старый переносимый (ASCII) формат архива, используйте вместо него '-H odc'.
-C IO-SIZE, --io -size=IO-SIZE Установите размер блока ввода/вывода равным IO-SIZE байтам.
-d, --make-directories Создать начальные каталоги там, где это необходимо.
-E ФАЙЛ, --pattern-file=ФАЙЛ Чтение дополнительных шаблонов, указывающих имена файлов, которые нужно извлечь или перечислить из ФАЙЛА. Строки FILE обрабатываются так, как если бы они были необязательными аргументами для cpio. Эта опция используется в режиме копирования.
-f, --nonmatching Копировать только те файлы, которые не соответствуют ни одному из заданных шаблонов.
-F, --file=archive Имя файла архива для использования вместо стандартного ввода или вывода. Чтобы использовать ленточный накопитель на другой машине в качестве архива, используйте имя файла, начинающееся с «HOSTNAME:». Имени хоста может предшествовать имя пользователя и '@' для доступа к удаленному ленточному накопителю от имени этого пользователя, если у вас есть на это разрешение (запись в файле '~/.rhosts' этого пользователя).
--force-local С параметрами -F, -I или -O сделать имя файла архива локальным, даже если оно содержит двоеточие, что обычно указывает имя удаленного хоста.
-H FORMAT, --format=FORMAT Использовать формат архива FORMAT. Допустимые форматы перечислены ниже; те же имена также распознаются во всех заглавных буквах. По умолчанию в режиме копирования автоматически определяется формат архива, а в режиме копирования — «bin».

bin: устаревший двоичный формат.

odc: старый переносимый формат (POSIX .1).

newc: новый переносимый формат (SVR4), который поддерживает файловые системы с более чем 65 536 индексными дескрипторами.

crc: новый переносимый формат (SVR4) с добавленной контрольной суммой.

tar: старый формат tar.

ustar: формат tar POSIX .1. Кроме того, распознает tar-архивы GNU, которые похожи, но не идентичны.

hpbin: устаревший двоичный формат, используемый cpio HP-UX (в котором файлы устройств хранятся по-другому).

Примеры

При создании архива cpio берет список файлов, подлежащих обработке, из стандартного ввода, а затем отправляет архив на стандартный вывод или на устройство, указанное с помощью параметра '-F'. Обычно find или ls используются для предоставления этого списка на стандартный ввод. В следующем примере вы можете увидеть возможности архивирования содержимого одного каталога:

Опция '-o' создает архив, а опция '-v' печатает имена заархивированных файлов по мере их добавления. Обратите внимание, что параметры могут быть объединены после одного «-» или могут быть помещены отдельно в командной строке. «>» перенаправляет вывод cpio в файл «directory.cpio».

Если вы хотите заархивировать все дерево каталогов, команда find может передать список файлов в cpio:

Это берет все файлы в текущем каталоге, каталогах ниже и помещает их в архив tree.cpio. Опять же, '-o' создает архив, а параметр '-v' показывает вам имена файлов в том виде, в каком они были заархивированы (см. «режим копирования»). С использованием '.' в операторе find дает вам больше гибкости при восстановлении, поскольку он сохраняет имена файлов с относительным путем через аппаратно заданный абсолютный путь. Опция '-depth' заставляет 'find' печатать записи в каталоге перед печатью самого каталога. Это ограничивает ограничительные разрешения каталога, печатая записи каталога в каталоге перед самим именем каталога.

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

Это извлечет файлы, заархивированные в каталоге файлов .cpio, и поместит их в существующий каталог. Опция «-i» извлекает архив, а «-v» показывает имена файлов по мере их извлечения. Если вы имеете дело с заархивированным деревом каталогов, вам нужно использовать опцию '-d' для создания каталогов по мере необходимости, например:

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

В режиме копирования-прохода cpio копирует файлы из одного дерева каталогов в другое, объединяя шаги копирования и копирования без фактического использования архива.Он читает список файлов для копирования из стандартного ввода; каталог, в который он их копирует, задается как необязательный аргумент (см. «режим копирования-передачи»).

В примере показано копирование файлов текущего каталога и подкаталогов в новый каталог с именем new-dir. Некоторыми новыми опциями являются '-print0', доступные в GNU find, в сочетании с опцией '--null' в cpio. Эти две опции работают вместе для отправки имен файлов между find и cpio, даже если в имена файлов встроены специальные символы. Другой вариант — «-p», указывающий cpio передавать найденные файлы в каталог «new-dir».

Выше с помощью команды find выводится список всех файлов и каталогов, а с помощью команды cpio эти файлы копируются на дискету.

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

Приведенная выше команда восстановит файлы с дискеты.

Связанные команды

ar — создавать, изменять и извлекать файлы из архивов.
cat — выводить содержимое файла.
echo — выводить текст.
gzip — создавать, просматривать содержимое, и извлекать файлы из zip-архивов GNU.
ls — вывести содержимое каталога или каталогов.
setfacl — изменить список управления доступом к файлу или файлам.
tar — создать, изменить, просматривать содержимое и извлекать файлы из tar-архивов.

GNU cpio выполняет три основные функции. Копирование файлов в архив, извлечение файлов из архива и передача файлов в другое дерево каталогов. Архив может быть файлом на диске, одной или нескольких дискетах или одной или нескольких лентах.

При создании архива cpio берет список обрабатываемых файлов со стандартного ввода, а затем отправляет архив на стандартный вывод или на устройство, указанное параметром ‘-F’. См. раздел Режим копирования. Обычно find или ls используются для предоставления этого списка на стандартный ввод. В следующем примере вы можете увидеть возможности архивирования содержимого одного каталога.

Опция ‘-o’ создает архив, а опция ‘-v’ печатает имена заархивированных файлов по мере их добавления. Обратите внимание, что параметры могут быть объединены после одного «-» или могут быть помещены отдельно в командной строке. «>» перенаправляет вывод cpio в файл «directory.cpio».

Если вы хотите заархивировать все дерево каталогов, команда find может передать список файлов в cpio:

Это возьмет все файлы в текущем каталоге, каталогах ниже и поместит их в архив ‘tree.cpio’. Опять же, «-o» создает архив, а параметр «-v» показывает вам имя файлов в том виде, в котором они были заархивированы. См. раздел Режим копирования. С использованием ' . ’ в операторе find даст вам больше гибкости при восстановлении, так как имена файлов будут сохраняться с относительным путем, а не с жестко заданным абсолютным путем. Параметр «-depth» заставляет find печатать записи в каталоге перед печатью самого каталога. Это ограничивает эффекты ограничительных разрешений каталога, печатая записи каталога в каталоге перед самим именем каталога.

Чтобы извлечь архив, нужно немного подумать. Во-первых, по умолчанию cpio извлекает файлы с теми же именами, что и в архиве. Это означает, что если архив содержит абсолютные пути, вы будете извлекать файлы в их абсолютные местоположения независимо от того, в каком каталоге вы находитесь при выполнении команды. Вы можете указать cpio удалить начальные косые черты, используя опцию ‘--no-absolute-filenames’. Тем не менее рекомендуется всегда проверять архив с помощью cpio -t перед его извлечением.

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

При этом файлы, заархивированные в файле directory.cpio, будут извлечены и восстановлены на свои места. Опция «-i» извлекает архив, а «-v» показывает имена файлов по мере их извлечения. Если вы имеете дело с заархивированным деревом каталогов, вам нужно использовать параметр ‘-d’ для создания каталогов по мере необходимости, например:

При этом содержимое архива tree.cpio будет извлечено. Если вы попытаетесь извлечь файлы поверх файлов с тем же именем, которые уже существуют (и имеют такое же или более позднее время модификации), cpio не будет извлекать файл, если это не будет указано с помощью опции ‘-u’. См. раздел Режим копирования.

В режиме копирования-прохода cpio копирует файлы из одного дерева каталогов в другое, объединяя шаги копирования и копирования без фактического использования архива. Он читает список файлов для копирования из стандартного ввода; каталог, в который они будут скопированы, задается как необязательный аргумент. См. раздел Режим копирования-прохода.

В примере показано копирование файлов текущего каталога и подкаталогов в новый каталог с именем new-dir. Некоторыми новыми параметрами являются ‘-print0’, доступный в GNU find, в сочетании с ‘-null’ параметром cpio. Эти две опции работают вместе для отправки имен файлов между find и cpio, даже если в имена файлов встроены специальные символы. Другой вариант — «-p», который указывает cpio передавать найденные файлы в каталог «new-dir».

Этот документ был создан 24 марта 2021 г. с использованием texi2html 5.0.

Читайте также: