01 / 导读
导读
引用
Ward, B. (2021). How Linux Works: What Every Superuser Should Know (3rd ed.). No Starch Press.
章节概要
第3版共十七章,另有参考文献和索引(索引从第423页开始)。序言说明了本书的读者对象、先修知识、阅读方法、关于动手实践的说明以及全书结构。据出版社介绍,本版新增了逻辑卷管理器(LVM)、journald日志系统和IPv6的内容,扩充了对systemd的讨论,并新增了一章讲虚拟化,包括容器和cgroups。各章从系统各层的概览出发,经过命令行、设备、磁盘和启动,再到进程、网络、用户环境、开发工具和虚拟化,许多小节都展示了能揭示系统运行情况的命令和文件。
第1章:全局概览
讲Linux系统中抽象的层次和分层:硬件与主存、内核、用户空间以及用户。这一章给出一幅地图,全书其余部分逐一填充。
第2章:基础命令和目录层次结构
一份实用的shell入门:基础和中级命令、目录导航、环境变量与命令路径、特殊字符、编辑器、在线帮助、输入输出重定向、错误信息、进程、文件权限、归档、目录层次结构以及以超级用户身份运行命令。
第3–4章:设备;磁盘和文件系统
讲设备文件、sysfs设备路径、dd、设备命名和udev,还有一节深入介绍内核中的SCSI。第4章讲分区、文件系统、交换空间和逻辑卷管理器,最后深入传统文件系统的内部。
第5–6章:Linux内核如何启动;用户空间如何启动
免费的样章从如何查看启动信息(例如用journalctl -k)讲起,接着讲内核初始化与参数、引导加载程序、GRUB、UEFI安全启动问题以及链式加载。第6章介绍init、systemd的细节、System V运行级别与init、关机、初始RAM文件系统以及紧急启动。
第7章:系统配置:日志、系统时间、批处理任务和用户
讲系统日志、/etc的结构、用户管理文件、getty与login、设置时间、用cron、systemd定时器单元和at调度任务、用户访问相关主题以及可插拔认证模块(PAM)。
第8章:深入了解进程和资源利用
讲跟踪进程、用lsof查找打开的文件、跟踪程序执行和系统调用、线程、资源监控以及控制组(cgroups)。
第9–10章:理解网络及其配置;网络应用和服务
第9章从分层和数据包讲起,经过IP路由、IPv6、ICMP和DNS工具、内核网络接口、配置管理器、主机名解析、TCP与UDP、DHCP、把Linux配置为路由器、NAT、防火墙、ARP与NDP,一直讲到无线网络。第10章上升到服务层面:网络服务器、较早的inetd/xinetd、诊断工具、远程过程调用、网络安全和套接字。
第11章:shell脚本入门
讲脚本基础、引号、特殊变量、退出码、条件判断、循环、命令替换、临时文件、here文档、常用工具、子shell和读取输入,最后讨论何时不应使用shell脚本。
第12–14章:网络文件传输与共享;用户环境;Linux桌面和打印概览
用rsync复制文件,用Samba、SSHFS、NFS和云存储共享文件;shell启动文件及其陷阱;以及桌面组件,比较Wayland与X Window系统,并介绍D-Bus和打印。
第15–16章:开发工具;从C源代码编译软件入门
讲C编译器、make、lex与yacc、脚本语言和Java,然后讲从源代码构建软件:构建系统、GNU Autoconf、安装实践、打补丁以及故障排查。
第17章:虚拟化
本版新增的一章:虚拟机、容器以及基于运行时的虚拟化。
核心概念
第1–4章:分层、shell与存储
- 内核与用户空间:享有特权的内核与它所管理的进程之间的划分。
- 设备文件与udev:内核如何把硬件呈现为文件,以及设备名如何生成。
- 文件系统、交换空间与LVM:磁盘如何分区、格式化并汇集成逻辑卷。
第5–8章:启动与进程
- 启动顺序:固件和引导加载程序(GRUB),内核初始化与参数,然后是init。
- systemd:启动并管理服务、定时器和日志的init系统。
- 系统调用与跟踪:观察进程如何向内核请求服务。
- 控制组:限制和统计进程资源的内核机制。
第9–12章:网络
- 网络分层:物理层、网际层和传输层,以及Linux如何配置每一层。
- 路由、NAT与防火墙:数据包如何被转发、转换和过滤。
- 套接字:程序在网络上或本机内通信所使用的接口。
第13–17章:用户、开发与虚拟化
- 启动文件:塑造每个用户环境的shell配置。
- 从源代码构建:编译器、
make、Autoconf和补丁。 - 容器与虚拟机:通过模拟整台机器或共享宿主内核来隔离工作负载。
评析
优点
- 直接考察真实的系统。 样章展示了这种方法:启动的每个阶段都配有命令和日志输出加以说明,读者可以在自己的机器上观察。这使内核、init、系统调用等抽象概念变得具体。
- 覆盖现代Linux的组成部分。 systemd、journald、cgroups、LVM、IPv6、Wayland和容器都有专门的小节,体现了出版社列出的更新内容。出版社引用的Sandra Henry-Stocker指出,这些变化正是需要第3版的原因,并称本书全面而新颖。
- 可作参考书使用。 出版社引用的Lee Teschler(Microcontroller Tips)认为,本书的组织方式让读者可以在某个主题上只深入到所需的程度;Ian Bruntlett在 C Vu(ACCU,第33卷第4期)上推荐本书时,称它是一份附有深入线索的概览。
局限
- 讲的是Linux,而不是一般的操作系统。 本书说明一个系统如何组成和管理;调度算法、内存管理理论、同步以及文件系统设计原理都不是章节主题,因此它不能代替操作系统教材。
- 实践细节会过时。 本书的价值很大程度上在于具体的命令、文件和工具,而这些会随发行版和版本变化;出版社维护着勘误表,读者应核对最新文档。
- 部分主题重广度而轻深度。 桌面概览和虚拟化等章节相对于其主题篇幅较短,正如其标题("概览")和小节数(虚拟化只有三节)所示。
在课程中的定位
本书是操作系统课程中的实践伴读。Silberschatz、Galvin和Gagne的 Operating System Concepts、Tanenbaum和Bos的 Modern Operating Systems,以及Arpaci-Dusseau夫妇免费提供的 Operating Systems: Three Easy Pieces 以一般化的方式讲授概念(进程、调度、内存、并发、文件系统);Ward则展示这些概念在一台运行中的Linux机器上出现在哪里、如何查看。最好与其中一本同时阅读:教材讲到进程或文件系统时,就用本书第4章和第8章在实践中加以印证。
Saltzer和Kaashoek的 Principles of Computer System Design 在更一般的层面上,把抽象、模块化、命名、保护和通信作为计算机系统的设计原理来讨论;Ward关于分层、网络和虚拟化的章节为这些思想提供了具体的Linux实例。
如何使用本书
本书适合需要Linux实际操作经验来配合操作系统或网络课程的学生、新入行的系统管理员,以及想了解自己所部署机器的开发者。具备基本的计算机常识并愿意使用命令行就可以开始;第15–16章需要一些编程经验。
实用阅读计划:
- 核心: 先读第1–2章,再按顺序读第3–8章。这部分从硬件开始,经启动、配置一直讲到进程,与操作系统课程的主题对应最直接。
- 网络: 第9–10章,对需要运行服务器的人必不可少;第12章以它们为基础。
- 技能: 讲shell脚本的第11章和讲用户环境的第13章,最好打开终端边读边练。
- 按兴趣选读: 第14章(桌面)、第15–16章(开发与构建软件)和第17章(虚拟化),最后一章是通向容器的有益桥梁。
在一台可以放心折腾的Linux机器或虚拟机上读这本书。运行每节给出的命令,把输出与书中对照;出现差异时,查阅发行版文档和出版社的勘误表。把每一章与操作系统教材中对应的概念章节配合阅读。
