Linux パッケージ管理 apt / dpkg / yum / rpm / gem チートシート

# `$ apt`
Advanced Packaging Tool

Debian 系 Linux （Ubuntu、Linux Mint）で使われるパッケージ管理システム。

パッケージのインストール、アップデート、検索、削除を行うことができる。依存関係のあるパッケージも自動で解決される。

インストール中にプログレスバーが表示されるなどのユーザーライクな設計によって開発されているため、日常的に使用するパケージ管理に適している。

一方で、従来から存在する `$ apt-get` コマンドと比べて比較的新しいツールであるため、出力形式などが今後のアップデート時に変更される可能性がある。

そのため、シェルスクリプトでは依然として枯れた技術である `$ apt-get` を使用することが推奨されている。

また、一部の高度な操作（例：`$ apt-get source` や `$ apt-get build-dep` など）は `$ apt-get` にしか存在しないことがある。

:::note info
日常的なパッケージ管理では `$ apt` が推奨。
シェルスクリプトでは `$ apt-get` が推奨。
:::

[`$ apt` と `$ apt-get` の比較表](#-apt-get-との比較)

## `$ apt install`


```console:パッケージをインストールする
$ sudo apt install パッケージ名
```

## `$ apt remove`

```console:パッケージをアンインストールする
$ sudo apt remove パッケージ名
```

[`$ apt purge`](#-apt-purge)コマンドと異なり、パッケージのみが削除され、設定ファイルは残る。

## `$ apt purge`

```console:パッケージを設定ファイルを含めて削除する
$ sudo apt purge パッケージ名
```

## `$ apt update`

リポジトリから最新のパッケージ情報を取得（fetch）する。インストール済みのパッケージはアップデートされない。

```console:リポジトリを更新する
$ sudo apt update
```

## `$ apt upgrade`

[`$ apt update`](#-apt-update) で更新したパッケージ情報をもとに、インストール済みのファイルをアップデートする。

```console:パッケージをアップデートする
$ sudo apt upgrade
```

## `$ apt full-upgrade`

インストールされている全てのパッケージを最新バージョンにアップデートし、依存関係の解決も行う。

[`$ apt upgrade`](#-apt-upgrade) と異なり、新しいバージョンのパッケージをインストールするために、古いパッケージや依存関係が削除される場合がある。

```console:パッケージをアップデートする（依存関係の解決行う）
$ sudo apt full-upgrade
```

:::note info
`$ apt upgrade` では、既存のパッケージが削除されることはない。
`$ apt full-upgrade` は必要に応じて依存関係を変更する。
:::

## `$ apt autoremove` / `$ apt clean`

`$ apt autoremove` で依存関係で不要になったパッケージファイルを削除し、`$ apt clean` では、キャッシュされた `/var/cache/apt/archives/` の `***.deb` ファイルを削除する。

```console:不要になったパッケージファイル、キャッシュを削除する
$ sudo apt autoremove
$ sudo apt clean
```

## `$ apt search`

```console:リポジトリ内のパッケージを検索する
$ apt search パッケージ名
```

## `$ apt list`

```console:パッケージを一覧表示する
$ apt list 
```

```console:インストール済みパッケージを一覧表示する
$ apt list --installed
```

## `$ apt show`

```console:指定したパッケージの情報を表示する
$ apt show パッケージ名
```


## `$ apt-get` との比較

| 操作 | `$ apt-get` | `$ apt` |
|:-|:-|:-|
| パッケージのインストール | `$ apt-get install` | `$ apt install` |
| リポジトリの更新 | `$ apt-get update` | `$ apt update` |
| パッケージのアップデート | `$ apt-get upgrade` | `$ apt upgrade` |
| パッケージのアップデート<br>（依存関係の解決を含む） | `$ apt-get dist-upgrade`<br>distribution upgrade | `$ apt full-upgrade` |
| パッケージの削除 | `$ apt-get remove` | `$ apt remove` |
| パッケージの検索 | `$ apt-cache search` | `$ apt search` |
| システムの情報表示 | - | `$ apt list` / `$ apt show` |

## リポジトリの設定

パッケージのインストール元であるリポジトリの URL などは 

- `/etc/apt/sources.list`
- `/etc/apt/sources.list.d/` ディレクトリ配下の `***.list` ファイル

で管理される。

Ubuntu では、公式パッケージのリポジトリを `/etc/apt/sources.list` で管理し、サードパーティ製のパッケージは `/etc/apt/sources.list.d/` ディレクトリで管理される。

以下のような形式のテキストファイルになっている。

```text:パッケージ.list
deb URL バージョン 種類
deb-src URL バージョン 種類
```

`deb` ： バイナリ形式で取得（通常のインストール）
`deb-src` ： ソースコードで取得（ダウンロードのみ）
`種類` ： `main`（公式）、`universe`（コミュニティによってサポート）、`restricted`、`multiverse`、`contrib`、`non-free`


# `$ dpkg`

[`$ apt`](#-apt) 同様に、Debian 系 Linux（Ubuntu、Linux Mint） で利用されるパッケージ管理コマンド。

パッケージを直接ダウンロードする機能はなく、手動でダウンロードした **`***.deb`** ファイルをインストールするために利用される。

**依存関係を自動的に解決しない** ため、依存するライブラリやパッケージを手動でインストールする必要がある。

**`$ apt` よりも低級** な操作になるため、日常的に使用されるというよりも、トラブルシューティング、その他特殊な状況でのみ利用される。

## `$ dpkg -i`

```console:パッケージをインストールする
$ dpkg -i パッケージ.deb
$ dpkg --install パッケージ.deb
```

## `$ dpkg -r`

```console:パッケージをアンインストールする
$ dpkg -r パッケージ名
$ dpkg --remove パッケージ名
```

[`$ dpkg -P`](#-dpkg--p) コマンドと異なり、パッケージのみが削除され、設定ファイルは残る。

## `$ dpkg -P`

```console:パッケージを設定ファイルを含めて削除する
$ dpkg -P パッケージ名
$ dpkg --purge パッケージ名
```

## `$ dpkg -l`

```console:インストール済みのパッケージを一覧表示する
$ dpkg -l
$ dpkg --list
```

## `$ dpkg -S`

```console:指定したファイルがどのパッケージからインストールされたものかを表示する
$ dpkg -S ファイル名
$ dpkg --search ファイル名
```

## `$ dpkg -L`


```console:指定したパッケージに含まれるファイルを一覧表示する
$ dpkg -L パッケージ名
$ dpkg --listfiles パッケージ名
```

## `$ dpkg -s`

```console:指定したパッケージの情報を表示する
$ dpkg -s パッケージ名
$ dpkg --status パッケージ名
```

## `$ dpkg -C`

インストール時のエラーによって、部分的にインストールされてしまったパッケージを検索することができる。

```console:部分的にインストールされたパッケージを検索する
$ dpkg -C
$ dpkg --audit
```

##  `$ dpkg-reconfigure`

```console:インストール済みパッケージに対して、インストール時の設定を再設定する
$ dpkg-reconfigure パッケージ名
```



# `$ yum`
Yellowdog Updater, Modified

**RPM** ベースの Linux （Red Hat Enterprise Linux、CentOS、Fedora）で利用されるパッケージ管理ツール。

**依存関係のあるパッケージも自動で解決される**。

また、グループ単位でパッケージをインストールすることができる。

`$ dnf` は `$ yum` よりも新しいコマンドで、依存関係の解決や速度の改善などがより高機能になっている。

:::note info
後継版の `$ dnf` コマンドは、ほとんど `$ yum` と同じように使える
:::

## `$ yumdownloader`

`***.rpm` ファイルをダウンロードする。**インストールまでは行わない**。

```console:rpm ファイルをダウンロードする（インストールはしない）
$ yumdownloader パッケージ名
```

```console:rpm ファイルをダウンロードする（依存関係のあるファイルも含める）
$ yumdownloader --resolve パッケージ名
```

## `$ yum install`

```console:パッケージをインストールする
$ yum install パッケージ
```

## `$ yum groupinstall` / `$ yum groups install`

```console:指定したグループのパッケージをインストールする
$ yum groupinstall グループ名
$ yum groups install グループ名
```


## `$ yum remove` / `$ yum erase`

```console:パッケージを削除する
$ yum remove パッケージ名
$ yum erase パッケージ名
```

## `$ yum check-update` / `$ yum list updates`

```console:アップデート可能なパッケージを確認する
$ yum -check-update
$ yum list updates
```

## `$ yum update`

```console:インストール済みのパッケージをすべてアップデートする
$ yum update
```

```console:指定されたパッケージをアップデートする
$ yum update パッケージ
```


## `$ yum info`

```console:パッケージ情報を表示する
$ yum info パッケージ名
```

## `$ yum list`

```console:全ての利用可能なパッケージを一覧表示する
$ yum list
```

## `$ yum list installed`

```console:インストール済みパッケージを一覧表示する
$ yum list
```

## `$ yum groups list`

```console:パッケージグループを一覧表示する
$ yum groups list
```

## `$ yum search`

```console:パッケージ情報を検索する
$ yum search キーワード
```

## `$ yum repolist`

```console:リポジトリ一覧を表示する
$ yum repolist
```



## リポジトリの設定

`/etc/yum.repos.d/` ディレクトリ配下にある `***.repo` ファイルで管理される。

## 設定

`/etc/yum.conf` ファイルで管理される。

# `$ rpm`
Red Hat Package Manager

Red Hat 系ディストリビューション（RHEL、CentOS、Fedora）で利用されるパッケージ管理コマンド。

RPM 形式のパッケージは、特定のソフトウェアをインストールするためのバイナリファイルやスクリプトがまとめられたアーカイブ形式のファイル（**`***.rpm`**）になっている。

**依存関係を自動的に解決しない** ため、依存するライブラリやパッケージを手動でインストールする必要がある。

**`$ yum` よりも低級** な操作になるため、日常的に使用されるというよりも、トラブルシューティング、その他特殊な状況でのみ利用される。

## `$ rpm -i`

```console:パッケージをインストールする
$ rpm -i パッケージ.rpm
$ rpm --install パッケージ.rpm
```

```console:詳細情報を表示しながらインストール
$ rpm -ivh パッケージ.rpm
```

```console:実際にはインストールせず、不足しているライブラリがないかなどをチェックする
$ rpm -i --test パッケージ.rpm
```

## `$ rpm -U`

パッケージがインストールされていない場合、インストールもしてくれる。

```console:インストール済みのパッケージをアップデートする
$ rpm -U パッケージ.rpm
$ rpm --upgrade パッケージ.rpm
```

## `$ rpm -F`

指定したパッケージがインストールされていない場合、何も行わない。

```console:パッケージがインストール済みの場合のみ、アップデートを行う
$ rpm -F パッケージ.rpm
$ rpm --freshen パッケージ.rpm
```

## `$ rpm -e`

```console:パッケージを削除する
$ rpm -e パッケージ名
$ rpm --erase パッケージ名
```

## `$ rpm -q`

```console:指定したパッケージがインストール済みか照会する
$ rpm -q パッケージ
$ rpm --query パッケージ
```

`-a` / `--all` ： インストール済みのすべてのパッケージを表示
`-f ファイル名` / `--file ファイル名` ： 指定したファイルが含まれるパッケージ名を表示 
`-i` / `--info` ： パッケージの詳細情報を表示
`-l` / `--list` ： パッケージに含まれるファイル一覧を表示
`-R` / `--requires` ： パッケージが依存するパッケージを表示
`-p` / `--package` ： インストールの有無に関わらず、指定したパッケージの情報を表示

```console:以下の違いに注意
$ rpm -i パッケージ     # パッケージのインストール
$ rpm -q -i パッケージ  # パッケージの詳細情報を表示
$ rpm -qi パッケージ    # パッケージの詳細情報を表示
```

## `$ rpm -v`

詳細情報を表示する。

```console:詳細情報を表示しながらパッケージをインストールする
$ rpm -iv パッケージ.rpm
```

## `$ rpm -h` / `$ rpm --hash`

進行状況を `#` で表示してくれる。

```console:進行状況を表示しながらパッケージをインストールする
$ rpm -ih パッケージ.rpm
```

# `$ gem`

Ruby で記述されたライブラリを **Gem** と呼び、Ruby のパッケージ管理システムを **RubyGems** と言う。

RubyGems を操作するためには `$ gem` コマンドを使用する。`$ gem`コマンドを利用することで Gem のインストール、更新、検索、アンイントールが可能。

デフォルトで公式リポジトリ（RubyGems.org）が使用される。

## `$ gem install`

```console:Gem をインストールする
$ gem install Gem名
```

```console:例
$ gem install cocoapods
```

## `$ gem list`

```$console:インストール済みのGemを確認する
$ gem list
```

## `$ gem uninstall`

```console:Gem をアンインストールする
$ gem uninstall Gem名
```

## `$ gem update`

```console:すべてのインストール済みの Gem をアップデートする
$ gem update
```

引数に特定の Gem 名を与えると、指定された Gem のみアップデートを行う。

```console:指定された Gem をアップデートする
$ gem update Gem名
```

## `$ gem search`

公式の Gem リポジトリである RubyGems.org からキーワードを含むライブラリ、パッケージを検索する。

```console:パッケージを検索する
$ gem search 検索ワード
```