Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Linux ディストリビューション実践ガイド アウトライン

現代のサーバーインフラ、クラウド、コンテナ開発において、Linux は不可欠な基盤技術です。 Linux と一口に言っても、安定性を最優先する Debian、開発効率と汎用性に優れた Ubuntu、コンテナに特化した超軽量の Alpine Linux、そして AWS クラウドに最適化された Amazon Linux など、目的や思想に応じた多様なディストリビューションが存在します。

本書では、これらの主要ディストリビューションについて、基本概念、パッケージ管理コマンド、推奨される用途、メリット・デメリットを分かりやすく解説します。

章構成

  • 1. Linuxの基本とディストリビューション

    Linux カーネルと OS の全体像、GNU ツール群の役割、ディストリビューションの系譜(Debian系、Red Hat系、独自系)、パッケージ管理システムの基本概念を学びます。

  • 2. Debian GNU/Linux

    完全なフリーソフトウェア精神と堅牢な安定性を誇る Debian の設計思想、リリースモデル(Stable / Testing / Unstable)、APT / dpkg の基本コマンド、用途、メリット・デメリットを解説します。

  • 3. Ubuntu

    Debian をベースに利便性を追求した Ubuntu の特徴、LTS(長期サポート)リリースサイクル、APT や snap コマンド、用途、メリット・デメリットを解説します。

  • 4. Alpine Linux

    わずか約 5MB の超軽量フットプリントを持つ Alpine Linux の構造、musl libc と BusyBox の採用理由、apk パッケージ管理コマンド、Docker コンテナでの用途、メリット・デメリットを解説します。

  • 5. Amazon Linux

    AWS クラウド環境に特化した Amazon Linux(AL2 / AL2023)の特徴、Fedora / RHEL 由来のアーキテクチャ、DNF / YUM コマンド、AWS サービスとの統合、用途、メリット・デメリットを解説します。

  • 6. 主要ディストリビューションの比較と選び方

    Debian、Ubuntu、Alpine、Amazon Linux のスペック・思想・運用性を横断的に対比した一覧表と、開発環境・本番サーバー・コンテナ等のユースケース別選定フローを示します。

  • 7. 実践Linux共通必須コマンド集

    ディストリビューションに依存しない Linux 共通の必須コマンド(ファイル操作、権限・所有者管理、プロセス・リソース監視、ネットワーク確認、systemctl)をチートシート形式でまとめます。

1. Linuxの基本とディストリビューション

Linuxとは何か

Linux(リナックス)は、現在世界中の Web サーバー、クラウド基盤、スマートフォン(Android)、IoT 機器、スーパーコンピュータに至るまで、極めて広範なシステムで中核を担っているオペレーティングシステム(OS)です。

私たちが日常会話で「Linux」と呼ぶ場合、厳密にはコンピュータのハードウェア(CPU、メモリ、ディスク等)を直接制御する「カーネル(Kernel: 中核プログラム)」を指します。 Linux カーネルは、1991年にリーナス・トーバルズ(Linus Torvalds)氏によってオープンソースとして公開されました。

しかし、カーネル単体では人間がコマンドを入力したり、ファイルを操作したりすることはできません。 実際に人間やアプリケーションが使える OS として成立させるためには、シェル(bash や zsh 等)や基本コマンド群(ls、cp、rm 等)、各種ライブラリ(glibc 等)、設定ファイル、インストーラーなどを組み合わせる必要があります。

GNU プロジェクトと Linux OS

Linux が実用的な OS として普及した背景には、「GNU(グニュー)プロジェクト」の存在があります。 リチャード・ストールマン氏が率いる GNU プロジェクトは、すべての人が自由に利用・改変・再配布できるフリーソフトウェアの OS 環境を作る運動を展開しており、コンパイラ(GCC)やシェル(Bash)、標準 C ライブラリなどを開発していました。

これら GNU の豊富なツール群と、リーナス氏が開発した Linux カーネルが結合することで、完全なフリーの OS 環境が誕生しました。 そのため、正式には「GNU/Linux」とも呼ばれます。

ディストリビューション(配布形態)の役割

Linux カーネルと無数のソフトウェアを集め、誰でも簡単にインストールして運用できるようにパッケージ化した配布形態のことを ディストリビューション(Distribution、略称:ディストロ) と呼びます。

ディストリビューションごとに以下のような違いや個性があります。

  • 対象ユーザー・設計思想: 安定性重視、最新機能の追従、デスクトップ用途、コンテナ特化など。
  • パッケージ管理システム: ソフトウェアのインストール・更新・削除を管理する仕組み(APT、DNF、APK など)。
  • 初期設定と同梱ソフトウェア: 標準でインストールされるサーバーソフトやツール類。

