簡単Ubuntu管理 - aptツールの使い方

# Debianでのパッケージ管理：aptツールの使用方法

## aptツールの概要

Debianでは、パッケージ管理システムを管理するためにaptツールセットが使用されます。その中でも、`apt-get`は一般的なコマンドラインツールの一つです。また、コマンドラインとGUIの両方をサポートするツールとして、有名な`aptitude`があります。さらに、Linuxパッケージ管理コマンドは、`apt-get`、`apt-cache`、`apt-config`という3つのコマンドに分散されています。

2014年に初めて安定版がリリースされ、Ubuntu 16.04にも導入された`apt`コマンドは、これらの分散したコマンドの問題を解決しました。`apt`コマンドには、`apt-get`コマンドで最もよく使われる機能オプション、ならびに`apt-cache`や`apt-config`コマンドの機能も含まれています。これにより、ユーザーはパッケージ管理に必要な基本的なオプションを利用でき、`apt-get`から`apt-cache`や`apt-config`へと移動する必要がありません。

`apt`は、`apt-get`、`apt-cache`、`apt-config`の最も一般的なコマンドオプションを集約したものと言えます。`apt`はより精簡ですが、十分なコマンドオプションを備えており、オプションの整理方式も効率的です。さらに、進捗バーの表示や、アップグレード可能なパッケージ数の提示などの便利な機能も含まれています。ただし、`apt`と`apt-get`のコマンドオプションは一部似ていますが、完全な下位互換性はありません。

## aptコマンドと置き換えられたコマンド一覧

| aptコマンド      | 置き換えられたコマンド      | コマンドの機能                     |
|------------------|-----------------------------|-----------------------------------|
| apt install      | apt-get install             | パッケージのインストール          |
| apt remove       | apt-get remove              | パッケージの削除                 |
| apt purge        | apt-get purge               | パッケージと設定ファイルの削除    |
| apt update       | apt-get update              | リポジトリインデックスの更新      |
| apt upgrade      | apt-get upgrade             | アップグレード可能なパッケージの全てをアップグレード |
| apt autoremove   | apt-get autoremove          | 不要なパッケージの自動削除       |
| apt full-upgrade | apt-get dist-upgrade        | アップグレード時に依存関係を自動処理 |
| apt search       | apt-cache search            | アプリケーションの検索            |
| apt show         | apt-cache show              | インストール詳細の表示            |

## aptコマンドの使い方

```bash
apt [options] command
```

### 主なオプション

- `-h | --help`    ：ヘルプを表示
- `-v | --version` ：バージョンを表示
- `-y | --yes`     ：自動的に`yes`と回答
- `-q | --quiet`   ：静かモード

### 主なコマンド

- `list`        ：名前によるパッケージリスト表示
- `search`      ：パッケージ説明の検索
- `show | info` ：パッケージの詳細表示
- `install`     ：パッケージのインストール
- `remove`      ：パッケージの削除
- `autoremove`  ：不要な自動インストール済みパッケージの削除
- `update`      ：パッケージリストの更新（インデックスファイルの更新）
- `upgrade`     ：システムの更新（インストール/アップグレード）
- `full-upgrade`：システムの完全更新（削除/インストール/アップグレード）
- `edit-sources`：ソース情報ファイルの編集

### 破損したパッケージの修復インストールコマンド

```shell
apt --fix-broken install
```

### パッケージ一覧表示

#### すべてのパッケージをリスト

```shell
root@ubuntu22:~# apt list
```

#### インストール済みのパッケージをリスト

```shell
root@ubuntu22:~# apt list --installed
```

#### アップグレード可能なパッケージをリスト

```shell
root@ubuntu22:~# apt list --upgradeable
```

### 使用例：特定のパッケージ名またはワイルドカード指定

```shell
root@ubuntu22:~# apt list redis*
Listing... Done
redis-redisearch-doc/jammy 1:1.2.2-4 all
redis-redisearch/jammy 1:1.2.2-4 amd64
redis-sentinel/jammy 5:6.0.16-1ubuntu1 amd64
redis-server/jammy 5:6.0.16-1ubuntu1 amd64
redis-tools/jammy 5:6.0.16-1ubuntu1 amd64
redis/jammy 5:6.0.16-1ubuntu1 all
root@ubuntu22:~# apt list --installed redis*
Listing... Done
```

### 使用例：検索

#### パッケージ名と説明情報で検索

```shell
root@ubuntu22:~# apt search nginx
```

#### 正規表現での検索

```shell
root@ubuntu22:~# apt search "^ngin*"
```

#### パッケージ名のみで検索

```shell
root@ubuntu22:~# apt search --names-only nginx
```

### 使用例：パッケージの詳細情報クエリ

```shell
root@ubuntu22:~# apt info nginx
Package: nginx
Version: 1.18.0-6ubuntu14.1
Priority: optional
Section: web
Origin: Ubuntu
......
```

#### すべてのバージョンを表示

```shell
root@ubuntu22:~# apt show nginx -a
Package: nginx
Version: 1.18.0-6ubuntu14.1
Priority: optional
Section: web
Origin: Ubuntu
......
Package: nginx
Version: 1.18.0-6ubuntu14
Priority: optional
Section: web
Origin: Ubuntu
......
```

### 使用例：パッケージのインストール

```shell
root@ubuntu22:~# apt install nginx
```

#### 複数のパッケージを同時にインストール

```shell
root@ubuntu22:~# apt install nginx redis -y
```

#### 特定バージョンのパッケージをインストール（デフォルトでは最新版をインストール）

```shell
root@ubuntu22:~# apt install nginx=1.14.0-0ubuntu1 
```

