dnfコマンド:パッケージのインストール、アップデート、削除とyumとの違い
dnfコマンドは、RHEL系Linuxでパッケージの検索、インストール、アップデート、削除を行うパッケージ管理コマンドです。AlmaLinux 9ではyumと入力しても同じプログラムが実行されます。AlmaLinux 9サーバーでsearch、info、provides、historyを実際に実行し、パッケージを探すsearch、info、providesがそれぞれどこを見ているかと、historyに残る作業記録を出力で確かめました。
インストール、削除、アップデートのようにシステムを変更するコマンドは実行していません。その動作は、DNFの公式ドキュメントとサーバーに残っていた作業記録で確認しました。
1️⃣ dnfコマンドとyumの関係
yumと入力すると昔のyumが実行されると思いがちですが、AlmaLinux 9のyumとdnfは、どちらも同じ実行ファイルdnf-3を指すリンクです。
ls -l /usr/bin/yum /usr/bin/dnflrwxrwxrwx 1 root root 5 May 21 04:48 /usr/bin/dnf -> dnf-3
lrwxrwxrwx 1 root root 5 May 21 04:48 /usr/bin/yum -> dnf-3yumとdnfの違いは入力する名前だけで、どちらを入力してもサブコマンドとオプションは同じです。search htopをyumとdnfでそれぞれ実行した出力もまったく同じでした。
DNF公式ドキュメント[Changes in DNF CLI compared to YUM]によると、updateとupgradeは同じ動作で、ドキュメントはupgradeのほうを推奨しています。
dnfがない古いディストリビューションでは yumコマンドをそのまま使います。この記事のinstall、search、historyといったサブコマンド名は、yumでも同じです。
2️⃣ dnfコマンドでパッケージを調べる:search、info、provides
インストールしたいプログラムの正確なパッケージ名がわからないときは、searchに単語を一つ付けて探します。searchはパッケージ名と概要(Summary)から単語を探し、名前が完全に一致するパッケージをいちばん上に表示します。
dnf search htopLast metadata expiration check: 0:21:53 ago on Wed Oct 28 15:24:31 2026.
========================== Name Exactly Matched: htop ==========================
htop.x86_64 : Interactive process viewerhtopは名前が完全に一致するパッケージが一つだけなので、[Name Exactly Matched]の下の一行で終わりました。
dnf search wgetLast metadata expiration check: 0:22:35 ago on Wed Oct 28 15:24:31 2026.
========================== Name Exactly Matched: wget ==========================
wget.x86_64 : A utility for retrieving files using the HTTP or FTP protocols
========================= Name & Summary Matched: wget =========================
perl-HTTP-Tinyish-Wget.noarch : HTTP::Tinyish wget backend
wget2-devel.x86_64 : Libraries and header files needed for using wget2 libraries
wget2-libs.x86_64 : Runtime libraries for GNU Wget2
============================== Name Matched: wget ==============================
wget2.x86_64 : An advanced file and recursive website downloaderwgetのように複数のパッケージに含まれる単語は、名前が完全に一致するもの、名前と概要の両方にあるもの、名前にだけあるものの三つのグループに分かれて表示されました。
searchは説明(Description)の文章は見ないため、説明にだけある単語で探すときには向きません。その場合は[--all]オプションを付けると、説明とURLまで範囲を広げて探します。
パッケージ名がわかったら、infoでバージョンとサイズ、どのリポジトリから来たかを確認します。
dnf info htopLast metadata expiration check: 0:22:37 ago on Wed Oct 28 15:24:31 2026.
Available Packages
Name : htop
Version : 3.3.0
Release : 1.el9
Architecture : x86_64
Size : 198 k
Source : htop-3.3.0-1.el9.src.rpm
Repository : epel
Summary : Interactive process viewer
URL : http://hisham.hm/htop/
License : GPLv2+
Description : htop is an interactive text-mode process viewer for Linux, similar to
: top(1).まだインストールされていないhtopは、info htopで[Available Packages]の下にバージョン3.3.0、リポジトリepelとして表示されます。htopはepelリポジトリにしかないパッケージなので、epelを外してsearchをもう一度実行すると何も表示されません。
dnf info wgetLast metadata expiration check: 0:22:38 ago on Wed Oct 28 15:24:31 2026.
Installed Packages
Name : wget
Version : 1.21.1
Release : 11.el9_8
Architecture : x86_64
Size : 3.1 M
Source : wget-1.21.1-11.el9_8.src.rpm
Repository : @System
From repo : appstream
Summary : A utility for retrieving files using the HTTP or FTP protocols
URL : http://www.gnu.org/software/wget/
License : GPLv3+
Description : GNU Wget is a file retrieval utility which can use either the HTTP or
: FTP protocols. Wget features include the ability to work in the
: background while you are logged out, recursive retrieval of
: directories, file name wildcard matching, remote file timestamp
: storage and comparison, use of Rest with FTP servers and Range with
: HTTP servers to retrieve files over slow or unstable connections,
: support for Proxy servers, and configurability.すでにインストールされているwgetは[Installed Packages]の下に表示されました。Repositoryは@Systemで、インストール時に取得したリポジトリは[From repo]の行にappstreamと記されていました。
逆に、ファイル名だけがわかっていて、どのパッケージに含まれているかわからないときは、providesにファイルパスを付けます。
dnf provides /usr/bin/treeLast metadata expiration check: 0:22:40 ago on Wed Oct 28 15:24:31 2026.
tree-1.8.0-10.el9.x86_64 : File system tree viewer
Repo : @System
Matched from:
Filename : /usr/bin/tree
tree-1.8.0-10.el9.x86_64 : File system tree viewer
Repo : baseos
Matched from:
Filename : /usr/bin/tree/usr/bin/treeで探した結果は、treeパッケージのインストール済みの側(@System)とリポジトリ側(baseos)の二つのグループでした。[Matched from]の下のFilenameが、実際に一致したパスです。パスなしでファイル名だけを書くと、dnfが/usr/bin/と/usr/sbin/を前に付けて探し直し、それでも見つからなければ下のエラーで終わります。
dnf provides nosuchfileLast metadata expiration check: 0:22:41 ago on Wed Oct 28 15:24:31 2026.
Error: No matches found. If searching for a file, try specifying the full path or using a wildcard prefix ("*/") at the beginning.エラーメッセージは、フルパスを書くか、ワイルドカード[*/]を前に付けるよう案内しています。三つのコマンドが何を入力として受け取り、どこを探すのかは、下のダイアグラムで順に比べられます。
3️⃣ パッケージのインストール、削除、アップデート:install、remove、upgrade
見つけたパッケージはinstallでインストールします。dnfは指定したパッケージだけでなく、そのパッケージが必要とする依存パッケージまで一度にインストールします。
dnf install htop公式ドキュメントによると、dnfはインストールするパッケージの一覧(トランザクションの概要)を出力したあと、続行するかを尋ね、[-y]を付けると尋ねずに進めます。
インストール時に一緒に必要になる依存パッケージは、repoquery [--requires]で事前に確認できます。
dnf repoquery --requires htopLast metadata expiration check: 0:22:59 ago on Wed Oct 28 15:24:31 2026.
libc.so.6(GLIBC_2.34)(64bit)
libcap.so.2()(64bit)
libhwloc.so.15()(64bit)
libm.so.6()(64bit)
libm.so.6(GLIBC_2.2.5)(64bit)
libm.so.6(GLIBC_2.29)(64bit)
libncursesw.so.6()(64bit)
libnl-3.so.200()(64bit)
libnl-3.so.200(libnl_3)(64bit)
libnl-genl-3.so.200()(64bit)
libnl-genl-3.so.200(libnl_3)(64bit)
libtinfo.so.6()(64bit)
rtld(GNU_HASH)[--requires]だけを付けると、htopが要求するライブラリ名だけが表示されます。そのライブラリがどのパッケージに含まれているかは、次のコマンドで確認します。
dnf repoquery --requires --resolve htopLast metadata expiration check: 0:23:01 ago on Wed Oct 28 15:24:31 2026.
glibc-0:2.34-283.el9_8.i686
glibc-0:2.34-283.el9_8.x86_64
hwloc-libs-0:2.4.1-6.el9_7.x86_64
libcap-0:2.48-10.el9_8.1.x86_64
libnl3-0:3.11.0-1.el9.x86_64
ncurses-libs-0:6.2-12.20210508.el9.x86_64[--resolve]を加えると、そのライブラリを提供するパッケージ名に変わります。このうちhwloc-libsはテストしたサーバーになかったため、htopをインストールすると一緒にインストールされます。
removeは指定したパッケージと、そのパッケージに依存するパッケージをまとめて削除し、デフォルトの設定では不要になった依存パッケージも一緒に削除します。
dnf remove htophtopだけを削除しても、htopのためにインストールされたhwloc-libsのように、ほかのパッケージが必要としない依存パッケージが一緒に削除されます。
以前に依存パッケージとしてインストールされたものの、今はどのパッケージにも必要とされていないものは、autoremoveが削除します。削除される一覧は、list [--autoremove]で先に確認します。
dnf list --autoremoveLast metadata expiration check: 0:23:09 ago on Wed Oct 28 15:24:31 2026.
Autoremove Packages
cmake-rpm-macros.noarch 3.31.8-3.el9 @appstream
grub2-tools-efi.x86_64 1:2.06-126.el9_8.alma.1 @baseos
grub2-tools-extra.x86_64 1:2.06-126.el9_8.alma.1 @baseos
libatomic.x86_64 11.5.0-14.el9.alma.1 @baseos
libvisual.x86_64 1:0.4.0-34.el9 @appstream
libwayland-server.x86_64 1.21.0-1.el9 @appstreamdnf autoremoveテストしたサーバーでは一覧にパッケージが6個表示され、autoremoveはこの6個を一度に削除します。
インストール済みのパッケージに新しいバージョンが出ているかは、check-updateで確認します。パッケージ名を付けると、そのパッケージだけが対象になります。
dnf check-update libavif libdav1dLast metadata expiration check: 0:52:20 ago on Wed Oct 28 15:24:31 2026.
libavif.x86_64 1.1.1-3.el9 epel
libdav1d.x86_64 1.5.4-1.el9 epellibavifとlibdav1dを指定した上のコマンドは、どちらも新しいバージョンがあったため、終了コード100で終わりました。check-updateはアップデートがあれば100、なければ0、エラーなら1で終わるので、スクリプトで分岐条件として使えます。
listにパッケージ名を付けると、インストール済みのバージョンとリポジトリの新しいバージョンが一緒に表示されます。updateinfo listでは、そのアップデートがどの勧告(advisory)に当たるかを確認します。
dnf list libavifLast metadata expiration check: 0:52:21 ago on Wed Oct 28 15:24:31 2026.
Installed Packages
libavif.x86_64 0.11.1-5.el9 @epel
Available Packages
libavif.x86_64 1.1.1-3.el9 epellibavifは、インストール済みの0.11.1-5.el9が[Installed Packages]の下に、リポジトリの1.1.1-3.el9が[Available Packages]の下に分かれて表示されました。
dnf updateinfo list libavifLast metadata expiration check: 0:52:24 ago on Wed Oct 28 15:24:31 2026.
FEDORA-EPEL-2026-d611eab94a bugfix libavif-1.1.1-3.el9.x86_64その新しいバージョンは、bugfix勧告FEDORA-EPEL-2026-d611eab94aに当たるアップデートでした。セキュリティアップデートは、同じ場所に[Moderate/Sec.]のように重要度とSec.が付いて表示されます。
アップデートはupgradeで実行します。upgradeは依存関係が合う範囲でのみ新しいバージョンをインストールするため、check-updateに表示されたバージョンがそのままインストールされるとは限りません。
dnf upgrade libavifパッケージ名を付けると、そのパッケージと必要な依存パッケージだけを新しいバージョンに上げます。
dnf upgrade名前を省略すると、インストール済みのパッケージ全体が対象です。トランザクションの概要を出力してから続行するかを尋ねる流れはinstallと同じで、実行したトランザクションはhistoryに番号付きで残ります。
4️⃣ dnfコマンドのリポジトリ一覧:repolist
searchとinstallがパッケージを探す場所はリポジトリ(repository)です。repolistは、いま有効になっているリポジトリのidと名前を出力します。
dnf repolistrepo id repo name
appstream AlmaLinux 9 - AppStream
baseos AlmaLinux 9 - BaseOS
epel Extra Packages for Enterprise Linux 9 - x86_64
epel-cisco-openh264 Extra Packages for Enterprise Linux 9 openh264 (From Cisco) - x86_64
extras AlmaLinux 9 - Extras
nginx-stable nginx stable repo
remi-modular Remi's Modular repository for Enterprise Linux 9 - x86_64
remi-safe Safe Remi's RPM repository for Enterprise Linux 9 - x86_64一覧にないリポジトリはサーバーに存在しないと思いがちですが、repolistの標準の出力には有効なリポジトリだけが表示されます。[--all]を付けると、無効なリポジトリまでstatus列と一緒に出力します。テストしたサーバーでは、AlmaLinux 9のCRBリポジトリ三つがすべてdisabledでした。
dnf repolist --all | grep -i crbcrb AlmaLinux 9 - CRB disabled
crb-debuginfo AlmaLinux 9 - CRB - Debug disabled
crb-source AlmaLinux 9 - CRB - Source disabled一つのリポジトリのパッケージ数とミラーのアドレス、メタデータの有効期限、設定ファイルの場所は、repoinfoで確認します。
dnf repoinfo baseosLast metadata expiration check: 0:22:55 ago on Wed Oct 28 15:24:31 2026.
Repo-id : baseos
Repo-name : AlmaLinux 9 - BaseOS
Repo-status : enabled
Repo-revision : 1793090609
Repo-updated : Tue Oct 27 17:43:29 2026
Repo-pkgs : 3458
Repo-available-pkgs: 3458
Repo-size : 21 G
Repo-mirrors : https://mirrors.almalinux.org/mirrorlist/9/baseos
Repo-baseurl : http://aws.repo.almalinux.org/almalinux/9.8/BaseOS/x86_64/os/ (9 more)
Repo-expire : 86400 second(s) (last: Wed Oct 28 15:24:26 2026)
Repo-filename : /etc/yum.repos.d/almalinux-baseos.repo
Total packages: 3458repoinfo baseosではパッケージが3,458個と表示され、メタデータは86,400秒(一日)ごとに確認し直す設定になっていました。[Repo-filename]の行にある.repoファイルが、このリポジトリの設定ファイルです。リポジトリを有効にしたり無効にしたりする[--set-enabled]と[--set-disabled]オプションは、dnf-plugins-coreのconfig-managerコマンドと一緒に使います。
5️⃣ dnfコマンドの作業履歴と取り消し:history
インストールと削除を何度も繰り返すと、何をいつ変更したのか追いにくくなりますが、dnfはトランザクション(transaction)ごとに番号を付けてhistoryに記録します。パッケージ名を付けると、そのパッケージを変更したトランザクションだけが表示されます。
dnf history list tmuxID | Command line | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
51 | install -y tmux | 2026-10-15 20:40 | Install | 1tmuxで絞り込んだ出力には、tmuxをインストールした51番のトランザクションの一行だけが残りました。番号の範囲は[50..51]のように二つの点で書きます。
dnf history list 50..51ID | Command line | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
51 | install -y tmux | 2026-10-15 20:40 | Install | 1
50 | -y -q install mlocate | 2026-10-07 19:39 | Install | 1 EE[Altered]列の数字は、変更されたパッケージの数です。50番の行の末尾には[EE]が付いていましたが、これはトランザクションは完了したものの、警告やエラーの出力があったという意味です。
一つのトランザクションのコマンドラインと変更されたパッケージ、結果コードは、history infoで確認します。
dnf history info 51Transaction ID : 51
Begin time : Thu Oct 15 20:40:51 2026
Begin rpmdb : d3db9c92a9d0f6ef9a7a1404552bb76e9d56ba7602b1fce73fa5a62170d33c5c
End time : Thu Oct 15 20:40:51 2026 (0 seconds)
End rpmdb : a862c33ee6a2f2d0479e4dc2631907dee47591c5b6795551b755c6cd090ac1df
User : root <root>
Return-Code : Success
Releasever : 9
Command Line : install -y tmux
Persistence : Persist
Comment :
Packages Altered:
Install tmux-3.2a-5.el9.x86_64 @baseos51番を開いてみると、[Command Line]に実行したコマンドinstall -y tmuxがそのまま残っていました。[Packages Altered]にはインストールされたtmuxとリポジトリ@baseosが、[Return-Code]にはSuccessが記されていました。番号を省略すると、最新のトランザクションが表示されます。
誤ってインストールした場合は、history undoにトランザクション番号を付けて、そのトランザクションの逆の動作を実行します。rollbackは、パッケージの状態を指定したトランザクションの直後に戻します。
dnf history undo 51トランザクション51はtmuxのインストールだったので、undo 51はtmuxを削除する逆のトランザクションになります。
dnf history rollback 50rollback 50は、50のあとに実行されたトランザクションを最後のものまですべて戻すため、tmuxだけを削除するundo 51とは結果が異なる場合があります。
公式ドキュメントによると、元に戻せないパッケージがあると、undoとrollbackは何も変更せずに終わります。rpmで直接変更した内容が記録になくても、エラーで止まることはありません。
🔲 dnfコマンドシミュレーター
下のシミュレーターで、search、info、provides、repolist、historyコマンドを実際に入力して出力を確認できます。yumで入力しても同じ結果になります。
🔢 FAQ & おすすめコンテンツ



ℹ️ 提携について
当サイトのコンテンツにはアフィリエイトリンクが含まれています。訪問者がこのリンクを通じて商品やサービスを購入すると、当サイトは販売元から手数料を受け取ります。この過程において、購入者が支払う金額(イベント割引適用で金額が下がります↓)は上昇しません。掲載されている価格・割引・在庫情報は作成時点のものであり、実際とは異なる場合がありますので、ご購入前に販売元にて最終確認をお願いいたします。商品の選定および評価は独自の基準に基づいて行われており、手数料の支払いの有無は紹介順や評価内容に影響を与えません。