yum・dnfコマンドでパッケージを管理する方法|インストールからリポジトリ設定まで


図解60p「Linuxサーバー構築入門マニュアル」無料
登録10秒/自動返信でDL/合わなければ解除3秒
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドA-E, LinuxコマンドU-Z, ネットワーク管理コマンド > yum・dnfコマンドでパッケージを管理する方法|インストールからリポジトリ設定まで
「Linuxにパッケージをインストールしたいけど、yumとdnfのどちらを使えばいいのかわからない」
「リポジトリのエラーが出て、パッケージのインストールが進まない」

Red Hat系Linux(RHEL、CentOS、AlmaLinux、Rocky Linux等)では、パッケージ管理にyumまたはdnfコマンドを使います。RHEL8以降ではdnfが標準ですが、yumコマンドもそのまま使えます。
この記事では、yum/dnfの基本操作からリポジトリ管理、トラブル対処まで、現場で必要な知識をまとめて解説します。

yumとdnfの違い(どちらを使えばいいのか)

dnfはyumの後継として開発されたパッケージマネージャです。依存関係の解決が高速化され、メモリ使用量も改善されています。

RHEL7/CentOS7以前:yumを使う(dnfは標準では入っていない)
RHEL8/CentOS8以降:dnfが標準。yumはdnfへのシンボリックリンクになっている
RHEL9/AlmaLinux9/Rocky Linux9:dnfが標準。yumコマンドも引き続き使える

つまり、RHEL8以降では「yum install httpd」と打っても「dnf install httpd」と打っても、実行されるのは同じdnfです。

# RHEL8以降でyumの実体を確認 ls -l /usr/bin/yum # 出力例: /usr/bin/yum -> dnf-3

本記事ではdnfを基本の表記としつつ、yumでも同じコマンドが使えることを併記します。RHEL7環境の方は「dnf」を「yum」に読み替えてください。

※rpmコマンドとの違い:rpmは個別の.rpmファイルを直接操作するコマンドです。依存関係の自動解決はできません。dnf/yumはリポジトリ(パッケージの配布元サーバー)から依存パッケージも含めて自動でダウンロード・インストールしてくれます。

基本的な使い方(インストール・削除・更新)

1. パッケージをインストールする(dnf install)

# httpdをインストール sudo dnf install httpd # 確認プロンプトを省略して自動でyesを返す(-y) sudo dnf install -y httpd # 複数パッケージを同時にインストール sudo dnf install -y httpd php php-mysqlnd

-y オプションを付けると確認なしでインストールが進みます。スクリプトで自動化する場合に使いますが、手動作業では確認メッセージを読む習慣をつけてください。依存関係で想定外のパッケージが入ることがあります。

2. パッケージを削除する(dnf remove)

# httpdを削除 sudo dnf remove httpd # 確認なしで削除 sudo dnf remove -y httpd

removeは、指定したパッケージと「そのパッケージに依存している他のパッケージ」も一緒に削除します。実行前に表示される削除対象リストを必ず確認してください。

3. パッケージを更新する(dnf update)

# 特定のパッケージを更新 sudo dnf update httpd # インストール済みの全パッケージを更新 sudo dnf update # セキュリティ関連のアップデートだけ適用 sudo dnf update --security

パッケージ名を省略すると全パッケージが更新対象になります。本番サーバーでは影響範囲を限定するために、パッケージ名を指定して個別に更新するのが安全です。

※更新可能なパッケージを事前に確認するには、以下を使います。

# 更新可能なパッケージの一覧を表示 dnf check-update

4. インストール済みパッケージを一覧表示する

# インストール済みパッケージの一覧 dnf list installed # キーワードで絞り込む dnf list installed | grep php # 利用可能な全パッケージ(インストール済み+未インストール) dnf list available

パッケージの検索と情報確認

パッケージを検索する(dnf search)

パッケージ名や説明文からキーワード検索できます。

