結論

dnf は Red Hat 系 Linux(RHEL・AlmaLinux・Rocky Linux・Fedora など)でソフトウェアを入れる・更新する・消すためのパッケージ管理コマンドで、yum はその前身です。RHEL 8 以降の yum は dnf の別名なので、yum install と dnf install は同じ動きになります。

この記事でわかること

  • install・update・history undo・module など主要コマンドの実際の出力
  • No match for argument・GPG check FAILED・ロック待ちのエラー原文と直し方
  • apt との対応表、rpm との違い、dnf5(Fedora 41 以降)で変わったこと

2026年10月29日更新|AlmaLinux 9.8(dnf 4.14.0)と Fedora 44(dnf5 5.4.3)で実行確認

dnf は「どのリポジトリに何があるか」を読み、足りない依存パッケージを計算し、署名を確かめてから rpm に書き込みます。yum と打っても同じ流れを通ります。

flowchart TD
    Y[yum コマンド] -->|別名| D[dnf コマンド]
    D --> M[リポジトリの<br>メタデータを読む]
    M --> S[依存関係を計算]
    S --> G[ダウンロードと<br>GPG 署名の確認]
    G --> R[rpm が書き込む]
    R --> DB[(rpm データベース<br>と dnf の履歴)]

よく調べられることの答えを先にまとめます。

知りたいこと 答え 詳しい節
dnf とは Red Hat 系 Linux のパッケージ管理コマンド。依存関係を自動で解決する dnf・yumとは
dnf と yum の違い yum は前身。RHEL 8 以降の yum は dnf の別名で、中身は同じ dnfとyumの違い
dnf コマンド一覧 install・remove・upgrade・search・info・list・history など dnfコマンド一覧
dnf update と upgrade の違い dnf では同じ。update は upgrade の別名 dnf upgradeの使い方
入れたものを元に戻したい dnf history undo 番号 dnf historyとundo
apt で言うと何か apt install=dnf install、apt update は dnf では通常不要 aptとの対応表
No match for argument と出た 名前の誤り、リポジトリが無効、EPEL が要る、のどれか よくあるエラー
dnf5 とは Fedora 41 から標準になった次の版。一部の書き方が変わった dnf5で変わったこと

