CentOS 8、Fedora、RHEL 8以降を使っている方にとって、「dnf」コマンドはパッケージ管理の中心的存在です。
「パッケージをインストールしたい」
「依存関係を解決したい」
「古いバージョンを削除したい」
「システムをアップデートしたい」
など、あらゆる管理操作がdnf
で完結します。
この記事では、初心者にもやさしく、実務で使えるdnfコマンドの完全ガイドをお届けします。
基本的な使い方から、応用テクニック、トラブルシューティングまで網羅しています。
dnfとは?yumとの違いを理解しよう

dnfとは
dnf(Dandified YUM)は、Fedoraプロジェクトが開発した次世代のパッケージマネージャーです。
従来のyum
コマンドの後継として設計され、高速・効率的・堅牢な依存関係解決が特徴です。
yumとdnfの違い
比較項目 | yum | dnf |
---|---|---|
パフォーマンス | 遅め | 高速(約2-3倍) |
依存関係処理 | 時々失敗する | 安定・正確 |
メモリ使用量 | 多め | 効率的 |
プラグイン対応 | 限定的 | 拡張性が高い |
開発状況 | メンテナンスモード | 継続開発中 |
エラーメッセージ | 分かりにくい | より詳細で分かりやすい |
dnfを使用しているディストリビューション
ディストリビューション | デフォルトパッケージマネージャー |
---|---|
Fedora 22以降 | dnf |
CentOS 8以降 | dnf |
RHEL 8以降 | dnf |
Rocky Linux | dnf |
AlmaLinux | dnf |
CentOS 7以前 | yum(dnfも利用可能) |
コマンド互換性
重要: 基本的なコマンドはyumとほぼ同じです。
# yumからdnfへの移行は簡単
yum install package → dnf install package
yum remove package → dnf remove package
yum update → dnf upgrade
ポイント: dnfはyumの上位互換であり、今後のRed Hat系ディストリビューションでの標準ツールです。
dnfの基本コマンド一覧
パッケージのインストール
基本的なインストール:
sudo dnf install パッケージ名
具体例:
# Webサーバーのインストール
sudo dnf install httpd
# 開発ツールのインストール
sudo dnf install git vim gcc
# 複数パッケージの同時インストール
sudo dnf install httpd mariadb-server php
確認プロンプトをスキップ:
sudo dnf install -y パッケージ名
パッケージの削除
基本的な削除:
sudo dnf remove パッケージ名
具体例:
# 不要なパッケージを削除
sudo dnf remove firefox
# 設定ファイルも含めて完全削除
sudo dnf remove --purge パッケージ名
システム全体のアップデート
全パッケージの更新:
sudo dnf upgrade
セキュリティアップデートのみ:
sudo dnf upgrade --security
アップデート可能パッケージの確認:
dnf check-update
パッケージの検索
キーワード検索:
dnf search キーワード
具体例:
# Webサーバー関連パッケージを検索
dnf search web server
# テキストエディター関連を検索
dnf search editor
# データベース関連を検索
dnf search database
パッケージ名での部分一致検索:
dnf list "*keyword*"
パッケージの詳細情報確認
パッケージの詳細情報:
dnf info パッケージ名
インストール済みパッケージの確認:
dnf list installed
特定パッケージがインストール済みか確認:
dnf list installed | grep パッケージ名
キャッシュ管理
全キャッシュのクリア:
sudo dnf clean all
メタデータのみクリア:
sudo dnf clean metadata
キャッシュの再構築:
sudo dnf makecache
ポイント: 日常的なインストールや削除、アップデート操作はdnfで完結します。
dnfコマンドの実践テクニックと便利機能

