pax (Unix)

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

pax (акроним для portable archive exchange, портируемый архив для обмена) — утилита архивирования, созданная POSIX и определенная в стандарте POSIX.1-2001[1]. Команда вызова и её структура представляет собой объединение и унификацию tar и cpio.

Особенности[править | править вики-текст]

Режимы[править | править вики-текст]

pax имеет четыре основных режима, которые определяются комбинацией ключей -r («read» — чтение) -w («write» — запись).

Следующая таблица подытоживает основные режимы работы:

Опция Режим Описание
«list» выводит содержимое архива, не изменяя или извлекая чего-либо.
-r «read» читает и извлекает содержимое архива
-w «write» создаёт архив или дополняет его файлами
-rw «copy» читает и копирует файлы и структуру каталогов в указанный каталог

Примеры:
Вывести содержимое архива:

pax < archive.tar

Извлечь содержимое архива в текущий каталог:

pax -r < archive.tar

Создать архив текущего каталога:
Когда используется в стиле cpio, то команда find может использоваться для получения списка файлов подлежащих архивированию:

find . -depth -print | pax -wd > archive.tar

Копирование текущего каталога в другое место:
Целевой каталог должен быть создан заранее.

find . -depth -print | pax -rwd target_dir

Команда вызова[править | править вики-текст]

pax может использоваться по аналогии, как cpio или tar. Синтакс cpio получает список файлов со стандартного ввода (stdin), при архивировании или уже существующий архив, при выводе содержимого или извлечении файлов:

find . -depth -print | pax -wd > archive.tar

и

pax -r < archive.tar

соответственно.

Также возможен вызов этих команд аналогично tar:

pax -wf archive.tar .

и

pax -rf archive.tar

И для ясности и полноты:
Вывод списка файлов из архива:

pax -f archive.tar

и режим «копирования»:

pax -rw . archive_dir

Опция -f позволяет указать с каким архивом производить работу, вместо записи в stdout или чтения stdin. Необходимо отметить, что применение опции -d вместе с find избавляет от прохождения деревьев каталогов pax, так как это будет сделано в find

Сжатие[править | править вики-текст]

Большинство реализаций pax предоставляют опцию -z (gzip) и -j (bzip2) для сжатия. Эта возможность, однако, не предписывается стандартом. Важно отметить, что pax не может дополнять сжатые архивы.

Пример для извлечения gzip-архива:

pax -rzf archive.tar.gz

В связи с возможностью использовать pax в стиле cpio, имеется возможность применить какую-либо другую программу сжатия, например, xz:

pax -w . | xz > archive.tar.xz

и вывести содержимое xz-архива:

xzcat archive.tar.xz | pax

Поддерживаемые форматы[править | править вики-текст]

На сентябрь 2009 версии pax, включаемые в большинство дистрибутивов Linux и BSD (pax[2]), поддерживает следующие форматы, активируемые посредством опции -x:

  • cpio — расширенный cpio-формат для обмена, указанный в стандарте IEEE Std 1003.2 («POSIX.2»).
  • bcpio — старый cpio-формат.
  • sv4cpio — System V release 4 cpio.
  • sv4crc — System V release 4 cpio с использованием crc контрольной суммы.
  • tar — старый BSD tar формат, появившийся в BSD4.3.
  • ustar (default) — формат обмена tar, указанный в стандарте IEEE Std 1003.2 («POSIX.2»).

Важно, что формат pax сам по себе не поддерживается существующей версии pax. Некоторые реализации, например Heirloom pax, поддерживают перспективные форматы,[3], включая собственно сам pax-формат.

Поддержка нескольких томов[править | править вики-текст]

pax поддерживает возможность создания многотомных архивов. Когда достигается конец тома, появляется следующее сообщение:

Внимание! pax требуется сменить том архива.
/dev/fd0 готов для тома: 2
Загрузите следующий элемент хранения (диск) если требуется
и убедитесь что разрешена запись. Введите "y" для продолжения,
"." для завершения pax, или "s" для переключения на новое устройство.
Если Вы не можете сменить элемент хранения (диск) введите "s"
Устройство готово и подключено? >

Когда производится восстановление из многотомного архива, pax запрашивает следующий элемент хранения аналогичным образом, когда конец элемент хранения достигнут до достижения конца архива.

Стандартизация, принятие и популяризация[править | править вики-текст]

Несмотря на то, стандартизован в 2001 в IEEE, на 2010 pax пользуется сравнительно небольшой популярностью.

pax обязателен для присутствия во всех совместимых системах по Linux Standard Base, начиная с версии 3.0 (релиз от 6 Июля, 2005),[4] но до сих пор мало дистрибутивов Linux предоставляют по умолчанию. Тем не менее, большинство дистрибутивов включают pax отдельным пакетом.

pax также присутствует в Windows NT, где он ограничен файловыми архивами (лента не поддерживается).[5] Затем было перемещено в подсистему Interix. Необходимо отметить, что создание и восстановление Win32 ACLs не поддерживается.[6]

Пакеты, обрабатываемые установщиком OS X, нередко упакованы в файле Archive.pax.gz, который может быть прочитан с помощью утилиты pax.[7]

Примечания[править | править вики-текст]

  1. The Open Group Base Specifications Issue 6 — POSIX.1-2001 (IEEE Std 1003.1) Copyright © 2001—2004 The IEEE and The Open Group
  2. man pax
  3. Heirloom pax man page
  4. Release notes for LSB 3.0 заметим что pax был добавлен: LSB 3.0. Commands and Utilities требование pax, но LSB 2.1.0. Commands and Utilities не требует этого
  5. Eric Pearce. Windows NT in a nutshell: a desktop quick reference for system administrators. — O'Reilly Media, Inc., 1997. — P. 271. — ISBN 978-1-56592-251-8.
  6. System Administration of Backups, Tar, and Pax in Interix
  7. Extracting files from a pax.gz package. cocoabuilder.com. Проверено 15 августа 2013.

Ссылки[править | править вики-текст]

См. также[править | править вики-текст]