確認環境:Ubuntu 24.04.5 LTS(カーネル 6.18)の上に、AlmaLinux の公式コンテナイメージ(AlmaLinux 9.8 の default)と Fedora の公式コンテナイメージ(Fedora 44)のルートファイルシステムを展開し、unshare(mount・PID・UTS・network の名前空間)と chroot の中で dnf を動かしました。AlmaLinux 側は dnf 4.14.0・rpm 4.16.1.3、Fedora 側は dnf5 5.4.3.0・rpm 6.0.2 です。中はネットワークから切り離しているため、公式リポジトリには接続できません。そこで、rpmbuild 4.18.2 で作った見本パッケージ(rjc-hello・rjc-tools・rjc-docs・rjcapp)を、テスト用の GPG 鍵で署名し、createrepo_c 0.17.3 で作ったローカルのリポジトリ(file:// で参照)から入れています。グループ(comps)とモジュール(modules.yaml)も、このローカルのリポジトリに自分で定義しました。EPEL の入れ方、RHEL での yum の扱い、RHEL 10 のモジュールの扱い、dnf5 の変更点は、Red Hat・AlmaLinux・Rocky Linux・Fedora・dnf5 の公式ドキュメントで確かめています。図は mermaid で描画を確かめました(確認日 2026年10月29日)。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「dnf・yumとは?使い方とコマンド一覧|apt対応表・エラー原文つき」

dnf・yumとは(Red Hat系Linuxのパッケージ管理)

この節では、dnf と yum が何をするコマンドで、どの Linux で使うのかが分かります。

dnf は、RPM 形式のパッケージを、リポジトリ(パッケージの配布場所)から依存関係ごと入れたり、更新したり、消したりするコマンドです。Ubuntu・Debian の apt にあたる道具で、Red Hat Enterprise Linux(RHEL)と、その互換の AlmaLinux・Rocky Linux・Oracle Linux、上流の Fedora・CentOS Stream で使います。

パッケージ管理には2つの層があります。下の層の rpm は、手元の .rpm ファイルを1つずつ入れたり消したりするだけで、足りない依存パッケージを取りに行きません。上の層の dnf(以前は yum)は、リポジトリの一覧を読んで依存関係を計算し、必要なものをまとめて取ってきて、最後に rpm へ書き込みを任せます。

159個最初から入っていたパッケージAlmaLinux 9.8 のコンテナで rpm -qa | wc -l
4.14.0AlmaLinux 9.8 の dnf の版yum --version も同じ 4.14.0
5.4.3Fedora 44 の dnf の版dnf・yum・microdnf の3つとも dnf5 を指す

使う Linux ごとのコマンドは次のとおりです。自分の OS が何かは cat /etc/os-release で分かります(OS の確かめ方は関連記事「LinuxのOS・バージョン確認コマンド|os-releaseとunameの違い」で扱っています)。

OS 主に使うコマンド 中身
RHEL 7・CentOS 7 などの以前の版 yum 本来の yum(yum 3)
RHEL 8・9、AlmaLinux/Rocky Linux 8・9 dnf(yum も使える) dnf 4。yum は dnf への別名(手元の AlmaLinux 9.8 で確認)
RHEL 10、AlmaLinux/Rocky Linux 10 dnf(yum も使える) dnf 4 系。モジュールは非推奨(Red Hat の公式)
Fedora 41 以降 dnf(yum も使える) dnf5。dnf・yum ともに dnf5 を指す(手元の Fedora 44 で確認)
Ubuntu・Debian apt .deb 形式。dnf は標準では使わない

dnf の操作の多くは、システム全体を書き換えるため root の権限が要ります。一般ユーザーで dnf install を打つと、次のように断られます。調べるだけの dnf list や dnf search は一般ユーザーでも動きました。

$ dnf install -y rjc-docs
Error: This command has to be run with superuser privileges (under the root user on most systems).

ふだんは sudo dnf install ... の形で使います。sudo の仕組みは関連記事「Linuxのsuとsudoの違い|su -・sudo -i・-sの比較表」で扱っています。以下の実行例は root で動かしているため、sudo を省いています。

dnfとyumの違い(yumはdnfの別名)

この節では、dnf と yum が同じものなのか、どちらを打てばよいのかが分かります。

RHEL 8 以降では、yum と打っても dnf が動きます。Red Hat の RHEL 8 リリースノートは「RHEL 8 へのソフトウェアのインストールは、DNF テクノロジーをベースとした YUM ツールにより行われます」と書き、yum は互換性のための dnf のエイリアス(別名)だと説明しています。手元の AlmaLinux 9.8 でも、/usr/bin/yum と /usr/bin/dnf は同じファイルを指していました。

# ls -l /usr/bin/yum /usr/bin/dnf /usr/bin/dnf-3
lrwxrwxrwx 1 root root    5 May 20 19:48 /usr/bin/dnf -> dnf-3
-rwxr-xr-x 1 root root 2094 May 20 19:48 /usr/bin/dnf-3
lrwxrwxrwx 1 root root    5 May 20 19:48 /usr/bin/yum -> dnf-3
# dnf --version | head -1
4.14.0
# yum --version | head -1
4.14.0
# rpm -q dnf yum
dnf-4.14.0-34.el9_8.alma.1.noarch
yum-4.14.0-34.el9_8.alma.1.noarch

yum という名前のパッケージも入っていますが、中身は dnf へのリンクです。Fedora 44 では、dnf・yum・microdnf の3つが、すべて dnf5 を指していました。

yum と dnf を比べると

yum 3RHEL 7 までの本来の yum。Python で書かれ、依存関係の計算も Python で行う
↔
dnf依存関係の計算に libsolv(C 言語のライブラリ)を使う。RHEL 8 以降は yum の名前でもこちらが動く

見分ける問い:「yum --version が 4 以上を返すか」。4 以上なら中身は dnf

dnf は Fedora 18 で試験的に入り、Fedora 22 で yum に代わる標準になりました。依存関係の解決には libsolv(hawkey)を使い、計算した状態をキャッシュします。そのため、yum 3 より速く、メモリーの使い方も少ないとされています。コマンドの書き方はほぼ yum と同じにそろえてあるため、多くの場合は yum を dnf に置き換えるだけで同じ操作になります。

観点 yum(yum 3) dnf(dnf 4) dnf5
標準になった版 RHEL 5〜7・CentOS 7 まで Fedora 22・RHEL 8 から Fedora 41 から
書かれている言語 Python Python と C(libdnf・libsolv) C++(libdnf5)
依存関係の計算 Python で計算 libsolv libsolv
履歴の取り消し yum history undo dnf history undo dnf history undo
今の yum コマンド 本体 dnf への別名 dnf5 への別名

dnfコマンド一覧(よく使うサブコマンドの早見表)

この節では、dnf のよく使うサブコマンドと、それぞれが何をするのかが一覧で分かります。

dnf の書き方は dnf [オプション] サブコマンド [パッケージ名] です。下の表は、AlmaLinux 9.8 の dnf help に出た説明と、手元で動かした結果をもとにまとめています。

サブコマンド すること 別名・補足
install入れる(依存も一緒に)localinstall・in。./x.rpm も指定できる
remove消す(不要になった依存も一緒に)erase・rm
upgrade更新する(名前を省くと全部)update・up は同じ
check-update更新できるものを表示あれば終了コード 100
search名前と説明から探すキーワードで検索
info版・大きさ・説明を表示入れる前に確かめる
list一覧(--installed・--upgrades など)ls
providesファイルやコマンドを含むパッケージを探すwhatprovides
repolistリポジトリの一覧all で無効なものも
history操作の履歴、取り消し(undo)info・undo・rollback
autoremoveもう要らない依存パッケージを消す依存として入ったものが対象
downgrade・reinstall版を下げる、入れ直す同じ版の入れ直しは reinstall
groupまとまった一式を入れるgroupinstall は dnf 4 の別名
module版の系列(ストリーム)を選ぶRHEL 8・9 のみ。RHEL 10 は非推奨
clean・makecacheキャッシュを消す、作り直すclean all が定番
repoquery依存関係などを詳しく調べる--requires・--whatrequires

よく使うオプションも並べておきます。

オプション 意味 使う場面
-y確認(Is this ok [y/N])に自動で y と答えるスクリプト・Dockerfile
-C(--cacheonly)キャッシュだけを使い、取りに行かないネットワークが無いとき
--refresh先にメタデータを取り直す更新が見えないとき
--enablerepo・--disablerepoその1回だけリポジトリを有効・無効にするEPEL などを一時的に使う
--repo指定したリポジトリだけを使うどこから入るかを固定
--showduplicates同じパッケージの全部の版を表示版を選んで入れる
-x(--exclude)指定したパッケージを除くカーネルだけ更新しない
--setopt設定をその1回だけ変えるexit_on_lock=True など

dnf installとremoveの使い方(依存関係とGPG鍵)

この節では、パッケージを入れる・消すときに画面に何が出て、依存関係と GPG 鍵がどう扱われるかが分かります。

dnf install パッケージ名 は、依存しているパッケージも計算して一緒に入れます。見本の rjc-tools は rjc-hello(1.0 以上)に依存するように作ってあります。-y を付けずに実行すると、入るものの一覧を見せてから確認を求めます。

# dnf install rjc-tools
Last metadata expiration check: 0:00:11 ago on Fri Oct 30 12:10:28 2026.
Dependencies resolved.
================================================================================
 Package             Architecture     Version               Repository     Size
================================================================================
Installing:
 rjc-tools           noarch           2.0-1.el9             rjc           6.1 k
Installing dependencies:
 rjc-hello           noarch           1.0-1.el9             rjc           6.1 k

Transaction Summary
================================================================================
Install  2 Packages

Total size: 12 k
Installed size: 62
Is this ok [y/N]: Operation aborted.

「Installing dependencies」の下に、自分が頼んでいない rjc-hello が出ています。ここで N(または Enter)を押すと何も変わらずに終わり、終了コードは 1 でした。-y を付けると、そのまま進みます。初めてそのリポジトリから入れるときは、署名の確かめ用の GPG 鍵を取り込む表示が出ます。

# dnf install -y rjc-tools
(途中は同じ)
Downloading Packages:
RJC sample repo                                 938 kB/s | 961  B     00:00
Importing GPG key 0xCF744C7C:
 Userid     : "RJC Test Repo <test@example.invalid>"
 Fingerprint: D968 B55D 1792 591A A2FB 167B 9E69 6CCE CF74 4C7C
 From       : /srv/repo/RPM-GPG-KEY-rjc
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Installing       : rjc-hello-1.0-1.el9.noarch                             1/2
  Installing       : rjc-tools-2.0-1.el9.noarch                             2/2
  Verifying        : rjc-hello-1.0-1.el9.noarch                             1/2
  Verifying        : rjc-tools-2.0-1.el9.noarch                             2/2

Installed:
  rjc-hello-1.0-1.el9.noarch             rjc-tools-2.0-1.el9.noarch

Complete!

GPG 鍵は、リポジトリの設定の gpgkey= に書かれた場所から取り込まれます。-y を付けていると鍵の取り込みにも自動で y と答えるため、表示された Fingerprint(指紋)がディストリビューションの公式ページに載っている値と同じかを確かめる習慣をつけておくと安全です。

1

依存関係を計算する

「Dependencies resolved.」の表示。何を入れ、何が一緒に入るかがここで決まる。

Installing dependencies の欄を見る

2

確認して取ってくる

「Is this ok [y/N]」で y と答えると、パッケージをダウンロードする。

-y で省ける

3

署名を確かめる

gpgcheck=1 のリポジトリでは、取り込んだ公開鍵で署名を確かめる。合わなければここで止まる。

GPG check FAILED はこの段階

4

試しに流してから書き込む

Transaction check・Transaction test で衝突が無いかを確かめてから、rpm が実際に書き込む。

失敗すると何も入らない

5

履歴に残る

終わると dnf history に1件の記録ができ、あとから取り消せる。

dnf history で番号を見る

手元にある .rpm ファイルも、dnf install ./ファイル名.rpm で入れられます。この場合も依存関係はリポジトリから補われ、リポジトリ名の欄には @commandline と出ました。

# dnf install -y /tmp/rjc-docs-1.0-1.el9.noarch.rpm
Dependencies resolved.
================================================================================
 Package          Architecture   Version             Repository            Size
================================================================================
Installing:
 rjc-docs         noarch         1.0-1.el9           @commandline         6.1 k

すでに入っているものを install すると、エラーにはならず「Nothing to do.」で終わります。

# dnf install -y rjc-hello
Package rjc-hello-1.1-1.el9.noarch is already installed.
Dependencies resolved.
Nothing to do.
Complete!

dnf remove は、指定したパッケージと、それと一緒に入っただけで今は要らなくなった依存パッケージを消します。AlmaLinux 9.8 の /etc/dnf/dnf.conf には clean_requirements_on_remove=True が書かれていて、rjc-tools を消すと rjc-hello も「Removing unused dependencies」として一緒に消えました。

# dnf remove -y rjc-tools
Dependencies resolved.
================================================================================
 Package             Architecture     Version              Repository      Size
================================================================================
Removing:
 rjc-tools           noarch           2.0-1.el9            @rjc            31
Removing unused dependencies:
 rjc-hello           noarch           1.0-1.el9            @rjc            31

Transaction Summary
================================================================================
Remove  2 Packages

自分で dnf install rjc-hello のように名前を指定して入れたものは「ユーザーが入れたもの」として記録され、こうした自動の削除の対象になりません。逆に、依存として入ったものを残したいときは dnf mark install パッケージ名 で「ユーザーが入れたもの」に変えます。dnf mark remove で印を外すと、次の dnf autoremove で消える対象になりました。

# dnf mark remove rjc-docs
rjc-docs-1.0-1.el9.noarch unmarked as user installed.
# dnf autoremove -y
Dependencies resolved.
================================================================================
 Package          Architecture   Version            Repository             Size
================================================================================
Removing:
 rjc-docs         noarch         1.0-1.el9          @@commandline          30  

dnf upgradeの使い方(update・check-updateとキャッシュ)

この節では、更新の確かめ方と更新のしかた、update と upgrade の違い、更新が見えないときのキャッシュの扱いが分かります。

dnf では update と upgrade は同じコマンドです。AlmaLinux 9.8 で dnf update --help を実行すると、使い方の1行目は usage: dnf upgrade と表示されました。dnf のソースでも、upgrade の別名として update・up などが並んでいます。apt と違い、「一覧を更新する update」と「中身を更新する upgrade」に分かれていない点に注意します。

# dnf update --help | head -1
usage: dnf upgrade [-c CONFIG_FILE] [-q] [-v] [--version] [--installroot PATH]

見本のリポジトリに rjc-hello 1.1 を足してから、更新を確かめました。ここで、dnf check-update をそのまま実行すると「何も無い(終了コード 0)」と出て、--refresh を付けると更新が見えました。

# dnf check-update
Last metadata expiration check: 0:01:08 ago on Fri Oct 30 12:10:55 2026.
# echo $?
0
# dnf check-update --refresh
RJC sample repo                                 3.6 MB/s | 3.7 kB     00:00
RJC modular sample                              1.2 MB/s | 1.6 kB     00:00

rjc-hello.noarch                          1.1-1.el9                          rjc
# echo $?
100

dnf は、手元に保存したメタデータ(リポジトリの目録)の有効期限が切れるまで、取り直しに行きません。AlmaLinux 9.8 の既定値は metadata_expire = 172800(48時間)で、dnf repoinfo にも「Repo-expire : 172800 second(s)」と出ました(AlmaLinux 公式リポジトリの設定ファイルは 86400 秒=24時間に上書きしています)。配布側で直前に更新が出たときは、--refresh か dnf makecache で取り直します。

check-update の終了コードは、更新があれば 100、無ければ 0、エラーなら 1 です。監視やスクリプトで「更新があるか」を判定するときに使えます。

dnf -q check-update
case $? in
  0)   echo "更新なし" ;;
  100) echo "更新あり" ;;
  *)   echo "確かめられない(ネットワーク・設定を見る)" ;;
