这一篇的目标不是让你放弃 VS Code 改用 vim,而是解决一个现实问题:登录一台生产服务器,你只有 vi。 服务器上没有图形界面、没有 VS Code Remote、精
find 是最容易「会用但不理解」的命令:大家都会 find . -name '*.log',但一旦条件复杂起来就开始碰运气。 根本原因是大多数人把 find 的参数当成了「选项」,
grep、sed、awk 被称为「文本处理三剑客」。大多数人的状态是:会 grep xxx file,会 sed 's/a/b/g',会 awk '{print $1}',再复杂一点就开始
这一篇讲的是 shell 里最容易「用对但说不清」的部分。它的价值在于:一旦理解了「重定向在命令执行前完成」和「展开有固定的七个阶段」,一大批诡异现象会
这一篇讲操作:怎么建用户、怎么配组、怎么给权限、怎么配 sudo。每个操作都会顺带说清「为什么是这样」,但完整的设计演进史(DAC 的缺陷、ca
这一篇解决「一块盘从插上到能用」的完整链路,以及最高频的运维事故:磁盘满了。 先看五个问题: lsblk、df、du、fdisk -l 分别在回答什么
这一篇讲「把一堆文件变成一个文件」和「把文件搬到别处」。看起来是最简单的操作,但 tar 的参数体系和 rsync 的斜杠语义,是运维事故的两个经典来源。 先看五
进程是操作系统最核心的抽象。这一篇讲怎么看进程、怎么控制进程、以及那些「看起来杀不掉」的进程到底怎么了。 先看五个问题: ps aux 里的 VSZ 和 RSS 有什么区
上一篇讲了进程,这一篇讲怎么把进程变成服务。systemd 的设计之争(为什么它赢了、为什么它被骂)留给第 37 篇,这里只讲实操。 先看五个问题: T
这一篇是上手部分里最实用的一篇:线上故障有很大比例是网络问题,而排查网络问题靠的是「分段定位」的能力。 先看五个问题: ifconfig 为什么被废弃了?ip 命
SSH 是服务端工程师每天都在用、但大多数人只用到 10% 的工具。这一篇把剩下的 90% 补上。 先看五个问题: 密钥认证的完整过程是什么?为什么说私钥永远不会离开
这是上手部分的最后一篇。前面 16 篇讲的命令,最终都会被写进脚本 —— 而脚本的可靠性取决于你是否知道 shell 的那些坑。 先看五个问题: set -euo pipefail 每一项在防什么
从这一篇开始进入第二部分:深入层。前 17 篇回答「怎么用」,接下来 23 篇回答「为什么被设计成这样」。 第一篇不讲具体机制,而是建立一个分析框架:任何
上一篇建立了「理解约束才能理解设计」的框架。这一篇用它分析启动流程 —— 启动是一条环环相扣的链条,每一环都是为了解决前一环留下的问题而存在的。
18 篇讲了「一切皆文件」这个抽象的取舍,这一篇讲内核到底怎么实现它 —— 以及为什么这个实现需要三层对象而不是一层。 先看五个问题: read(fd, buf, n) 从 fd 到实际
fork() 是 Unix 最有辨识度的设计:一次调用,两次返回。它经常被当作「优雅」的范例,也经常被批评为「过时的错误」。 这一篇要说清楚:它为什么长这样、它的优
10 篇讲了 uid/gid 的操作,这一篇讲它们为什么长成这样 —— 特别是那个让无数人困惑的问题:为什么一个进程需要四套 uid? 先看五个问题: 为什么需要 ruid/euid/suid/fsuid 四套 u
10 篇讲了权限的操作,22 篇讲了凭证模型。这一篇把它们串成一条五十年的时间线 —— 每一层机制都是为了补上前一层的缺陷而出现的。 先看五个问题: 为什
虚拟内存是操作系统最昂贵的抽象:每一次内存访问都要经过地址翻译。这一篇讲它为什么值得。 先看五个问题: 虚拟内存最初解决的是什么问题?为什么值得
24 篇讲的是「虚拟地址如何映射到物理页」。这一篇讲那些物理页本身是怎么被管理的 —— 从分配到回收到杀进程。 先看五个问题: buddy 分配器怎么对抗外部碎片