cpio

cpio
原作者ディック・ヘイト
開発者AT&Tベル研究所
初回リリース1977 (1977年
オペレーティング·システムUnixおよびUnixライク
タイプ指示
ライセンスGNU cpio: GPLv3 libarchive bsdcpio:新しいBSDライセンス
cpio
ファイル名拡張子
.cpio
インターネットメディアの種類
アプリケーション/x-cpio
統一型識別子(UTI)public.cpio-archive
フォーマットの種類ファイルアーカイバ

cpioは、汎用ファイルアーカイバユーティリティとそれに関連するファイルフォーマットです。主にUnix 系コンピュータオペレーティングシステムにインストールされます。このソフトウェアユーティリティは、元々は Programmer's Workbench ( PWB/UNIX ) の一部としてテープアーカイブプログラムとして開発され、その後リリースされたほぼすべての Unix オペレーティングシステムのコンポーネントとなっています。cpio という名前は、プログラムが動作時に 標準入力標準出力を使用する様子を的確に表現した「copy in and out」というフレーズに由来しています。

Unixのすべての派生版は、より広く認知されるようになったtarなどの他のバックアップおよびアーカイブプログラムもサポートしています。 [ 1 ] RPMパッケージマネージャ、バージョン2.6以降のLinuxカーネルinitramfs、およびAppleのインストーラpax )でのcpioの使用により、cpioは重要なアーカイブツールになっています。

cpio とそのアーカイブファイル形式は、当初の設計以来、互換性のない改訂を何度か経てきました。最も注目すべきは、アーカイブファイルのメタ情報をバイナリ形式からASCIIベースの表現に変更したことです。 これは現在では運用上のオプションとなっています。

cpioはPOSIX.1-2001から削除され、代わりに以前のバージョンの標準で導入されていた同様のユーティリティ であるpax [ 2 ]が採用されました。

歴史

cpioはProgrammer's Workbenchプロジェクトの一部としてUnixバージョン7に登場しました。[ 3 ]

操作とアーカイブ形式

cpioは元々、バックアップファイルのアーカイブをテープデバイスに連続的に保存するために設計されました。コンテンツを圧縮することはありませんが、生成されたアーカイブはgzipなどの外部圧縮ツールで圧縮されることがよくあります。

アーカイブの作成

-oコマンドラインフラグで開始されるコピーアウト操作中にアーカイブを作成する際、cpio は標準入力チャネルからファイルとディレクトリのパス名を読み取り、結果のアーカイブバイトストリームを標準出力に書き出します。そのため、cpio は通常、 findプログラムなど、アーカイブするファイルのリストを生成する他のユーティリティと併用されます。

生成される cpio アーカイブは、ファイル名、inode番号、所有権、権限、タイムスタンプなどのファイルメタ情報を含むヘッダーセクションによって区切られた、一連のファイルとディレクトリが単一のアーカイブに連結されたものです。慣例により、アーカイブのファイル名には通常、ファイル拡張子cpioが付けられます。

この例では、findユーティリティを使用して、現在のディレクトリから始まるパス名のリストを生成し、ディレクトリ ツリーのアーカイブを作成します。

$ find . -depth -print | cpio -o > /path/archive.cpio 

抽出

コマンドラインフラグiによって開始されるコピーイン操作中に、 cpio は標準入力からアーカイブを読み取り、アーカイブされたファイルをオペレーティングシステムのファイルシステムに再作成します。

$ cpio -i -vd <アーカイブ.cpio 

コマンドラインフラグdは、cpio に必要に応じてディレクトリを構築するよう指示します。フラグv (詳細) は、抽出されたファイル名をリストします。

オプションフラグ以外の残りのコマンドライン引数は、シェルのようなグロブパターンです。アーカイブ内の一致する名前のファイルのみがアーカイブからコピーされます。次の例では、アーカイブから /etc/fstabファイルを抽出します。

$ cpio -i -d /etc/fstab <アーカイブ.cpio 

リスト

cpio アーカイブに含まれるファイルは、次のように呼び出すことで一覧表示できます。

$ cpio -t <アーカイブ.cpio 

cpio アーカイブには相対パスではなく絶対パス (例: /bin/lsbin/ls ) が含まれる可能性があるため、リストは役に立つ場合があります。

コピー

Cpio は、ファイルをコピーする3つ目の操作をサポートします。これはパススルーオプションフラグ ( p ) で開始されます。このモードでは、コピーアウトとコピーインの手順が組み合わされますが、実際にはファイルアーカイブは作成されません。このモードでは、cpio はコピーアウト操作と同様に標準入力からパス名を読み取りますが、アーカイブを作成する代わりに、コマンドライン引数として指定されたパスに基づいて、ファイルシステム内の別の場所にディレクトリとファイルを再作成します。

この例では、現在のディレクトリから始まるディレクトリ ツリーをファイル システム内の別のパスnew-pathにコピーし、ファイルの変更時刻 (フラグm ) を保持し、必要に応じてディレクトリを作成し ( d )、既存のファイルを無条件に置き換え ( u )、標準出力に進行状況リストを生成します ( v )。

$ find . -depth -print | cpio -p -dumv新しいパス 

POSIX標準化

cpioユーティリティはPOSIX.1-1988で標準化されましたが、ファイルサイズなどの制限のため、POSIX.1-2001では省略されました例えば、GNU版では「bin」(デフォルト、現在は廃止)や「ustar」(POSIX tar)など、様々な出力形式オプションが提供されており、ファイルサイズ制限はそれぞれ2,147,483,647バイト(2GB)、8,589,934,591バイト(8GB)となっています。[ 4 ]

cpio、ustar、および pax ファイル形式は、現在POSIX 1003.1-2008に準拠しているpaxユーティリティのPOSIX.1-2001によって定義されており、cpio および ustar 形式のアーカイブの読み取りと書き込みが可能です。

実装

ほとんどのLinuxディストリビューションはGNU版を提供していますcpio[ 5 ] FreeBSDmacOSはBSDライセンスのlibarchivebsdcpioを使用しています。[ 6 ]

参照

参考文献

  1. ^ Peek, J; O'Reilly, T; Loukides, M (1997). Unix Power Tools . O'Reilly & Associates, Inc. p. 38.13. ISBN 1-565-92260-3
  2. ^ "Rationale" . pubs.opengroup.org . 2024年7月18日閲覧。
  3. ^ McIlroy, MD (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (技術レポート). CSTR. ベル研究所. 139.
  4. ^ cpio情報ドキュメント、オプションノード、bsdcpio マニュアルページ
  5. ^ "Cpio" . GNU.org.
  6. ^ "libarchive" .