パッケージ管理コマンド(apt)についてイラストでちょっとまとめる

こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。

今回は、タイトルの通りパッケージ管理コマンド(apt)のサブコマンドの一部をイラストでまとめていきたいと思います。少しでも参考になれば幸いです。
※後輩？に説明をする機会があり、その時にまとめたものを「せっかくだからパブリックで共有しますか」の精神です。
※2024/4/7現在、一部分のみのまとめですが今後更新するかもです。

# ここで見ていくaptのサブコマンド達

|サブコマンド|意味|
|:--|:--|
|install|パッケージをインストール|
|update|update は、設定されたすべての取得元からパッケージ情報をダウンロードするために使用|
|upgrade|upgrade は、sources.listで設定された取得元からシステムに現在インストール済みの全てのパッケージで利用可能なアップグレードをインストールするために使用|
|remove|設定ファイルを残してパッケージをアンインストール|
|purge|設定ファイルも含めパッケージをアンインストール|

参考：https://manpages.ubuntu.com/manpages/focal/ja/man8/apt.8.html

# 解説
## apt update

パッケージ情報を取得し、新しいバージョンがリリースされているかどうか等の情報を更新します。ただし、実際のパッケージのインストールやアップグレードは行いません。情報更新はリポジトリに対して確認しにいってます。
リポジトリはかなり大まかに公式のリポジトリとサードパーティ製のリポジトリがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/d9780dda-cf11-b17f-f491-fdde7d037c46.png)

パッケージとは：
実行プログラムや、設定ファイル、マニュアル・ドキュメント等を1つにまとめたものを示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/43f27f08-cbb3-2ff1-b43b-d53e08b77c82.png)

### 公式リポジトリ
Ubuntuの場合、公式リポジトリは/etc/apt/source.listで管理されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/5edc34d9-7da1-e1c8-4f88-9e58becb108a.png)
source.listの中身を見てみると以下のようになってます。
debはパッケージ情報を取得するためのapt用のコマンドとでも思っておけばいいのかなぁと思います。
その先のhttpから始まるものがリポジトリの場所という認識です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/83a9db2e-8b1e-b411-41d4-8a1d59b4321b.png)

### サードパーティリポジトリ
サードパーティのリポジトリは自分で登録をしてあげる必要があります。
基本的に/etc/apt/source.d/配下に.listを作成してあげるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/f6c7d070-63b3-db3e-218b-03b989863fc6.png)


dockerを具体例としてみてみます。
docker公式サイトを見てみると以下の部分があるかと思います。これを実行すると公式リポジトリでいうところのsource.list的なファイルが作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/c461613f-7acc-c245-584e-224895d71657.png)

https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository

実際に試してみた図が以下です。docker.listというファイルが作成されていることが確認できます。
catで中身を確認してみると、公式リポジトリを管理しているsource.listの中身と同じようなフォーマットで記述されていることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/2e53c876-1b3e-0ac1-eb6c-9837c7e9876f.png)

サードパーティリポジトリのlistを作成していると、apt updateでdockerについても確認しに行っているようなログが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/22767506-60e3-9d00-9125-a3d961afefa0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/a5ead1d2-089e-a001-15be-cebaaa57289c.png)

# apt upgrade

システムにインストールされているパッケージの新しいバージョンがリリースされている場合に、それらのパッケージを最新バージョンにアップグレードします。
例えばローカルにdocker v1.0.0が稼働しており、リポジトリを見るとdocker v1.0.1がある場合、これを実行することでローカルのdockerをv1.0.1とすることが出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/940ab22b-ecd5-bc73-39de-668ca2fd55cf.png)

# apt remove / apt purge

例えばapacheをubuntuにインストールしており、それをremove/purgeするときのざっくりとしたイメージです。
removeは実行プログラムだけ削除して、その他のファイル（例えば/var/www/html.index）やディレクトリまでは削除されない。一方でpurgeを実行すると実行ファイルやファイルを全部きれいに削除する感じになるのかなと。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/877c469e-e77c-2b74-0ca8-0b1f4399c68c.png)