ディストリビューションの三大系統

Linux ディストリビューションは、数千種類以上存在しますが、その多くはいくつかの祖先から派生した「系統(ファミリー)」に分類されます。

Linux カーネル
  ├── Debian 系
  │     ├── Debian GNU/Linux (堅牢・自由)
  │     └── Ubuntu (使いやすさ・クラウド標準)
  │
  ├── Red Hat 系
  │     ├── Red Hat Enterprise Linux (RHEL)
  │     ├── Fedora (先進的機能の実験場)
  │     └── Amazon Linux (AWS クラウド最適化)
  │
  └── 独立系・コンテナ特化系
        └── Alpine Linux (超軽量・musl libc / BusyBox)
  • Debian 系: 安定性と自由なソフトウェアを重視する系統です。.deb 形式のパッケージと apt コマンドを使用します。Ubuntu や Linux Mint、Raspberry Pi OS など多くの派生ディストリビューションが存在します。

  • Red Hat 系: 企業向けエンタープライズ市場で確固たる地位を築く系統です。.rpm 形式のパッケージと dnf(旧 yum)コマンドを使用します。商用の RHEL、開発版の Fedora、AWS に特化した Amazon Linux などが含まれます。

  • 独立系(コンテナ特化・独自設計): 従来のディストリビューションの重厚な設計を見直し、特定の目的(Docker コンテナの軽量化など)に特化した系統です。代表格が Alpine Linux で、独自の apk パッケージマネージャーと軽量ライブラリを採用しています。

パッケージ管理の基本概念

Linux では、Windows の .exe や macOS の .dmg のように各サイトから手動でインストーラーをダウンロードするのではなく、「リポジトリ(公式保管庫)」からパッケージマネージャーを通じて一括管理する のが基本です。

  • 依存関係の自動解決: あるソフトウェアを動かすために別のライブラリが必要な場合、パッケージマネージャーが自動的に検出してまとめてインストールしてくれます。
  • 一括セキュリティ更新: コマンドを 1 行実行するだけで、OS 内のすべてのソフトウェアとカーネルを最新の安全な状態にアップデートできます。

次章以降では、現代のシステム構築で必ず押さえておくべき主要ディストリビューション(Debian、Ubuntu、Alpine、Amazon Linux)の具体的な特徴とコマンド操作を詳しく見ていきます。

2. Debian GNU/Linux

Debianの概要と設計思想

Debian(デビアン、正式名称:Debian GNU/Linux)は、1993年にイアン・マードック(Ian Murdock)氏によって立ち上げられた、現存する最も歴史のあるオープンソース・ディストリビューションの1つです。 特定の営利企業によって所有されておらず、世界中のボランティア開発者コミュニティによって民主的かつ厳格な規約のもとで開発・維持されています。

Debian の根底には「Debian 社会契約」と「Debian フリーソフトウェアガイドライン(DFSG)」という厳格な哲学があります。 ソースコードが完全に公開され、改変や再配布が無条件で認められている完全なフリーソフトウェアのみを公式リポジトリに収録することを徹底しています。

3つのリリースモデル

Debian は、ソフトウェアのライフサイクルと安定性に応じて 3 つのブランチ(版)を提供しています。

ブランチ名特徴と位置づけ想定される用途
Stable(安定版)極めて徹底したテストを経て凍結された版。新機能は追加されず、セキュリティ修正と重大なバグ修正のみ適用される。コードネーム(bookworm, trixie など)が付与される。本番サーバー、ミッションクリティカル基盤、長期運用システム
Testing(テスト版)将来の Stable 候補となるパッケージが集まる版。ある程度安定しているが、稀に不整合が起こる。先進的なデスクトップ環境、次期バージョンの事前検証
Unstable(不安定版)最新の開発中パッケージが投入される版。常に「sid」というコードネーム固定で呼ばれる。開発者向け、新機能の実験

一般的なサーバーや運用環境では、必ず Stable(安定版) を使用します。

主な用途

  • 高可用性・無停止 Web サーバー / データベースサーバー: OS 起因の不具合や予期せぬ挙動変更が極めて少ないため、長期にわたり安定稼働が求められる本番インフラに最適です。
  • Docker コンテナの軽量かつ高信頼なベースイメージ: 公式の debian:bookworm-slim などは、不要なツールを削ぎ落とした軽量かつ互換性の高いコンテナ基盤として広く愛用されています。
  • 派生ディストリビューションの基礎OS: Ubuntu をはじめ、教育・IoT 向けの Raspberry Pi OS(旧 Raspbian)や、セキュリティ診断用の Kali Linux などの土台となっています。

