パッケージ管理 - dpkg/apt と rpm/yum/dnf【LPIC-1 102.4/102.5】
この記事で達成できること
- Debian 系(
dpkg/apt)と RPM 系(rpm/yum/dnf)の役割分担を説明できる - 低レベルツール(
dpkg/rpm)と高レベルツール(apt/dnf)の依存解決の違いを区別できる - インストール・削除・更新・検索・問い合わせの各操作を両系統で実行できる
- ファイルがどのパッケージに属するかを
dpkg -S/rpm -qfで逆引きできる - 試験頻出の「
dpkg -iは依存を解決しない」を根拠付きで答えられる
LPIC-1 主題 102.4「Debian パッケージ管理を使用する」と 102.5「RPM および YUM パッケージ管理を使用する」の両方を 1 本でカバーする。
2 系統 4 ツールをどう使い分けるか
パッケージ管理ツールは「低レベル(単一パッケージ操作・依存解決なし)」と「高レベル(リポジトリ連携・依存自動解決)」の 2 層に分かれる。原則は高レベルツールを日常使いし、低レベルツールは問い合わせや手元の .deb/.rpm 直接導入に使う。
| 系統 | 低レベル(依存解決なし) | 高レベル(依存解決あり) | リポジトリ設定 |
|---|---|---|---|
| Debian 系 | dpkg |
apt / apt-get / apt-cache |
/etc/apt/sources.list(.d/) |
| RPM 系 | rpm |
yum / dnf |
/etc/yum.repos.d/ |
覚え方: 末尾が kg / pm の dpkg / rpm は「個別パッケージを直接いじる低レベル」。apt / yum / dnf は「リポジトリと依存を面倒見る高レベル」。試験では「依存を自動解決するのはどれか」が頻出。
Debian 系: dpkg の操作
dpkg は Debian 系の低レベルツール。手元の .deb ファイルを直接インストールし、インストール済みパッケージの問い合わせを行う。依存関係は解決しない点が最大の特徴。
dpkg -i: .deb を直接インストールする
dpkg -i package_1.0_amd64.deb
Selecting previously unselected package package. (Reading database ... 180000 files and directories currently installed.) Preparing to unpack package_1.0_amd64.deb ... Unpacking package (1.0) ... Setting up package (1.0) ...
-i(--install)は .deb を展開して設定まで行う。依存パッケージが不足していると dependency problems で止まる(後述のトラブルシューティング参照)。
dpkg -r / -P: 削除する
dpkg -r package dpkg -P package
-r(--remove)は設定ファイルを残して削除、-P(--purge)は設定ファイルも含めて完全削除する。「設定を残す/消す」の違いが試験で問われる。
dpkg -l / -L / -S: 問い合わせる
dpkg -l # インストール済みパッケージを一覧 dpkg -L package # パッケージが配置したファイルの一覧 dpkg -S /usr/bin/which # ファイルが属するパッケージを逆引き
debianutils: /usr/bin/which
-l(list)はインストール済み一覧、-L(list files)は「そのパッケージが置いたファイル」、-S(search)は「このファイルはどのパッケージのものか」の逆引き。-L と -S は向きが逆である点に注意する。
dpkg --configure: 未設定パッケージを設定する
dpkg --configure -a
展開済みだが設定が完了していないパッケージを設定する。-a で対象を全パッケージにする。インストールが途中で中断したときの復旧に使う。
Debian 系: apt / apt-get / apt-cache の操作
apt 系はリポジトリと連携し、依存関係を自動解決する高レベルツール。apt は対話的な日常利用向け、apt-get / apt-cache はスクリプト向けの安定したインターフェース。
apt update / install / upgrade
apt update # パッケージ情報(インデックス)を更新 apt install package # 依存解決つきでインストール apt upgrade # 更新可能なパッケージを一括更新
Reading package lists... Done Building dependency tree... Done The following additional packages will be installed: libfoo1 libbar2 ...
apt update はリポジトリのインデックスを取得するだけで、パッケージ本体は更新しない。実際の更新は apt upgrade。この 2 つの役割分担が試験頻出ポイント。apt install は不足する依存(上記 libfoo1 等)を自動で引き込む。
apt remove / purge
apt remove package # 設定を残して削除 apt purge package # 設定も含めて完全削除
apt remove は dpkg -r 相当(設定保持)、apt purge は dpkg -P 相当(設定削除)。違いは dpkg と同じ対応関係になる。
apt-cache search / show(apt search / show)
apt-cache search keyword # キーワードでパッケージを検索 apt-cache show package # パッケージの詳細情報を表示
nginx - small, powerful, scalable web/proxy server nginx-core - nginx web/proxy server (standard version)
search はインストール前に名前や説明から目的のパッケージを探す。show はバージョン・依存・説明などのメタ情報を表示する。apt search / apt show でも同じことができる。
aptitude も apt と同等の高レベルツールで、対話的 TUI と高度な依存解決を持つ。LPIC-1 では名前と位置づけ(apt 系の代替フロントエンド)を押さえておけばよい。
RPM 系: rpm の操作
rpm は RPM 系(Red Hat / Fedora / openSUSE 系)の低レベルツール。dpkg と同じく単一パッケージの導入と問い合わせを担い、依存解決はしない。
rpm -i / -U / -e: インストール・更新・削除
rpm -ivh package-1.0.x86_64.rpm # 新規インストール rpm -Uvh package-2.0.x86_64.rpm # アップグレード(なければ新規導入) rpm -e package # 削除(erase)
-i(install)は新規導入、-U(upgrade)は既存があれば更新・なければ新規導入。-e(erase)は削除。-v(詳細表示)と -h(進捗をハッシュ記号で表示)はよく組み合わせる。
rpm -q 系: 問い合わせる
rpm -qa # インストール済み全パッケージ rpm -qi bash # 指定パッケージの詳細情報 rpm -ql bash # パッケージが配置したファイル一覧 rpm -qf /bin/bash # ファイルが属するパッケージを逆引き
bash-5.1.8-9.el9.x86_64
問い合わせは必ず -q(query)を付ける。-qa(all 一覧)、-qi(info)、-ql(list files)、-qf(file 逆引き)。-ql と -qf は dpkg の -L / -S に対応し、向きが逆になる点も同じ。
rpm -V: 検証する
rpm -V bash
インストール後にファイルが改変・破損していないか(サイズ・パーミッション・MD5 など)を検証する。出力がなければ変更なし、S(サイズ)や M(モード)などの文字が出れば該当項目に差異がある。
rpm2cpio package.rpm | cpio -idmv で .rpm をインストールせずにファイルだけ取り出せる。単一ファイルを救出したいときの定番。LPIC-1 では存在と用途を知っていれば十分。
RPM 系: yum / dnf の操作
yum とその後継 dnf は RPM 系の高レベルツール。リポジトリ(/etc/yum.repos.d/)と連携し、依存関係を自動解決する。コマンド体系はほぼ共通で、新しいディストリでは dnf が標準。
dnf install / remove / update
dnf install package # 依存解決つきでインストール dnf remove package # 削除 dnf update # 更新可能パッケージを一括更新
Dependencies resolved. ================================================================ Package Arch Version Repository Size ================================================================ Installing: package x86_64 1.0-1.el9 appstream 120 k Installing dependencies: libfoo x86_64 2.3-4.el9 baseos 45 k ...
dnf install は不足する依存(上記 libfoo)を自動で引き込む。yum install と書いても同じ(多くのディストリで yum は dnf へのリンク)。
dnf search / info / list / repolist
dnf search keyword # キーワードでパッケージを検索 dnf info package # パッケージの詳細情報 dnf list installed # インストール済み一覧 dnf repolist # 有効なリポジトリ一覧
repo id repo name baseos Rocky Linux 9 - BaseOS appstream Rocky Linux 9 - AppStream
search で探し、info で詳細を確認、list installed で導入済みを確認、repolist でどのリポジトリが有効かを確認する。リポジトリ設定そのものは /etc/yum.repos.d/ 配下の .repo ファイルで管理される。
両系統の対応表
操作ごとに Debian 系と RPM 系のコマンドを対応づけると、片方を覚えればもう片方は類推できる。依存解決の有無が低レベル/高レベルの境界であることを軸に整理する。
| 操作 | Debian 低レベル | Debian 高レベル | RPM 低レベル | RPM 高レベル |
|---|---|---|---|---|
| インストール | dpkg -i |
apt install |
rpm -i |
dnf install |
| アップグレード | dpkg -i |
apt upgrade |
rpm -U |
dnf update |
| 削除 | dpkg -r |
apt remove |
rpm -e |
dnf remove |
| 完全削除(設定も) | dpkg -P |
apt purge |
rpm -e |
dnf remove |
| 検索 | — | apt-cache search |
— | dnf search |
| 詳細情報 | — | apt-cache show |
rpm -qi |
dnf info |
| 全パッケージ一覧 | dpkg -l |
— | rpm -qa |
dnf list |
| パッケージのファイル一覧 | dpkg -L |
— | rpm -ql |
— |
| ファイル → パッケージ逆引き | dpkg -S |
— | rpm -qf |
— |
| 依存自動解決 | しない | する | しない | する |
低レベルツール(dpkg / rpm)は依存を解決しない。依存を含めて正しく導入したいなら、必ず高レベルツール(apt / dnf)を使う。手元の .deb / .rpm を直接入れて依存エラーになったときも、リポジトリ経由(apt install ./pkg.deb 等)に切り替えると解決できることが多い。
よくあるミス
実務と試験の両方で繰り返し見かける誤りを 5 つ挙げる。いずれも「低レベルと高レベルの違い」「更新の 2 段階」を理解していれば回避できる。
dpkg -iで依存解決を期待する:.debをdpkg -iで入れてdependency problemsで止まる。依存を解決したいならapt install ./pkg.debを使う。rpm -eで依存エラーを無視しようとする: 他パッケージが依存しているものをrpm -eするとFailed dependenciesで拒否される。むやみに--nodepsで強制せず、dnf removeに任せるのが安全。sources.list編集後のapt update忘れ: リポジトリを追加・変更してもapt updateでインデックスを更新しないと、新しいパッケージは見つからない。apt updateとapt upgradeの混同:updateは情報更新だけ、実際にパッケージを新しくするのはupgrade。updateしただけで最新になったと誤解しない。-qなしの rpm クエリ: 問い合わせのつもりでrpm bashのように-qを付け忘れると意図した結果にならない。問い合わせは必ずrpm -q...の形にする。
トラブルシューティング
症状: dpkg -i で dependency problems と出て止まる
原因: dpkg は依存を解決しないため、必要なパッケージが未導入だと設定段階で失敗する
確認:
dpkg -i package.deb
対処: 依存を自動で引き込む高レベルツールに任せる。
apt install ./package.deb apt -f install
apt install ./package.deb でローカルの .deb を依存解決つきで導入できる。すでに壊れた状態なら apt -f install(--fix-broken)で依存の不足を補う。
症状: rpm -e で Failed dependencies と出る
原因: 削除しようとしたパッケージに他のパッケージが依存している
確認:
rpm -e package rpm -q --whatrequires package
対処: 依存関係ごと安全に処理する高レベルツールを使う。
dnf remove package
dnf remove は依存関係を考慮して安全に削除する。rpm -e --nodeps での強制削除はシステムを壊す恐れがあるため避ける。
症状: apt install で対象パッケージが見つからない
原因: リポジトリのインデックスが古い、または sources.list 編集後に更新していない
確認:
cat /etc/apt/sources.list ls /etc/apt/sources.list.d/
対処:
apt update apt install package
apt update でインデックスを取得し直してから再度インストールする。RPM 系で同様の症状なら dnf repolist で有効リポジトリを確認する。
作業完了チェックリスト
- [ ] 低レベル(
dpkg/rpm)と高レベル(apt/dnf)の役割を説明できる - [ ]
dpkg -i/rpm -iが依存を解決しないことを理解した - [ ]
apt updateとapt upgradeの違いを区別できる - [ ]
dpkg -S/rpm -qfでファイルからパッケージを逆引きできる - [ ] リポジトリ設定の場所(
/etc/apt/sources.list(.d/)//etc/yum.repos.d/)を把握した
まとめ
| 役割 | Debian 系 | RPM 系 |
|---|---|---|
| 低レベル | dpkg |
rpm |
| 高レベル | apt / apt-get / apt-cache |
yum / dnf |
| インストール | apt install |
dnf install |
| 削除 | apt remove / apt purge |
dnf remove |
| 逆引き | dpkg -S |
rpm -qf |
| リポジトリ | /etc/apt/sources.list(.d/) |
/etc/yum.repos.d/ |
パッケージ管理は「低レベルは単一操作・問い合わせ、高レベルは依存解決つきの日常運用」という対比で押さえれば、102.4 と 102.5 を横断的に答えられる。次はファイルシステムやファイル検索と組み合わせて、システム管理の全体像を固めるとよい。