RPM ↔ dpkg コマンド変換表(dnf / apt 対応版)


あなたは、rpm派?dpkg派?私は断然dpkg派です。
この記事は2008年に書いたものですが、その後パッケージ管理ツールの世代交代が進みました。RHEL系ではyumがdnfに、Debian系ではaptitude/apt-getがaptに置き換わっています。現在の環境に合わせて対応表を更新しました。
低レベルツールと高レベルツールの関係
まず前提として、各ディストリビューションのパッケージ管理は「低レベルツール」と「高レベルツール」の2層構造になっています。
| 系統 | 低レベル(単一パッケージ操作) | 高レベル(依存関係解決・リポジトリ管理) |
|---|---|---|
| RHEL / Fedora系 | rpm | dnf(旧yum) |
| Debian / Ubuntu系 | dpkg | apt(旧apt-get / aptitude) |
- RHEL 8以降ではyumコマンドはdnfへのシンボリックリンクになっており、実体はdnfです。Fedora 41以降はさらに高速化されたDNF5に移行しています。
- Debian / Ubuntuでは対話的な操作にはaptの使用が推奨されています。apt-getとapt-cacheは後方互換性が必要なスクリプト向けです。aptitudeは現在では標準インストールされないことが多くなりました。
rpmとdpkgの違い
私がdpkg派である理由は、アンインストール時の設定ファイルの扱いです。
- rpmでパッケージを削除すると、変更した設定ファイルは
.rpmsaveという拡張子を付けてリネームされます。 - dpkgは設定ファイルを残すか消すかをオプションで明示的に指定できます。
dpkg -r(remove)は設定ファイルを残し、dpkg -P(purge)は設定ファイルごと削除します。
「いったん削除して設定を作り直したい」のか「設定を残したまま入れ直したい」のかを操作する側が選べるのは、dpkg / aptの美点だと思います。
追加・削除
| 操作 | rpm | dnf | dpkg | apt |
|---|---|---|---|---|
| リポジトリからインストール | - | dnf install foo | - | apt install foo |
| ローカルファイルをインストール | rpm -ivh foo.rpm | dnf install ./foo.rpm | dpkg -i foo.deb | apt install ./foo.deb |
| パッケージをアップグレード | rpm -Uvh foo.rpm | dnf upgrade foo | - | apt install --only-upgrade foo |
| アンインストール(設定を残す) | - | - | dpkg -r foo | apt remove foo |
| アンインストール(設定ごと削除) | rpm -e foo | dnf remove foo | dpkg -P foo | apt purge foo |
| 全パッケージをアップグレード | - | dnf upgrade | - | apt update && apt upgrade |
| 不要になった依存パッケージを削除 | - | dnf autoremove | - | apt autoremove |
ローカルの.rpm / .debファイルも、現在はdnf install ./foo.rpmやapt install ./foo.debのように高レベルツールに渡せば依存関係を解決しながらインストールできます。rpm -ivhやdpkg -iで入れて依存関係エラーに悩まされる場面は減りました。
情報表示
低レベルツール同士の対応です。このあたりは昔から変わっていません。
| 操作 | rpm | dpkg |
|---|---|---|
| インストール済みパッケージの一覧 | rpm -qa | dpkg -l |
| パッケージfooに含まれるファイルの一覧 | rpm -ql foo | dpkg -L foo |
| ファイルがどのパッケージ由来か調べる | rpm -qf /path/to/file | dpkg -S /path/to/file |
| インストール済みパッケージの情報表示 | rpm -qi foo | dpkg -s foo |
| パッケージファイルの情報表示 | rpm -qip foo.rpm | dpkg -I foo.deb |
| パッケージファイル内のファイル一覧 | rpm -qlp foo.rpm | dpkg -c foo.deb |
検索・リポジトリ操作
高レベルツール同士の対応です。
| 操作 | dnf | apt |
|---|---|---|
| パッケージを検索 | dnf search foo | apt search foo |
| パッケージ情報を表示 | dnf info foo | apt show foo |
| リポジトリ情報を更新 | dnf makecache | apt update |
| インストール済みパッケージの一覧 | dnf list installed | apt list --installed |
| ファイルを含むパッケージを検索 | dnf provides /path/to/file | apt-file search /path/to/file |
| 操作履歴の表示 | dnf history | less /var/log/apt/history.log |
apt側のapt-fileは別途インストールが必要です。dnfのprovidesは未インストールのパッケージも対象になるので、「このコマンドはどのパッケージに入っているのか」を調べるときに便利です。
最近のパッケージ管理事情
この記事を書いた2008年から、パッケージ管理を取り巻く状況も変わりました。
- コンテナの普及: アプリケーションの配布はDockerイメージやOCIイメージで行われることが増え、ホストOSに直接パッケージをインストールする機会自体が減っています。とはいえコンテナイメージのビルド(Dockerfile)の中では相変わらずaptやdnfが主役です。
- ディストリビューション非依存のパッケージ形式: FlatpakやSnapのように、rpm / debの垣根を超えてデスクトップアプリを配布する仕組みが定着しました。
- イミュータブルOS: Fedora Silverblue(rpm-ostree)やUbuntu Coreのように、OS本体を読み取り専用にしてアトミックに更新するディストリビューションも登場しています。
それでもサーバー運用やコンテナイメージ作成の現場では、rpm / dpkgとdnf / aptの知識は現役です。両方の系統を行き来する人の参考になれば幸いです。
他に便利なコマンドがあったら教えてください。