基本的なコマンド一覧(APT と dpkg)

Debian では、パッケージの形式に .deb を採用しており、高レベルなパッケージマネージャーである apt(Advanced Package Tool)および低レベルツールの dpkg を使用します。

APT コマンド(日常的なパッケージ管理)

日常的な操作は、依存関係を自動解決してくれる apt コマンドで完結します(管理者権限 sudo が必要です)。

# パッケージ一覧(メタデータ)の最新化
sudo apt update

# インストール済み全パッケージを最新の安定版へ更新
sudo apt upgrade -y

# パッケージの検索
apt search nginx

# パッケージの詳細情報の確認
apt show nginx

# パッケージのインストール
sudo apt install -y nginx curl git

# パッケージのアンインストール(設定ファイルは残す)
sudo apt remove nginx

# パッケージの完全削除(設定ファイルも含めて削除)
sudo apt purge nginx

# 不要になった依存パッケージの自動クリーンアップ
sudo apt autoremove -y

# ダウンロードしたパッケージキャッシュの削除
sudo apt clean

dpkg コマンド(ローカルの .deb ファイル操作)

手動でダウンロードした .deb ファイルを直接インストール・検査する際に使用します。

# ローカルの .deb ファイルをインストール
sudo dpkg -i package-name.deb

# インストール済みパッケージの一覧表示
dpkg -l

# 特定のパッケージがインストール済みか確認
dpkg -l | grep nginx

# 特定のファイルがどのパッケージに含まれているか調査
dpkg -S /etc/nginx/nginx.conf

メリット・デメリット

メリット

  • 卓越した安定性と信頼性: リリース前に長期間の「コードフリーズ(新機能追加停止)」と徹底的なテストが行われるため、稼働中にクラッシュするリスクが極めて低いです。
  • 圧倒的なパッケージ数とアーキテクチャ対応: 公式リポジトリに数万点以上のパッケージが登録されており、x86_64 のみならず ARM、RISC-V など多様なハードウェア環境を幅広くサポートしています。
  • 軽量かつ堅牢なシステム構成: 余計な常駐プロセスやバックグラウンドサービスが初期状態で無効化されており、最小構成でクリーンなサーバー環境を構築できます。
  • 企業の思惑に左右されない透明性: 商用ベンダーのライセンス変更や方針転換に影響されず、永続的にオープンソースとして利用し続けることができます。

デメリット

  • ソフトウェアのバージョンが古い(保守的): 安定性を最優先するため、Stable 版に収録されているプログラミング言語やミドルウェアのバージョンは、最新版より数世代古いことが一般的です。最新の言語機能やツールを即座に使いたい開発環境には不向きな場合があります。
  • プロプライエタリ(非オープンソース)ドライバの扱い: 完全フリーの哲学に基づいているため、Wi-Fi チップセットや最新 GPU(NVIDIA 等)の非フリードライバをインストールする際、明示的に追加リポジトリ(non-free-firmware)を有効化する手間が発生します。
  • デスクトップ用途では初期設定が必要: Ubuntu などの親切なインストーラーと比べ、日本語入力や各種デスクトップ設定を自力で調整する必要があります。

3. Ubuntu

Ubuntuの概要と特徴

Ubuntu(ウブントゥ)は、南アフリカの実業家マーク・シャトルワース氏と彼が設立した英 Canonical(カノニカル)社によって、2004年に開始されたディストリビューションです。 アフリカのズールー語で「他者への思いやり」「人間らしさ(Linux for Human Beings)」を意味する言葉を冠しており、誰でも容易に導入・操作できる親切な設計を追求しています。

Ubuntu の最大の特徴は、Debian の強固なパッケージ基盤を活用しながら、最新のソフトウェアと使いやすさを融合させた点 にあります。 現在、世界中のクラウド(AWS、Azure、GCP)上で起動される仮想マシンの大半で Ubuntu が選択されており、現代の開発・運用においてデファクトスタンダード(事実上の標準)となっています。

リリースサイクルとLTS(長期サポート)

Ubuntu は、極めて規則正しいリリースサイクルを採用しています。

  • 通常版(Interim Release): 毎年 4 月と 10 月の「年 2 回(6 か月ごと)」にリリースされます(バージョン番号は「西暦年.月」、例:23.10 や 24.10)。サポート期間は 9 か月間と短く、最新のソフトウェアやカーネルを試したい開発者向けです。
  • LTS版(Long Term Support: 長期サポート版): 偶数年の 4 月(2 年ごと) にリリースされます(例:20.04 LTS, 22.04 LTS, 24.04 LTS)。標準で 5 年間 のセキュリティ更新とサポートが提供され、企業向けの ESM(Extended Security Maintenance)を利用すれば最長 10〜12 年間のサポートが可能です。

