dnfコマンド:パッケージのインストール、アップデート、削除とyumとの違い

テスト環境RHEL系AlmaLinux 9.8rootアカウント2026-10-28 確認

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/dnf
lrwxrwxrwx 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-3

yumと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 htop
Last metadata expiration check: 0:21:53 ago on Wed Oct 28 15:24:31 2026.
========================== Name Exactly Matched: htop ==========================
htop.x86_64 : Interactive process viewer

htopは名前が完全に一致するパッケージが一つだけなので、[Name Exactly Matched]の下の一行で終わりました。

dnf search wget
Last 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 downloader

wgetのように複数のパッケージに含まれる単語は、名前が完全に一致するもの、名前と概要の両方にあるもの、名前にだけあるものの三つのグループに分かれて表示されました。

searchは説明(Description)の文章は見ないため、説明にだけある単語で探すときには向きません。その場合は[--all]オプションを付けると、説明とURLまで範囲を広げて探します。

パッケージ名がわかったら、infoでバージョンとサイズ、どのリポジトリから来たかを確認します。

dnf info htop
Last 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 wget
Last 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/tree
Last 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 nosuchfile
Last 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.

エラーメッセージは、フルパスを書くか、ワイルドカード[*/]を前に付けるよう案内しています。三つのコマンドが何を入力として受け取り、どこを探すのかは、下のダイアグラムで順に比べられます。

🧭 パッケージを探す三つのコマンドが見る場所
解説ダイアグラム
🔍 コマンド
$ dnf search htopinfo htopprovides /usr/bin/tree
① 入力するものhtop単語一つhtopパッケージ名/usr/bin/treeファイルパス
➜
② 探す場所パッケージ名と概要(Summary)リポジトリ全体から、単語を含むパッケージをすべて探します。一つのパッケージのメタデータインストール済みのものとインストールできるものを分けて出力します。パッケージが提供するファイル一覧そのパスのファイルを含むパッケージを逆引きします。
➜
③ 出力一致するパッケージ一覧htop.x86_64 : Interactive process viewerバージョン、サイズ、リポジトリ、説明Version 3.3.0, Size 198 k, Repository epelファイルを持つパッケージtree-1.8.0-10.el9.x86_64, @System, baseos
searchはパッケージ名と概要から単語を探し、名前が完全に一致するものから順に一覧を出力します。
infoは一つのパッケージのバージョンとサイズ、どのリポジトリから来たかを出力します。インストール済みのパッケージは、Repository欄に@Systemと表示されます。
providesはファイルパスからパッケージを逆引きします。インストール済みの側(@System)とリポジトリ側(baseos)が別々に表示されます。

3️⃣ パッケージのインストール、削除、アップデート:install、remove、upgrade

見つけたパッケージはinstallでインストールします。dnfは指定したパッケージだけでなく、そのパッケージが必要とする依存パッケージまで一度にインストールします。

dnf install htop

公式ドキュメントによると、dnfはインストールするパッケージの一覧(トランザクションの概要)を出力したあと、続行するかを尋ね、[-y]を付けると尋ねずに進めます。

インストール時に一緒に必要になる依存パッケージは、repoquery [--requires]で事前に確認できます。

dnf repoquery --requires htop
Last 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 htop
Last 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 htop

htopだけを削除しても、htopのためにインストールされたhwloc-libsのように、ほかのパッケージが必要としない依存パッケージが一緒に削除されます。

以前に依存パッケージとしてインストールされたものの、今はどのパッケージにも必要とされていないものは、autoremoveが削除します。削除される一覧は、list [--autoremove]で先に確認します。

dnf list --autoremove
Last 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                       @appstream
dnf autoremove

テストしたサーバーでは一覧にパッケージが6個表示され、autoremoveはこの6個を一度に削除します。

インストール済みのパッケージに新しいバージョンが出ているかは、check-updateで確認します。パッケージ名を付けると、そのパッケージだけが対象になります。

