大家好!经过几个月的深度博文撰写,我终于在周二发布了一本名为《终端的秘密规则》的新杂志!
您可以在这里以 12 美元的价格购买: https://wizardzines.com/zines/terminal ,或者在这里购买我的所有杂志的 15 本装。
这是封面:
目录
以下是目录:
为什么是终端?
一开始,当我想到要写一篇关于终端的文章时,我有点困惑。毕竟,你只需要输入一个命令然后运行它,对吧?这能有多难呢?
但后来我为一些刚接触终端的人举办了一个终端研讨会,有人问了这个问题:
“我该如何退出?Ctrl+C 不起作用!”
这个问题的答案很简单(他们运行了man pngquant
,所以只需按q
即可退出)。但这不禁让我思考,尽管终端中的不同情况看起来极其相似(全是文本!),但它们的行为方式却可能大相径庭。像“退出”这样简单的操作,根据你是在 REPL( Ctrl+D
)、像less
的全屏程序( q
)还是非交互程序( Ctrl+C
)中,都会有所不同。
然后我意识到这个终端比我想象的要复杂得多。
存在无数个微小的不一致之处
我越是思考如何使用终端,就越是意识到终端存在很多微小的不一致之处,例如:
- 有时您可以使用箭头键移动,但有时按箭头键只会打印
^[[D
- 有时你可以使用鼠标选择文本,但有时不能
- 有时,当你运行命令时,它们会被保存到历史记录中,有时则不会
- 有些 shell 允许你使用向上箭头查看上一个命令,有些则不允许
如果您每天使用终端 10 年或 20 年,即使您不完全理解为什么会发生这些事情,您也可能会对其形成直觉。
但对它们有直觉并不等同于理解它们发生的原因。在撰写这本杂志时,我实际上做了大量工作,才弄清楚终端里到底发生了什么,才能讨论如何进行推理。
规则没有写在任何地方
事实证明,终端工作的“规则”(如何编辑输入的命令?如何退出程序?如何修复颜色?)极难完全理解,因为“终端”实际上是由许多不同的软件组成的(终端仿真器、操作系统、shell、核心实用程序(如grep
)以及您安装的所有其他随机终端程序),它们是由不同的人编写的,他们对事物的运作方式有不同的看法。
所以我想写一些东西来解释:
- 终端的 4 个部分(shell、终端仿真器、程序和 TTY 驱动程序)如何组合在一起使一切正常工作
- 关于终端如何运作的一些核心约定
- 关于如何使用终端程序的大量技巧和窍门
这本杂志解释了终端内部最有用的部分
终端内部结构一团糟。很大程度上是因为上世纪 80 年代某个人做了决定,现在已经不可能改变。说实话,我觉得学习终端内部结构的一切并不值得。
但有些部分并不难理解,并且可以真正改善您在终端的体验,例如:
- 如果你了解你的shell负责什么,你可以配置你的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
)
我一路写的博客文章
这些天我像往常一样写了一堆关于各种支线任务的博客文章:
- 如何将目录添加到 PATH
- 终端问题遵循的“规则”
- 为什么管道有时会“卡住”:缓冲
- 一些终极挫折
- 我的终端中的 ASCII 控制字符“Ctrl+A、Ctrl+B、Ctrl+C 等有什么作用?”
- 在终端中输入文本很复杂
- 获得“现代”终端设置需要做什么?
- 使用 shell 作业控制的原因
- ANSI 转义码标准,这实际上是我在试图弄清楚我是否认为
terminfo
数据库今天能很好地为我们服务
为这本杂志提供帮助的人
很久以前,我主要靠自己写杂志,但随着每个项目的发展,我得到了越来越多的帮助。为了完成这本杂志,我从九月到六月,每个工作日都和《Marie Claire》杂志的 LeBlanc Flanagan见面。
封面由 Vladimir Kašiković 设计,Lesley Trites 负责文字编辑,Simon Tatham( PuTTY 的作者)负责技术审核,我们的运营经理 Lee 负责转录以及其他上百万件工作,而Jesse Luehrs (他是我认识的极少数真正了解终端内部运作方式的人之一)就终端内部发生的事情与我进行了许多非常有帮助的对话。
获取杂志
以下是一些可以再次获取该杂志的链接:
和往常一样,你可以选择PDF版本在家打印,也可以选择邮寄到家的印刷版。唯一需要注意的是,印刷版订单将于8月发货——我需要等到订单到账后再确定应该打印多少份。
原文: https://jvns.ca/blog/2025/06/24/new-zine–the-secret-rules-of-the-terminal/