新 zine:《终端的秘密规则》
原文由 Julia Evans 于 发布,订阅该博客
嗨,大家好!在写了好几个月关于终端的深度博客文章之后,我在周二发布了一本名为《The Secret Rules of the Terminal》的新 zine!
你可以在这里以 12 美元的价格购买:https://wizardzines.com/zines/terminal,或者在此购买包含我全部 zine 的 15 合集套装。
封面如下:
目录
目录如下:
为什么要讲终端?
我每天都在使用终端,已经用了 20 年。虽然我对终端很有信心,但心里总有点不踏实。平时一切正常,可一旦出了问题,就感觉根本无从查起,或者说一查就会牵出一大堆麻烦。
于是我开始试着把在终端里遇到过的各种奇怪问题列出来,才发现终端里有大量细微的不一致,比如:
- 有时候可以用方向键移动光标,有时候按方向键却只会打印出
^[[D - 有时候可以用鼠标选中文本,有时候又不行
- 有时候执行的命令会被保存到历史记录里,有时候又不会
- 有些 shell 可以用上方向键查看上一条命令,有些却不行
如果你每天都用终端,用上十年二十年,即使不完全明白这些现象背后的原因,也大概会对它们形成一种直觉。
但有直觉和真正理解原因毕竟是两回事。为了写这本 zine,我其实花了很大功夫去弄清楚终端里到底发生了什么,这样才能讲清楚该如何去理解它。
这些“规则”无处可查
事实证明,要完全理解终端的工作“规则”(比如怎么编辑输入的命令?怎么退出程序?怎么修复颜色显示?)是非常困难的,因为“终端”实际上是由许多不同的软件拼凑而成的(你的终端模拟器、操作系统、shell、像 grep 这样的核心工具,以及你安装的各种其他终端程序),它们由不同的人编写,每个人对事情该如何运作都有不同的想法。
所以我想写点东西来解释:
- 终端的 4 个组成部分(你的 shell、终端模拟器、应用程序和 TTY 驱动)是如何协同工作、让一切运转起来的
- 终端中一些核心的约定——你可以预期哪些行为会以什么方式运作
- 以及大量使用终端程序的技巧和窍门
这本 zine 讲解终端内部原理中最有用的部分
终端的内部原理一团糟。很多东西之所以是现在这样,只是因为有人在 80 年代做了个决定,而现在已经无法改变;说实话,我觉得没必要去学透所有这些内部细节。
但有些部分并不难理解,却能实实在在地改善你的终端使用体验,比如:
- 如果你明白 shell 负责什么,就可以配置你的 shell(或者换一个!)来更方便地访问历史记录、获得更强大的 Tab 补全等等
- 如果你理解了 转义序列,那么当用
cat把二进制文件输出到终端导致显示错乱时,也就没那么可怕了——只需输入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)
写作过程中写下的博客文章
和往常一样,这段时间我也围绕各种支线话题写了一堆博客文章:
- 如何将目录添加到 PATH
- 终端问题遵循的“规则”
- 为什么管道有时会“卡住”:缓冲
- 一些关于终端的烦恼
- 我的终端中的 ASCII 控制字符:谈谈“Ctrl+A、Ctrl+B、Ctrl+C 等到底是怎么回事?”
- 在终端中输入文本很复杂
- 打造一套“现代”终端配置需要做些什么?
- 使用 shell 作业控制的理由
- ANSI 转义序列的标准,这其实是我在思考
terminfo数据库在今天是否依然好用
帮助完成这本 zine 的人们
很久以前我基本都是独自写 zine,但每一个新项目都得到了越来越多的帮助。这本 zine 从去年 9 月到今年 6 月,我每个工作日都和 Marie Claire LeBlanc Flanagan 一起合作完成。
封面由 Vladimir Kašiković 设计,Lesley Trites 负责文字编辑,Simon Tatham(PuTTY 的作者)负责技术审校,我们的运营经理 Lee 负责誊写以及其他无数事务,Jesse Luehrs(我认识的极少数真正理解终端那些诡异内部机制的人之一)则与我进行了许多极有帮助的讨论,帮我弄清终端里到底发生了什么。
获取这本 zine
以下是再次获取这本 zine 的链接:
和往常一样,你可以选择在家自行打印的 PDF 版本,或是邮寄到家的印刷版。唯一需要注意的是,印刷版将在 8 月发货——我需要先根据订单情况确定印数,再送去印刷。
随机一篇博客


评论
登录后参与讨论