Linuxの基礎知識：パッケージ管理の進化を理解し、yum と dnf の違いを押さえて dnf を積極活用しよう

## はじめに
Linuxディストリビューションでソフトウェアのインストールや更新を行う際に使用されるパッケージ管理コマンドには、大きく分けて dnf と yum の2つがあります。

:::note warn
***どちらもRed Hat系ディストリビューション（CentOS、RHEL、Fedoraなど）で使用されますが、それぞれの特徴や違いを理解することは、効率的なシステム管理において非常に重要です。***
:::

この記事では、dnf と yum の違いについて、基本的なポイントをまとめています。***この情報が、どなたかの技術の支えになれば幸いです。***

## 書こうと思ったきっかけ
この記事を書こうと思ったきっかけは、以前投稿した記事に対する質問があったことです。***これを機に、自分の知識を改めて整理しようと考えました。***

https://qiita.com/free-honda/items/d01b58463f31cd4b2d4e

:::note alert
***これまでEC2環境を構築する際に、無料利用枠として選択されていたAmazon Linux 2ですが、来年の6月30日をもってサポートが終了することが確定しています。***
:::

https://aws.amazon.com/jp/amazon-linux-2/faqs/

この2つのマシンイメージは基本的な部分は共通していますが、パッケージ管理ツールとして使用されるコマンドに違いがあります。

詳しくは、以下のAWS公式ドキュメントをご参照ください。

https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/package-management.html

## そもそもパッケージ管理とは？

パッケージ管理とは、**ソフトウェアのインストール、更新、削除、および依存関係の管理を行う仕組み**のことを指します。

:::note warn
***特にLinuxでは、システム上のソフトウェアを効率的に管理するために、パッケージ管理システム（Package Manager）が利用されています。***
:::

### パッケージ管理の役割
1. **インストールの簡略化**  
   必要なソフトウェアを手動でダウンロードしてインストールするのではなく、コマンド一つで簡単に導入できます。
   
2. **依存関係の管理**  
   ソフトウェアが動作するために必要な他のライブラリやツールを自動でインストールします。
   
3. **更新の効率化**  
   システム全体のパッケージを一括でアップデートすることができます。
   
4. **削除の容易さ**  
   ソフトウェアを削除する際に、関連するファイルも含めて安全に削除できます。

5. **セキュリティ向上**  
   公式リポジトリから最新バージョンを取得するため、セキュリティパッチを効率的に適用できます。

### パッケージ管理システムの種類
Linuxディストリビューションごとに異なるパッケージ管理システムが利用されます。

| **パッケージ管理システム** | **主な利用ディストリビューション** | **形式**       |
|----------------------------|-----------------------------------|----------------|
| `yum` / `dnf`             | CentOS, RHEL, Fedora             | `.rpm`         |
| `apt`                     | Debian, Ubuntu                   | `.deb`         |
| `zypper`                  | openSUSE                         | `.rpm`         |
| `pacman`                  | Arch Linux                       | `.pkg.tar.xz`  |

:::note info
***普段、私は主にRHEL系やDebian系のディストリビューションを使うことが多いので、上記の中では ```yum``` / ```dnf``` や ```apt``` を利用しています。***
:::

## yum と dnf の概要理解
### yumについて

yum（Yellowdog Updater, Modified）は、Red Hat系ディストリビューションで広く使用されてきたパッケージ管理ツールです。以下のような特徴があります。

:::note info
- **依存関係の解決:** 必要なパッケージや依存関係を自動的に処理。

- **豊富なオプション:** パッケージのインストール、削除、更新、検索などが可能。

- **歴史的背景:** 長年にわたって使用され、多くのシステム管理者に馴染みがある。
:::

***しかし、パフォーマンスや依存関係の解決速度、機能拡張性に課題がありました。***

### dnfについて
dnf（Dandified YUM）は、yum の次世代版として開発されたパッケージ管理ツールです。***以下のような改善点があります。***

:::note info
- **高速化: dnf はC言語で書かれた libsolv ライブラリを使用しているため、依存関係の解決が高速。**

- **プラグインの強化: モジュール化された設計で拡張性が向上。**

- **メモリ使用量の削減: パフォーマンスが向上し、大規模なリポジトリでも快適に操作可能。**

- **コマンド互換性: yum とほぼ同じコマンドで操作可能。**
:::

***dnf は、Fedora 22以降や RHEL 8以降の標準パッケージ管理ツールとして採用されています。***

## yum と dnf の主な違い
以下に、yum と dnf の主な違いを簡単に表形式でまとめました。

| **項目**               | **yum**                                      | **dnf**                                      |
|------------------------|----------------------------------------------|----------------------------------------------|
| **依存関係の解決**     | Pythonスクリプトで処理                       | `libsolv` を使用し高速で正確                  |
| **メモリ使用量**       | 高い                                         | 低い                                         |
| **プラグインの拡張性** | 限定的                                       | モジュール化され高い                          |
| **速度**               | やや遅い                                     | 高速                                         |
| **エラーメッセージ**   | やや分かりづらい                             | 分かりやすく詳細                              |
| **使用環境**           | CentOS 7以前、RHEL 7以前                     | Fedora 22以降、RHEL 8以降、CentOS 8以降      |

### 結論：dnfの活用を推奨
***パッケージ管理でなんとなく yum コマンドを使っている方には、これからは dnf コマンドを活用することを強くお勧めします！***

:::note alert
***特に、最新のLinuxディストリビューションを使用している場合、dnf のほうが性能面や機能面でのメリットが大きいため、効率的なシステム管理が可能です。***
:::

## 主なコマンドの違い

以下に、yum と dnf での基本的な操作コマンドの違いをまとめました。

### 1. パッケージのインストール

**yum**

```bash
yum install <パッケージ名>
```

**dnf**

```bash
dnf install <パッケージ名>
```

### 2. パッケージの削除

**yum**

```bash
yum remove <パッケージ名>
```

**dnf**

```bash
dnf remove <パッケージ名>
```

### 3. システム全体のアップデート

**yum**

```bash
yum update
```

**dnf**

```bash
dnf upgrade
```

## まとめ
dnf は yum の後継として設計され、パフォーマンスや機能が大幅に向上しています。
***多くのコマンドが yum と互換性を持つため、yum を使っていた管理者も簡単に移行できます。***

:::note warn
***新しいシステムをセットアップする際は、dnf を積極的に活用することで、より効率的なパッケージ管理が可能です。***
:::

今回の記事では、yum と dnf の違いを簡単に整理しました。***この内容が、誰かのの技術向上や効率的なシステム運用に役立てば幸いです！***

## 関連記事

https://qiita.com/s_taki/items/1d94e5e9544ebbf32778

https://zenn.dev/yoojiyang/articles/bf684c3c102351

https://qiita.com/tomoko_ishizaka/items/faea9a5d7ef99e58ee10

https://eng-entrance.com/category/linux/linux-package