概要
Red Hat系ディストリビューションで使用されるRPMパッケージファイル(.rpm)を、インストールせずに解凍可能な「cpio形式」のデータストリームに変換するコマンドです。 このコマンド単体でファイルを保存するのではなく、通常は cpio コマンドとパイプ | で繋ぎ、パッケージの中身一覧を表示したり、特定のファイルを抽出したりするために使用します。「誤って消した設定ファイルだけを取り出したい」「インストール前に中身を検証したい」といった場面で非常に役立ちます。
仕様(引数・オプション)
構文
rpm2cpio [RPMファイルパス]
※ rpm2cpio 自体に複雑なオプションはありません。出力結果を受け取る cpio コマンド側のオプションで挙動(展開、一覧表示など)を制御します。
主な引数
- RPMファイルパス: 変換元のRPMファイルを指定します。省略または
-を指定すると標準入力から読み込みます。
基本の使い方
RPMパッケージに含まれているファイルの一覧を表示します。 rpm -qpL コマンドと同様の結果が得られますが、rpm コマンド自体が使えない環境(他OSでのレスキュー時など)でも利用可能です。
# パッケージの中身をリスト表示(展開はしない)
rpm2cpio nginx-1.24.0-1.el9.x86_64.rpm | cpio -t
実行結果例
./etc/nginx/nginx.conf
./usr/sbin/nginx
./usr/share/man/man8/nginx.8.gz
./usr/share/nginx/html/index.html
450 blocks
実践コマンド
パッケージの中身をすべて展開する
RPMファイルをカレントディレクトリに解凍します。 cpio の -i(抽出)と -d(ディレクトリ作成)オプションを組み合わせます。
# 作業用ディレクトリを作成して移動
mkdir work_dir && cd work_dir
# カレントディレクトリにパッケージ内容を展開
rpm2cpio ../nginx-1.24.0-1.el9.x86_64.rpm | cpio -id
標準入力から読み込んで展開する
リダイレクト < を使用してRPMファイルを読み込ませる方法です。挙動は上記と同じですが、スクリプトなどでファイルパスを変数化している場合に便利です。
# 標準入力経由で展開(引数に - を指定、または引数なし)
rpm2cpio - < ../nginx-1.24.0-1.el9.x86_64.rpm | cpio -id
カスタムポイント
- 特定ファイルのみの抽出 パッケージ全体ではなく、特定の設定ファイルだけを取り出したい場合、
cpio側にファイル名パターンを渡します。Bash# nginx.conf だけを取り出す rpm2cpio nginx-pkg.rpm | cpio -id "*nginx.conf" - 展開時の詳細表示 (-v) どのファイルが処理されているかリアルタイムで確認したい場合は、
cpioに-v(verbose) を追加します。Bashrpm2cpio target-pkg.rpm | cpio -idv
注意点
- システムデータベースには登録されない この方法で展開したファイルは、RPMデータベース(
rpm -qa等の管理情報)には記録されません。あくまで「ファイルのコピー」として配置されるため、パッケージ管理システムによるアップデートや削除の対象外となります。 - カレントディレクトリに展開される デフォルトではコマンドを実行した場所(カレントディレクトリ)を起点にファイルが展開されます。ルートディレクトリ(
/)で実行するとシステムファイルを上書きしてしまうリスクがあるため、必ず作業用の一時ディレクトリを作成してその中で行ってください。 - cpioコマンドが必要
rpm2cpioはデータを変換して標準出力に流すだけです。受け皿となるcpioコマンドがインストールされていないと動作しません。
応用
Web上のRPMパッケージをダウンロードせずに中身を確認する
curl や wget と組み合わせることで、RPMファイルをローカルに保存することなく、ネットワーク越しに中身を確認できます。
# ネット上のRPMファイルを取得し、そのままパイプで中身一覧を表示
curl -L https://example.com/repo/packages/monitor-tool.rpm | rpm2cpio - | cpio -t
まとめ
rpm2cpio は、RPMパッケージを「ただのアーカイブファイル」として扱うための鍵となるツールです。 システムへの正式なインストール(rpm -ivh や dnf install)とは異なり、影響範囲を限定して必要なファイルだけを救出できるため、トラブルシューティングや検証作業の現場で重宝します。「展開には | cpio -id をつける」という定型句を覚えておきましょう。
