终端里到底有什么 书架

第 01 章 / 共 12 章

第一章 · 电传打字机的幽灵

打开 mac 的「终端」或者 iTerm2,你会看到一个黑乎乎(或者白花花)的窗口,里面有一行字在闪:$。这本书要回答的问题是:你在这个窗口里敲下一个键,到屏幕上多出一个字符,再到千里之外的服务器帮你执行一条命令,中间到底发生了什么?

但在回答这个问题之前,得先解决一个更基本的疑惑:这东西为什么叫「终端」?终端是谁的末端?

计算机曾经是房间里的大象

1960 年代的计算机不是摆在桌上的东西,而是一整个房间:成排的机柜、嗡嗡作响的磁带机,一台机器要几百万元,一所大学可能只有一台。这么贵的东西,当然不能一个人独占——于是人们发明了分时系统:主机把时间切成极小的片,轮流服务几十个用户,快得让每个人都觉得机器是自己的。

问题来了:几十个用户怎么同时用一台机器?答案就是终端(terminal,「末端」)——主机是大脑,终端是伸到各个角落的神经末梢:一个键盘,加一个输出设备,中间一根线连到主机。终端自己几乎没有计算能力,它只负责两件事:把你敲的字发过去,把主机回的字显示出来。后来人们把这种设备叫哑终端(dumb terminal)——「哑」的意思就是它很笨,聪明全在主机那边。

最早的「屏幕」是纸

最早的终端连屏幕都没有。它是一台改装过的电传打字机(teletype,缩写 TTY)——本来是邮局用来发电报的机器:你在这头敲字,千里之外的另一台机器就把字打在纸上。工程师把它接到计算机上:键盘敲的字符顺着电线送进主机,主机算完,把结果一个一个字符发回来,打字机的打印头就哒哒哒地把结果打在纸上。

所以早期用电脑的真实画面是:你敲一行命令,等几秒,纸带上打出一行结果。纸越堆越高,那就是你的「屏幕」,还能往回翻——物理意义上的翻。

这台机器对今天的深远影响,怎么强调都不过分。因为你的 Mac 上那个黑窗口,骨子里还在假装自己是一台 1963 年的电传打字机。

打字机留下的活化石

不信?随便开一个终端,敲 tty 这个命令,它会告诉你当前终端的设备文件,比如 /dev/ttys003。TTY 就是 teletype 的缩写——六十多年了,Linux 和 macOS 的内核里,管终端的那层代码仍然叫 tty。

再比如这些你多半遇到过、却未必想过来历的事:

从纸到玻璃,只是换了个「打印头」

1970 年代,纸换成了荧光屏,出现了「玻璃打字机」——其中最有名的是 DEC 公司的 VT100(1978 年)。它用电子束在屏幕上「打印」字符,行为上仍然模仿打字机:字符从左到右、从上到下,写满一行就换行,写满一屏就往上滚。

但屏幕毕竟比纸灵活:可以把光标挪到任意位置、清掉整行、让字变粗变亮。主机怎么告诉终端干这些事?用一串特殊的、不会显示出来的「指令字节」——这就是第四章要讲的转义序列,VT100 定的这套暗号后来成了行业标准,你今天终端里的颜色、进度条、vim 的整个界面,全靠这套四十多年前的暗号。

硬件死了,幽灵活着

1980 年代以后,个人电脑普及,一台机器自己就有键盘和显示器,不再需要分时的哑终端,硬件终端逐渐绝迹。但奇妙的事情发生了:硬件死了,协议活着。

今天你打开 iTerm2,它做的第一件事就是在操作系统里申请一对「假终端」设备(第七章详谈),然后认认真真地扮演一台 VT100:内核以为自己在和打字机说话,程序以为自己连着 VT100,而 iTerm2 在窗口里用显卡把这一切画出来。你在 Linux 服务器上敲 ls --color 看到的彩色文件名,是程序发出的 VT100 暗号;你按 Ctrl-S 屏幕停住,是电传打字机的流控手势。

一句话总结这一章:终端不是「那个黑窗口」,而是一套从电传打字机时代传下来的规矩——键盘出字节、屏幕收字节、中间一根线。今天所有的终端软件,都是这套老规矩的新演员。

那么这套规矩的核心——「中间那根线上跑的到底是什么」——就是下一章的事。剧透一下:只有字节,没有别的。

终端里到底有什么
费曼式写法 · 由多个 AI 代理撰写与互相审校