一部訳した本の宣伝: 「入門モダンLinux」

4/6 更新。Amazon上の煽り文を最新化&公式サイトから目次を転載

一部だけ翻訳にかかわった「入門モダンLinux」という本が4月7日に出るので宣伝を兼ねた紹介をします。

原著は「Learning Modern Linux」です。

本書のタイトルを目にしてまず思うのは「モダンLinuxとはいったいなんぞや」でしょう。これについてはamazonにも載っている煽り文をご覧ください。

Linuxはサーバ、組み込み機器、スーパーコンピュータなどにおいて存在感を示してきました。近年では、オンプレミスのシステムだけではなく、クラウドサービスでも広く使われています。本書は、前半でLinuxを使いこなす上で必要な基本知識を、後半で最新情報をまとめています。Linuxの知識を体系的に整理したい、最新動向が知りたい、運用を改善したい、効率的に開発を行いたい、といった要望をかなえる内容となっています。時代の変化に柔軟に対応できるLinux技術者を目指すなら必読の一冊です。

以下、少し長いですが、本書の雰囲気を掴んでもらうために公式サイトから目次を引用します。

1章 Linuxの入門
    1.1 モダンな環境とは何か?
    1.2 これまでのLinuxの歴史
    1.3 なぜオペレーティングシステムなのか?
    1.4 Linuxディストリビューション
    1.5 リソースの可視性
    1.6 Linuxの全体像
    1.7 まとめ

2章 Linuxカーネル
    2.1 Linuxアーキテクチャ
    2.2 CPUアーキテクチャ
        2.2.1 x86アーキテクチャ
        2.2.2 ARMアーキテクチャ
        2.2.3 RISC-Vアーキテクチャ
    2.3 カーネルコンポーネント
        2.3.1 プロセス管理
        2.3.2 メモリ管理
        2.3.3 ネットワーク
        2.3.4 ファイルシステム
        2.3.5 デバイスドライバ
        2.3.6 システムコール
    2.4 カーネルの拡張
        2.4.1 モジュール
        2.4.2 モダンなカーネル拡張:eBPF
    2.5 まとめ

3章 シェルとスクリプト
    3.1 基本用語
        3.1.1 ターミナル
        3.1.2 シェル
        3.1.3 モダンなコマンド
        3.1.4 一般的なタスク
    3.2 使いやすいシェル
        3.2.1 fishシェル
        3.2.2 Zシェル
        3.2.3 他のモダンなシェル
        3.2.4 どのシェルを使うべきか?
    3.3 ターミナルマルチプレクサ
        3.3.1 screen
        3.3.2 tmux
        3.3.3 他のマルチプレクサ
        3.3.4 どのマルチプレクサを使うべきか?
    3.4 スクリプト
        3.4.1 スクリプトの基本
        3.4.2 移植性の高いbashスクリプトの書き方
        3.4.3 スクリプトのlintとテスト
        3.4.4 GitHubのユーザ情報スクリプト
    3.5 まとめ

4章 アクセス制御
    4.1 基本
        4.1.1 リソースと所有権
        4.1.2 サンドボックス化
        4.1.3 アクセス制御の種類
    4.2 ユーザ
        4.2.1 ローカルでのユーザ管理
        4.2.2 ユーザの一元管理
    4.3 パーミッション
        4.3.1 ファイルのパーミッション
        4.3.2 プロセスの権限
    4.4 高度な権限管理
        4.4.1 ケーパビリティ
        4.4.2 seccompプロファイル
        4.4.3 ACL
    4.5 アクセス制御のよい実践方法
    4.6 まとめ

5章 ファイルシステム
    5.1 基本
    5.2 仮想ファイルシステム
        5.2.1 論理ボリュームマネージャ
        5.2.2 ファイルシステムの操作
        5.2.3 一般的なファイルシステムレイアウト
    5.3 擬似ファイルシステム
        5.3.1 procfs
        5.3.2 sysfs
        5.3.3 devfs
    5.4 通常のファイル
        5.4.1 一般的なファイルシステム
        5.4.2 インメモリファイルシステム
        5.4.3 コピーオンライトファイルシステム
    5.5 まとめ

6章 アプリケーション、パッケージ管理、コンテナ
    6.1 基本
    6.2 Linuxの起動プロセス
    6.3 systemd
        6.3.1 ユニット
        6.3.2 systemctlによる管理
        6.3.3 journalctlによる監視
        6.3.4 greeterのスケジューリング例
    6.4 Linuxアプリケーションのサプライチェーン
    6.5 パッケージとパッケージマネージャ
        6.5.1 RPMパッケージマネージャ
        6.5.2 Debian deb
        6.5.3 言語固有のパッケージマネージャ
    6.6 コンテナ
        6.6.1 namespace
        6.6.2 cgroup
        6.6.3 コピーオンライトファイルシステム
        6.6.4 Docker
        6.6.5 他のコンテナ関連のツール
    6.7 モダンなパッケージマネージャ
    6.8 まとめ