特定パッケージのみアップグレード
# 特定パッケージのみ更新
sudo dnf upgrade パッケージ名
# 例:Apacheのみアップデート
sudo dnf upgrade httpd
古い未使用パッケージの削除
# 依存関係がなくなったパッケージを自動削除
sudo dnf autoremove
# インストール時に同時に入った不要パッケージも削除
sudo dnf autoremove --orphans
パッケージグループの操作
グループの一覧表示:
dnf group list
グループのインストール:
# デスクトップ環境のインストール
sudo dnf groupinstall "Server with GUI"
# 開発ツール群のインストール
sudo dnf groupinstall "Development Tools"
# Webサーバー環境のインストール
sudo dnf groupinstall "Web Server"
グループの削除:
sudo dnf groupremove "グループ名"
バージョン管理とダウングレード
利用可能なバージョンの確認:
dnf list --showduplicates パッケージ名
特定バージョンのインストール:
sudo dnf install パッケージ名-バージョン番号
ダウングレード:
sudo dnf downgrade パッケージ名
リポジトリ管理
リポジトリの一覧表示:
dnf repolist
すべてのリポジトリ(無効も含む):
dnf repolist --all
特定リポジトリからのインストール:
sudo dnf install --enablerepo=リポジトリ名 パッケージ名
リポジトリの有効化・無効化:
# 有効化
sudo dnf config-manager --set-enabled リポジトリ名
# 無効化
sudo dnf config-manager --set-disabled リポジトリ名
履歴管理
操作履歴の確認:
dnf history
特定の操作を元に戻す:
sudo dnf history undo ID番号
特定の操作をやり直す:
sudo dnf history redo ID番号
パッケージファイルからのインストール
ローカルRPMファイルのインストール:
sudo dnf localinstall /path/to/package.rpm
URLからの直接インストール:
sudo dnf install https://example.com/package.rpm
ポイント: dnfにはyumでは難しかった高度な操作や自動化機能が標準で備わっています。
dnfでよくあるトラブルとその対策
① パッケージが見つからない
症状:
No match for argument: パッケージ名
対策1:リポジトリの更新
sudo dnf makecache
対策2:EPELリポジトリの追加(RHEL/CentOS系)
# EPEL(Extra Packages for Enterprise Linux)を追加
sudo dnf install epel-release
# 確認
dnf repolist | grep epel
対策3:RPM Fusionリポジトリの追加(Fedora)
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
対策4:パッケージ名の確認
# 部分一致で検索
dnf search パッケージ名の一部
② 依存関係のエラー
症状:
Error: Problem: conflicting requests
- nothing provides dependency needed by package
対策1:依存関係の確認
sudo dnf check
対策2:破損した依存関係の修復
sudo dnf distro-sync
対策3:強制的な依存関係解決
sudo dnf install --best --allowerasing パッケージ名
③ キャッシュ破損によるエラー
症状:
Metadata file does not match checksum
対策:
# キャッシュを完全にクリア
sudo dnf clean all
# メタデータを再取得
sudo dnf makecache
④ ネットワーク接続エラー
症状:
Cannot retrieve metalink for repository
対策1:DNS設定の確認
# DNS設定を確認
cat /etc/resolv.conf
# Google DNSに変更(一時的)
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
対策2:プロキシ設定
# プロキシ設定をdnf.confに追加
sudo vi /etc/dnf/dnf.conf
# 以下を追加
proxy=http://proxy.example.com:8080
proxy_username=username
proxy_password=password
対策3:ミラーサーバーの問題
# 最速ミラーの再選択
sudo dnf clean all
sudo dnf makecache --refresh
⑤ ディスク容量不足
症状:
Disk Requirements: At least XMB more space needed
対策:
# 不要パッケージの削除
sudo dnf autoremove
# キャッシュのクリア
sudo dnf clean all
# ディスク使用量の確認
df -h
du -sh /var/cache/dnf/
⑥ ロックファイルの問題
症状:
Another app is currently holding the yum lock
対策:
# プロセスの確認
ps aux | grep dnf
# 強制的にロックを解除(注意して実行)
sudo rm -f /var/run/dnf.pid
ポイント: dnfのエラーはキャッシュ・依存・リポジトリが原因であることが多く、基本的なチェックで解決できます。
dnfの便利な設定とカスタマイズ