実務の本番サーバーや開発環境では、特別な理由がない限り必ず LTS 版 を選択します。

主な用途

  • パブリッククラウドの仮想サーバー基盤: AWS EC2、Google Cloud Compute Engine、Microsoft Azure など、主要クラウドの標準 OS として圧倒的な導入シェアを誇ります。
  • AI・機械学習・データサイエンスの開発基盤: NVIDIA 公式の GPU ドライバ(CUDA)、PyTorch、TensorFlow、Docker などのツールチェーンが Ubuntu を第一級市民(最優先プラットフォーム)としてサポートしています。
  • ソフトウェアエンジニアの開発PC / デスクトップ: 美しく直感的な GNOME デスクトップ環境を備え、デュアルブートや WSL2(Windows Subsystem for Linux)のデフォルト環境として多くの開発者に愛用されています。
  • CI/CD パイプラインの実行基盤: GitHub Actions や GitLab CI のホストランナー(ubuntu-latest)として標準採用されています。

基本的なコマンド一覧

Ubuntu は Debian 系であるため、基本コマンドは Debian と共通の apt を使用しますが、独自のリポジトリ追加ツール(PPA)や独自のパッケージ管理システム「Snap」も標準搭載されています。

パッケージ管理コマンド(APT)

# パッケージインデックスの更新と全パッケージの一括アップグレード
sudo apt update && sudo apt upgrade -y

# 開発用ツールのインストール
sudo apt install -y build-essential curl git unzip software-properties-common

# パッケージのアンインストール
sudo apt remove nginx

PPA(Personal Package Archive: 外部リポジトリの追加)

公式リポジトリよりも新しいバージョンのソフトウェア(Python や Node.js、特定のツールなど)を導入したい場合、コミュニティ提供の PPA を簡単に追加できます。

# PPA リポジトリの追加(例:最新の Python リポジトリ)
sudo add-apt-repository ppa:deadsnakes/ppa

# 追加後のメタデータ更新
sudo apt update

# 最新バージョンのインストール
sudo apt install -y python3.12

Snap コマンド(コンテナ型パッケージ管理)

Snap は、Canonical 社が開発した「アプリケーション本体と必要なライブラリ群を 1 つに固めて隔離実行する」仕組みです。OS のシステム環境を汚さずに最新アプリケーションを安全にインストールできます。

# Snap パッケージの検索
snap find certbot

# パッケージのインストール
sudo snap install --classic certbot

# インストール済み snap パッケージの一覧表示
snap list

# パッケージのアップデート
sudo snap refresh

# パッケージのアンインストール
sudo snap remove certbot

ネットワーク・ファイアウォール(UFW)

Ubuntu には、iptables を直感的に操作できる簡潔なファイアウォールツール「UFW(Uncomplicated Firewall)」が標準で備わっています。

# ファイアウォールの状態確認
sudo ufw status

# SSH(ポート22)の通信を許可
sudo ufw allow ssh

# HTTP / HTTPS の通信を許可
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# ファイアウォールの有効化
sudo ufw enable

メリット・デメリット

メリット

  • 圧倒的な情報量とドキュメント: 世界で最も普及しているため、エラーが発生しても Google 検索や Stack Overflow、公式フォーラム(Ask Ubuntu)で即座に解決策が見つかります。
  • 最新ソフトウェア・ドライバの導入が容易: LTS 版であっても、PPA や Snap、公式バックポートを活用することで、最新バージョンの言語やツールをスムーズに導入できます。
  • ハードウェアとクラウドの互換性: 最新のハードウェア(CPU、GPU、Wi-Fi)への追従が早く、NVIDIA ドライバなどもコマンド 1 つ(sudo ubuntu-drivers install)で安全にセットアップできます。
  • 充実した商用サポート: Canonical 社による手厚いエンタープライズサポート(Ubuntu Pro)が用意されており、大規模な商用システムでも安心して採用できます。

デメリット

  • Snap に対する賛否両論: 初期状態で一部のソフトウェア(Chromium や Firefox など)が Snap で強制配信されており、アプリの起動が若干遅くなることや、自動アップデートのタイミング制御に不満を持つユーザーがいます。
  • Debian に比べるとシステムリソース消費が大きい: 便利さを重視して各種デーモンや支援サービスが初期状態で動作しているため、最小構成の Debian と比較するとメモリやディスクの初期消費量がやや多くなります。
  • Ubuntu 特有の独自カスタマイズ: Canonical 社独自の仕様変更(Netplan によるネットワーク設定、Snap の優遇など)が時折導入され、標準的な Linux 手順と異なる作法を覚える必要があります。

