航站楼的秘密规则
你好!经过几个月撰写有关终端的深入博客文章后,周二我发布了一本新杂志,名为“终端的秘密规则”!
您可以在这里以 12 美元的价格购买:https://wizardzines.com/zines/terminal,或者在这里购买 15 包我所有的杂志。
这是封面:

目录
这是目录:

为什么是终端?
20年来我每天都在使用终端,但尽管我对终端非常有信心,但我总是对它有一点不安的感觉。通常情况下一切都很好,但有时会出现问题,感觉调查它是不可能的,或者至少会打开一个巨大的蠕虫罐。
所以我开始尝试写下我在终端中遇到的奇怪问题的列表,我意识到终端有很多微小的不一致之处,例如:
- 有时您可以使用箭头键来移动,但有时按箭头键只会打印
^((D - 有时可以用鼠标选择文本,但有时却不能
- 有时,您的命令在运行时会保存到历史记录中,有时则不会
- 有些 shell 允许您使用向上箭头查看上一个命令,有些则不允许
如果您每天使用终端 10 年或 20 年,即使您不太了解 为什么 这些事情发生后,你可能会对它们建立一种直觉。
但对它们有直觉并不等于理解它们为什么会发生。在写这本杂志时,我实际上做了很多工作才能弄清楚到底是什么 正在发生 在终端中能够谈论如何推理它。
规则没有写在任何地方
事实证明,终端工作方式的“规则”(如何编辑输入的命令?如何退出程序?如何修复颜色?)非常难以完全理解,因为“终端”实际上是由许多不同的软件组成的(终端仿真器、操作系统、shell、核心实用程序,例如 grep,以及您安装的所有其他随机终端程序),它们是由不同的人编写的,对于事情应该如何工作有不同的想法。
所以我想写一些东西来解释一下:
- 终端的 4 个部分(您的 shell、终端仿真器、程序和 TTY 驱动程序)如何组合在一起以使一切正常工作
- 关于终端中的内容如何工作的一些核心约定
- 有关如何使用终端程序的大量提示和技巧
这本杂志解释了终端内部最有用的部分
终端内部一团糟。很多事情就是这样,因为有人在 80 年代做出了决定,现在不可能改变,老实说,我认为学习有关终端内部结构的所有内容并不值得。
但有些部分并不难理解,并且确实可以让您在终端中的体验更好,例如:
- 如果你明白什么 你的外壳 负责,您可以配置您的 shell(或使用不同的 shell!)以更轻松地访问您的历史记录,获得出色的选项卡补全功能等等
- 如果你明白的话 转义码,当
cat将二进制文件发送到 stdout 会弄乱您的终端,您只需键入reset并继续前进 - 如果你明白如何 颜色 有效,您可以消除终端中不良的颜色对比度,以便您可以实际阅读文本
写这本杂志让我学到了很多东西
当我写《Git 工作原理》时,我以为我知道 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)
我一路上写的博客文章
像往常一样,这些天我写了一堆关于各种支线任务的博客文章:
为这本杂志提供帮助的人
很久以前,我主要自己写杂志,但在每个项目中我都会得到越来越多的帮助。从九月到六月的每个工作日,我都会与《Marie Claire》杂志的 LeBlanc Flanagan 会面,共同创作这一作品。
封面由 Vladimir Kašiković 创作,Lesley Trites 负责文案编辑,Simon Tatham(PuTTY 的编写者)负责技术审查,我们的运营经理 Lee 负责转录以及其他一百万件事情,而 Jesse Luehrs(我认识的极少数真正了解终端该死的内部工作原理的人之一)与我就终端中发生的事情进行了许多非常有用的对话。
拿到杂志
以下是一些重新获取该杂志的链接:
与往常一样,您可以在家打印 PDF 版本,也可以将打印版本运送到您家中。唯一需要注意的是打印订单将在 八月 – 我需要等待订单收到,才能知道在将其发送到打印机之前应该打印多少。