esac

更新は dnf upgrade(名前を付ければそのパッケージだけ)で行います。

# yum update -y
Dependencies resolved.
================================================================================
 Package             Architecture     Version               Repository     Size
================================================================================
Upgrading:
 rjc-hello           noarch           1.1-1.el9             rjc           6.1 k

Transaction Summary
================================================================================
Upgrade  1 Package
(中略)
Upgraded:
  rjc-hello-1.1-1.el9.noarch

Complete!

あえて yum update と打ちましたが、中身は dnf の upgrade です。似たコマンドとの違いは次のとおりです。

1

upgrade

dnf upgrade。入っているものを使える最新の版にする。update と同じ。

いちばん基本の更新

2

upgrade-minimal

dnf upgrade-minimal。不具合・セキュリティの修正が入った版のうち、いちばん小さい更新にとどめる。

変化を小さくしたいとき

3

distro-sync

dnf distro-sync。リポジトリにある版にそろえる。必要なら版を下げる。

モジュールの切り替え後にも使う

4

downgrade

dnf downgrade 名前。1つ前の版に戻す。

--showduplicates で版を見る

キャッシュは /var/cache/dnf にあります。dnf clean all で消し、dnf makecache で作り直せます。手元では clean all で「12 files removed」と出て、makecache の後に rjc.solv などの計算済みのファイルが作られました。

# dnf clean all
12 files removed
# dnf makecache
RJC sample repo                                 1.5 MB/s | 1.6 kB     00:00
Metadata cache created.
# ls /var/cache/dnf
appstream-0a8174e0a3d29b90  expired_repos.json  packages.db  rjc-590a04bbe7992326
rjc-filenames.solvx  rjc-unsigned-4fb3686cfb3e057c  rjc.solv  tempfiles.json

ネットワークに出られない環境では、dnf -C list rjc-hello のように -C(キャッシュだけを使う)を付けると、手元のキャッシュの範囲で調べられました。

dnf search・info・list・providesでパッケージを調べる

この節では、入れる前に「何という名前か」「どの版か」「どのコマンドがどのパッケージに入っているか」を調べる方法が分かります。

名前が分からないときは dnf search、中身を確かめるときは dnf info、版の一覧は dnf list を使います。

# dnf search rjc
========================= Name & Summary Matched: rjc ==========================
rjc-docs.noarch : RJC docs sample
rjc-hello.noarch : RJC hello sample
rjc-tools.noarch : RJC tools sample

# dnf info rjc-tools
Available Packages
Name         : rjc-tools
Version      : 2.0
Release      : 1.el9
Architecture : noarch
Size         : 6.1 k
Source       : rjc-tools-2.0-1.el9.src.rpm
Repository   : rjc
Summary      : RJC tools sample
License      : MIT
Description  : RJC tools sample (sample package for dnf test)