4. Alpine Linux

Alpine Linuxの概要と設計思想

Alpine Linux(アルパイン・リナックス)は、セキュリティ、シンプルさ、そして極限のリソース効率を最優先して設計された独立系の Linux ディストリビューションです。 元々は組み込み機器やルーターなどのネットワークアプライアンス向けに開発されましたが、Docker をはじめとするコンテナ技術の爆発的普及に伴い、軽量コンテナイメージの筆頭として世界的な注目を集めるようになりました。

公式の Docker イメージ(alpine:latest)のダウンロードサイズは、わずか約 5MB から 7MB 程度 しかありません(Ubuntu 公式イメージの約 70MB や Debian の約 100MB と比較すると 10 分の 1 以下です)。

一般的なLinuxとの構造的違い

Alpine Linux が極端に軽量である理由は、一般的な Linux(Debian や Ubuntu)で標準的に使われている巨大なコンポーネントを、小型・軽量な代替コンポーネントに置き換えているためです。

構成要素一般的な Linux (Debian / Ubuntu / RHEL)Alpine Linux
標準 C ライブラリ (libc)GNU C Library (glibc)musl libc (超軽量・簡潔)
基本コマンド群 (ls, cp等)GNU CoreutilsBusyBox (単一バイナリに機能を集約)
init(サービス管理)systemdOpenRC (軽量なスクリプトベース)
パッケージマネージャーapt / dnfapk (極めて高速・軽量)

主な用途

  • Docker / Kubernetes のマイクロサービス用ベースイメージ: Go や Rust などの静的コンパイル言語で作られたバイナリを動かすコンテナ、Node.js や Python の軽量コンテナ環境として最適です。
  • エッジコンピューティング・IoT 機器: RAM やフラッシュメモリの容量が厳しく制限された組み込みハードウェアでの運用。
  • セキュリティ監査・CI/CD の使い捨てコンテナ: 起動時間が数ミリ秒から数秒と圧倒的に高速なため、テストや検証のたびに破棄・再生成する環境で高いパフォーマンスを発揮します。

基本的なコマンド一覧(APK: Alpine Package Keeper)

Alpine Linux では、パッケージ管理に apk コマンドを使用します。 コンテナ環境でイメージサイズを最小限に抑えるための定番オプション(--no-cache)の使い方が重要です。

# パッケージインデックスの更新
apk update

# パッケージのインストール
apk add curl git jq

# Dockerfile でのベストプラクティス(キャッシュをローカルに残さない)
apk add --no-cache nginx

# 複数パッケージを一時的にインストールして作業後にまとめて消す(仮想パッケージ)
apk add --no-cache --virtual .build-deps gcc make musl-dev
# ... 何らかのビルド作業 ...
apk del .build-deps

# インストール済みパッケージの一覧表示
apk info

# パッケージのアンインストール
apk del nginx

Tip

Alpine Linux の初期シェルは sh(BusyBox 内蔵)であり、bash は標準ではインストールされていません。 #!/bin/bash を前提としたシェルスクリプトを実行したい場合は、apk add --no-cache bash で明示的に導入する必要があります。

メリット・デメリット

メリット

  • 圧倒的なディスク・メモリの軽量性: ベースイメージが数 MB 単位であるため、ストレージコストを極小化し、イメージの pull / push にかかる転送時間を劇的に短縮できます。
  • 起動速度の圧倒的な速さ: 余計な初期化スクリプトやデーモンが存在しないため、コンテナのスケールアウトやインスタンス起動が瞬時に完了します。
  • セキュリティ攻撃対象領域(Attack Surface)の極小化: インストールされているバイナリやパッケージが最小限であるため、脆弱性(CVE)が報告される確率が極めて低く、定期的なセキュリティスキャンをクリーンに保ちやすくなります。
  • メモリ保護機能(SSP / PIE)の標準有効化: セキュリティ重視の設計により、スタック破壊防止などの保護機能がデフォルトでコンパイル時に組み込まれています。

デメリット

  • musl libc に起因するバイナリ互換性問題: 世の中の多くのプロプライエタリな Linux 向けバイナリや C 言語拡張は、標準の glibc を前提にビルドされています。Alpine 上ではそのまま実行できず、互換レイヤー(gcompat 等)を入れるか、ソースコードから再コンパイルする必要があります。
  • Python(データ分析・機械学習系)でのビルド負荷: Python の多くのパッケージ(NumPy、Pandas、PyTorch 等)は、glibc 向けに事前ビルドされた wheel(manylinux)が配布されています。Alpine ではこれが適合しないため、コンテナビルド時にソースコードから長時間をかけて C コンパイルを行う必要があり、ビルド時間が長引いたりメモリ不足で失敗することがあります。
  • 一部の標準コマンドオプションの欠如: BusyBox のコマンドは必要最低限の機能に絞られているため、GNU 版の grep や sed、find にある高度な拡張オプションが使えない場合があります。

