Cpio

cpioとは



cpio(copy in and out)は、Unix系オペレーティングシステムで広く利用されているファイルアーカイバ・ユーティリティであり、同時にそのアーカイブ形式を指します。主にファイルのバックアップや配布に用いられ、tarコマンドと並びUnix系システムでは重要な存在です。

歴史



cpioは、もともと「Programmer's Workbench」(PWB/UNIX)という環境で、テープメディアのアーカイブプログラムとして開発されました。その後、ほとんど全てのUnix系OSに標準コンポーネントとして組み込まれるようになりました。コマンド名の由来は「copy in and out」という言葉が示す通り、cpioが標準入出力を利用してデータのコピー処理を行うことにあります。

cpioの特徴



  • - アーカイブ形式: cpioは、ファイルやディレクトリをストリーム形式で連続的にアーカイブに格納します。アーカイブファイルは、ファイルメタ情報(ファイル名、inode番号、所有者、パーミッション、タイムスタンプなど)を含むヘッダセクションと、ファイルデータから構成されます。
  • - 非圧縮: cpio自体には圧縮機能がないため、gzipなどの外部圧縮ツールと組み合わせて利用されることが一般的です。これにより、`.cpgz`や`.cpio.gz`といった拡張子を持つ圧縮アーカイブが作成されます。
  • - 柔軟な利用: cpioは、標準入力を介してファイルリストを受け取るため、`find`コマンドなど他のユーティリティと連携して利用されることが多いです。これにより、複雑なファイル操作を柔軟に行うことができます。

cpioの利用例



  • - RPMパッケージのアーカイブ形式: cpioは、RPMパッケージマネージャー(rpm)のアーカイブ形式として利用されています。
  • - Linuxカーネルの起動用RAMイメージ: Linuxカーネルの起動時に利用されるRAMイメージ(initramfs)のアーカイブ形式として、mkinitcpio(Arch Linux)やinitramfs-tools(Debian)などで用いられています。
  • - Appleのpaxインストーラ: Appleのpaxインストーラでも、アーカイブフォーマットとしてcpioが採用されています。
  • - ソフトウェア配布: かつて、オラクルはソフトウェアの配布にcpio形式のアーカイブを利用していました。

cpioの操作



アーカイブの作成



cpioでアーカイブを作成するには、`-o`オプションを指定してコピーアウト(copy-out)モードで起動します。この際、標準入力からファイルまたはディレクトリのパス名を読み込み、標準出力にアーカイブを書き出します。通常は、`find`コマンドでアーカイブ対象ファイルの一覧を作成し、それをcpioにパイプで渡します。

例:

bash
find . | cpio -o > archive.cpio


この例では、カレントディレクトリのすべてのファイルとディレクトリが、`archive.cpio`というアーカイブファイルに保存されます。

アーカイブの展開



cpioでアーカイブを展開するには、`-i`オプションを指定してコピーイン(copy-in)モードで起動します。この際、標準入力からアーカイブを読み込み、ファイルシステム上にファイルやディレクトリを復元します。

例:

bash
cpio -i < archive.cpio


アーカイブを展開する際に、必要に応じてディレクトリを作成する場合は、`-d`オプションを使用します。また、展開されるファイル名を表示するには、`-v`オプションを使用します。

例:

bash
cpio -idv < archive.cpio


アーカイブ内のファイルリスト表示



アーカイブを展開せずに、内容を確認する場合は、`-t`オプションを使用します。

例:

bash
cpio -it < archive.cpio


このコマンドは、アーカイブに含まれるファイルの一覧を標準出力に表示します。

ファイルのコピー



cpioは、`-p`オプションを指定してコピーパス(copy-pass)モードで起動すると、アーカイブを作成せずに、ディレクトリツリーを別の場所にコピーできます。このモードでは、標準入力からパス名を読み込み、指定された場所にファイルとディレクトリを再作成します。

例:

bash
find . | cpio -pdmvu new-path


この例では、カレントディレクトリのファイルとディレクトリが、`new-path`というディレクトリにコピーされます。`-m`オプションはパーミッションを保持し、`-d`オプションは必要に応じてディレクトリを作成し、`-u`オプションは既存のファイルを上書きします。

POSIX標準



cpio形式は、POSIX.1-1988で標準化されていますが、cpioユーティリティ自体は標準化されていません。POSIX標準では、cpioの代替としてpaxユーティリティが利用可能です。

実装



ほとんどのLinuxディストリビューションには、GNUプロジェクト版のcpioが含まれています。FreeBSDとmacOSでは、BSDライセンスのcpioとlibarchiveライブラリが利用されています。

まとめ



cpioは、Unix系システムで広く利用されるファイルアーカイバであり、その柔軟性と効率性から、現在でも重要な役割を果たしています。本記事では、cpioの基本的な操作方法と利用例について解説しました。これらの知識を活用して、ファイル管理の効率化に役立ててください。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。