7章 ネットワーク
    7.1 基本
    7.2 TCP/IPスタック
        7.2.1 リンク層
        7.2.2 インターネット層
        7.2.3 トランスポート層
        7.2.4 ソケット
    7.3 DNS
        7.3.1 DNSレコード
        7.3.2 DNSルックアップ
    7.4 アプリケーション層ネットワーク
        7.4.1 ウェブ
        7.4.2 SSH
        7.4.3 ファイル転送
        7.4.4 NFS
        7.4.5 Windowsとのファイル共有
    7.5 ネットワークの高度なトピック
        7.5.1 whois
        7.5.2 DHCP
        7.5.3 NTP
        7.5.4 wiresharkとtshark
        7.5.5 他の高度なツール
    7.6 まとめ

8章 オブザーバビリティ(可観測性)
    8.1 基本
        8.1.1 オブザーバビリティの戦略
        8.1.2 用語
        8.1.3 シグナルの種類
    8.2 ログ
        8.2.1 Syslog
        8.2.2 journalctl
    8.3 監視
        8.3.1 I/Oデバイスとネットワークインタフェース
        8.3.2 統合パフォーマンス監視
        8.3.3 インスツルメンテーション
    8.4 高度なオブザーバビリティ
        8.4.1 トレースとプロファイリング
        8.4.2 PrometheusとGrafana
    8.5 まとめ

9章 高度なトピック
    9.1 プロセス間通信
        9.1.1 シグナル
        9.1.2 名前付きパイプ
        9.1.3 UNIXドメインソケット
    9.2 仮想マシン
        9.2.1 KVM
        9.2.2 Firecracker
    9.3 モダンなLinuxディストリビューション
        9.3.1 Red Hat Enterprise Linux CoreOS
        9.3.2 Flatcar Container Linux
        9.3.3 Bottlerocket
        9.3.4 RancherOS
    9.4 セキュリティに関するトピック
        9.4.1 Kerberos
        9.4.2 PAM
    9.5 その他のモダンLinuxの話、あるいは将来の話
        9.5.1 NixOS
        9.5.2 デスクトップ版Linux
        9.5.3 組み込みシステムにおけるLinux
        9.5.4 クラウドIDEにおけるLinux
    9.6 まとめ

付録A 便利なコマンド集
    A.1 システム情報
    A.2 ユーザとプロセス
    A.3 ファイル情報
    A.4 ファイルとディレクトリ
    A.5 リダイレクトとパイプ
    A.6 時刻と日付
    A.7 Git
    A.8 システムパフォーマンス

付録B モダンLinuxツール

Linux経験が長い方々であっても、見慣れない「モダンな」キーワードがいくつかあったのではないでしょうか。

ここからは各章について軽く紹介します。1章は「Linux の入門」というよくあるものです。では2章のテーマは使い方なのかな…と思いきや、いきなり「Linuxカーネル」です。平易な書き方でハードウェアとソフトウェアの関係、ユーザプロセスとカーネルの関係などについて書いているので、そのあたりの話題に興味がある人は楽しめるかと思います。最近一部で話題のeBPFについても少し触れられています。

8章「オブザーバビリティ(可観測性)」ではオブザーバビリティの基本的な考え方やmonitoring, metrics, log, traceなどなどについて具体的なツールを挙げながら紹介してくれています。オブザーバビリティは入門書には載っていないものの、学ぼうとするといきなりごっつい本を一冊買う必要がある、となりがちです。いまいちオブザーバビリティについてピンと来ないかたは、まずは本書で軽く触れておくといいのではないでしょうか。

3章「シェルとスクリプト」、4章「アクセス制御」、5章「ファイルシステム」、6章「アプリケーション、パッケージ管理、コンテナ」、7章「ネットワーク」など、「そんなの知ってるよ」と言われそうな章も、既存の書籍に比べるとやや高度なものを扱っています。たとえばシェルについてはbashだけではなくfishやzsh、さらにもうちょっとマニアックなものについて紹介していたり、tmuxなどのターミナルマルチプレクサについての言及があったりします。現場で知ったり同僚や友人に教えてもらわないとなかなか存在に気付けないこの手のツールが紹介されているのが本書の魅力の一つです。

第九章「高度なトピック」では、たとえばコンテナベースのFlatcar Container Linuxという新しいタイプのLinuxディストリビューションを紹介しています。この言葉を聞いたことがないかたは、おそらく「こんなものがあるのか」と驚くかと思います。ほかにも著者のMichael HausenblasさんはAWS所属なこともあってか、AWSにかかわりが深いFirecrackerやBottleRocketといった非常にマニアックなものが紹介されていています。

そんなこんなで「Linuxを使っているけど、最近のLinuxまわりの状況はわからないなあ」という人は是非軽い気分で読んで知識をアップデートして、さらなる成長へのきっかけとしていただけたらと思います。