パッケージ名は「名前-版-リリース.アーキテクチャ」の形です。rjc-hello-1.1-1.el9.noarch なら、名前が rjc-hello、版が 1.1、リリースが 1.el9(el9 は RHEL 9 系向けの印)、アーキテクチャが noarch(どの CPU でも使える)です。

# dnf list --showduplicates rjc-hello
Installed Packages
rjc-hello.noarch                         1.1-1.el9                          @rjc
Available Packages
rjc-hello.noarch                         1.0-1.el9                          rjc
rjc-hello.noarch                         1.1-1.el9                          rjc

# dnf list --upgrades
Available Upgrades
rjc-hello.noarch                          1.1-1.el9                          rjc

リポジトリの欄が @rjc のように @ で始まるものは「入っているもの(どのリポジトリから入ったか)」、@ が無いものは「リポジトリにあるもの」です。dnf list --installed は入っているもの全部で、手元の AlmaLinux 9.8 では見出しの1行を含めて 159 行でした。

コマンドやファイルの名前から、それを含むパッケージを探すのが dnf provides です。「〇〇: command not found と出たが、どのパッケージを入れればよいか」が分かります。

# dnf provides /usr/bin/rjc-hello
rjc-hello-1.0-1.el9.noarch : RJC hello sample
Repo        : rjc
Matched from:
Filename    : /usr/bin/rjc-hello

rjc-hello-1.1-1.el9.noarch : RJC hello sample
Repo        : @System
Matched from:
Filename    : /usr/bin/rjc-hello

依存関係を調べるには dnf repoquery を使います。--requires は「それが何を必要とするか」、--whatrequires は「それを必要としているのは誰か」です。

# dnf repoquery --requires rjc-tools
/bin/sh
rjc-hello >= 1.0
# dnf repoquery --whatrequires rjc-hello --installed
rjc-tools-0:2.0-1.el9.noarch

dnf historyとundoで操作を取り消す

この節では、dnf の操作の履歴を見る方法と、直前の更新などを取り消す方法が分かります。

dnf はすべての操作を番号つきで記録していて、dnf history undo 番号 でその操作を逆向きに実行できます。apt には無い機能で、更新して不具合が出たときに役立ちます。

# dnf history
ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     6 | update -y                | 2026-10-30 12:12 | Upgrade        |    1
     5 | remove -y rjc-docs       | 2026-10-30 12:11 | Removed        |    1
     4 | install -y rjc-docs      | 2026-10-30 12:11 | Install        |    1  <
     3 | install -y rjc-tools     | 2026-10-30 12:10 | Install        |    2 ><
     2 | reinstall -y --installro | 2026-10-27 10:52 | R              |    2 >
     1 | install -y --installroot | 2026-10-27 10:52 | Install        |  158 EE

ID 1・2 は、コンテナイメージを作ったときの記録です。右端の記号は、前後の操作の間に dnf 以外(rpm コマンドなど)で rpm データベースが変わったかを示し、E はその操作でエラーや警告が出たことを示します。1件の中身は dnf history info 番号(last で最新)で見られます。

# dnf history info last
Transaction ID : 6
Begin time     : Fri Oct 30 12:12:04 2026
(中略)
Return-Code    : Success
Releasever     : 9
Command Line   : update -y
Persistence    : Persist
Comment        :
Packages Altered:
    Upgrade  rjc-hello-1.1-1.el9.noarch @rjc
    Upgraded rjc-hello-1.0-1.el9.noarch @@System

この更新を取り消すと、rjc-hello が 1.0 に戻りました。取り消し自体も新しい履歴(ID 7)として残ります。

# dnf history undo last -y
(中略)
Downgraded:
  rjc-hello-1.0-1.el9.noarch

Complete!
# rjc-hello
rjc-hello 1.0
# dnf history list rjc-hello
ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     7 | history undo last -y     | 2026-10-30 12:12 | Downgrade      |    1
     6 | update -y                | 2026-10-30 12:12 | Upgrade        |    1  <
     3 | install -y rjc-tools     | 2026-10-30 12:10 | Install        |    2 >

undo(その1件だけを逆にする)

dnf history undo 6

ID 6 で入れたものを消し、消したものを入れ直す

あとの操作はそのまま残る

rollback(その時点まで全部戻す)

dnf history rollback 3

ID 3 より後の操作をまとめて取り消す

影響が大きいので、先に info で中身を見る

取り消しには、前の版のパッケージがリポジトリに残っている必要があります。配布側が前の版を消していると、undo は「入れる版が見つからない」で失敗します。設定ファイルの中身や、パッケージの外で作られたデータまでは元に戻らない点にも注意します。操作の記録は /var/log/dnf.log・/var/log/dnf.rpm.log にも残っていました。

dnfのリポジトリの確認と追加(repolist・.repo・EPEL)

この節では、どのリポジトリが使われているかの確かめ方、リポジトリの設定ファイルの書き方、EPEL の追加のしかたが分かります。

リポジトリの設定は /etc/yum.repos.d/ の中の .repo ファイルにあり、dnf repolist で有効なものを一覧できます。dnf になってもディレクトリ名は yum.repos.d のままです。

# dnf repolist
repo id                          repo name
appstream                        AlmaLinux 9 - AppStream
baseos                           AlmaLinux 9 - BaseOS
extras                           AlmaLinux 9 - Extras
# dnf repolist all | head -5
repo id                      repo name                                  status
appstream                    AlmaLinux 9 - AppStream                    enabled
appstream-debuginfo          AlmaLinux 9 - AppStream - Debug            disabled
appstream-source             AlmaLinux 9 - AppStream - Source           disabled
baseos                       AlmaLinux 9 - BaseOS                       enabled

AlmaLinux 9.8 では、BaseOS(OS の土台)・AppStream(アプリ・言語・データベースなど)・Extras の3つが最初から有効で、CRB(開発用のライブラリ)などは無効でした。BaseOS の設定ファイルの先頭はこうなっています。

[baseos]
name=AlmaLinux $releasever - BaseOS
mirrorlist=https://mirrors.almalinux.org/mirrorlist/$releasever/baseos
# baseurl=https://repo.almalinux.org/almalinux/$releasever/BaseOS/$basearch/os/
enabled=1
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-9
metadata_expire=86400
enabled_metadata=1

この記事の確かめでは、公式リポジトリを無効にし、自分で作ったリポジトリを次の .repo ファイルで足しました。最低限必要なのは、[ ] の中の ID、name、baseurl(か mirrorlist)、enabled、gpgcheck、gpgkey です。

[rjc]
name=RJC sample repo
baseurl=file:///srv/repo/rjc
enabled=1
gpgcheck=1
gpgkey=file:///srv/repo/RPM-GPG-KEY-rjc
# dnf repolist
repo id                             repo name
rjc                                 RJC sample repo
# dnf makecache
RJC sample repo                                 1.4 MB/s | 1.5 kB     00:00
Metadata cache created.

ファイルを手で書く代わりに、dnf config-manager(dnf-plugins-core に含まれる)も使えます。--add-repo は URL から .repo ファイルを作り、--set-enabled・--set-disabled は enabled の値を書き換えます。

