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`オプションは既存のファイルを上書きします。
cpio形式は、
POSIX.1-1988で
標準化されていますが、cpioユーティリティ自体は
標準化されていません。
POSIX標準では、cpioの代替としてpaxユーティリティが利用可能です。
ほとんどの
Linuxディストリビューションには、
GNUプロジェクト版のcpioが含まれています。FreeBSDとmacOSでは、
BSDライセンスのcpioとlibarchive
ライブラリが利用されています。
まとめ
cpioは、
Unix系システムで広く利用されるファイルアーカイバであり、その柔軟性と効率性から、現在でも重要な役割を果たしています。本記事では、cpioの基本的な操作方法と利用例について解説しました。これらの知識を活用して、ファイル管理の効率化に役立ててください。