5. Amazon Linux

Amazon Linuxの概要と変遷

Amazon Linux(アマゾン・リナックス)は、Amazon Web Services(AWS)が自社のクラウドインフラ(Amazon EC2、コンテナ、Lambda 等)向けに自社開発・提供・保守を行っている公式の Linux ディストリビューションです。 AWS 利用者であれば、追加の OS ライセンス費用なし(無料)で利用できます。

AWS の仮想化基盤(Nitro System)やプロセッサ(AWS Graviton / ARM アーキテクチャ)に極限までチューニングされており、AWS クラウド上で最高のパフォーマンスと安定性を発揮するように設計されています。

世代の変遷(AL2 から AL2023 へ)

Amazon Linux には主に 3 つの世代が存在します。

世代リリース年主な特徴・ベース系統パッケージマネージャー
Amazon Linux (初期版)2010年CentOS 6 ベース。ローリングリリース型。(現在はサポート終了)yum
Amazon Linux 2 (AL2)2017年RHEL 7 / CentOS 7 ベース。長期サポート(LTS)。トピック別パッケージ導入(amazon-linux-extras)。yum
Amazon Linux 2023 (AL2023)2023年Fedora のアップストリームを基盤 に刷新。決定論的アップデート(Deterministic Upgrades)、SELinux 有効化。dnf

現在の新規システム開発では、最新の Amazon Linux 2023(AL2023) を選択することが推奨されています。

主な用途

  • AWS EC2(仮想マシン)の本番・検証サーバー: Web API サーバー、バッチ処理サーバー、社内システム基盤など、AWS 上で運用されるあらゆる汎用ワークロード。
  • Amazon ECS / EKS のコンテナホスト基盤: コンテナオーケストレーション用の AMI(Amazon Machine Image)として最適化されており、高速なノード起動とスケールアウトを実現します。
  • AWS Lambda のカスタムランタイム・実行環境: サーバーレス環境の内部実行 OS として採用されており、ローカルで Lambda 向けのバイナリをビルドする際のリファレンス環境として重宝されます。

基本的なコマンド一覧(DNF と AWS 連携)

最新の Amazon Linux 2023 では、高速な次世代パッケージマネージャーである dnf(Dandified YUM)が標準となっています(従来の yum コマンドも dnf へのシンボリックリンクとして機能します)。

# パッケージ一覧の更新確認
sudo dnf check-update

# システム全体のセキュリティ更新・アップグレード
sudo dnf upgrade -y

# パッケージの検索
dnf search nginx

# パッケージのインストール
sudo dnf install -y nginx git tar

# パッケージのアンインストール
sudo dnf remove nginx

# 不要な依存関係の自動削除
sudo dnf autoremove -y

# パッケージキャッシュの消去
sudo dnf clean all

AWS ツールとのシームレスな統合

Amazon Linux には、初期状態で最新の aws-cli(AWS コマンドラインインターフェース)や SSM エージェント(AWS Systems Manager)が組み込まれているか、リポジトリから即座に導入できます。

# AWS CLI のバージョン確認(初期同梱)
aws --version

# SSM Agent(リモート接続・管理用エージェント)の稼働確認
sudo systemctl status amazon-ssm-agent

メリット・デメリット

メリット

  • AWS クラウドへの極限の最適化: AWS Nitro インフラストラクチャや Graviton(ARM)プロセッサ向けにカーネルが高度に最適化されており、ネットワーク通信やディスク I/O で最高レベルのスループットと低遅延が得られます。
  • 迅速なセキュリティパッチと AWS サポート: 重大な脆弱性(CVE)が発見された際、AWS の専門セキュリティチームによって迅速に修正パッチが専用リポジトリ経由で配信されます。AWS サポート契約があれば OS レベルの技術問い合わせも可能です。
  • 決定論的リポジトリ(AL2023)による安全なデプロイ: リポジトリがバージョンごとにスナップショット固定されており、意図しない自動更新による環境差異や障害を防ぐ設計になっています。
  • 追加ライセンス費用がゼロ: RHEL や SLES などの有償エンタープライズ OS と異なり、OS 使用に伴う追加課金が一切発生しません。

