インフラエンジニアの羅針盤

インフラエンジニア1〜3年目のための技術ガイド

Linuxパッケージ管理の完全比較:RPM/dnfとDebian/aptのコマンド・リポジトリ設定【LinuC101】

公開
,
LinuC Level 1 第08回 主題1.02 Linuxのインストールとパッケージ管理



Linuxシステムにおけるソフトウェアの導入・更新・削除は、「パッケージ管理システム」によって安全かつ効率的に統制されています。Linuxディストリビューションには、Red Hat系(RPM / DNF)とDebian系(dpkg / APT)という2大系統が存在し、それぞれが低レベルのアーカイブ操作ツールと高レベルのリポジトリ依存関係解決ツールの2層構造を持っています。本稿では、LinuC 101試験において重要度合計8を占めるパッケージ管理の仕組み、各種コマンド体系、設定ファイル形式、そして高度な利用法(rpm2cpioやパージ削除など)を実機検証ログとともに論理的に解説します。

  • Linuxパッケージ管理システムの2層アーキテクチャ(低レベルツールと高レベルツールの役割分担)を説明できる状態を目指します
  • Red Hat系におけるrpmコマンドの主要オプション(-i, -U, -F, -e, -qa, -qi, -ql, -qc, -qf, -V)およびrpm2cpioの用途を習得します
  • Red Hat系におけるdnf(およびyum)のコマンド操作とリポジトリ設定ファイル(/etc/yum.repos.d/*.repo)の記述構造を理解します
  • Debian系におけるdpkgの主要オプション(-i, -r, -P, -l, -s, -L, -S)と設定ファイル完全削除(purge)の挙動を把握します
  • Debian系におけるapt / apt-get / apt-cacheの機能差とリポジトリ設定ファイル(/etc/apt/sources.list)の書式を整理します
項目 仕様・設定値
検証機ホスト名 linuc-node01
ディストリビューション AlmaLinux 9.8 (Olive Jaguar)
RPMバージョン RPM version 4.16.1.3
DNFバージョン DNF 4.14.0
比較対象環境 Debian 12 / Ubuntu 24.04 LTS(dpkg 1.22.x / apt 2.8.x)
対象試験 LinuC レベル1 101試験(主題1.04.1〜1.04.4 重要度合計8)
目次
  1. 1. Linuxパッケージ管理の全体像と2層構造
    1. 1.1 ソースコードビルドからパッケージ管理システムへの進化
    2. 1.2 低レベルツール(rpm / dpkg)と高レベルツール(dnf / apt)の役割分担
    3. 1.3 Red Hat系とDebian系の系譜とパッケージ形式(.rpm と .deb)
  2. 2. Red Hat系パッケージ管理:RPMの基礎と高度な利用
    1. 2.1 RPMパッケージの命名規則(名前・バージョン・リリース・アーキテクチャ)
    2. 2.2 rpmコマンドによるインストール・更新・削除(-i, -U, -F, -e)
    3. 2.3 rpm照会オプション(-qa, -qi, -ql, -qc, -qf, -qd)
    4. 2.4 パッケージの整合性検証(rpm -V)
    5. 2.5 rpm2cpioを用いたパッケージの展開と中身の抽出
  3. 3. Red Hat系リポジトリ管理:YUMとDNF
    1. 3.1 YUMからDNFへの進化と互換性
    2. 3.2 DNFの基本コマンド(install, remove, update, check-update)
    3. 3.3 パッケージ検索とファイル逆引き(search, info, provides)
    4. 3.4 リポジトリ設定ファイル(/etc/yum.repos.d/*.repo)の書式と管理
  4. 4. Debian系パッケージ管理:dpkgの基礎と活用
    1. 4.1 dpkgコマンドによるインストールと削除(-i, -r, -P: purge)
    2. 4.2 dpkg照会オプション(-l, -s, -L, -S)
    3. 4.3 パッケージの再設定(dpkg-reconfigure)
  5. 5. Debian系リポジトリ管理:APTツール群(apt, apt-get, apt-cache)
    1. 5.1 aptとapt-get/apt-cacheの関係と使い分け
    2. 5.2 APTの基本ワークフロー(update, upgrade, full-upgrade/dist-upgrade)
    3. 5.3 パッケージ検索・情報表示(search, show)
    4. 5.4 リポジトリ設定ファイル(/etc/apt/sources.list と sources.list.d)の書式
  6. 6. 実機ハンズオン演習:AlmaLinux 9でRPM/DNF操作とrpm2cpioを検証
    1. 6.1 実機検証環境の確認
    2. 6.2 演習1:rpmコマンドによるファイル逆引きとパッケージ詳細照会
    3. 6.3 演習2:dnf providesによる未インストールコマンドの提供元特定
    4. 6.4 演習3:rpm2cpioを用いたRPMパッケージの個別ファイル抽出
  7. 7. LinuC 101試験対策まとめとコマ問頻出チェック
    1. 7.1 RPM vs dpkg / DNF vs APT 完全対比マトリクス
    2. 7.2 コマ問(記述式)頻出キーワード一覧表
    3. 7.3 本番想定 総合確認演習問題
    4. 7.4 Ping-t演習へのブリッジ(対象分野と推奨学習順)
  8. 8. まとめと次回予告

1. Linuxパッケージ管理の全体像と2層構造

初期のUNIXやLinuxでは、ソフトウェアを導入する際に開発元からソースコード(C言語等のアーカイブ)を入手し、コンパイル(configuremakemake install)を行う方式が一般的でした。しかし、この方式ではライブラリの依存関係が複雑化し、アンインストールやバージョン追跡が困難になる問題(いわゆる「依存関係地獄」)が発生しました。

これを解決するために考案されたのが、コンパイル済みのバイナリ、設定ファイル、依存情報、メタデータを単一アーカイブにまとめたパッケージ管理システムです。

Linuxパッケージ管理の2層アーキテクチャ
図1: Linuxパッケージ管理の2層アーキテクチャ

1.1 ソースコードビルドからパッケージ管理システムへの進化

パッケージ管理システムを導入することで、以下の利点が得られます。

  • インストールの簡素化: コンパイル済みの実行可能バイナリが所定のディレクトリ(/usr/bin/etcなど)へ即座に展開されます。
  • アンインストールの確実性: どのパッケージがどのファイルを配置したかがローカルデータベースに記録されるため、不要になった際に綺麗に削除できます。
  • バージョンの追跡と検証: システムに導入されているソフトウェアの改ざんや欠損を検知できます。

1.2 低レベルツール(rpm / dpkg)と高レベルツール(dnf / apt)の役割分担

現代のLinuxパッケージ管理は、役割の異なる2つの階層に明確に分離されています。

  • 低レベルツール(Low-level Tool): rpm / dpkg

    手元のローカルディスク上に存在する単一のパッケージファイル(.rpm.deb)を直接開き、システムへの配置、削除、照会を行います。ローカルデータベース(/var/lib/rpm/var/lib/dpkg)を直接更新する責任を持ちますが、「依存する別のパッケージをインターネットから自動的に探してダウンロードする機能」は持っていません。依存パッケージが不足している場合はエラーを出力して停止します。

  • 高レベルツール(High-level Tool): dnfyum) / aptapt-get

    インターネット上のソフトウェア保管庫(リポジトリ: Repository)に接続し、メタデータを取得して依存関係ツリーを自動解析します。必要な関連パッケージ群をすべてダウンロードした上で、内部的に低レベルツールを呼び出して一括インストールします。

1.3 Red Hat系とDebian系の系譜とパッケージ形式(.rpm と .deb)

Linuxの主要ディストリビューションは、採用しているパッケージ形式によって大きく2つの系統に分かれます。

系統 代表的ディストリビューション パッケージ拡張子 低レベル管理コマンド 高レベル管理コマンド
Red Hat系 RHEL, AlmaLinux, Rocky Linux, CentOS, Fedora .rpm rpm dnf(旧 yum
Debian系 Debian, Ubuntu, Linux Mint .deb dpkg aptapt-get, apt-cache

2. Red Hat系パッケージ管理:RPMの基礎と高度な利用

Red Hat系ディストリビューションの中核をなすRPM(Red Hat Package Manager / 現在の公式名称はRPM Package Manager)の構造とコマンド操作を解説します。

2.1 RPMパッケージの命名規則(名前・バージョン・リリース・アーキテクチャ)

RPMパッケージのファイル名は、厳格な命名規約に沿って構築されています。実機linuc-node01のcoreutilsパッケージを例に分解します。

coreutils-8.32-41.el9_8.x86_64.rpm
└──┬────┘ └─┬──┘ └───┬───┘ └──┬──┘ └─┬─┘
   │        │        │        │      └─ 拡張子 (.rpm)
   │        │        │        └─ 対象CPUアーキテクチャ (x86_64, aarch64, noarch 等)
   │        │        └─ ディストリビューション固有のリリース番号 (RHEL/Alma 9.8 向け41版)
   │        └─ アップストリーム(原作者)のソフトウェアバージョン (8.32)
   └─ パッケージ名称 (coreutils)

2.2 rpmコマンドによるインストール・更新・削除(-i, -U, -F, -e)

rpmコマンドによるパッケージ操作の基本オプションは以下の通りです。試験では大文字・小文字の区別が問われます。

モード 主要オプション 説明と動作の特徴
インストール -i--install 新規にパッケージをインストールする。同名パッケージが既に存在する場合はエラーとなる。
アップグレード -U--upgrade パッケージを更新する。旧版が存在しない場合は新規インストールを行う(最も汎用的に使われる)。
フレッシュアップ -F--freshen 旧版が既にインストールされている場合のみ更新する。未導入の場合は何もしない。
削除(アンインストール) -e--erase 指定したパッケージをシステムから削除する。引数にはファイル名ではなく「パッケージ名称」を指定する。
(共通修飾) -v / -h -vは詳細メッセージ表示(verbose)、-hは進行状況をハッシュ記号(#)でプログレスバー表示。通常rpm -ivh pkg.rpmrpm -Uvh pkg.rpmとして併用する。
(強制オプション) --nodeps 依存関係の検査を無視して強制的に実行する(システム破損の危険があるため通常は非推奨)。

2.3 rpm照会オプション(-qa, -qi, -ql, -qc, -qf, -qd)

rpmコマンドでローカルデータベース(/var/lib/rpm/)に登録されている情報を調べる際は、照会(Query)を意味する-qオプションと各種サブオプションを組み合わせます。この組み合わせはLinuC 101試験で極めて高い出題率を誇ります。

コマンド書式 対象指定 照会内容と出力情報
rpm -qa 全体(All) システムに導入されている全パッケージ名の一覧を出力する。
rpm -qi <pkg> パッケージ名 指定パッケージの詳細情報(バージョン、ライセンス、サイズ、説明文など)を表示する。
rpm -ql <pkg> パッケージ名 指定パッケージが展開・配置した全ファイルの絶対パス一覧(List)を表示する。
rpm -qc <pkg> パッケージ名 指定パッケージに含まれる設定ファイル(Configuration files)のみを一覧表示する。
rpm -qd <pkg> パッケージ名 指定パッケージに含まれるマニュアル等の文書ファイル(Documentation)のみを表示する。
rpm -qf <path> 既存ファイルの絶対パス 指定したファイルがどのパッケージによって配置されたかを逆引き検索する。
rpm -q --scripts <pkg> パッケージ名 インストール前後に実行されるスクリプトレット(preinstall, postinstall等)を表示する。
rpm -qpi <file.rpm> 未インストールのRPMファイル -p(Package file)を付加することで、未導入の外部RPMファイルの中身を照会する。

2.4 パッケージの整合性検証(rpm -V)

システム上のファイルがインストール時と比べて改ざんされたり破損したりしていないかを検証するには、rpm -V(または--verify)コマンドを使用します。

[user01@linuc-node01 ~]$ rpm -V coreutils

何も出力されなければ全ファイルが正常です。変更があった場合は、以下のようなステータス文字の羅列が出力されます。

  • S: ファイルサイズが異なる
  • M: パーミッションまたはファイルタイプが異なる
  • 5: MD5/SHA256ダイジェスト(チェックサム)が異なる(中身が改ざん・書き換えされた)
  • D: デバイスのメジャー/マイナー番号が異なる
  • L: シンボリックリンクのパスが異なる
  • U: 所有ユーザーが異なる
  • G: 所有グループが異なる
  • T: 最終修正時刻(mtime)が異なる

2.5 rpm2cpioを用いたパッケージの展開と中身の抽出

パッケージ全体をシステムにインストールすることなく、特定のバイナリや設定ファイルだけを緊急に取り出したい場合があります。その際に用いられるのがrpm2cpioコマンドです。

rpm2cpioは、RPMパッケージファイルを汎用のcpioアーカイブ形式に変換して標準出力に流します。これをcpioコマンドへパイプで渡すことで、カレントディレクトリに安全に展開できます。

# 書式: rpm2cpio パッケージファイル.rpm | cpio -idmv
[user01@linuc-node01 tmp]$ rpm2cpio /path/to/sample.rpm | cpio -idmv
  • -i: 復元・抽出(extract)
  • -d: 必要に応じてディレクトリを作成(make directories)
  • -m: ファイルの最終更新時刻を維持(preserve modification time)
  • -v: 展開ファイル名を詳細表示(verbose)

3. Red Hat系リポジトリ管理:YUMとDNF

RPMの依存関係解決を自動化するために開発された高レベルツールがYUM(Yellowdog Updater, Modified)であり、それを全面的に刷新した後継がDNF(Dandified YUM)です。

3.1 YUMからDNFへの進化と互換性

従来のyum(Python 2ベース)は、大規模な依存関係解決時にメモリを過剰消費し、動作が緩慢になる欠点がありました。RHEL 8 / AlmaLinux 8以降では、C言語ライブラリ(libsolv)による高速なSATソルバーを搭載したdnfが標準となりました。

互換性を維持するため、yumというコマンド名はdnfへのシンボリックリンクとして残されており、従来のyum install等のコマンドはそのままdnfとして実行されます。

3.2 DNFの基本コマンド(install, remove, update, check-update)

日常の管理作業で使用する主要サブコマンドは以下の通りです。

  • パッケージの新規インストール(install)

    [user01@linuc-node01 ~]$ sudo dnf install nginx

    依存関係にあるライブラリ群が自動算出され、一括でダウンロード・インストールされます。確認プロンプトを自動承認するには-yオプションを付与します。

  • パッケージの更新(update / upgrade)

    [user01@linuc-node01 ~]$ sudo dnf upgrade

    DNFではupdateupgradeは同義として扱われます。

  • 更新可能パッケージの事前確認(check-update)

    [user01@linuc-node01 ~]$ dnf check-update

    システムに適用可能なアップデートの一覧を表示します(終了コード100が更新ありを示します)。

  • パッケージの削除(remove / erase)

    [user01@linuc-node01 ~]$ sudo dnf remove nginx

    指定したパッケージとともに、不要となった依存パッケージも検出して削除します。

3.3 パッケージ検索とファイル逆引き(search, info, provides)

リポジトリ内に存在するソフトウェアを探すためのコマンドです。

  • dnf search <keyword>: パッケージ名や要約文からキーワード検索します。
  • dnf info <pkg>: パッケージの詳細情報を表示します(rpm -qiの高レベル版)。
  • dnf provides <path-or-cmd>(別名: whatprovides): 「このファイルやコマンドを提供しているパッケージは何か?」を未インストールの状態からリポジトリ横断で逆引き検索します。実務・試験の双方で最重要コマンドです。

3.4 リポジトリ設定ファイル(/etc/yum.repos.d/*.repo)の書式と管理

DNF/YUMが参照するリポジトリ情報は、/etc/yum.repos.d/ディレクトリ配下に拡張子.repoを持つテキストファイルとして配置されます。

[user01@linuc-node01 ~]$ cat /etc/yum.repos.d/almalinux-baseos.repo
[baseos]
name=AlmaLinux $releasever - BaseOS
mirrorlist=https://mirrors.almalinux.org/mirrorlist/$releasever/baseos
# baseurl=https://repo.almalinux.org/almalinux/$releasever/BaseOS/$basearch/os/
enabled=1
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-9

設定ファイルの重要ディレクティブ:

  • [baseos]: リポジトリID(角括弧で囲む一意の識別名)
  • name=: 管理者向けのわかりやすい名称
  • baseurl=: パッケージが格納されているHTTP/FTP/ローカルパスのURL
  • mirrorlist=: 最寄りのミラーサイト一覧を動的に取得するURL
  • enabled=: 1でリポジトリ有効、0で無効
  • gpgcheck=: 1でパッケージのGPG公開鍵署名を検証、0で検証スキップ
  • gpgkey=: 署名検証に用いる公開鍵ファイルの場所(URLまたはローカルパス)

リポジトリのキャッシュ情報をクリアして最新状態に強制同期するにはdnf clean allを実行します。現在有効なリポジトリ一覧はdnf repolistで確認できます。

4. Debian系パッケージ管理:dpkgの基礎と活用

DebianやUbuntuなどのDebian系ディストリビューションにおいて、ローカルの.debアーカイブを直接操作する低レベルコマンドがdpkg(Debian Package)です。

4.1 dpkgコマンドによるインストールと削除(-i, -r, -P: purge)

dpkgによるインストールと削除では、設定ファイルの扱いに関する重要なオプションの差異が存在します。

オプション 長形式 説明と動作
-i --install 指定した.debパッケージをインストール(またはアップグレード)する。
-r --remove パッケージを削除するが、設定ファイルはシステム上に残す
-P --purge 設定ファイルを含めて完全に削除(パージ)する。
--unpack --unpack パッケージを展開するが、構成(設定反映)は行わない。
--configure --configure 展開済みで未構成のパッケージを設定する。

試験対策の重要ポイント:-r(remove)と-P(purge)の差は、「設定ファイルを残すか、すべて消し去るか」です。大文字の-Pが完全削除であることを確実に記憶してください。

4.2 dpkg照会オプション(-l, -s, -L, -S)

dpkgの照会オプションは大文字・小文字の区別が厳格であり、コマ問での減点対象になりやすい領域です。

オプション 引数 照会内容と対応するRPMオプション
-l(小文字エル) なし、またはパターン 導入済みパッケージ一覧を表示する(rpm -qaに相当)。
-s(小文字エス) パッケージ名 導入済みパッケージの状態と詳細情報を表示する(Status: rpm -qiに相当)。
-L大文字エル パッケージ名 指定パッケージが導入したファイル一覧を表示する(List: rpm -qlに相当)。
-S大文字エス ファイルの絶対パス 指定ファイルがどのパッケージに属するか逆引き検索する(Search: rpm -qfに相当)。
-c(小文字シー) 未導入の.debファイル 未インストールの.debアーカイブに含まれるファイル一覧を表示する(Contents)。
-I(大文字アイ) 未導入の.debファイル 未インストールの.debアーカイブの詳細情報を表示する(Info: rpm -qpiに相当)。

4.3 パッケージの再設定(dpkg-reconfigure)

Debian系において、インストール済みのパッケージに対して対話形式の初期設定ウィザード(Debconf)を再度呼び出し、タイムゾーンやキーボードレイアウトなどを再設定するコマンドがdpkg-reconfigureです。

# タイムゾーンを対話画面で再設定する例
$ sudo dpkg-reconfigure tzdata

5. Debian系リポジトリ管理:APTツール群(apt, apt-get, apt-cache)

Debian系において、リモートリポジトリからのダウンロードと自動依存関係解決を担当するフレームワークがAPT(Advanced Package Tool)です。

5.1 aptとapt-get/apt-cacheの関係と使い分け

従来は、パッケージのインストールや更新にはapt-getを用い、検索やメタデータ表示にはapt-cacheを用いるというようにコマンドが分かれていました。

Debian 8およびUbuntu 16.04以降、エンドユーザー向けの日常コマンドとしてこれらを統合し、プログレスバー表示などを追加したaptコマンドが導入されました。ただし、シェルスクリプトなどの非対話環境での後方互換性を担保するため、apt-getapt-cacheも現在でも広く利用され、試験範囲にも含まれます。

5.2 APTの基本ワークフロー(update, upgrade, full-upgrade/dist-upgrade)

APTを用いたシステム管理には、決まった手順が存在します。

  • ステップ1:リポジトリ情報の更新(update)

    $ sudo apt update
    # または sudo apt-get update

    設定されたリポジトリから最新のパッケージ目録(インデックス)をダウンロードし、ローカルのキャッシュを更新します。実パッケージの更新はこの段階では行われません

  • ステップ2:パッケージのアップグレード(upgrade)

    $ sudo apt upgrade
    # または sudo apt-get upgrade

    導入済みパッケージを最新版へ更新します。ただし、既存パッケージの削除を伴うような大きな変更は保留されます。

  • ステップ3:依存関係の変化を伴う完全更新(full-upgrade / dist-upgrade)

    $ sudo apt full-upgrade
    # または sudo apt-get dist-upgrade

    新しい依存パッケージの導入や、不要となった旧パッケージの自動削除を許可し、システム全体を完全に最新化します。

5.3 パッケージ検索・情報表示(search, show)

  • apt search <keyword>(または apt-cache search <keyword>): リポジトリ内のパッケージを検索します。
  • apt show <pkg>(または apt-cache show <pkg>): パッケージの詳細情報、依存パッケージ一覧、サイズ等を表示します。
  • apt-cache depends <pkg>: 指定パッケージが依存している関連パッケージ一覧を表示します。

5.4 リポジトリ設定ファイル(/etc/apt/sources.list と sources.list.d)の書式

Debian系のリポジトリ情報は、/etc/apt/sources.listファイルおよび/etc/apt/sources.list.d/*.listディレクトリ内に記録されます。1行に1つのリポジトリを定義するスペース区切りの書式です。

deb http://deb.debian.org/debian bookworm main contrib non-free
deb-src http://deb.debian.org/debian bookworm main contrib non-free

書式の要素分解:

  • deb / deb-src: アーカイブ種別(debはバイナリパッケージ、deb-srcはソースコードパッケージ)
  • http://deb.debian.org/debian: リポジトリのベースURI
  • bookworm: ディストリビューションのコードネームまたはリリース名(stable, testing, jammy等)
  • main contrib non-free: コンポーネント分類(Debianフリーソフトウェアガイドラインに完全準拠するmain、依存関係に非フリーを含むcontrib、非フリーライセンスのnon-free

6. 実機ハンズオン演習:AlmaLinux 9でRPM/DNF操作とrpm2cpioを検証

実機環境linuc-node01(AlmaLinux 9)において、RPMコマンドの照会、DNFによるコマンド逆引き、そして未インストールRPMの安全な展開演習を実施します。

6.1 実機検証環境の確認

システムに登録されているRPMの総数とリポジトリ構成を確認します。

[user01@linuc-node01 ~]$ rpm -qa | wc -l
378

[user01@linuc-node01 ~]$ dnf repolist
repo id               repo name
appstream             AlmaLinux 9 - AppStream
baseos                AlmaLinux 9 - BaseOS
extras                AlmaLinux 9 - Extras

6.2 演習1:rpmコマンドによるファイル逆引きとパッケージ詳細照会

日常のトラブルシューティングにおいて多用される「ファイルの所属パッケージ特定」と「設定ファイルの調査」をrpmコマンドで実行します。

# 1. /usr/bin/ls がどのパッケージに属するか逆引き
[user01@linuc-node01 ~]$ rpm -qf /usr/bin/ls
coreutils-8.32-41.el9_8.x86_64

# 2. coreutilsの詳細情報を表示
[user01@linuc-node01 ~]$ rpm -qi coreutils | head -n 10
Name        : coreutils
Version     : 8.32
Release     : 41.el9_8
Architecture: x86_64
Install Date: 2026年09月06日 10時25分08秒
Group       : Unspecified
Size        : 5900138
License     : GPLv3+
Signature   : RSA/SHA256, 2026年06月25日 17時04分12秒, Key ID d36cb86cb86b3716
Source RPM  : coreutils-8.32-41.el9_8.src.rpm

# 3. sshdの設定ファイル一覧を表示
[user01@linuc-node01 ~]$ rpm -qc openssh-server
/etc/pam.d/sshd
/etc/ssh/sshd_config
/etc/ssh/sshd_config.d/50-redhat.conf
/etc/sysconfig/sshd

6.3 演習2:dnf providesによる未インストールコマンドの提供元特定

システムにDNS問い合わせコマンドdigが存在しない場合、どのパッケージを導入すればよいかをリポジトリから逆引きします。

[user01@linuc-node01 ~]$ dnf provides /usr/bin/dig
bind-utils-32:9.16.23-40.el9_8.1.x86_64 : Utilities for querying DNS name servers
Repo        : appstream
一致:
ファイル名    : /usr/bin/dig

この結果から、sudo dnf install bind-utilsを実行すれば目的のdigコマンドが導入できることが判明します。

6.4 演習3:rpm2cpioを用いたRPMパッケージの個別ファイル抽出

パッケージ全体をOSに上書きインストールすることなく、RPMの中から特定の設定ファイルやバイナリのみを作業ディレクトリへ抽出します。

# 作業用ディレクトリを作成して移動
[user01@linuc-node01 ~]$ mkdir -p /tmp/rpm_extract && cd /tmp/rpm_extract

# リポジトリからパッケージをダウンロード(インストールはしない)
[user01@linuc-node01 rpm_extract]$ dnf download zlib

# rpm2cpioとcpioを用いて現在のディレクトリに展開
[user01@linuc-node01 rpm_extract]$ rpm2cpio zlib-*.rpm | cpio -idmv
./usr/lib64/libz.so.1
./usr/lib64/libz.so.1.2.11
./usr/share/doc/zlib
./usr/share/doc/zlib/ChangeLog
./usr/share/doc/zlib/README
./usr/share/licenses/zlib
./usr/share/licenses/zlib/README

# 後片付け
[user01@linuc-node01 rpm_extract]$ cd ~ && rm -rf /tmp/rpm_extract

7. LinuC 101試験対策まとめとコマ問頻出チェック

RPM系とDebian系パッケージ管理コマンド完全対比
図2: RPM系(Red Hat / DNF) vs Debian系(dpkg / APT) コマンド完全対比

Red Hat系とDebian系のコマンド・オプション対応は、LinuC 101試験における最大の頻出ポイントです。

7.1 RPM vs dpkg / DNF vs APT 完全対比マトリクス

管理操作 Red Hat系(低レベル: RPM) Red Hat系(高レベル: DNF) Debian系(低レベル: dpkg) Debian系(高レベル: APT)
パッケージ導入 rpm -ivh pkg.rpm dnf install pkg dpkg -i pkg.deb apt install pkg
パッケージ更新 rpm -Uvh pkg.rpm dnf upgrade dpkg -i pkg.deb apt upgrade
削除(設定残す) rpm -e pkg dnf remove pkg dpkg -r pkg apt remove pkg
削除(設定も全消去) (該当なし) (該当なし) dpkg -P pkg apt purge pkg
導入済み全一覧 rpm -qa dnf list installed dpkg -l apt list --installed
パッケージ詳細情報 rpm -qi pkg dnf info pkg dpkg -s pkg apt show pkg
配置ファイル一覧 rpm -ql pkg repoquery -l dpkg -L pkg apt-file list
設定ファイル一覧 rpm -qc pkg (該当なし) (該当なし) (該当なし)
ファイルの所属逆引き rpm -qf /path/file dnf provides /path/file dpkg -S /path/file apt-file search /path/file
リポジトリ情報更新 (該当なし) dnf check-update (該当なし) apt update
リポジトリ定義パス /etc/yum.repos.d/*.repo /etc/apt/sources.list, /etc/apt/sources.list.d/

7.2 コマ問(記述式)頻出キーワード一覧表

LinuC 101試験の記述式問題(コマ問)において、大文字・小文字の誤りやオプションの取り違えが多発する最重要キーワードを整理します。

区分 必須キーワード・指定形式 役割と注意点
RPM照会 rpm -qf <絶対パス> ファイル逆引き。引数にはファイルの絶対パスを指定
RPM照会 rpm -qc <パッケージ名> 設定ファイル一覧。全ファイルは -ql、文書は -qd
RPM抽出 rpm2cpio <pkg.rpm> | cpio -idmv 未インストールRPMからファイル抽出。パイプ連携が必須
dpkg管理 dpkg -S <パス> Debian版ファイル逆引き。大文字 -S に注意
dpkg管理 dpkg -L <パッケージ名> 導入ファイル一覧。大文字 -L に注意
dpkg管理 dpkg -P <パッケージ名> 完全削除(設定含む)。dpkg -r は設定を残す
高レベル管理 dnf provides <ファイル> 未インストール提供元検索。Debianでは apt-file search
高レベル管理 apt update && apt upgrade APTの基本更新手順。目録更新と実体更新の2段階

7.3 本番想定 総合確認演習問題

問1(Red Hat系パッケージ運用・トラブルシュートシナリオ): AlmaLinux 9サーバーのパッケージ管理に関する以下の設問に答えよ。

  1. システム上で動作している実行ファイル /usr/sbin/httpd に脆弱性が報告された。この実行ファイルをシステムに配置した元々のRPMパッケージ名を照会・特定したい。実行すべき rpm コマンドラインを記述せよ。
  2. インストール済みの openssh-server パッケージに含まれる設定ファイル(Configuration files)のみを一覧表示したい。適切なオプションを選べ。
    • A: rpm -qd openssh-server
    • B: rpm -qc openssh-server
    • C: rpm -ql openssh-server
    • D: rpm -qa openssh-server
  3. 誤操作によって重要な共有ライブラリが削除され、OSの通常起動が阻害された。レスキューモード環境において、手元にあるRPMパッケージファイル glibc-common.rpm をシステムにインストール(上書き展開)することなく、内部に含まれるファイルのみを作業ディレクトリに直接抽出・展開したい。実行すべき複合コマンドラインを記述せよ。
解答と解説を見る

問1 解答・詳細解説

  • 設問1の解答: rpm -qf /usr/sbin/httpd

    解説: 既存ファイルがどのパッケージに由来するかを逆引き照会(Query File)するには、rpm -qf オプションを使用します。この際、引数には httpd のような単なるコマンド名ではなく、ファイルの「絶対パス(/usr/sbin/httpd)」を渡さなければ照会に失敗します。コマ問でも絶対パスを含めた記述が求められる頻出問題です。

  • 設問2の解答: Brpm -qc openssh-server

    解説: RPMの照会サブオプションにおいて、-c は「設定ファイル(Configuration)」を抽出します。選択肢Aの -d は「ドキュメントファイル(Documentation: manやREADME)」、選択肢Cの -ql は「含有される全ファイル一覧(List)」、選択肢Dの -qa は「システムに導入済みの全パッケージ一覧(All)」を表示します。障害調査において設定ファイルだけを素早く特定する実務知識としても重要です。

  • 設問3の解答: rpm2cpio glibc-common.rpm | cpio -idmv(または cpio -id 等)

    解説: rpm2cpio は、RPMパッケージのペイロード部分を標準出力へ cpio 形式のアーカイブストリームとして変換・出力するツールです。これ単体ではファイル解凍を行えないため、パイプ(|)経由で cpio コマンドに受け渡し、展開オプション(-i: 展開/extract、-d: ディレクトリ自動作成、-m: 更新時刻保持、-v: 詳細表示)と組み合わせることで、既存のパッケージ管理データベースを汚さずに個別ファイルを取り出せます。

問2(Debian系パッケージ運用とRPM系との比較シナリオ): Debian/Ubuntu環境におけるパッケージ管理に関する以下の設問に答えよ。

  1. テスト用に導入したWebサーバパッケージ apache2 をシステムから削除したい。その際、/etc/apache2/ 配下のカスタム設定ファイルも含めて完全にシステム上から抹消(パージ)したい。実行すべき dpkg コマンドを選べ。
    • A: dpkg -r apache2
    • B: dpkg -P apache2
    • C: dpkg -d apache2
    • D: dpkg -u apache2
  2. Debian環境において、ファイル /etc/hosts がどのDebianパッケージ(.deb)によって導入されたかを逆引き検索したい。実行すべき dpkg コマンドラインを記述せよ。
  3. APTツール群の動作原理に関する以下の記述のうち、正しいものを1つ選べ。
    • A: apt upgrade を実行すると、まず自動的に外部リポジトリへ問い合わせて最新目録をダウンロードしてからパッケージを更新する
    • B: apt update を実行すると、リポジトリの最新パッケージ目録がローカルにキャッシュされ、実パッケージのバージョンアップは行われない
    • C: apt-cache search は、ローカルキャッシュを参照せず直接インターネット上のリポジトリを毎回検索する
    • D: apt remove を実行すると、設定ファイルを含めてすべて完全削除される
解答と解説を見る

問2 解答・詳細解説

  • 設問1の解答: Bdpkg -P apache2 または dpkg --purge apache2

    解説: dpkg -r(remove)は実行ファイルなどの本体を削除しますが、後日の再インストールに配慮して設定ファイルを意図的にシステムに残存させます。設定ファイルも含めて完全に一掃するには、大文字の -P(purge: パージ)を指定します。APT高レベルコマンドで同様の処理を行う場合は apt purge <パッケージ名> を使用します。

  • 設問2の解答: dpkg -S /etc/hosts

    解説: Debian環境におけるファイル逆引き(Search)は、大文字の -S オプションを使用します。RPM系の rpm -qf との最大の対比ポイントです。なお、小文字の dpkg -s は「ステータス(パッケージの詳細情報)」を表示するオプションであり、大文字・小文字の誤りはLinuC試験における最大の失点原因となります。

  • 設問3の解答: Bapt update を実行すると、リポジトリの最新パッケージ目録がローカルにキャッシュされ、実パッケージのバージョンアップは行われない)

    解説: APTは2段階の更新モデルを採用しています。apt update/etc/apt/sources.list に記載されたサーバからメタデータ(パッケージ一覧やバージョン情報)を取得して /var/lib/apt/lists/ にキャッシュする処理であり、システム上のソフトウェア自体は一切更新されません。実際の更新は、その後の apt upgrade(または full-upgrade)によって行われます。DNFがコマンド実行時に自動でキャッシュ鮮度を確認・更新するのに対し、APTでは事前の手動 update が必須です。選択肢A、C、Dはいずれも誤りです。

7.4 Ping-t演習へのブリッジ(対象分野と推奨学習順)

LinuC 101試験の主題1.04(重要度合計8)は、得点源にしやすい一方で、オプションの大文字・小文字を取り違えるケアレスミスが発生しやすい分野です。

  1. 「RPMおよびYUM/DNFパッケージ管理」分野(重要度4): rpm -qi-ql-qf-qcrpm -Vの出力記号の意味、rpm2cpio <file.rpm> | cpio -idmvのパイプライン、および /etc/yum.repos.d/*.repo の書式を記述式(コマ問)を含めて完璧にします。
  2. 「Debianパッケージ管理」分野(重要度4): dpkg -L(含有ファイル一覧)と dpkg -S(ファイル逆引き検索)の大文字指定、dpkg -P(完全削除/purge)、および apt update(目録更新)と apt upgrade(実体更新)の処理順序を重点的に反復練習します。

8. まとめと次回予告

  • Linuxのパッケージ管理は、アーカイブを直接展開・記録する「低レベルツール(rpm / dpkg)」と、リモートリポジトリから依存関係を自動解決する「高レベルツール(dnf / apt)」の2層構造です
  • RPMの照会オプションでは、全一覧-qa、詳細情報-qi、ファイル一覧-ql、設定ファイル-qc、ファイル逆引き-qf、中身抽出rpm2cpioを確実に区別します
  • dpkgでは、ファイル一覧の大文字-L、ファイル逆引きの大文字-S、設定ファイルごと完全消去する大文字-P(purge)が頻出です
  • APT環境では、まずapt updateでリポジトリ目録を更新した上で、apt upgrade(またはfull-upgrade)を実行する2ステップが基本です
  • 未インストールコマンドの提供元パッケージを探すには、Red Hat系ではdnf provides、Debian系ではapt-file searchを用います

次回は101試験編の総仕上げとなる主題1.05「デバイス、Linuxファイルシステム、ファイルシステム階層標準」より、ハードウェア情報の取得、ディスクパーティション分割(fdisk / gdisk / parted)、およびファイルシステムの作成とマウント制御(mkfs / mount / /etc/fstab)の技術体系を詳細に解説します。

前の記事
次の記事