# dnf config-manager --add-repo file:///srv/repo/unsigned
Adding repo from: file:///srv/repo/unsigned
# cat /etc/yum.repos.d/srv_repo_unsigned.repo
[srv_repo_unsigned]
name=created by dnf config-manager from file:///srv/repo/unsigned
baseurl=file:///srv/repo/unsigned
enabled=1
# dnf config-manager --set-enabled crb

--add-repo で作ったファイルには gpgcheck の行がありません。この場合は /etc/dnf/dnf.conf の gpgcheck=1 が使われるため、鍵を別に取り込むか、gpgkey の行を書き足します。

EPEL(Extra Packages for Enterprise Linux)は、RHEL 系に標準で入っていないパッケージを Fedora のプロジェクトが配布するリポジトリです。AlmaLinux の公式 Wiki は、AlmaLinux では dnf install epel-release で EPEL を有効にし、EPEL の多くのパッケージが依存する CRB を、AlmaLinux 9 では dnf config-manager --set-enabled crb(8 では powertools)で有効にする、と書いています。Rocky Linux の公式ドキュメントにも、Rocky Linux 9・10 で同じ --set-enabled crb が載っています。

# AlmaLinux 9 での手順(AlmaLinux 公式 Wiki に載っている形)
sudo dnf config-manager --set-enabled crb
sudo dnf install epel-release

RHEL そのものでは、CRB の有効化がサブスクリプションの設定と組み合わさるため、EPEL を配布する Fedora のプロジェクトの公式ドキュメントで RHEL 向けの手順を確かめてから進めます。この記事の環境はネットワークから切り離しているため、EPEL の追加そのものは動かしていません。

その1回だけ別のリポジトリを使うなら、設定を書き換えずに dnf --enablerepo=epel install 名前、指定したリポジトリだけから入れるなら dnf --repo=rjc install 名前 の形が使えます。

dnf group・moduleの使い方(グループとモジュール)

この節では、関連するパッケージ一式をまとめて入れる group と、版の系列を選ぶ module の使い方が分かります。

group は「開発ツール一式」のようなまとまりを1回で入れる仕組みです。リポジトリの comps という定義に、必須(mandatory)・既定(default)・任意(optional)のパッケージが書かれています。見本では rjc-dev というグループに、必須の rjc-tools と既定の rjc-docs を入れました。

# dnf group list
Available Groups:
   RJC Dev Tools
# dnf group info rjc-dev
Group: RJC Dev Tools
 Description: Sample group for dnf group test
 Mandatory Packages:
   rjc-tools
 Default Packages:
   rjc-docs
# dnf group install -y "RJC Dev Tools"
Dependencies resolved.
================================================================================
 Package             Architecture     Version               Repository     Size
================================================================================
Installing group/module packages:
 rjc-docs            noarch           1.0-1.el9             rjc           6.1 k
 rjc-tools           noarch           2.0-1.el9             rjc           6.1 k
Installing dependencies:
 rjc-hello           noarch           1.1-1.el9             rjc           6.1 k
Installing Groups:
 RJC Dev Tools                                                                 

グループは表示名(RJC Dev Tools)でも ID(rjc-dev)でも指定できました。実際の RHEL 系では dnf group install "Development Tools" のように使います。以前の yum groupinstall は dnf 4 でも別名として動きますが、dnf5 では dnf group install の形だけになりました。

module(モジュール)は、同じソフトウェアの複数の版の系列(ストリーム)から1つを選ぶ仕組みで、RHEL 8・9 系で使われています。たとえば言語やデータベースの版を、OS の版とは別に選べます。見本では rjcapp というモジュールに、ストリーム 1(rjcapp 1.0)と 2(rjcapp 2.0)を定義しました。

# dnf module list
RJC modular sample
Name   Stream Profiles   Summary
rjcapp 1 [d]  common [d] RJC app stream 1
rjcapp 2      common [d] RJC app stream 2

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

既定([d])のストリーム 1 のまま dnf install rjcapp すると、1.0 が入り、ストリーム 1 が有効([e])になりました。ここから 2 へ切り替えようとすると、次のエラーで止まります。

# dnf module enable -y rjcapp:2
Dependencies resolved.
The operation would result in switching of module 'rjcapp' stream '1' to stream '2'
Error: It is not possible to switch enabled streams of a module unless explicitly enabled via configuration option module_stream_switch.
It is recommended to rather remove all installed content from the module, and reset the module using 'dnf module reset <module_name>' command. After you reset the module, you can install the other stream.

メッセージのとおり、dnf module reset で選択を戻してから、新しいストリームを有効にし、dnf distro-sync で中身をそろえると 2.0 に切り替わりました。

# dnf module reset -y rjcapp
# dnf module enable -y rjcapp:2
# dnf distro-sync -y
Upgrading:
 rjcapp         noarch         2.0-1.module_el9            rjcmod         6.1 k
# rjcapp
rjcapp 2.0
# dnf module list rjcapp
rjcapp 1 [d]  common [d] RJC app stream 1
rjcapp 2 [e]  common [d] RJC app stream 2

実際の RHEL 9 系で別の版を使うときは、版を下げる・上げる影響(データの形式など)をそのソフトウェアの公式の手順で確かめてから行います。なお、Red Hat の RHEL 10 のリリースノートは、モジュールの機能を非推奨とし、RHEL 10 ではモジュールを使った Application Streams を提供しないと書いています。Fedora 44 の dnf5 で dnf module list を実行すると、何も表示されませんでした。新しく作る手順では、モジュールに頼らない形(パッケージ名に版が入った別パッケージなど)を確かめておくと移行が楽になります。

rpmコマンドとdnfの違い

この節では、rpm コマンドと dnf の役割の違いと、rpm を使う場面が分かります。

rpm は1つの .rpm ファイルを入れる・消す・調べる下の層の道具で、依存パッケージを取りに行きません。dnf は依存関係を計算し、リポジトリから取ってきて、最後に rpm の仕組みで書き込みます。入れる・消すは dnf、入っているものを細かく調べるのは rpm、と使い分けると混乱しません。

rpm で、ほかのパッケージが依存しているものを消そうとすると、次のように止まりました。rpm は「依存しているものがある」と知らせるだけで、一緒に消したり入れたりはしません。

# rpm -e rjc-hello
error: Failed dependencies:
	rjc-hello >= 1.0 is needed by (installed) rjc-tools-2.0-1.el9.noarch

調べる用途では rpm が便利です。-q(query)に続く文字で、何を出すかが変わります。