デメリット

  • AWS 以外の環境へのポータビリティ(可搬性)の低さ: オンプレミス環境や他社クラウド(Azure、GCP)で Amazon Linux を運用することは想定されていません。マルチクラウド展開を計画しているシステムでは採用しにくい制約があります。
  • EPEL(追加パッケージリポジトリ)の非互換(AL2023): Amazon Linux 2 では広く使われていた有志リポジトリ「EPEL(Extra Packages for Enterprise Linux)」が、AL2023 では互換性の都合上公式にはサポートされていません。一部のマイナーなツールやライブラリは、ソースコードから自前ビルドするかコンテナで動かす必要があります。
  • デスクトップ GUI の非推奨: サーバーおよびクラウド用途に完全に特化しているため、一般的なデスクトップ OS として使用することは考慮されていません。

6. 主要ディストリビューションの比較と選び方

4大ディストリビューションの横断比較

本書で解説した 4 つのディストリビューション(Debian、Ubuntu、Alpine Linux、Amazon Linux)は、それぞれ異なる目的や哲学に基づいて設計されています。 要件に合致した最適な OS を選定できるよう、主要な項目を比較表に整理します。

項目Debian GNU/LinuxUbuntu (LTS)Alpine LinuxAmazon Linux 2023
ベース系統Debian オリジナルDebian 派生独立系(軽量特化)Fedora / RHEL 系
主な開発・主導主体コミュニティ英 Canonical 社コミュニティAmazon Web Services
パッケージ管理apt / dpkgapt / snapapkdnf
標準 C ライブラリglibcglibcmusl libcglibc
基本ツール群GNU CoreutilsGNU CoreutilsBusyBoxGNU Coreutils
init システムsystemdsystemdOpenRCsystemd
最小イメージサイズ中(約 80〜100MB)大(約 70〜120MB)極小(約 5〜7MB)中(約 100〜160MB)
安定性・保守性極めて高い高い高い高い(AWS特化)
最新ソフトの追従性やや遅い(慎重)早い(PPA/snap対応)普通〜早い早い(2年周期刷新)
ドキュメント・情報量豊富圧倒的普通(コンテナ中心)豊富(AWS中心)
最適ユースケース長期堅牢サーバー開発機・AI・一般クラウドDocker軽量コンテナAWS EC2 / ECS / EKS

ユースケース別の選定指針

実際のシステム開発・インフラ構築において、どのディストリビューションを採用すべきかの判断基準をユースケース別に解説します。

1. AWS を基盤とするクラウドワークロード ➔ 【Amazon Linux 2023】

AWS の EC2 や ECS、EKS などの基盤で運用することが確定している場合、第一候補は Amazon Linux 2023(AL2023) です。 AWS Nitro インフラストラクチャや Graviton プロセッサの性能を 100% 引き出すことができ、AWS サポートの一元窓口や迅速なセキュリティパッチの恩恵を受けられます。

2. 一般的なWeb開発・AI/機械学習・クラウド汎用 ➔ 【Ubuntu (LTS)】

オンプレミス、GCP、Azure、あるいはマルチクラウド構成で Web アプリケーションや API サーバーを構築する場合、あるいは GPU を活用した AI/ML ワークロードを扱う場合は、Ubuntu LTS が最も安全かつ効率的です。 世界中で最も採用事例が多く、各種フレームワーク(PyTorch、Docker、Node.js など)の公式手順が Ubuntu を前提に書かれているため、トラブルシューティングにかかる時間を最小化できます。

3. クラッシュを絶対に許さない長期無停止の本番基盤 ➔ 【Debian (Stable)】

数年間にわたり OS 起因の仕様変更やトラブルを避け、極限まで堅牢なインフラを構築したい場合は、Debian Stable が最適です。 余計なデーモンが動作せず、システム全体が徹底したテストを経て凍結されているため、高可用性データベースや重要なミッションクリティカル基盤で絶大な安心感を提供します。

4. Docker / Kubernetes の軽量マイクロサービス ➔ 【Alpine Linux または Debian-slim】

コンテナのビルド時間短縮、イメージ配布のネットワーク転送削減、およびセキュリティ脆弱性スキャンの警告数削減を狙う場合、Alpine Linux が有力な選択肢です(Go や Rust の静的バイナリ実行には完璧です)。

Warning

Python(NumPy、Pandas、PyTorch 等)や C 言語拡張ライブラリを多用するコンテナを構築する場合、Alpine Linux(musl libc)ではビルドの長時間化やライブラリ非互換のリスクがあります。 このようなケースでは、Alpine ではなく python:3.12-slim-bookworm(Debian-slim ベース) を選択することで、軽量性と glibc 互換性を両立できます。

