【Linux】rpm2cpioコマンドでRPMパッケージをcpio形式に変換・展開する

目次

概要

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

注意点

  1. システムデータベースには登録されない この方法で展開したファイルは、RPMデータベース(rpm -qa 等の管理情報)には記録されません。あくまで「ファイルのコピー」として配置されるため、パッケージ管理システムによるアップデートや削除の対象外となります。
  2. カレントディレクトリに展開される デフォルトではコマンドを実行した場所(カレントディレクトリ)を起点にファイルが展開されます。ルートディレクトリ(/)で実行するとシステムファイルを上書きしてしまうリスクがあるため、必ず作業用の一時ディレクトリを作成してその中で行ってください。
  3. cpioコマンドが必要 rpm2cpio はデータを変換して標準出力に流すだけです。受け皿となる cpio コマンドがインストールされていないと動作しません。

応用

Web上のRPMパッケージをダウンロードせずに中身を確認する

curlwget と組み合わせることで、RPMファイルをローカルに保存することなく、ネットワーク越しに中身を確認できます。

# ネット上のRPMファイルを取得し、そのままパイプで中身一覧を表示
curl -L https://example.com/repo/packages/monitor-tool.rpm | rpm2cpio - | cpio -t

まとめ

rpm2cpio は、RPMパッケージを「ただのアーカイブファイル」として扱うための鍵となるツールです。 システムへの正式なインストール(rpm -ivhdnf install)とは異なり、影響範囲を限定して必要なファイルだけを救出できるため、トラブルシューティングや検証作業の現場で重宝します。「展開には | cpio -id をつける」という定型句を覚えておきましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次