# rpm -qi rjc-hello | head -12
Name        : rjc-hello
Version     : 1.1
Release     : 1.el9
Architecture: noarch
Install Date: Fri Oct 30 12:12:20 2026
Group       : Unspecified
Size        : 31
License     : MIT
Signature   : RSA/SHA512, Fri Oct 30 12:10:00 2026, Key ID 9e696ccecf744c7c
Source RPM  : rjc-hello-1.1-1.el9.src.rpm
Build Date  : Fri Oct 30 12:09:52 2026
Build Host  : vm
# rpm -ql rjc-tools
/usr/bin/rjc-tools
# rpm -qf /usr/bin/rjc-tools
rjc-tools-2.0-1.el9.noarch
# rpm -qa --last | head -3
rjc-hello-1.1-1.el9.noarch                    Fri Oct 30 12:12:20 2026
rjc-tools-2.0-1.el9.noarch                    Fri Oct 30 12:12:14 2026
rjc-docs-1.0-1.el9.noarch                     Fri Oct 30 12:12:14 2026
やりたいこと rpm dnf
入れるrpm -ivh x.rpm(依存は自分で用意)dnf install 名前(依存も自動)
消すrpm -e 名前(依存があると止まる)dnf remove 名前(要らない依存も消す)
入っているかrpm -q 名前dnf list --installed 名前
中のファイル一覧rpm -ql 名前dnf repoquery -l 名前
このファイルはどれのものかrpm -qf パス(入っているものだけ)dnf provides パス(リポジトリも探す)
署名の鍵の一覧rpm -q gpg-pubkey(鍵の取り込みは自動)
ファイルが変わっていないかrpm -V 名前(なし)

GPG の公開鍵も rpm のデータベースに「gpg-pubkey」という名前のパッケージとして入っています。手元では AlmaLinux の鍵と、見本のリポジトリの鍵の2つが入っていました。

# rpm -q gpg-pubkey --qf "%{NAME}-%{VERSION}-%{RELEASE}\t%{SUMMARY}\n"
gpg-pubkey-b86b3716-61e69f29	AlmaLinux OS 9 <packager@almalinux.org> public key
gpg-pubkey-cf744c7c-6ae48918	RJC Test Repo <test@example.invalid> public key

aptとdnfの対応表(Ubuntuを使っている人向け)

この節では、Ubuntu・Debian の apt に慣れている人が、dnf で同じことをするコマンドが分かります。

いちばん大きな違いは、dnf では「一覧の更新(apt update)」を毎回打たなくてよいことです。dnf はメタデータの期限が切れていれば、install や upgrade の前に自分で取り直します。期限内でも取り直したいときだけ --refresh を付けます。

やりたいこと apt(Ubuntu・Debian) dnf(RHEL 系・Fedora)
一覧を取り直すapt updatednf makecache(ふだんは自動)
全部を更新するapt upgrade(full-upgrade)dnf upgrade
更新できるものを見るapt list --upgradablednf check-update
入れるapt install 名前dnf install 名前
手元のファイルを入れるapt install ./x.debdnf install ./x.rpm
消すapt remove 名前dnf remove 名前
要らない依存を消すapt autoremovednf autoremove
探すapt search 語dnf search 語
詳細を見るapt show 名前dnf info 名前
入っているもの一覧apt list --installeddnf list --installed
ファイルを含むパッケージapt-file search パスdnf provides パス
入っているものの中身dpkg -L 名前rpm -ql 名前
ファイルの持ち主dpkg -S パスrpm -qf パス
依存を調べるapt-cache depends 名前dnf repoquery --requires 名前
ダウンロードだけapt download 名前dnf download 名前
キャッシュを消すapt cleandnf clean all
操作の履歴/var/log/apt/history.logdnf history
操作を取り消す(標準の機能は無い)dnf history undo 番号
版を固定するapt-mark hold 名前dnf versionlock add 名前(プラグイン)
リポジトリの設定/etc/apt/sources.list.d//etc/yum.repos.d/
下の層の道具dpkgrpm

apt の側の使い方は関連記事「aptコマンド一覧|updateとupgradeの違い・apt-getとの違い」で扱っています。対応表で注意したい点を3つ挙げます。

1update の意味が違う

apt の update は一覧の取り直し、dnf の update は upgrade と同じ「中身の更新」。apt の感覚で dnf update を打つと、全部が更新される。

2purge にあたるものが無い

rpm は、変更された設定ファイルを消すときに .rpmsave として残す。設定まで消したいときは、残ったファイルを自分で確かめて消す。

3パッケージ名が違うことがある

Apache は Ubuntu では apache2、RHEL 系では httpd。名前が分からなければ dnf search か dnf provides で探す。

ファイアウォールも、Ubuntu の ufw に対して RHEL 系は firewalld が標準です。対応は関連記事「ufwとfirewalldの使い方|コマンド対応表とSSH締め出し対策」で扱っています。

dnf5で変わったこと(Fedora 41以降)

この節では、Fedora 41 から標準になった dnf5 で、dnf 4 と何が変わったのかが分かります。

dnf5 は C++ で書き直された次の版で、Fedora の変更提案(SwitchToDnf5)により Fedora 41 から dnf を置き換えました。dnf・yum・microdnf のコマンドは dnf5 へのリンクになります。手元の Fedora 44 でも、その形になっていました。

# ls -l /usr/bin/ | grep -E ' (dnf|yum|dnf5|microdnf)'
lrwxrwxrwx 1 root root       4 Aug 19 09:00 dnf -> dnf5
-rwxr-xr-x 1 root root 1704160 Aug 19 09:00 dnf5
lrwxrwxrwx 1 root root       4 Aug 19 09:00 microdnf -> dnf5
lrwxrwxrwx 1 root root       4 Aug 19 09:00 yum -> dnf5
# dnf --version | head -2
dnf5 version 5.4.3.0
dnf5 plugin API version 2.0
# rpm -q dnf5 rpm
dnf5-5.4.3.0-2.fc44.x86_64
rpm-6.0.2-1.fc44.x86_64

同じ見本のリポジトリから入れると、表示の形が大きく変わっていました。ダウンロードと書き込みの進み具合が1行ずつ出て、入れる前に増える容量も書かれます。

# dnf install -y rjc-tools
Updating and loading repositories:
 RJC sample repo                        100% |   0.0   B/s |   5.8 KiB |  00m00s
Repositories loaded.
Package    Arch   Version     Repository      Size
Installing:
 rjc-tools noarch 0:2.0-1.el9 rjc         31.0   B
Installing dependencies:
 rjc-hello noarch 0:1.1-1.el9 rjc         31.0   B

Transaction Summary:
 Installing:         2 packages

Total size of inbound packages is 12 KiB. Need to download 12 KiB.
After this operation, 62 B extra will be used (install 62 B, remove 0 B).
[1/2] rjc-tools-0:2.0-1.el9.noarch      100% |   0.0   B/s |   6.1 KiB |  00m00s
[2/2] rjc-hello-0:1.1-1.el9.noarch      100% |   0.0   B/s |   6.1 KiB |  00m00s
--------------------------------------------------------------------------------
[2/2] Total                             100% |   0.0   B/s |  12.2 KiB |  00m00s
Running transaction
Importing OpenPGP key 0xCF744C7C:
 UserID     : "RJC Test Repo <test@example.invalid>"
 Fingerprint: D968B55D1792591AA2FB167B9E696CCECF744C7C
 From       : file:///srv/repo/RPM-GPG-KEY-rjc
