这是全书的最后一课。前面三十课,你学了 fork/exec、管道、重定向、信号……现在,我们把它们合流,亲手用 C 写一个能跑的真 shell。你会发现:你天天敲的 ls、cd、sleep 10 &,背后其实都是同一套机制。 写完它,你就真正"驾驭"了操作系统。从"你敲的那条命令"说起你敲下 ls -l | grep txt > out.txt,回车,结果出来了。这一瞬间,she …

前面二十九课,我们把操作系统从"进程"一路学到了"容器",理论齐了。但真正的高手,不只是"懂原理",更要会动手排障——系统卡了、内存满了、程序挂了,你能定位问题在哪吗?这一课,我们学一套"用命令解剖操作系统"的硬功夫。这是第九阶段(实战收束)的第一课,也是最"实用"的一课。从"体检"说起人身体不舒服,医生会做体检:量血压、验血、拍片,一步步定位病灶。系统也一样。它"不舒服"时(变慢、卡死、内存 …

现代系统几乎都跑在云上、容器里。你可能天天用 Docker,却未必想过:Docker 凭什么能做到"秒级启动、互相隔离"? 它和虚拟机有什么本质区别?这一课,我们把 Docker 的"黑魔法"拆开看——你会发现,它调用的全是 Linux 内核早就有的能力。这是第八阶段(虚拟化与容器)的唯一一课,也是全书倒数第三课。从"一栋楼 vs 一套房"说起要把"一台机器当多台用",有两条路:虚拟机(VM) …

前几课,你学了一整套 shell 武器:变量、判断、循环、函数、管道、三剑客。但光会写还不够——一个能上生产的脚本,还得健壮(出错能处理)、能定时自动跑(cron)、好排错。这一课,我们把知识合起来,写一个真正能用的自动化运维脚本,并让它按时自动执行。这是第七阶段(Shell 与脚本编程)的收官课。从"人工运维"到"自动运维"想象你每天要做这些事:备份文件、检查磁盘和内存、清理旧备份、记日志。 …

上一课你会写基本脚本了。但 shell 的真正威力,在于把一堆小工具串成流水线——用一行命令,从几万行日志里筛出想要的东西。这一课,我们讲 管道、重定向,以及那三个让文本处理如虎添翼的工具——grep / sed / awk(合称"文本三剑客")。这是 shell 最硬核、也最实用的部分。从"三条水管"说起每个程序,天生带着三条"水管",用来跟外界交换数据:stdin(标准输入):数据从哪进来 …

上一课我们知道 shell 是"命令解释器"。但它远不止"一条条敲命令"——它还能把一堆命令写进一个文件,按顺序、带逻辑地自动执行,这就是 shell 脚本。这一课,我们学习脚本的四大件:变量、判断、循环、函数,并写出第一个真正能用的自动化脚本。从"把命令攒成一个文件"说起你有没有过这种经历:一连串命令,每次都要手动敲一遍,烦死了。shell 脚本就是解法:把这一串命令写进一个文件,以后每次运 …

从这一课起进入第七阶段:Shell 与脚本编程。前面几十课,你一直在"用命令"——ls、cd、grep、gcc——但你有没有想过:你敲下 ls 回车,到底是谁在背后把它翻译成动作、再交给内核执行的? 那个幕后的"翻译官",就叫 shell。这一课,我们回到终端这个最熟悉的地方,揭开 shell 的面纱。从"敲命令"这个动作说起你在终端敲下 ls,回车,屏幕上出现一堆文件名。这中间发生了什么?不 …

上一课我们用 select + 一个线程就扛住了多个客户端。但一个更深的问题浮出水面:一个连接,到底是"开个进程"伺候,还是"开个线程",还是"什么都不开、用事件驱动"? 这三种做法各有优劣,没有银弹。这一课,我们站在更高处,看清高并发服务器的三种模型,以及那个经典的设计模式——Reactor(反应器)。这是第六阶段(网络编程)的收官课。从"开餐馆"说起你开了家餐馆,客人络绎不绝。怎么安排服务 …

上一课我们写了个 TCP echo 服务器,但它有个致命毛病:一次只能服务一个客户端。第一个客户端连进来不说话,服务器就永远卡在 read 上,第二个人怎么等都进不来。这一课,我们解决这个问题——让一个进程同时伺候成千上万个客户端。核心武器,就是网络 I/O 模型:阻塞、非阻塞、多路复用、异步。从"一个接线员"说起想象你是客服接线员,负责接电话。有两种工作方式:死等式:接起一个电话,就只守着这 …

从这一课起,我们进入第六阶段:网络编程。前面全是"单机"视角——进程、内存、磁盘,都是自己跟自己玩。但从现在起,视野要扩展到网络:一个程序,怎么跟另一台机器上的另一个程序对话?"连接"到底意味着什么?这一课,我们从最基础的 socket 讲起,亲手写一个能跑通的 TCP echo 服务器。从"打电话"说起你想跟远方的朋友说话,需要什么?一部电话机。你拿起电话、拨号、等对方接、然后开始说话——你 …