設定ファイルの場所と編集
メイン設定ファイル:
/etc/dnf/dnf.conf
よく使う設定項目:
[main]
# GPGチェックを有効化(セキュリティ強化)
gpgcheck=1
# 最速ミラーを自動選択
fastestmirror=True
# ダウンロードキャッシュを保持
keepcache=True
# 同時ダウンロード数を増加(高速化)
max_parallel_downloads=10
# トランザクション確認をスキップ
assumeyes=False
# デルタRPMを使用(帯域節約)
deltarpm=True
# ログレベル設定
debuglevel=2
# タイムアウト設定
timeout=30
# 除外パッケージの設定
exclude=kernel*
ログの確認と分析
dnfログファイルの場所:
/var/log/dnf.log
/var/log/dnf.rpm.log
/var/log/dnf.librepo.log
ログの確認方法:
# 最新のdnf操作ログ
sudo tail -f /var/log/dnf.log
# 特定日付のログ
grep "2024-01-15" /var/log/dnf.log
# エラーログのみ抽出
grep -i error /var/log/dnf.log
自動アップデート(dnf-automatic)
dnf-automaticのインストール:
sudo dnf install dnf-automatic
設定ファイルの編集:
sudo vi /etc/dnf/automatic.conf
主要設定項目:
[commands]
# アップデートの種類(security, bugfix, enhancement, newpackage)
upgrade_type = security
# 自動適用するか(yes/no)
apply_updates = no
[emitters]
# 通知方法の設定 emit_via = email
[email]
# メール通知設定 email_from = root@localhost email_to = admin@example.com email_host = localhost
サービスの有効化:
# セキュリティアップデートのみ自動適用
sudo systemctl enable --now dnf-automatic.timer
# または、ダウンロードのみ(適用は手動)
sudo systemctl enable --now dnf-automatic-download.timer
エイリアスとショートカット
bashrcへの追加:
echo 'alias dnfu="sudo dnf upgrade"' >> ~/.bashrc
echo 'alias dnfi="sudo dnf install"' >> ~/.bashrc
echo 'alias dnfr="sudo dnf remove"' >> ~/.bashrc
echo 'alias dnfs="dnf search"' >> ~/.bashrc
echo 'alias dnfinfo="dnf info"' >> ~/.bashrc
source ~/.bashrc
プラグインの活用
便利なプラグイン:
# システム情報表示プラグイン
sudo dnf install dnf-plugins-core
# 設定管理プラグイン
sudo dnf install python3-dnf-plugin-config-manager
# ローカルプラグイン
sudo dnf install python3-dnf-plugin-local
config-managerプラグインの使用例:
# リポジトリの追加
sudo dnf config-manager --add-repo https://example.com/repo.repo
# リポジトリの有効化・無効化
sudo dnf config-manager --set-enabled reponame
sudo dnf config-manager --set-disabled reponame
高度なdnf活用テクニック
カスタムリポジトリの作成
ローカルリポジトリの作成:
# 必要ツールのインストール
sudo dnf install createrepo
# リポジトリディレクトリの作成
sudo mkdir -p /var/local/repo
# RPMファイルを配置
sudo cp *.rpm /var/local/repo/
# リポジトリメタデータの生成
sudo createrepo /var/local/repo/
リポジトリ設定ファイルの作成:
sudo vi /etc/yum.repos.d/local.repo
[local]
name=Local Repository
baseurl=file:///var/local/repo
enabled=1
gpgcheck=0
モジュール管理(Fedora/RHEL 8以降)
利用可能モジュールの確認:
dnf module list
特定モジュールの詳細:
dnf module info モジュール名
モジュールのインストール:
sudo dnf module install モジュール名:ストリーム
例:Node.jsの特定バージョンをインストール:
# 利用可能なNode.jsモジュールを確認
dnf module list nodejs
# Node.js 14をインストール
sudo dnf module install nodejs:14
高度な検索とフィルタリング
ファイルでパッケージを検索:
# ファイルを含むパッケージを検索
dnf provides /usr/bin/gcc
# 設定ファイルを含むパッケージを検索
dnf provides /etc/httpd/conf/httpd.conf
複雑な検索クエリ:
# 特定のグループに属するパッケージ
dnf group info "Development Tools"
# アーキテクチャ別の検索
dnf list --arch=x86_64
# 特定リポジトリのパッケージのみ
dnf list --repo=epel
セキュリティ管理
脆弱性情報の確認:
# セキュリティアップデートの確認
dnf updateinfo list security
# 特定CVEの影響確認
dnf updateinfo info CVE-2024-XXXX
セキュリティレベル別のアップデート:
# 重要度別フィルタ
sudo dnf upgrade --sec-severity=Critical
sudo dnf upgrade --sec-severity=Important
パフォーマンス最適化

ネットワーク最適化
# 並列ダウンロード数の増加
echo "max_parallel_downloads=20" | sudo tee -a /etc/dnf/dnf.conf
# 高速ミラーの使用
echo "fastestmirror=True" | sudo tee -a /etc/dnf/dnf.conf
# メタデータの有効期限設定
echo "metadata_expire=7d" | sudo tee -a /etc/dnf/dnf.conf
キャッシュ最適化
# キャッシュサイズの確認
du -sh /var/cache/dnf/
# 古いキャッシュの定期削除(cron設定)
echo "0 2 * * 0 root /usr/bin/dnf clean packages" | sudo tee -a /etc/crontab
よくある質問と回答
Q: yumコマンドはまだ使える?
A: 多くの場合、yumはdnfへのシンボリックリンクになっています
# 確認方法
ls -la /usr/bin/yum
# 多くの場合、以下のような出力
/usr/bin/yum -> dnf-3
基本的なコマンドは互換性がありますが、新機能を使うためにはdnfの使用を推奨します。
Q: dnfとapt(Ubuntu)の違いは?
A: パッケージ管理システムが異なります
項目 | dnf(Red Hat系) | apt(Debian系) |
---|---|---|
パッケージ形式 | RPM | DEB |
設定ディレクトリ | /etc/dnf/ | /etc/apt/ |
キャッシュ場所 | /var/cache/dnf/ | /var/cache/apt/ |
リポジトリ設定 | .repo ファイル | sources.list |
Q: dnfが遅い場合の対処法は?
A: 以下の最適化を試してください
- ミラーサーバーの最適化
- 並列ダウンロード数の増加
- キャッシュのクリア
- デルタRPMの無効化(場合によって)
Q: パッケージの署名検証はどうすれば?
A: GPGキーの管理で対応します
# GPGキーの一覧表示
rpm -qa gpg-pubkey*
# GPGキーのインポート
sudo rpm --import https://example.com/RPM-GPG-KEY
# 署名検証の強制
echo "gpgcheck=1" | sudo tee -a /etc/dnf/dnf.conf
まとめ:dnfコマンドをマスターすれば、Red Hat系Linuxがもっと快適に!
今回学んだポイント:
- 基本操作:install、remove、upgrade、searchなどの日常コマンド
- 高度な機能:グループ管理、モジュール管理、履歴管理
- トラブル対策:よくあるエラーとその解決法
- カスタマイズ:設定ファイルの最適化と自動化
- セキュリティ:自動アップデートと脆弱性管理
実際に使ってみよう:
- 基本的なパッケージ操作を練習する
- システムアップデートを定期的に実行
- dnf-automaticで自動化を設定
- ログ監視でシステムの健全性をチェック
コメント