The key was successfully imported.
[1/4] Verify package files              100% |   0.0   B/s |   2.0   B |  00m00s
[2/4] Prepare transaction               100% |   1.0 KiB/s |   2.0   B |  00m00s
[3/4] Installing rjc-hello-0:1.1-1.el9. 100% |  14.8 KiB/s | 288.0   B |  00m00s
[4/4] Installing rjc-tools-0:2.0-1.el9. 100% |  12.2 KiB/s | 288.0   B |  00m00s
Complete!

dnf5 の公式ドキュメント(Changes from DNF4)と手元の実行で確かめた、書き方の主な違いは次のとおりです。

操作 dnf 4 dnf5
リポジトリを追加config-manager --add-repo URLconfig-manager addrepo --set=baseurl=URL など
リポジトリを無効にconfig-manager --set-disabled IDconfig-manager setopt ID.enabled=0
履歴の一覧dnf historydnf history list(サブコマンドが必須)
更新の情報dnf updateinfodnf advisory
グループを入れるdnf groupinstall も可dnf group install のみ
無いパッケージを飛ばす--skip-broken(strict の設定)--skip-unavailable
モジュールdnf module で使えるFedora 44 では一覧が空

dnf5 の config-manager は、元の .repo ファイルを書き換えず、/etc/dnf/repos.override.d/ に上書き用のファイルを作りました。

# dnf config-manager setopt fedora.enabled=0 updates.enabled=0 fedora-cisco-openh264.enabled=0
# cat /etc/dnf/repos.override.d/99-config_manager.repo
# Generated by libdnf5.
# Do not modify this file manually, use dnf5 config-manager instead.
[fedora]
enabled=0
[fedora-cisco-openh264]
enabled=0
[updates]
enabled=0

名前が見つからないときの文言も変わり、--skip-unavailable を付ける案内が出るようになりました(次の節の表に原文を載せています)。RHEL 10 の dnf は 4 系のままなので、RHEL 系の手順を書くときは dnf 4 の書き方が基本になります。

dnf・yumのよくあるエラーと直し方(原文つき)

この節では、dnf・yum でよく出るエラーの原文と、原因・直し方が分かります。

エラーの多くは、「名前が違う」「リポジトリに届かない」「署名が合わない」「ほかの dnf が動いている」の4つに分かれます。以下はすべて手元で起こした原文です。

エラーの原文 原因 直し方
No match for argument: rjc-hellp
Error: Unable to find a match: rjc-hellp
名前の打ち間違い、または有効なリポジトリに無いdnf search で名前を確かめる。EPEL・CRB が要るか見る
Failed to resolve the transaction:
No match for argument: rjc-hellp(dnf5)
同上(dnf5 の文言)同上。無くても進めるなら --skip-unavailable
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: Curl error (6): Couldn't resolve host nameDNS が引けない・ネットワークに出られない名前解決とプロキシを確かめる。一時的に --disablerepo
Package rjc-docs-1.0-1.el9.noarch.rpm is not signed
Error: GPG check FAILED
署名の無いパッケージを gpgcheck=1 で入れようとした配布元が正しいかを確かめ、署名された配布物を使う
Public key for rjc-docs-1.0-1.el9.noarch.rpm is not installed
Error: GPG check FAILED
署名の公開鍵が取り込まれていない(gpgkey の行が無い)公式の鍵を rpm --import するか、.repo に gpgkey を書く
Waiting for process with pid 6 to finish.ほかの dnf(自動更新など)が動いている終わるのを待つ。PID のプロセスを確かめる
Error: This command has to be run with superuser privileges一般ユーザーで実行したsudo を付ける
Error: There are no enabled repositories in "/etc/yum.repos.d", ...有効なリポジトリが1つも無いdnf repolist all で見て、必要なものを有効にする
error: Failed dependencies: rjc-hello >= 1.0 is needed by (installed) rjc-toolsrpm -e で、依存されているものを消そうとしたdnf remove を使う(依存するものも一緒に消える)

ネットワークに届かないときの原文

この記事の確かめの環境はネットワークから切り離してあるため、最初の dnf makecache は 0.46 秒で次のエラーになりました。会社のネットワークでプロキシが要るのに設定していない、DNS が引けない、という場面で同じ文言になります。

# dnf makecache
AlmaLinux 9 - AppStream                         0.0  B/s |   0  B     00:00
Errors during downloading metadata for repository 'appstream':
  - Curl error (6): Couldn't resolve host name for https://mirrors.almalinux.org/mirrorlist/9/appstream [Could not resolve host: mirrors.almalinux.org]
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: Curl error (6): Couldn't resolve host name for https://mirrors.almalinux.org/mirrorlist/9/appstream [Could not resolve host: mirrors.almalinux.org]

/etc/dnf/dnf.conf の skip_if_unavailable=False(AlmaLinux 9.8 の既定)により、1つのリポジトリでも届かないと全体が止まります。プロキシは dnf.conf の proxy= に書けます。Curl error の番号は curl と同じ意味で、6 は名前解決の失敗、7 は接続の失敗、28 は時間切れです。

GPG のエラーは2種類ある

署名に関するエラーは、「署名が無い(not signed)」と「署名はあるが鍵が無い(Public key ... is not installed)」の2種類が出ました。

# dnf install -y --enablerepo=rjc-unsigned --disablerepo=rjc rjc-docs
(中略)
Downloading Packages:
Package rjc-docs-1.0-1.el9.noarch.rpm is not signed
Error: GPG check FAILED

# dnf install -y rjc-docs        ← .repo の gpgkey 行を外し、鍵も消した状態
(中略)
Downloading Packages:
Public key for rjc-docs-1.0-1.el9.noarch.rpm is not installed
Error: GPG check FAILED

GPG check FAILED が出たとき

避けたい--nogpgcheck を付けて入れる、.repo を gpgcheck=0 にして入れる。改ざんされたパッケージでも入ってしまう
→
代わりに配布元の公式ページで鍵の場所と指紋を確かめ、rpm --import で取り込むか、.repo の gpgkey に書く

自分で作った検証用のパッケージ以外では、署名の確認を外さない

ロック待ち(ほかの dnf が動いている)

dnf は、同時に2つが rpm のデータベースを書き換えないように、/var/lib/dnf/rpmdb_lock.pid でロックをかけます。手元で別のプロセスにロックを持たせてから install すると、次の表示で待ち続けました。

# dnf install -y rjc-docs
(中略)
Downloading Packages:
Running transaction check
Waiting for process with pid 6 to finish.

待たずに止めたいときは --setopt=exit_on_lock=True を付けます。この場合は、ロックを持っているプロセスの情報を出して終わりました(終了コード 200)。

# dnf install -y --setopt=exit_on_lock=True rjc-docs
(中略)
Running transaction check
RPMDB already locked by 6
  The application with PID 6 is: python3
    Memory :  39 M RSS ( 57 MB VSZ)
    Started: Fri Oct 30 12:11:49 2026 - 00:02 ago
    State  : Sleeping

