范围、取舍与淘汰内容
1. 母本清单与角色
本书吸收十部母本。它们不是并列的十章,而是各自负责一条证据链:
| # | 母本 | 版本/规模 | 在本书中的角色 | 主要落点 |
|---|---|---|---|---|
| 1 | 《Linux/UNIX 系统编程手册》Kerrisk | 上下册,64 章 | 系统编程的主干:API 语义、边界、可移植性 | 第 2 篇;第 1 篇 1.8/1.10 |
| 2 | 《深入理解计算机系统》CSAPP | 3e,12 章 | 系统底座:表示、汇编、链接、内存、并发 | 第 1 篇;第 2 篇部分 |
| 3 | 《操作系统导论》OSTEP | 4 部分 49 章 | 理论骨架:虚拟化、并发、持久化 | 第 1 篇 1.9/1.12/1.13;第 3 篇 |
| 4 | 《操作系统原理、实现与实践》李治军 | 8 章 + 8 实践 | 实现视角:从零做一个内核 | 第 3 篇「实现侧写」;第 1 篇 1.13 |
| 5 | 《奔跑吧 Linux 内核》 | 6 章 | 内核源码主线:内存、进程、并发、中断、调试 | 第 3 篇 |
| 6 | 《深入理解 Linux 网络》 | 10 章 | 网络栈主线:收包、发包、socket、连接、调优 | 第 4 篇 4.8–4.12 |
| 7 | 《鸟哥的 Linux 私房菜·基础篇》 | 4e,26 章 | 运维与使用:文件、权限、磁盘、服务、启动 | 第 0 篇 |
| 8 | 《Linux 命令行大全》Shotts | 2e,36 章 | 命令行基本功:Shell 语法、重定向、文本工具 | 第 0 篇 |
| 9 | 《Linux 命令行与 shell 脚本编程大全》 | 4e,25 章 | Shell 工程:脚本结构、sed/awk、实用工具 | 第 0 篇 |
| 10 | 《计算机网络》谢希仁 | 8e,9 章 | 协议分层:物理层到应用层、网络安全 | 第 1 篇 1.11;第 4 篇 4.1–4.7 |
2. 覆盖原则
2.1 「不遗漏」指概念与路径,不是逐页翻译
十部母本合计约 7000 页。逐页复述既不可能,也违背「精炼」。本书的覆盖判据是:
- 每个母本章节的核心问题必须在正文出现(可由覆盖矩阵逐条核对);
- 每个 API/结构/协议状态至少给出语义、边界、典型错误;
- 每条内核/网络路径至少给出「谁调用谁、数据结构怎么变、怎么观测」;
- 淘汰内容可以只出现在附录,但必须能查到「它是什么、为什么被取代、怎么迁移」。
因此覆盖矩阵里允许「一章对一节」,也允许「多章对一节」,但不允许「无落点」。
2.2 深度标记
正文用三种标记控制阅读负担:
| 标记 | 含义 | 第一遍 |
|---|---|---|
| 核心 | 必须掌握,后续章节依赖 | 精读 + 动手 |
| 选读 | 重要但可后补,通常是实现细节/边角 API | 知道在哪,用时回查 |
| 历史 | 已淘汰或被替代 | 只读附录 A.1 |
2.3 证据等级
本书把结论按证据强度标注(不单独打标签,而在正文中写清):
- 规范级:POSIX/Linux man-pages/RFC 明确规定;
- 实现级:当前内核/glibc 的实现行为,可能随版本变化;
- 观测级:在本书实验环境实测,注明命令与版本;
- 经验级:工程惯例,给出适用条件。
遇到冲突,以规范级为准;实现级要注明版本;经验级要说明边界。
3. 版本基线与淘汰政策
3.1 基线
| 项 | 基线 | 备注 |
|---|---|---|
| 发行版 | Ubuntu 24.04 LTS | Debian 12 / Fedora 40 差异在文中标注 |
| 内核 | Linux 6.8+ | 内核篇以 6.x 为主,4.x/5.x 差异标注 |
| libc | glibc 2.39 | musl 差异在容器/嵌入式处标注 |
| 编译器 | GCC 13 / Clang 18 | C17 + POSIX.1-2008 |
| 架构 | x86-64 为主 | ARM64 在汇编、内存、网络处对照 |
| 容器 | Docker 26 / containerd 1.7 / runc 1.1 | cgroups v2 |
3.2 淘汰内容清单
以下内容不占主线,集中到附录 A.1:
| 旧内容 | 现状 | 本书处理 |
|---|---|---|
SysV init、/etc/inittab、rc.local 作为主流程 | systemd 为事实标准 | 附录讲启动模型演进 + 如何迁移 unit |
ifconfig、route、arp、netstat | iproute2(ip、ss) | 第 0 篇只教 iproute2;附录给对照表 |
iptables 旧语法 | nftables;iptables-nft 兼容层 | 第 4/5 篇讲 nftables;附录给旧规则迁移 |
ext2/ext3 细节、mke2fs 旧选项 | ext4/XFS/Btrfs | 第 3 篇讲 VFS 与 ext4 日志;附录提 ext2 历史 |
32 位 x86 汇编、int 0x80 作为主入口 | x86-64 syscall;ARM64 svc | 第 1 篇讲 x86-64;附录保留 32 位对照 |
| Linux 2.6 O(1) 调度器、旧 CFS 细节 | EEVDF(6.6+) | 第 3 篇讲 CFS 思想 + EEVDF;旧调度器只作历史 |
| SysV IPC 作为首选 IPC | POSIX IPC、socket、io_uring | 第 2 篇讲 POSIX 为主;SysV 在附录对照 |
| 手写 Makefile 管理大型项目 | CMake/Meson/Bazel | 第 0/6 篇讲现代构建;Makefile 只讲最小必要 |
| 物理机装双系统、BIOS/MBR 为主 | UEFI/GPT、虚拟机/容器 | 第 0 篇讲 UEFI/GPT;附录提 BIOS/MBR |
| 传统 LAMP 手工编译部署 | 容器、CI/CD、声明式配置 | 第 5/6 篇讲容器化交付 |
判断标准:一个 2026 年入行的工程师,如果只学旧做法,是否会在真实工作中受阻?会,则旧做法进附录;不会,则保留在主线并标注「兼容」。
4. 明确排除的内容
以下内容不属于本书范围,避免「什么都讲一点」:
- 桌面环境的安装与美化、输入法、打印机、多媒体编解码;
- 特定发行版的安装器逐屏讲解(只讲分区与引导的通用原理);
- 云厂商产品操作(AWS/Aliyun 控制台)、Kubernetes 全量运维;
- 编译器构造、编程语言理论、算法竞赛;
- 内核所有子系统(如音频、USB、GPU 驱动)的逐行分析;本书只讲通用机制与一条完整路径。
5. 与母本的对应方式
每章末尾有「母本对应」小节,列出该章吸收了哪些原书章节。完整的逐章矩阵在附录 A.4,格式如下:
| 母本 | 原书章节 | 本书落点 | 覆盖程度 |
|---|---|---|---|
| Kerrisk | 第 4 章 文件 I/O | 2.2 | 完整 |
| Kerrisk | 第 5 章 深入文件 I/O | 2.3 | 完整 |
| CSAPP | 第 9 章 虚拟内存 | 1.9 + 3.8 | 理论 + 实现 |
| 鸟哥 | 第 7 章 磁盘与文件系统 | 0.10 + 3.12 | 使用 + 原理 |
覆盖程度分三档:完整(概念、API、边界、示例齐全)、精选(核心概念与常用 API,冷门 API 指路)、背景(只保留理解主线所需的最小集)。
6. 时效与勘误
技术书天然会过期。本书的处理办法:
- 与版本强相关的结论标注「Linux 6.8 实测」;
- 可能变化的默认值(如
net.core.somaxconn)给出查看命令,而不是只给数字; - 已知的母本笔误、版本差异集中到附录 A.6;
- 读者发现错误,欢迎按页脚的「编辑此页」直接提 PR。
下一站:能力矩阵与学习目标把「读完能做什么」写成可检查的条目。