索引 / 001 ZH-CN
How Linux Works: What Every Superuser Should Know(精通 Linux:超级用户应知应会) cover

计算机科学

计算机科学

How Linux Works: What Every Superuser Should Know(精通 Linux:超级用户应知应会)

Brian Ward

英文原名: How Linux Works: What Every Superuser Should Know

一本以 Linux 为例、讲解真实操作系统内部机制的实用入门书。它从 shell 出发,向下深入内核、设备、启动过程和系统服务,再向上经由网络回到用户环境,并在每一层说明可以用哪些命令观察系统正在做什么。

需要的基础: 具备基本的电脑使用能力并愿意使用命令行;最后几章若有编程经验会有帮助,但并非必需。

难度等级
入门
学术层次
本科
operating systemslinuxkernelprocessesfile systemsnetworking

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机器或虚拟机上读这本书。运行每节给出的命令,把输出与书中对照;出现差异时,查阅发行版文档和出版社的勘误表。把每一章与操作系统教材中对应的概念章节配合阅读。