サーバーを起動した直後は、dnf-automatic などの自動更新が動いていることがあります。表示された PID が何のプロセスかを ps -p PID -o pid,cmd で確かめ、更新の途中なら終わるのを待ちます。書き込みの途中で強制的に止めると、rpm のデータベースが中途半端な状態になることがあるため避けます。プロセスの確かめ方と止め方は関連記事「Linuxコマンド一覧|100個をカテゴリ別に実行結果つきで解説」でも扱っています。

どのコマンドを使うかの判断表

  1. 1名前が分からない → dnf search・dnf providesコマンド名から探すなら provides
  2. 2入れる前に確かめたい → dnf info・dnf list --showduplicates版とリポジトリを見る
  3. 3入れる・消す → dnf install・dnf removerpm -i・rpm -e は依存を扱わない
  4. 4更新が見えない → dnf check-update --refreshキャッシュの期限内は取り直さない
  5. 5更新で不具合が出た → dnf history undo前の版がリポジトリにあるときに使える
  6. 6入っているものを細かく調べる → rpm -qi・-ql・-qfrpm のデータベースを直接読む

本番のサーバーで更新するときに確かめたいことを並べます。

  • 1先に dnf check-update で中身を見るカーネルや主要なミドルウェアが入っていないかを確かめる
  • 2-y を付ける前に一覧を読むRemoving の欄に思わぬパッケージが無いかを見る
  • 3dnf history の番号を控える不具合が出たときに undo する対象がすぐ分かる
  • 4GPG の確認を外さない--nogpgcheck・gpgcheck=0 で回避しない
  • 5カーネルを更新したら再起動の計画を立てるinstallonly_limit=3 で、前のカーネルは3つまで残る

よくある質問

Q. dnf とは何ですか? A. Red Hat 系 Linux(RHEL・AlmaLinux・Rocky Linux・Fedora など)で、RPM 形式のパッケージを依存関係ごと入れる・更新する・消すためのコマンドです。Ubuntu の apt にあたります。

Q. yum とは何ですか? A. dnf の前身のパッケージ管理コマンドで、RHEL 7・CentOS 7 までの標準でした。RHEL 8 以降では yum は dnf の別名で、手元の AlmaLinux 9.8 でも /usr/bin/yum は dnf と同じファイルを指していました。

Q. dnf と yum はどちらを使えばよいですか? A. RHEL 8 以降・Fedora では dnf を使います。yum と打っても同じものが動きますが、手順書やスクリプトは dnf で書くと、どの版のツールが動くかが読み手に伝わります。RHEL 7 などの以前の版では yum を使います。

Q. dnf update と dnf upgrade の違いは? A. 違いはありません。update は upgrade の別名で、dnf update --help も usage: dnf upgrade と表示されました。apt の update(一覧の取り直し)とは意味が違う点に注意します。

Q. apt update にあたるコマンドは? A. dnf はメタデータの期限が切れると自動で取り直すため、ふだんは不要です。すぐ取り直したいときは dnf makecache か、コマンドに --refresh を付けます。

Q. No match for argument と出て入れられません。 A. 名前の打ち間違いか、そのパッケージが有効なリポジトリに無いことが原因です。dnf search・dnf provides で正しい名前を探し、EPEL や CRB にあるものなら、そのリポジトリを有効にしてから入れます。

Q. EPEL とは何ですか?どう入れますか? A. RHEL 系に標準で入っていないパッケージを、Fedora のプロジェクトが配布する追加のリポジトリです。AlmaLinux の公式 Wiki では、AlmaLinux 9 で dnf config-manager --set-enabled crb と dnf install epel-release を実行する手順が案内されています。

Q. 更新したら不具合が出ました。元に戻せますか? A. dnf history で操作の番号を見て、dnf history undo 番号 で取り消せます。手元では rjc-hello が 1.1 から 1.0 に戻りました。前の版がリポジトリに残っていない場合や、設定ファイル・データの変更は戻りません。

Q. dnf と rpm の違いは何ですか? A. rpm は1つの .rpm ファイルを扱う下の層の道具で、依存パッケージを取りに行きません。dnf はリポジトリから依存関係ごと取ってきて、最後に rpm の仕組みで書き込みます。入れる・消すは dnf、細かく調べるのは rpm -q が向きます。

Q. dnf5 とは何ですか? A. C++ で書き直された dnf の次の版で、Fedora 41 から標準になりました。Fedora 44 では dnf・yum・microdnf の3つとも dnf5 を指していました。履歴は dnf history list、リポジトリの設定は config-manager setopt のように、一部の書き方が変わっています。

Q. Waiting for process with pid ... to finish と出て進みません。 A. ほかの dnf(自動更新など)が rpm のデータベースを使っています。そのプロセスが何かを確かめ、終わるのを待ちます。書き込みの途中で強制的に止めると、データベースが壊れることがあります。

まとめ

  • dnf は Red Hat 系 Linux のパッケージ管理コマンド。yum は前身で、RHEL 8 以降の yum は dnf の別名(AlmaLinux 9.8 で同じファイルを指していた)。
  • dnf install は依存関係ごと入れ、初回は GPG 鍵を取り込む。dnf remove は不要になった依存も一緒に消す。
  • dnf の update と upgrade は同じ。メタデータは期限(既定 48 時間)まで取り直さないため、更新が見えないときは --refresh を付ける。
  • dnf history undo で操作を取り消せる。手元では更新を取り消して rjc-hello が 1.1 から 1.0 に戻った。
  • エラーは「名前が違う(No match)」「届かない(Curl error)」「署名(GPG check FAILED)」「ロック待ち」の4つに分けて見る。Fedora 41 以降は dnf5 で、一部の書き方が変わった。

次に読むとよい記事です。Ubuntu の側の操作は関連記事「aptコマンド一覧|updateとupgradeの違い・apt-getとの違い」で、自分の OS の確かめ方は関連記事「LinuxのOS・バージョン確認コマンド|os-releaseとunameの違い」で扱っています。

参考・出典

確認日はいずれも 2026年10月29日です。

  • Red Hat「RHEL 8.3 リリースノート 3.4. YUM/DNF を使用したパッケージ管理」:https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/8/html/8.3_release_notes/package_management_with_yum_dnf
  • Red Hat「RHEL 10.1 Release Notes Chapter 9. Deprecated features」:https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/10.1_release_notes/deprecated-features
  • DNF5 Documentation「Changes from DNF4」:https://dnf5.readthedocs.io/en/latest/changes_from_dnf4.7.html
  • Fedora Project Wiki「Changes/SwitchToDnf5」:https://fedoraproject.org/wiki/Changes/SwitchToDnf5
  • AlmaLinux Wiki「Extra Repositories」(EPEL と CRB):https://wiki.almalinux.org/repos/Extras
  • Rocky Linux Documentation「DNF package manager」:https://docs.rockylinux.org/10/guides/package_management/dnf_package_manager/
  • AlmaLinux「container-images」(公式コンテナイメージ):https://github.com/AlmaLinux/container-images
  • Fedora「docker-brew-fedora」(公式コンテナイメージ):https://github.com/fedora-cloud/docker-brew-fedora

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「dnf・yumとは?使い方とコマンド一覧|apt対応表・エラー原文つき」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ
参加受付中

AI駆動開発、 無料セミナー