# パッケージを検索 dnf search httpd # 名前だけでなく説明文も含めて検索 dnf search all "web server"

パッケージの詳細情報を確認する(dnf info)

バージョン、リリース、アーキテクチャ、リポジトリなどを確認できます。

# パッケージの詳細情報を表示 dnf info httpd # 出力例 Name : httpd Version : 2.4.57 Release : 11.el9_4.1 Architecture : x86_64 Size : 59 k Source : httpd-2.4.57-11.el9_4.1.src.rpm Repository : appstream Summary : Apache HTTP Server

あるファイルがどのパッケージに含まれるか調べる(dnf provides)

「このコマンドが使えない。どのパッケージをインストールすればいいのか」という場面で役立ちます。

# /usr/sbin/httpdがどのパッケージに含まれるか調べる dnf provides /usr/sbin/httpd # コマンド名でも検索可能 dnf provides dig # ワイルドカードも使える dnf provides "*/nslookup"

リポジトリの管理

リポジトリとは、パッケージの配布元サーバーのことです。dnf/yumはリポジトリからパッケージをダウンロードしてインストールします。

有効なリポジトリを一覧表示する

# 有効なリポジトリの一覧 dnf repolist # 無効なリポジトリも含めて全て表示 dnf repolist all

EPELリポジトリを追加する

EPEL(Extra Packages for Enterprise Linux)は、Red Hat系OSで使える追加パッケージのリポジトリです。標準リポジトリにないツール(htop、jq等)をインストールする際に必要です。

# RHEL9/AlmaLinux9/Rocky Linux9の場合 sudo dnf install -y epel-release # RHEL8/CentOS8の場合 sudo dnf install -y epel-release # CentOS7の場合 sudo yum install -y epel-release # EPELが追加されたことを確認 dnf repolist | grep epel

※RHEL公式サブスクリプション環境では、事前にCodeReadyリポジトリ(RHEL8)またはCRBリポジトリ(RHEL9)を有効にする必要があります。

# RHEL9の場合:CRBリポジトリを有効化してからEPELを追加 sudo dnf config-manager --set-enabled crb sudo dnf install -y epel-release

特定のリポジトリを一時的に有効・無効にする

普段は無効にしているリポジトリから、一時的にパッケージをインストールしたい場面で使います。

# 特定のリポジトリを一時的に有効にしてインストール sudo dnf install --enablerepo=epel-testing パッケージ名 # 特定のリポジトリを一時的に無効にしてインストール sudo dnf install --disablerepo=epel パッケージ名 # リポジトリを恒久的に有効化・無効化 sudo dnf config-manager --set-enabled リポジトリ名 sudo dnf config-manager --set-disabled リポジトリ名

応用・実務Tips

dnf historyでインストール履歴を確認・取り消す

「いつ、何をインストールしたか」を確認できます。誤ってインストールしたパッケージを元に戻す(undo)機能もあります。

# インストール・削除・更新の履歴を表示 dnf history # 特定のトランザクションの詳細を確認 dnf history info 15 # 特定のトランザクションを取り消す(元に戻す) sudo dnf history undo 15

undoは指定したトランザクションの操作を逆転させます。installをundoすればremoveされ、removeをundoすれば再インストールされます。

dnf groupinstallでパッケージグループをまとめて導入する

開発ツール一式など、関連するパッケージをグループとしてまとめてインストールできます。

# 利用可能なグループの一覧を表示 dnf group list # 開発ツール一式をインストール sudo dnf groupinstall "Development Tools" # グループに含まれるパッケージを確認 dnf group info "Development Tools"

キャッシュの管理(dnf clean)

dnfはダウンロードしたパッケージやメタデータをキャッシュとして保存します。ディスク容量が逼迫した場合や、リポジトリ情報を最新に更新したい場合にキャッシュを削除します。

# 全てのキャッシュを削除 sudo dnf clean all # メタデータのキャッシュだけ削除 sudo dnf clean metadata # キャッシュを再構築 sudo dnf makecache

