パッケージ管理入門 - apt/yumの基本操作と使い分け
この記事で解決できること
aptとyum/dnfの コマンド対応関係 が頭に入る- 検索・インストール・更新・削除の 実務で迷わない型 を身につける
- 「
updateとupgradeの違い」「yumとdnfどちらを使うか」を 根拠を持って判断 できる Unable to locate package/package not foundなどの 定番エラーを切り分け できる
結論(実務の型)
apt(Debian/Ubuntu/Mint 系)とdnf(RHEL 9 / Rocky / AlmaLinux / Fedora)が 現行スタンダードyumは CentOS 7 系・RHEL 7 系まで。RHEL 8 以降はdnfが標準(yumはdnfへの互換シンボリックリンク)- 最初に必ず 一覧更新(
apt update/dnf check-update)→ 次にインストール - 何かを入れる前に 検索で正式名を確認 する。「ありそうな名前」で
installしない
前提(対象環境)
- Debian 系:Ubuntu 20.04 / 22.04 / 24.04、Debian 11 / 12
- RHEL 系:CentOS 7(yum)、Rocky Linux 8/9・AlmaLinux 8/9・RHEL 8/9(dnf)
- 一般ユーザーから
sudoで実行する想定。root 直接ログインは想定しない
1. apt と yum/dnf の対応表
実務で参照頻度が高い対応関係を 1 つにまとめる。
| 操作 | Debian 系 (apt) |
RHEL 系 (dnf / yum) |
|---|---|---|
| パッケージ一覧の更新 | sudo apt update |
sudo dnf check-update |
| インストール | sudo apt install <pkg> |
sudo dnf install <pkg> |
| アップグレード(全体) | sudo apt upgrade |
sudo dnf upgrade |
| 削除(設定残す) | sudo apt remove <pkg> |
sudo dnf remove <pkg> |
| 削除(設定も消す) | sudo apt purge <pkg> |
(該当なし/手動削除) |
| 検索 | apt search <kw> |
dnf search <kw> |
| 情報表示 | apt show <pkg> |
dnf info <pkg> |
| 導入済み一覧 | apt list --installed |
dnf list installed |
| 自動導入の不要パッケージ整理 | sudo apt autoremove |
sudo dnf autoremove |
| キャッシュクリア | sudo apt clean |
sudo dnf clean all |
| リポジトリ一覧 | apt policy |
dnf repolist |
覚え方のコツ:install / remove / search は 共通。違うのは update まわりと「設定ファイルまで消すか」の表現。
2. apt:最低限の流れ
2-1. 一覧更新 → インストール
$ sudo apt update $ sudo apt install nginx
apt update を 省略するとインストールに失敗することがある(古いインデックスを参照して 404)。新規 VM や久々のサーバでは必ず先に実行する。
2-2. 検索(名前があやふやなとき)
$ apt search nginx $ apt show nginx
apt search は 説明文も含めて 全文検索される。「nginx で検索したのに大量に出てくる」のはこのため。正式名だけに絞るには apt list 'nginx*' のようにパターンで絞る方が確実。
$ apt list 'nginx*' $ apt list --installed 2>/dev/null | grep nginx
2-3. アップグレード
$ sudo apt update $ sudo apt upgrade # 既存パッケージのバージョン更新 $ sudo apt full-upgrade # 依存解決のため削除も許容(カーネル更新等)
apt upgrade と apt full-upgrade(旧 dist-upgrade)は別物。カーネルや systemd の大規模更新では full-upgrade が必要なケースがある。本番サーバでは事前に変更点を確認すること。
2-4. 削除
$ sudo apt remove nginx # バイナリだけ削除(設定ファイルは残る) $ sudo apt purge nginx # 設定ファイルも削除 $ sudo apt autoremove # 依存で入った不要パッケージを掃除
apt remove は /etc/ 配下の設定を残す。再インストール時に「前の設定が生きていて挙動が変」と感じたら purge で消す。
3. yum / dnf:最低限の流れ
3-1. yum と dnf の関係
- CentOS 7 / RHEL 7:
yumがネイティブ - CentOS 8 / Rocky 8 以降・RHEL 8 以降・Fedora:
dnfがネイティブ。yumコマンドはdnfへの互換シンボリックリンク(実体は/usr/bin/dnf-3などにリンク)
RHEL 8+ で yum install ... と打っても動くが、実行されているのは dnf。スクリプトを書くときは dnf を直接書く方が将来も安全。
3-2. 基本操作
$ sudo dnf check-update # 更新可能パッケージの確認 $ sudo dnf install nginx $ sudo dnf upgrade # 全体アップグレード $ sudo dnf remove nginx $ dnf search nginx $ dnf info nginx $ dnf list installed | grep nginx
3-3. グループインストール(dnf 特有の便利機能)
開発ツール一式など、関連パッケージをまとめて入れる。
$ dnf grouplist $ sudo dnf groupinstall "Development Tools"
Debian 系では同等の概念は薄く、build-essential のような メタパッケージ に依存させる方式が一般的。
$ sudo apt install build-essential
4. 検索の現実的な使い方
「パッケージ名を覚えていない」が一番多いトラブル。次の 3 手で大半は片付く。
4-1. 名前で絞る
# Debian 系 $ apt list 'php*' 2>/dev/null # RHEL 系 $ dnf list 'php*'
4-2. 何のファイルか分かっているとき(コマンドが先に分かっている)
apt-file / dnf provides で ファイルパスからパッケージを逆引きできる。
# Debian 系(apt-file は別途インストールが必要) $ sudo apt install apt-file $ sudo apt-file update $ apt-file search /usr/bin/htop # RHEL 系(標準で使える) $ dnf provides /usr/bin/htop $ dnf provides '*/sshd_config'
command not found で詰まったときは、まず dnf provides / apt-file search でどのパッケージに入っているかを特定するのが最短。
4-3. 公式名を確認
$ apt show nginx $ dnf info nginx
Version / Source / Homepage を確認すれば、目的のソフトウェアか同名の別物か が分かる。
5. リポジトリの確認と追加
5-1. 現在有効なリポジトリ
# Debian 系 $ apt policy # 各パッケージのソース優先度 $ ls /etc/apt/sources.list.d/ # 追加リポジトリの設定ファイル $ cat /etc/apt/sources.list # RHEL 系 $ dnf repolist # 有効なリポジトリ一覧 $ dnf repolist --all # 無効リポジトリも含めて表示 $ ls /etc/yum.repos.d/
5-2. 公式ではないリポジトリを追加する場合の注意
サードパーティリポジトリは攻撃面が広がる。
- 信頼できるベンダー公式(Docker、PostgreSQL、Node.js NodeSource 等)のみ追加する
- 追加時は GPG キーのフィンガープリント を公式手順で照合する
- 「とりあえず
curl ... | sudo bash」は本番サーバでは避ける
5-3. リポジトリ追加の現代的な手順(Debian 系)
Ubuntu 22.04 以降は apt-key が非推奨。/etc/apt/keyrings/ 配下に GPG キーを置き、signed-by= でリポジトリ定義から参照する方式が推奨。
# キー配置(公式手順に従う)
$ sudo install -d -m 0755 /etc/apt/keyrings
$ curl -fsSL https://download.example.com/key.gpg \
| sudo tee /etc/apt/keyrings/example.gpg > /dev/null
# リポジトリ定義
$ echo "deb [signed-by=/etc/apt/keyrings/example.gpg] https://download.example.com/apt stable main" \
| sudo tee /etc/apt/sources.list.d/example.list
$ sudo apt update6. 定番トラブルの切り分け
6-1. Unable to locate package <pkg>(apt)
原因の優先度:
apt updateを実行していない- パッケージ名が違う(
pythonではなくpython3等) - リポジトリ自体が無効(
universe/multiverseが無効化されている等)
切り分け:
$ sudo apt update $ apt search <近い単語> $ apt-cache policy <pkg>
6-2. No match for argument(dnf)
ほぼ同じ。dnf clean all && sudo dnf makecache で メタデータを作り直すと治ることがある。
$ sudo dnf clean all $ sudo dnf makecache $ dnf search <近い単語>
6-3. Could not get lock /var/lib/dpkg/lock
別の apt プロセスが動作中、または前回異常終了した残骸。
$ ps -ef | grep -E 'apt|dpkg' | grep -v grep # プロセスが残っていない場合のみ: $ sudo rm /var/lib/apt/lists/lock $ sudo rm /var/lib/dpkg/lock-frontend $ sudo dpkg --configure -a
lock ファイルを 動作中のプロセスがある状態で削除すると DB が壊れる。必ず ps で確認してから。
6-4. GPG エラー(NO_PUBKEY / Signature couldn't be verified)
サードパーティリポジトリのキー期限切れ、または不正に追加されたリポジトリ。
$ sudo apt update # → NO_PUBKEY ABCD1234... が表示される
対処は 公式手順で正規のキーを再取得して /etc/apt/keyrings/ 配下に置き直す。期限切れと判明していない apt-key 削除や --allow-unauthenticated は使わない。
6-5. ディスク不足でインストール失敗
$ df -h /var /usr $ sudo apt clean # ダウンロード済み .deb を削除 $ sudo dnf clean all # 同様にキャッシュを削除
/var/cache/apt/archives/ や /var/cache/dnf/ が肥大化していることが多い。
7. 依存関係を壊さないための実務ルール
やってはいけないこと
- バージョン指定なしで本番サーバに
apt upgradeをかける(直前に変更点を確認しないまま実行) - 公式手順を読まずに
sudoでcurl ... | bash --force-yes/--allow-downgradesを反射的に付ける- 複数のソースから同一パッケージを入れる(リポジトリ優先度の混乱)
安全に運用するチェックリスト
- インストール前に
apt update/dnf check-update -s(apt のシミュレーション) で予定変更を確認できる:apt-get install -s <pkg>- RHEL 系は トランザクション履歴 で巻き戻せる:
$ dnf history list $ sudo dnf history undo <ID>
apt list --upgradableで更新対象を一覧してからupgrade- リポジトリ追加は GPG キーのフィンガープリント照合 を必ず実施
8. コピペ用テンプレート
Debian / Ubuntu
# 初回セットアップ sudo apt update && sudo apt upgrade -y # 検索 → 情報確認 → インストール apt list 'nginx*' apt show nginx sudo apt install nginx # 更新対象だけ確認してから上げる apt list --upgradable sudo apt upgrade # 削除(設定も含めて) sudo apt purge nginx && sudo apt autoremove
RHEL / Rocky / AlmaLinux
# 初回セットアップ sudo dnf upgrade -y # 検索 → 情報確認 → インストール dnf search nginx dnf info nginx sudo dnf install nginx # 更新対象だけ確認 dnf check-update # 履歴で巻き戻し dnf history list sudo dnf history undo <ID>