Linuxパッケージ管理システムのまとめ

# パッケージとは？
実行プログラム、設定ファイル、ライブラリ、マニュアル、ドキュメントなどを１つのファイルにまとめたものをパッケージと呼ぶ。
![スクリーンショット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752598/9ac844c8-022c-0c5a-8f73-3384290834b1.png)
引用元: [日経クロステック](https://xtech.nikkei.com/it/article/Keyword/20110427/359976/)

# パッケージ管理システムとは？
パッケージ管理システムは、ソフトウェアのインストール、更新、削除、およびシステムの依存関係の管理を自動化するツールである。これにより、ソフトウェアの配布や管理が簡単かつ効率的に行える。LinuxにはAPTやRPM、WindowsにはNuGet、macOSにはHomebrewなどがある。パッケージ管理システムを使用することで、手動での管理作業が減少し、一貫性のある環境を保ちやすくなる。

# Debian系Linuxのパッケージ管理システムを扱うコマンド
Debian系のLinuxのパッケージ管理システムを扱う代表的なコマンドには、dpkg,apt,apt-get,apt-cache,apt-fileなどがある。
## dpkgコマンド
dpkgは、Debianベースのシステムで使用されるパッケージ管理ツールです。主に、パッケージのインストール、削除、設定、クエリを行います。.debパッケージ形式を扱い、パッケージの依存関係管理やファイルリストの表示、パッケージの状態確認などができます。APT（Advanced Package Tool）の基礎にある低レベルのツールで、システムのパッケージ管理を直接操作するための基本的な機能を提供しています。
| オプション            | 説明                                             |
|----------------------|--------------------------------------------------|
| **-i, --install**    | パッケージをインストールする                       |
| **-r, --remove**     | パッケージを削除する（設定データは残る）           |
| **-P, --purge**      | パッケージと設定データを完全に削除する             |
| **-l, --list**       | インストール済みのパッケージを表示する             |
| **-L, --listfiles**  | パッケージによってインストールされたファイルを一覧表示する |
| **-s, --status**     | パッケージの情報を表示する                         |
| **-S, --search**     | ファイルがどのパッケージによってインストールされたかを検索する |
| **--configure**      | 未構成のパッケージを構成する                       |
| **--unpack**         | パッケージを展開する（インストールはしない）       |
| **-E**               | 既にインストールされているバージョンと同じ場合はインストールしない |
| **-G**               | 既に新しいバージョンがインストールされている場合はインストールしない |
| **-R, --recursive**  | ディレクトリ内を再帰的に処理する                   |



**パッケージのインストール**
```bash
sudo dpkg -i example_package.deb
```
説明: .debパッケージをインストールします。

**パッケージの削除**
```bash
sudo dpkg -r example_package
```
説明: パッケージを削除します（設定ファイルは残る）。

**パッケージの完全削除**
```bash
sudo dpkg -P example_package
```
説明: パッケージと設定ファイルを完全に削除します。

**インストール済みパッケージの一覧表示**
```bash
dpkg -l
```
説明: インストールされているパッケージを一覧表示します。

**パッケージのファイル一覧表示**
```bash
dpkg -L example_package
```
説明: 指定されたパッケージがインストールしたファイルを表示します。

**パッケージの依存関係確認**
```bash
dpkg -s example_package
```
説明: パッケージのステータスと依存関係を表示します。

**ファイルがどのパッケージに属するかを検索**
```bash
dpkg -S /path/to/file
```
説明: 指定されたファイルがどのパッケージからインストールされたかを表示します。

**インストール済みパッケージの構成**
```bash
sudo dpkg --configure -a
```
説明: 未構成のパッケージを設定します。

**パッケージの展開のみ**
```bash
sudo dpkg --unpack example_package.deb
```
説明: .debパッケージをインストールせずに展開します。

**再帰的にパッケージをインストール**
```bash
sudo dpkg -R /path/to/directory
```
説明: ディレクトリ内のすべてのパッケージを再帰的にインストールします。

# apt-getコマンド
apt-getコマンドはDebian系Linuxディストリビューションで使用されるパッケージ管理コマンドである。apt-getは低レベルの操作に向いているため、特定のケースではまだ使用することはあるが、一般的なパッケージ管理にはaptが推奨されている。

| オプション                 | 説明                                      |
|--------------------------|-----------------------------------------|
| -s, --dry-run            | システムを変更せず動作をシミュレートする    |
| -y, --yes                | 処理中の問い合せに対して自動的にYes(y)と答える|

| サブコマンド               | 説明                                      |
|--------------------------|-----------------------------------------|
| autoclean                | ダウンロードしたパッケージのアーカイブを削除する |
| autoremove               | 自動的にインストールされたもののうち使われていないパッケージを削除する |
| download                 | パッケージをダウンロードのみ行いインストールしない  |
| dist-upgrade             | システムを最新にアップグレードする          |
| install                  | パッケージをインストールまたはアップグレードする  |
| remove                   | パッケージをアンインストールする             |
| update                   | パッケージのインデックスを更新する          |
| upgrade                  | システムの全パッケージのうち、他のパッケージを削除しないものをアップグレードする  |

**パッケージリストの更新**
```bash
sudo apt-get update
```
説明: パッケージリストを最新の状態に更新します。

**パッケージのインストール**
```bash
sudo apt-get install package_name
```
説明: 指定したパッケージをインストールします。

**パッケージの削除**
```bash
sudo apt-get remove package_name
```
説明: 指定したパッケージを削除します（設定ファイルは残る）。

**パッケージの完全削除**
```bash
sudo apt-get purge package_name
```
説明: 指定したパッケージとその設定ファイルを完全に削除します。

**システムのアップグレード**
```bash
sudo apt-get upgrade
```
説明: インストールされているすべてのパッケージを最新バージョンにアップグレードします。

**ディストリビューションのアップグレード**
```bash
sudo apt-get dist-upgrade
```
説明: 依存関係を考慮してシステムを最新にアップグレードします。

**不要なパッケージの自動削除**
```bash
sudo apt-get autoremove
```
説明: もはや必要とされないパッケージを自動的に削除します。

**キャッシュのクリーンアップ**
```bash
sudo apt-get clean
```
説明: ダウンロードされたパッケージファイルを削除し、ディスクスペースを解放します。

**パッケージのダウンロードのみ**
```bash
sudo apt-get download package_name
```
説明: パッケージをダウンロードのみ行い、インストールはしません。

**システムのシミュレーション**
```bash
sudo apt-get -s upgrade
```
説明: システムを変更せずにアップグレードをシミュレートします。

# apt-cacheコマンド
apt-cacheコマンドは、Debian系Linuxディストリビューションで使用されるパッケージ管理ツールの一部で、パッケージの検索や情報取得に特化しています。apt-cacheは低レベルなパッケージ管理タスクに適しており、詳細な依存関係やキャッシュデータの確認に使用されます。現在はaptコマンドに統合されているため、通常のパッケージ検索や情報取得にはaptが推奨されています。

| サブコマンド            | 説明                                    |
|------------------------|-----------------------------------------|
| search キーワード      | 指定したキーワードを含むパッケージを検索する |
| show パッケージ名      | パッケージについての一般的な情報を表示する   |
| showpkg パッケージ名   | パッケージについての詳細な情報を表示する   |
| depends パッケージ名   | 指定したパッケージの依存関係情報を表示する |

**パッケージの検索**
```bash
apt-cache search キーワード
```
説明: 指定したキーワードを含むパッケージを検索します。

**パッケージの情報表示**
```bash
apt-cache show package_name
```
説明: パッケージについての一般的な情報を表示します。

**パッケージの詳細情報表示**
```bash
apt-cache showpkg package_name
```
説明: パッケージについての詳細な情報を表示します。

**パッケージの依存関係確認**
```bash
apt-cache depends package_name
```
説明: 指定したパッケージの依存関係情報を表示します。

**逆依存関係の確認**
```bash
apt-cache rdepends package_name
```
説明: 指定したパッケージに依存しているパッケージを表示します。

# apt-fileコマンド
apt-fileコマンドは、Debianベースのシステムでファイルがどのパッケージに含まれているかを検索するためのツールです。これにより、インストールされていないパッケージに含まれるファイルも確認できます。apt-fileは、主にファイル名やパスからパッケージを逆引きするのに使われ、apt-getやapt-cacheとは異なり、詳細なファイルレベルの検索をサポートしています。apt-fileコマンドは現在も使用が推奨されています。
**ファイルが含まれるパッケージの検索**
```bash
apt-file search /path/to/file
```
説明: 指定したファイルが含まれるパッケージを検索します。

**パッケージに含まれるファイルの一覧表示**
```bash
apt-file list package_name
```
説明: 指定したパッケージに含まれるファイルを一覧表示します。

**パッケージ情報の更新**
```bash
sudo apt-file update
```
説明: `apt-file`のデータベースを更新します。

**ファイル名でパッケージを検索**
```bash
apt-file find filename
```
説明: 指定したファイル名を含むパッケージを検索します。

**特定のパッケージに含まれるファイルの検索**
```bash
apt-file show package_name
```
説明: 指定したパッケージに含まれるファイルを表示します。

# aptコマンド
aptコマンドは、DebianベースのLinuxディストリビューション（Ubuntuなど）でパッケージ管理を行うための統合ツールです。apt-getやapt-cacheの機能を簡略化し、よりユーザーフレンドリーなインターフェースを提供します。
| オプション                | 説明                                           |
|--------------------------|------------------------------------------------|
| -c 設定ファイル          | 設定ファイルを指定する（デフォルトは/etc/apt/sources.list） |
| -d                      | パッケージのダウンロードのみ行う（installとともに）      |
| -y                      | 問い合わせに対して自動的にYesと回答する                   |
| --no-install-recommends | 必須ではない推奨パッケージはインストールしない             |
| --install-suggests      | 提案パッケージをインストールする                       |
| --reinstall             | インストール済みパッケージの再インストールを許可する       |

| サブコマンド              | 説明                                           |
|--------------------------|------------------------------------------------|
| update                   | パッケージリストを更新する                             |
| install パッケージ名     | パッケージをインストールする                          |
| remove パッケージ名      | パッケージを削除する（設定ファイルは残す）               |
| purge パッケージ名       | パッケージを完全に削除する                           |
| upgrade パッケージ名     | システムをアップグレードする（ファイル削除は伴わない）     |
| full-upgrade            | システムの全パッケージを最新にアップグレードする          |
| show パッケージ名        | 指定したパッケージに関する情報を表示する                 |
| list                    | パッケージのリストを表示する                           |
| list --installed        | インストールされたパッケージを一覧表示する               |
| list --upgradable       | アップグレード可能なパッケージを表示する                 |
| search キーワード       | 指定したキーワードを含むパッケージ情報を全文検索する       |
| depends パッケージ名    | パッケージの依存関係情報を表示する                       |
| autoremove              | 必要とされていないパッケージを自動的に削除する             |

**パッケージリストの更新**
```bash
sudo apt update
```
説明: パッケージリストを最新の状態に更新します。

**パッケージのインストール**
```bash
sudo apt install package_name
```
説明: 指定したパッケージをインストールします。

**パッケージの削除**
```bash
sudo apt remove package_name
```
説明: 指定したパッケージを削除します（設定ファイルは残る）。

**パッケージの完全削除**
```bash
sudo apt purge package_name
```
説明: 指定したパッケージとその設定ファイルを完全に削除します。

**システムのアップグレード**
```bash
sudo apt upgrade
```
説明: インストールされているすべてのパッケージを最新バージョンにアップグレードします。

**ディストリビューションのアップグレード**
```bash
sudo apt full-upgrade
```
説明: 依存関係を考慮してシステムを最新にアップグレードします。

**不要なパッケージの自動削除**
```bash
sudo apt autoremove
```
説明: もはや必要とされないパッケージを自動的に削除します。

**パッケージの情報表示**
```bash
apt show package_name
```
説明: 指定したパッケージに関する情報を表示します。

**パッケージの検索**
```bash
apt search キーワード
```
説明: 指定したキーワードを含むパッケージを検索します。

**依存関係の確認**
```bash
apt depends package_name
```
説明: 指定したパッケージの依存関係情報を表示します。


# RedHat系Linuxのパッケージ管理システムを扱うコマンド
RedHat系のLinuxのパッケージ管理システムを扱う代表的なコマンドにはrpm,yum,dnfなどがある。
# rpmコマンド
RPMパッケージ（.rpmファイル）をインストール、削除、検証、クエリ、アップグレードするために使用されます。
| オプション                   | 説明                                      |
|-----------------------------|-------------------------------------------|
| -i パッケージファイル名     | パッケージをインストールする               |
| -U パッケージファイル名     | パッケージをアップグレードする（なければインストールする） |
| -F パッケージファイル名     | パッケージがインストールされていればアップグレードする |

インストール / アップグレードモードで併用するオプション

| オプション                   | 説明                                      |
|-----------------------------|-------------------------------------------|
| -v                          | 詳細な情報を表示する                       |
| -h (--hash)                 | 進行状況を#で表示する                      |
| --nodeps                    | 依存関係を無視してインストールする          |
| --force                     | 既存のファイルを新しいものに置き換える      |
| --test                      | 実際にはインストールせずテストを実施する    |

アンインストールモード

| オプション                   | 説明                                      |
|-----------------------------|-------------------------------------------|
| -e パッケージ名             | パッケージをアンインストールする            |
| --nodeps                    | 依存関係を無視してアンインストールする      |

照会モード

| オプション                   | 説明                                      |
|-----------------------------|-------------------------------------------|
| -q パッケージ名             | 指定したパッケージがインストールされているか照会する |
| -a (--all)                  | インストール済みのすべてのパッケージを表示する |
| -f ファイル名               | 指定したファイルを含むパッケージ名を表示する |
| -p パッケージファイル名     | 対象としてパッケージファイルを指定する      |
| -c (--configfiles)          | 設定ファイルのみを表示する                  |
| -d (--docfiles)             | ドキュメントのみを表示する                  |
| -i (--info)                 | 指定したパッケージの情報を表示する          |
| -l (--list)                 | 指定したパッケージに含まれるファイルを表示する |
| -R (--requires)             | 指定したパッケージが依存しているファイル等を表示する |
| --changelog                 | 変更履歴を表示する                         |
**パッケージのインストール**
```bash
sudo rpm -i package_file.rpm
```
説明: 指定したパッケージをインストールします。

**パッケージのアップグレード**
```bash
sudo rpm -U package_file.rpm
```
説明: パッケージをアップグレードします（なければインストールします）。

**パッケージのアンインストール**
```bash
sudo rpm -e package_name
```
説明: 指定したパッケージをアンインストールします。

**パッケージの情報表示**
```bash
rpm -qi package_name
```
説明: 指定したパッケージの情報を表示します。

**インストール済みパッケージの一覧表示**
```bash
rpm -qa
```
説明: インストール済みのすべてのパッケージを表示します。

**パッケージに含まれるファイルの一覧表示**
```bash
rpm -ql package_name
```
説明: 指定したパッケージに含まれるファイルを表示します。

**パッケージの依存関係確認**
```bash
rpm -qR package_name
```
説明: 指定したパッケージが依存しているファイルを表示します。

**ファイルがどのパッケージに属するかを検索**
```bash
rpm -qf /path/to/file
```
説明: 指定したファイルを含むパッケージを表示します。

**パッケージの変更履歴表示**
```bash
rpm --changelog package_name
```
説明: 指定したパッケージの変更履歴を表示します。

**パッケージの検証**
```bash
rpm -V package_name
```
説明: 指定したパッケージの整合性を検証します。

# yumコマンド
リポジトリからパッケージのインストール、アップデート、削除、検索を行うために使います。依存関係を自動で解決し、システムのパッケージ管理を効率的に行います。
## 表4-7 yumコマンドの主なオプション

| サブコマンド               | 説明                                      |
|--------------------------|-----------------------------------------|
| check-update             | アップデート対象のパッケージリストを表示する |
| update [パッケージ名]    | 指定したパッケージをアップデートする       |
| install パッケージ名     | 指定したパッケージをインストールする       |
| remove パッケージ名      | 指定したパッケージをアンインストールする   |
| info パッケージ名        | 指定したパッケージの情報を表示する         |
| list                     | 全パッケージ情報をリスト表示する           |
| repolist                 | リポジトリ一覧を表示する                   |
| search キーワード        | パッケージ情報をキーワードで検索する       |
| search all キーワード    | パッケージ名および説明文をすべて検索する   |
| groups list              | パッケージグループをリスト表示する         |
| groups install グループ  | 指定したグループのパッケージをインストールする |

**パッケージリストの更新**
```bash
sudo yum check-update
```
説明: アップデート対象のパッケージリストを表示します。

**パッケージのインストール**
```bash
sudo yum install package_name
```
説明: 指定したパッケージをインストールします。

**パッケージのアップデート**
```bash
sudo yum update package_name
```
説明: 指定したパッケージをアップデートします。

**パッケージの削除**
```bash
sudo yum remove package_name
```
説明: 指定したパッケージをアンインストールします。

**パッケージの情報表示**
```bash
yum info package_name
```
説明: 指定したパッケージの情報を表示します。

**全パッケージ情報のリスト表示**
```bash
yum list
```
説明: 全パッケージ情報をリスト表示します。

**リポジトリ一覧の表示**
```bash
yum repolist
```
説明: リポジトリ一覧を表示します。

**パッケージの検索**
```bash
yum search キーワード
```
説明: パッケージ情報をキーワードで検索します。

**パッケージグループのリスト表示**
```bash
yum groups list
```
説明: パッケージグループをリスト表示します。

**パッケージグループのインストール**
```bash
sudo yum groups install グループ
```
説明: 指定したグループのパッケージをインストールします。