新 zine:《终端的秘密规则》
大家好!在花了好几个月写关于终端的深度博客文章之后,周二我发布了一本新的 zine,名为《终端的秘密规则》!
你可以在这里以 12 美元购买:https://wizardzines.com/zines/terminal,或者在这里购买包含我全部 zine 的 15 本套装。
这是封面:
目录
这是目录:
为什么写终端?
我已经每天使用终端 20 年了,虽然我对终端非常有信心,但我对它一直有一种隐隐的不安感。通常一切正常,但有时出了问题,排查起来感觉根本无从下手,或者至少像是会牵出一大堆麻烦。
于是我开始尝试把我在终端里遇到过的各种奇怪问题列成清单,然后我意识到终端有很多微小的不一致之处,比如:
- 有时你可以用方向键移动光标,但有时按方向键只会打印出
^[[D - 有时你可以用鼠标选择文本,但有时不行
- 有时你运行的命令会被保存到历史记录里,有时不会
- 有些 shell 允许你用上箭头查看上一条命令,有些则不允许
如果你每天使用终端 10 到 20 年,即使你并不完全明白这些事情为什么会发生,你也可能会建立起一种直觉。
但拥有直觉并不等于理解它们为什么会发生。在写这本 zine 的过程中,我实际上做了大量工作来弄清楚终端里到底发生了什么,才能谈论如何对它进行推理。
这些规则没有任何地方写下来
事实证明,终端运作的“规则”(如何编辑你输入的命令?如何退出一个程序?如何修复你的颜色?)非常难以彻底理解,因为“终端”实际上是由许多不同的软件组成的(你的终端模拟器、你的操作系统、你的 shell、像 grep 这样的核心工具,以及你安装的每一个其他随机的终端程序),它们由不同的人编写,这些人对于事情应该如何运作有着不同的想法。
所以我想写一些东西来解释:
- 终端的 4 个组成部分(你的 shell、终端模拟器、程序和 TTY 驱动)是如何配合起来让一切正常工作的
- 一些核心的约定,让你可以预期终端里的东西会如何表现
- 大量使用终端程序的技巧和窍门
这本 zine 讲解了终端内部机制中最有用的部分
终端的内部机制一团糟。很多东西之所以是现在这个样子,只是因为某个人在 80 年代做了一个决定,而现在已经不可能改变了,说实话我不认为把终端内部机制的一切都学会是值得的。
但有些部分并不难理解,而且能真正改善你在终端中的体验,比如:
- 如果你理解你的 shell 负责什么,你就可以配置你的 shell(或者换一个!),更方便地访问历史记录、获得出色的 tab 补全等等
- 如果你理解转义码(escape codes),当用
cat把二进制文件输出到 stdout 弄乱你的终端时就不会那么害怕了,你只需输入reset然后继续 - 如果你理解颜色是如何工作的,你就可以消除终端中糟糕的颜色对比度,从而真正看清文字
写这本 zine 让我学到了惊人的东西
当我写 How Git Works 时,我以为自己了解 Git 的工作原理,而且我是对的。但终端不一样。尽管我对终端感到完全自信,尽管我已经每天使用它 20 年了,我对终端的工作原理仍有很多误解,而且(除非你是 tmux 之类的作者)我认为你很可能也有同样的误解。
以下是我学到的一些对我确实有用的东西:
- 我更好地理解了终端的结构,所以在调试发生在我身上的奇怪终端问题时更有信心了(我甚至能够向 fish 提出一个小改进建议!)。要准确找出是哪一块软件导致我的终端出现奇怪的现象仍然不容易,但我现在擅长多了。
- 你可以写一个 shell 脚本来通过 SSH 复制到剪贴板
reset在底层是如何工作的(它相当于执行stty sane; sleep 1; tput reset)——基本上我明白了我不需要费心记住stty sane或tput reset,直接运行reset就行了- 如何查看程序打印出的不可见的转义码(运行
unbuffer program > out; less out) - 为什么我 Mac 上内置的 REPL 比如
sqlite3用起来那么烦人(它们用的是libedit而不是readline)
写作过程中写的博客文章
和最近的习惯一样,我为各种支线任务写了一大堆博客文章:
- How to add a directory to your PATH
- 终端问题遵循的“规则”
- 为什么管道有时会“卡住”:缓冲
- 一些终端上的挫败感
- 我终端里的 ASCII 控制字符——讲的是“Ctrl+A、Ctrl+B、Ctrl+C 等到底是怎么回事?”
- 在终端中输入文本很复杂
- 搭建一套“现代”终端环境需要哪些东西?
- 使用 shell 作业控制的理由
- ANSI 转义码的标准,这其实是我试图搞清楚
terminfo数据库在今天是否还对我们有用
帮助完成这本 zine 的人
很久以前我基本上都是独自写 zine,但随着每个项目,我得到的帮助越来越多。从九月到六月,每个工作日我都会和 Marie Claire LeBlanc Flanagan(玛丽·克莱尔·勒布朗·弗拉纳根)一起做这一本。
封面由 Vladimir Kašiković(弗拉基米尔·卡希科维奇)绘制,Lesley Trites(莱斯利·特赖茨)负责文字编辑,Simon Tatham(西蒙·塔瑟姆,《PuTTY》的作者)负责技术审校,我们的运营经理 Lee 负责转录以及其他无数事情,而 Jesse Luehrs(杰西·卢尔斯)(他是我认识的极少数真正理解终端那被诅咒的内部运作的人之一)和我进行了无数次极其有帮助的对话,讨论终端里到底在发生什么。
获取这本 zine
再附上一些购买这本 zine 的链接:
一如既往,你可以选择在家打印的 PDF 版本,也可以选择寄送到家的印刷版。唯一的注意事项是印刷版订单将在八月发货——我需要等订单进来,了解该印多少本之后才能送去印刷厂。
随机一篇博客