dnf check-update libavif libdav1d
Last 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                         epel

libavifとlibdav1dを指定した上のコマンドは、どちらも新しいバージョンがあったため、終了コード100で終わりました。check-updateはアップデートがあれば100、なければ0、エラーなら1で終わるので、スクリプトで分岐条件として使えます。

listにパッケージ名を付けると、インストール済みのバージョンとリポジトリの新しいバージョンが一緒に表示されます。updateinfo listでは、そのアップデートがどの勧告(advisory)に当たるかを確認します。

dnf list libavif
Last 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                          epel

libavifは、インストール済みの0.11.1-5.el9が[Installed Packages]の下に、リポジトリの1.1.1-3.el9が[Available Packages]の下に分かれて表示されました。

dnf updateinfo list libavif
Last 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 repolist
repo 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 crb
crb                           AlmaLinux 9 - CRB                         disabled
crb-debuginfo                 AlmaLinux 9 - CRB - Debug                 disabled
crb-source                    AlmaLinux 9 - CRB - Source                disabled

一つのリポジトリのパッケージ数とミラーのアドレス、メタデータの有効期限、設定ファイルの場所は、repoinfoで確認します。

dnf repoinfo baseos
Last 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: 3458

repoinfo 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 tmux
ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
    51 | install -y tmux          | 2026-10-15 20:40 | Install        |    1

tmuxで絞り込んだ出力には、tmuxをインストールした51番のトランザクションの一行だけが残りました。番号の範囲は[50..51]のように二つの点で書きます。

dnf history list 50..51
ID     | 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 51
Transaction 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 @baseos

51番を開いてみると、[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 50

rollback 50は、50のあとに実行されたトランザクションを最後のものまですべて戻すため、tmuxだけを削除するundo 51とは結果が異なる場合があります。

公式ドキュメントによると、元に戻せないパッケージがあると、undoとrollbackは何も変更せずに終わります。rpmで直接変更した内容が記録になくても、エラーで止まることはありません。

🔲 dnfコマンドシミュレーター

下のシミュレーターで、search、info、provides、repolist、historyコマンドを実際に入力して出力を確認できます。yumで入力しても同じ結果になります。

dnfコマンドシミュレーターdnf 4.14.0
[root@server work]#
キーボードの↑↓で、前に入力したコマンドを呼び出せます。

🔢 FAQ & おすすめコンテンツ

リポジトリのメタデータのローカルコピーを最後に確認した日時です。公式ドキュメントによると、リポジトリごとに決められたmetadata_expireの時間が過ぎると、取得し直します。searchやprovidesのように最新の情報が必ずしも必要ないコマンドは、期限が切れてもローカルコピーを使います。[--refresh]を付けると強制的に取得し直し、[-C]はキャッシュだけを使います。

fooのように存在しないコマンドを入れてみると、[No such command]のエラーと一緒に、[dnf install dnf-command(名前)]の形でプラグインをインストールしてみるよう案内が表示されました。一部のサブコマンドは、dnf-plugins-coreのようなプラグインパッケージが追加するためです。打ち間違いなら、[dnf --help]でコマンドの一覧を確認します。

rpm -qはサーバーにインストールされたパッケージのデータベース(RPMDB)だけを読んで、そのパッケージのバージョンを出力し、なければ[package htop is not installed]と答えます。dnf list –installedは同じデータベースにリポジトリの情報を加えて出力するため、インストール済みのパッケージの横に取得元のリポジトリ(@epel)が付きます。[--installed]なしでdnf listを使うと、リポジトリの新しいバージョンも一緒に出力します。

🧭 パッケージコマンドのおすすめコンテンツ 記事6・参照2
🗂️ パッケージコマンド
📄 YUMの概念と基本コマンド 📄 dnfコマンド 📄 yum-config-managerコマンド 📄 RPMとYUMの違い
📄 apt・apt-getコマンド 📄 snapdのインストール

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

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

人間であることを証明してください: 4   +   8   =