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

三条学习路线

全书 79 章 + 11 个项目,不需要按顺序从头读到尾。下面三条路线对应三类目标,选一条走通,再横向扩展。

0. 依赖关系

                 ┌────────────── 第 0 篇 命令行与 Shell ──────────────┐
                 │  0.1–0.6 基础   0.7–0.9 脚本/进程   0.10–0.14 系统 │
                 └───────────────┬───────────────────────────────────┘
                                 │
             ┌───────────────────▼───────────────────┐
             │           第 1 篇 计算机系统            │
             │ 1.2 表示 1.3 汇编 1.6 缓存 1.9 虚拟内存 │
             │ 1.7 链接 1.8 异常 1.12 并发 1.13 OS 理论 │
             └───────┬───────────────────────┬───────┘
                     │                       │
        ┌────────────▼──────────┐   ┌────────▼─────────────────┐
        │ 第 2 篇 系统编程        │   │ 第 3 篇 内核              │
        │ 2.2–2.4 文件 I/O       │   │ 3.3 中断 3.5 调度         │
        │ 2.7–2.11 进程/信号     │   │ 3.7–3.10 内存             │
        │ 2.12–2.13 线程/同步    │   │ 3.11 并发 3.12 VFS        │
        │ 2.16–2.18 socket/IO    │   │ 3.15 调试                 │
        └────────────┬──────────┘   └────────┬─────────────────┘
                     │                       │
                     └───────────┬───────────┘
                                 │
                    ┌────────────▼────────────┐
                    │ 第 4 篇 网络(4.8–4.12) │
                    │ 收包/发包/socket/epoll   │
                    └────────────┬────────────┘
                                 │
                    ┌────────────▼────────────┐
                    │ 第 5 篇 云原生 + 第 6 篇 │
                    │ namespace/cgroups/项目   │
                    └─────────────────────────┘

1. 路线 A · 应用与运维(6–8 周)

目标:把 Linux 当生产环境用;能写自动化脚本;能定位服务、磁盘、网络问题;能交付容器化服务。

周内容必读可后补验收
1命令行基本功0.1–0.60.2 的 vim 细节用管道统计 nginx 日志 Top 10 IP
2Shell 工程0.7–0.90.8 的数组高级用法写一个带锁、超时、日志的备份脚本
3系统与磁盘0.10–0.120.10 的 RAID 细节扩 LV、修 fstab、写 systemd unit
4网络与排障0.13–0.140.14 的 eBPF用 ss/tcpdump 定位一次连接失败
5协议与云原生4.1–4.7, 5.1–5.64.4 的拥塞控制细节手写 Dockerfile,搭 bridge 网络
6–8项目 DD1/D2/D3 选一—通过该项目的 Stage 验收

最小必读集:0.1–0.9、0.12–0.14、4.1–4.5、5.1–5.6。 可以跳过:1.3–1.5、2.12–2.18、3.5–3.13、4.8–4.12。

2. 路线 B · 系统编程(10–12 周)

目标:写出正确、可移植、可观测的系统程序;能读内核源码;能实现一个中型系统。

周内容必读可后补验收
1系统底座1.1–1.3, 1.7–1.81.4 流水线能读 objdump -d 与崩溃栈
2内存与性能1.5–1.6, 1.91.9 的垃圾回收用 perf 找出一个 cache 不友好循环
3I/O2.1–2.42.4 的 stdio 实现写带 EINTR/短读处理的 cat
4文件与目录2.5–2.62.5 的 xattr写 find 的简化版
5进程2.7–2.92.9 的 capability写带超时与回收的 timeout
6信号与定时器2.10–2.112.11 的 POSIX timer写信号安全的日志轮转
7线程2.12–2.132.13 的 TLS写线程池 + 有界队列
8IPC 与 socket2.14–2.172.15 的 POSIX 共享内存写一个多进程聊天室
9高性能 I/O2.18–2.192.19 的 pty用 epoll 写 echo 服务器
10–12项目A2 / B1 / B2 / C2 选一—通过 Stage 验收 + 压测报告

最小必读集:1.2–1.3、1.6–1.9、2.1–2.4、2.7–2.13、2.16–2.18。 可以跳过:0.10–0.12、3.5–3.6、4.2–4.3。

3. 路线 C · 内核与性能(12–16 周)

目标:读懂内核关键路径;能用证据定位 CPU/内存/I/O/网络瓶颈;能改内核模块或 eBPF 程序。

周内容必读可后补验收
1–2系统底座1.2–1.3, 1.6, 1.91.4能手算页表翻译与 cache 组号
3OS 理论1.13OSTEP 分布式部分能画进程/内存/文件系统状态图
4内核入门3.1–3.33.2 的 ACPI编译内核、跑 QEMU、加一个 printk
5进程与调度3.4–3.63.6 的 EAS用 perf sched 分析一次抖动
6–7内存3.7–3.103.10 的 KSM用 bpftrace 统计缺页与回收
8并发3.113.11 的 RCU 实现写一个无锁队列并压测
9文件系统3.12–3.133.13 的 blk-mq用 ftrace 追一次 fsync
10调试3.153.14 的驱动模型用 crash/drgn 读一次 vmcore
11网络栈4.8–4.124.6 的拥塞控制用 bpftrace 追一次收包
12–16项目A1/A3/C1 选一—通过 Stage 验收 + 性能报告

最小必读集:1.2–1.3、1.6、1.9、1.13、3.1–3.13、3.15、4.8–4.12。 可以跳过:0.7–0.9、2.5–2.6、5.6。

4. 每周节奏

无论哪条路线,建议每周固定四件事:

  1. 读:2–3 章正文,先看「本章回答」与图,再读细节;
  2. 做:每章至少跑通一个实验,记录命令与输出;
  3. 测:章末出口检查 + 回忆卡,错题回到对应小节;
  4. 写:一页笔记,只写「路径 + 边界 + 一个反例」,不抄书。

5. 检查点

检查点时间达标标准
CP1第 2 周能不查手册完成 20 条命令行任务
CP2第 4 周能写 200 行带错误处理的 Shell 脚本
CP3第 6 周能解释一次 open() 到磁盘的完整路径
CP4第 8 周能写线程池并通过 helgrind/TSan
CP5第 10 周能用 perf 定位一个真实瓶颈并给出优化前后数据
CP6第 12 周项目 Stage 3 通过,有测试与压测报告

下一站:符号与命令约定告诉你本书的排版语言。