リポジトリの設定を変更した後は「dnf clean all」→「dnf makecache」の順で実行するのが定番です。

トラブルシュート・エラー対処

「Cannot find a valid baseurl for repo」が出た時の対処法

このエラーは、リポジトリのURLに接続できない場合に発生します。

主な原因と対処方法は以下の通りです。

ネットワーク未接続:pingでインターネット接続を確認する
DNSが未設定:/etc/resolv.confにネームサーバーが設定されているか確認する
リポジトリURLが古い:CentOS 8はEOL(サポート終了)のため、mirrorlistが無効になっている

# ネットワーク接続を確認 ping -c 3 8.8.8.8 # DNS解決を確認 ping -c 3 google.com # リポジトリ設定ファイルを確認 cat /etc/yum.repos.d/CentOS-Base.repo

CentOS 8のEOL問題の場合は、vault.centos.orgへの切り替えが必要です。ただし、本番環境では後継OSへの移行を検討してください。

「Another app is currently holding the yum lock」の解消法

別のdnf/yumプロセスが実行中か、前回のプロセスが異常終了してロックファイルが残っている場合に発生します。

# 1. 他のdnf/yumプロセスが動いていないか確認 ps aux | grep -E "dnf|yum" | grep -v grep # 2. プロセスが見つかった場合は終了を待つ # 見つからない場合はロックファイルが残っているので削除 # RHEL7/CentOS7の場合 sudo rm -f /var/run/yum.pid # RHEL8以降の場合 sudo rm -f /var/cache/dnf/metadata_lock.pid # 3. それでも解消しない場合 sudo kill プロセスID

※自動アップデート(dnf-automatic)が裏で動いている場合もあります。cronやtimerを確認してください。

依存関係エラーが出た時の対処法

「Error: Problem: conflicting requests」や「nothing provides」と表示された場合の対処です。

# 1. キャッシュをクリアして再試行 sudo dnf clean all sudo dnf makecache sudo dnf install パッケージ名 # 2. 依存関係を無視して強制インストール(非推奨・最終手段) sudo rpm -ivh --nodeps パッケージ名.rpm # 3. 壊れた依存関係を検出 sudo dnf repoquery --unsatisfied # 4. 不要な依存パッケージを一括削除 sudo dnf autoremove

依存関係の強制無視(--nodeps)は最終手段です。根本原因はリポジトリの不整合であることが多いので、まずはdnf clean allとリポジトリ設定の確認を行ってください。

本記事のまとめ

やりたいこと コマンド
パッケージをインストールする sudo dnf install パッケージ名
パッケージを削除する sudo dnf remove パッケージ名
パッケージを更新する sudo dnf update パッケージ名
全パッケージを更新する sudo dnf update
更新可能なパッケージを確認する dnf check-update
インストール済みパッケージを一覧表示する dnf list installed
パッケージを検索する dnf search キーワード
パッケージの詳細情報を確認する dnf info パッケージ名
ファイルからパッケージを逆引きする dnf provides ファイルパス
有効なリポジトリを一覧表示する dnf repolist
EPELリポジトリを追加する sudo dnf install -y epel-release
インストール履歴を確認する dnf history
操作を取り消す sudo dnf history undo トランザクションID
キャッシュを全て削除する sudo dnf clean all

パッケージ管理だけで終わらせていませんか?

dnf/yumによるパッケージ管理はサーバー構築の入り口にすぎません。本番環境では、セキュリティ設定やネットワーク構成、サービスの起動管理まで一通りの知識が求められます。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。



無料プレゼント
図解60p「Linuxサーバー構築入門マニュアル」
独学で詰まる前に、“型(手順書)”で最初の環境構築をサクッと終わらせましょう。
登録10秒/自動返信でDL/合わなければ解除3秒
無料で受け取る ※メールアドレスだけでもOK(必須項目は最小限)

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

図解60pのLinux無料マニュアル
登録10秒/自動返信でDL
無料で受け取る