#### インストール済みの場合はアップグレードしないオプション

```shell
root@ubuntu22:~# apt install nginx --no-upgrade   
```

#### 既にインストールされている場合のみアップグレード

```shell
root@ubuntu22:~# apt install nginx --only-upgrade  
```

### 使用例：パッケージの削除

#### 特定パッケージの削除

```shell
root@ubuntu22:~# apt remove -y nginx
```

#### 依存関係のある不要なパッケージの自動削除

```shell
root@ubuntu22:~# apt autoremove nginx
```

### 使用例：更新とアップグレード

#### 情報の更新（実際の更新は行わない）

```shell
root@ubuntu22:~# apt update
Hit:1 https://mirrors.aliyun.com/ubuntu jammy InRelease
Get:2 https://mirrors.aliyun.com/ubuntu jammy-updates InRelease [114 kB]
Get:3 https://mirrors.aliyun.com/ubuntu jammy-backports InRelease [99.8 kB]
......
......
Fetched 1,853 kB in 4s (425 kB/s)                              
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
32 packages can be upgraded. Run 'apt list --upgradable' to see them.
```

#### インストール済みのすべてのパッケージをアップグレード

```shell
root@ubuntu22:~# apt upgrade
```

#### 特定パッケージのアップグレード

```shell
root@ubuntu22:~# apt install --only-upgrade nginx
```

### 使用例：ソースの編集

```shell
root@ubuntu22:~# apt edit-sources
root@ubuntu22:~# vim /etc/apt/sources.list
```

### 使用例：キャッシュ情報

#### 現在のシステムにインストールされているパッケージの統計情報を表示

```shell
root@ubuntu22:~# apt-cache stats
Total package names: 115071 (3,222 k)
Total package structures: 102921 (4,529 k)
 Normal packages: 67637
......
```

#### 指定ソフトウェアのすべてのバージョンを表示

```shell
root@ubuntu22:~# apt-cache madison nginx
     nginx | 1.18.0-6ubuntu14.1 | https://mirrors.aliyun.com/ubuntu jammy-updates/main amd64 Packages
     nginx | 1.18.0-6ubuntu14.1 | https://mirrors.aliyun.com/ubuntu jammy-security/main amd64 Packages
     nginx | 1.18.0-6ubuntu14 | https://mirrors.aliyun.com/ubuntu jammy/main amd64 Packages
```

### 使用例：依存関係

#### パッケージの依存関係を確認

```shell
root@ubuntu22:~# apt-cache depends nginx
nginx
 |Depends: nginx-core
 |Depends: nginx-full
 ......
 Breaks: <libnginx-mod-http-lua>
```

#### パッケージが何に依存されているかを確認

```shell
root@ubuntu22:~# apt-cache rdepends nginx | head
nginx
Reverse Depends:
 nginx-core
 nginx-light
 nginx-full
 nginx-extras
 libnginx-mod-stream-geoip
   nginx-core
   nginx-extras
```

### APTパッケージインデックス設定ファイル

設定ファイルを更新した後、`apt update` を実行する必要があります。

- `/etc/apt/sources.list`
- `/etc/apt/sources.list.d/`

### 使用例：設定ファイルの構成

#### 設定ファイルフォーマット説明

```plaintext
deb URL section1 section2
```

#### フィールド説明

- `deb`：固定開頭、これはバイナリパッケージのリポジトリを示します。`deb-src`で始まる場合はソースコードリポジトリを示します。
- `URL`：リポジトリのURLは、ネットワークアドレスでもローカルミラーアドレスでもかまいません。
- `section1`：Ubuntuバージョンのコードネームを指定します。`lsb_release -sc` コマンドを使用して確認できます。または`cat /etc/os-release` でも確認できます。
- `section2`：ソフトウェアのカテゴリを指定します。`main`（完全なフリーソフトウェア）、`restricted`（不完全なフリーソフトウェア）、`universe`（コミュニティサポートのソフトウェア）、`multiverse`（非自由ソフトウェア）。

#### 使用例：リポジトリの設定

```shell
root@ubuntu22:~# cat /etc/apt/sources.list
deb https://mirrors.aliyun.com/ubuntu jammy main restricted # 主リポジトリのmainおよびrestrictedのソースを使用
# deb-src https://mirrors.aliyun.com/ubuntu jammy main restricted
deb https://mirrors.aliyun.com/ubuntu jammy-updates main restricted
# deb-src https://mirrors.aliyun.com/ubuntu jammy-updates main restricted
```

### Ubuntuリポジトリの重要ディレクトリ

Ubuntuリポジトリには、`dists` と `pool` という2つの重要なディレクトリがあります。

- `dists` にはリポジトリのメタデータが含まれます。これには、パッケージの名前、対応するアーキテクチャ、バージョン番号、依存関係などが含まれます。

```shell
root@ubuntu22:~# tree /cdrom/dists/
/cdrom/dists/
├── jammy
│   ├── main
│   │   ├── binary-amd64
│   │   │   ├── Packages.gz
│   │   │   └── Release
│   │   ├── binary-i386
│   │   │   ├── Packages.gz
│   │   │   └── Release
│   │   └── source
│   ├── Release
│   ├── Release.gpg
│   └── restricted
│       ├── binary-amd64
│       │   ├── Packages.gz
│       │   └── Release
│       ├── binary-i386
│       │   ├── Packages.gz
│       │   └── Release
│       └── source
├── stable -> jammy
└── unstable -> jammy
```

### aptコマンド操作のログファイル

```plaintext
/var/log/dpkg.log
```