次章では、すべてのディストリビューションで共通して役立つ、現場必須の Linux 基本コマンド集を解説します。

7. 実践Linux共通必須コマンド集

ディストリビューション共通の操作体系

パッケージ管理コマンド(apt、apk、dnf)にはディストリビューションごとの違いがありますが、ファイルの操作、プロセスの監視、権限の管理、サービスの制御といった日常的なシステム管理コマンドは、すべての Linux 環境でほぼ共通です。

本章では、エンジニアが現場で頻繁に使用する必須コマンドをカテゴリ別に整理したチートシートを提供します。

1. ファイル・ディレクトリ操作

# 現在のディレクトリのファイル一覧を詳細・サイズ単位付きで表示
ls -la

# ディレクトリの新規作成(親ディレクトリも含めて作成)
mkdir -p path/to/new_dir

# ファイルやディレクトリのコピー(-r は再帰的コピー)
cp file.txt backup.txt
cp -r src_dir/ dest_dir/

# ファイルの移動または名前変更
mv old_name.txt new_name.txt

# ファイルやディレクトリの削除(-r: 再帰的、-f: 強制確認なし)
rm file.txt
rm -rf temp_dir/

# ファイルの検索(特定ディレクトリ配下から名前で探す)
find /var/log -name "*.log"

# tar.gz アーカイブの作成と展開
tar -czvf archive.tar.gz target_dir/   # 圧縮
tar -xzvf archive.tar.gz              # 展開

2. ファイル閲覧・テキスト処理

# ファイルの末尾をリアルタイムで監視(ログ調査の定番)
tail -f /var/log/nginx/access.log

# ファイルの先頭20行を表示
head -n 20 config.yaml

# ページ単位でファイルを快適に閲覧(q で終了)
less large_file.txt

# 特定の文字列を含む行を検索(-r: 再帰検索、-i: 大文字小文字無視、-n: 行番号表示)
grep -rin "ERROR" /var/log/app/

# パイプ(|)と組み合わせた絞り込み
cat /etc/os-release | grep "PRETTY_NAME"

3. 権限(パーミッション)と所有者の管理

Linux では、ファイルやディレクトリごとに「読み取り(r: 4)」「書き込み(w: 2)」「実行(x: 1)」の権限が「所有者 / グループ / その他」に対して割り当てられます。

# 実行権限の付与(スクリプトに実行権限を付加)
chmod +x deploy.sh

# パーミッションの数値指定(所有者: 読み書き実行=7, グループ・その他: 読み実行=5)
chmod 755 app_server

# ファイルの所有者とグループの変更
sudo chown user:group file.txt

# ディレクトリ配下の全ファイルの所有者を一括変更(-R: 再帰的)
sudo chown -R www-data:www-data /var/www/html/

4. プロセス管理とシステムリソース監視

# 実行中の全プロセスを詳細表示
ps aux

# 特定のプロセスを名前で検索
ps aux | grep nginx
pgrep -l python

# リアルタイムの CPU・メモリ使用率モニター(q で終了)
top

# メモリの使用状況を人間が読みやすい単位(MB/GB)で表示
free -h

# ディスク使用量と空き容量の確認(-h: 読みやすい単位)
df -h

# 特定ディレクトリの容量消費サイズを確認(-s: 合計、-h: 単位付き)
du -sh /var/log/

5. サービス(デーモン)の制御(systemd / systemctl)

Debian、Ubuntu、Amazon Linux などの現代の主要ディストリビューションでは、systemctl コマンドでバックグラウンドサービスを管理します。

# サービスの状態確認
sudo systemctl status nginx

# サービスの起動・停止・再起動
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx

# 設定ファイルのみを安全にリロード(通信を切断しない)
sudo systemctl reload nginx

# サーバー起動時の自動起動を有効化 / 無効化
sudo systemctl enable nginx
sudo systemctl disable nginx

# サービスのログを確認(journalctl)
sudo journalctl -u nginx -n 50 --no-pager

6. ネットワーク確認とトラブルシューティング

# 自身の IP アドレスとネットワークインターフェースを確認
ip addr show

# 外部サーバーとの疎通確認(3回送信して終了)
ping -c 3 8.8.8.8

# 開いているポートと待ち受け中(LISTEN)のプロセスを確認
sudo ss -tulpn

# HTTP レスポンスヘッダーの取得と疎通確認
curl -I https://example.com

# DNS 名前解決の確認
dig example.com

これらの共通コマンドと、各ディストリビューション固有のパッケージマネージャー(apt、apk、dnf)をマスターすることで、あらゆる Linux サーバー環境において自在に構築・運用・トラブル対応が行えるようになります。