- 技術 💻
dnf・yumとは?使い方とコマンド一覧|apt対応表・エラー原文つき
結論
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 以降)で変わったこと
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 へ書き込みを任せます。
rpm -qa | wc -lyum --version も同じ 4.14.0使う 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 --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(指紋)がディストリビューションの公式ページに載っている値と同じかを確かめる習慣をつけておくと安全です。
依存関係を計算する
「Dependencies resolved.」の表示。何を入れ、何が一緒に入るかがここで決まる。
確認して取ってくる
「Is this ok [y/N]」で y と答えると、パッケージをダウンロードする。
署名を確かめる
gpgcheck=1 のリポジトリでは、取り込んだ公開鍵で署名を確かめる。合わなければここで止まる。
試しに流してから書き込む
Transaction check・Transaction test で衝突が無いかを確かめてから、rpm が実際に書き込む。
履歴に残る
終わると dnf history に1件の記録ができ、あとから取り消せる。
手元にある .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 です。似たコマンドとの違いは次のとおりです。
upgrade
dnf upgrade。入っているものを使える最新の版にする。update と同じ。
いちばん基本の更新
upgrade-minimal
dnf upgrade-minimal。不具合・セキュリティの修正が入った版のうち、いちばん小さい更新にとどめる。
変化を小さくしたいとき
distro-sync
dnf distro-sync。リポジトリにある版にそろえる。必要なら版を下げる。
モジュールの切り替え後にも使う
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 update | dnf makecache(ふだんは自動) |
| 全部を更新する | apt upgrade(full-upgrade) | dnf upgrade |
| 更新できるものを見る | apt list --upgradable | dnf check-update |
| 入れる | apt install 名前 | dnf install 名前 |
| 手元のファイルを入れる | apt install ./x.deb | dnf install ./x.rpm |
| 消す | apt remove 名前 | dnf remove 名前 |
| 要らない依存を消す | apt autoremove | dnf autoremove |
| 探す | apt search 語 | dnf search 語 |
| 詳細を見る | apt show 名前 | dnf info 名前 |
| 入っているもの一覧 | apt list --installed | dnf 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 clean | dnf clean all |
| 操作の履歴 | /var/log/apt/history.log | dnf history |
| 操作を取り消す | (標準の機能は無い) | dnf history undo 番号 |
| 版を固定する | apt-mark hold 名前 | dnf versionlock add 名前(プラグイン) |
| リポジトリの設定 | /etc/apt/sources.list.d/ | /etc/yum.repos.d/ |
| 下の層の道具 | dpkg | rpm |
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 URL | config-manager addrepo --set=baseurl=URL など |
| リポジトリを無効に | config-manager --set-disabled ID | config-manager setopt ID.enabled=0 |
| 履歴の一覧 | dnf history | dnf history list(サブコマンドが必須) |
| 更新の情報 | dnf updateinfo | dnf 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 name | DNS が引けない・ネットワークに出られない | 名前解決とプロキシを確かめる。一時的に --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-tools | rpm -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 が出たとき
自分で作った検証用のパッケージ以外では、署名の確認を外さない
ロック待ち(ほかの 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名前が分からない → dnf search・dnf providesコマンド名から探すなら provides
- 2入れる前に確かめたい → dnf info・dnf list --showduplicates版とリポジトリを見る
- 3入れる・消す → dnf install・dnf removerpm -i・rpm -e は依存を扱わない
- 4更新が見えない → dnf check-update --refreshキャッシュの期限内は取り直さない
- 5更新で不具合が出た → dnf history undo前の版がリポジトリにあるときに使える
- 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期連続の黒字決算。