tty 命令有什么用?它会显示你正在使用的终端的名称。TTY 是 "电传打字机 (teletypewriter)" 的缩写。这个命令名称的由来有些复杂,让我们来详细解释一下。
0119 世纪的电传打字机
在 1830 年代和 1840 年代,发展出了一种称为电传打字机(teletypewriter)的设备。这些设备能够将打字信息通过电线发送到遥远的地方,信息由发送者通过一种键盘输入,并在接收端打印在纸上。这标志着电报技术的一大进步,此前电报技术主要依赖于摩尔斯电码及其它类似编码方式。
这些消息先被编码和传输,接着在另一端被解码和打印出来。使用了多种技术来进行消息的编码和解码。其中最著名且广泛使用的是 Émile Baudot 在 1874 年专利的一种编码方式,此人的名字也成为了波特率(baud rate)的由来。他的字符编码方案比 ASCII 早了 89 年。
Baudot 的编码最终几乎成为电传打字机编码的标准,并被大多数制造商所采纳。Baudot 最初的硬件设计仅包括五个类似钢琴键的按键,操作员需要为每个字母学习特定的键组合。
Baudot teletypewriter
随着时间的推移,Baudot 编码系统被整合进了传统键盘布局中。
teletypewriter
为了标记这一技术进步,这些机器被命名为 teletypewriters,简称为 teletypes,最终缩略为 TTYs。这就是 TTY 这一缩写的由来。但电报技术与计算技术又是如何联系在一起的呢?
02ASCII 和 Telex
1963 年,随着 ASCII 的问世,电传打字机的制造商开始采用这种编码系统。尽管电话已经发明并得到广泛使用,电传打字机仍然十分流行。
Telex 是一个覆盖全球的电传打字机网络,它使书面消息能够在全球范围内传送。从第二次世界大战后到 1980 年代传真机兴起的期间,Telex 成为了主要的书面消息传输手段。
Telex
计算机的发展也在加速。它们不仅能实时与用户互动,还能支持多用户操作。传统的批处理方法已不再能满足需求。人们不愿意等待超过 24 小时来获取结果,使用穿孔卡片并在隔夜等待结果的做法已经无法被接受。
人们需要一种设备,能够让他们输入指令并迅速获得反馈结果,以提高工作效率。
03电传打字机的重新利用
电传打字机成为输入/输出设备的理想选择。毕竟,它本来就是设计用来键入、编码、发送、接收、解码和打印消息的设备。
电传打字机并不介意连接的另一端是否是另一台电传打字机。只要对方使用相同的编码语言,能够接收并回传消息,电传打字机就能正常工作。
当然,它使用的是标准的键盘。
04硬件模拟的电传打字机
在那个时代,电传打字机成为了与大型迷你和主机计算机互动的默认方式。
随后,这些电机设备被采用电子技术模拟的设备所替代。这些新设备使用了阴极射线管 (CRTs) 而非纸卷。它们在接收计算机的响应时不会产生震动,并且提供了之前无法实现的功能,例如在屏幕上移动光标、清屏、文字加粗等。
DEC VT05 是一种早期的虚拟电传打字机,也是著名的 DEC VT100 的前身。DEC VT100 销售了数百万台。
DEC VT05 05软件模拟的电传打字机应用
在 Linux 及其他类 Unix 操作系统(如 macOS)的桌面环境下,终端(terminal)窗口和应用程序如 x-term 和 Konsole 等均为虚拟电传打字机的示例。这些应用程序完全通过软件实现模拟,并被称为伪电传打字机,简称 PTS。
这也正是 tty 命令发挥作用的场合。
06TTY 能告诉我们什么?
在 Linux 系统中,一个伪电传打字机(pseudo-teletype)多路复用器(multiplexor)负责处理所有终端窗口伪电传打字机(PTS pseudo-teletypes)的连接。多路复用器作为主设备,而 PTS 则是从设备。多路复用器通过位于 /dev/ptmx 的设备文件与内核进行通信。
使用 tty 命令可以查看你的伪电传打字机从设备所使用的设备文件名称,这个名称实际上代表了你的终端窗口编号。
让我们看看 tty 对我们的终端窗口返回了什么结果:
tty
在终端窗口执行 tty 命令,响应显示我们的连接指向 /dev/pts/0。
我们的终端窗口,通过软件模拟了电传打字机(TTY),作为一个伪电传打字机(PTS)与伪电传打字机多路复用器相连,它的编号是零。
07静默选项
在使用 tty命令时,-s(静默)选项会阻止命令产生任何输出:
tty-s
作用就是让 tty 命令在执行时保持静默,即不输出任何信息。
不过,该命令会返回一个退出值(exit status),这个值可以告诉你一些关于当前环境的信息:
0:如果标准输入来自 TTY 设备,无论是模拟的还是物理的。
1:如果标准输入不来自 TTY 设备。
2:语法错误,使用了错误的命令行参数。
3:发生写入错误。
0:如果标准输入来自 TTY 设备,无论是模拟的还是物理的。
1:如果标准输入不来自 TTY 设备。
2:语法错误,使用了错误的命令行参数。
3:发生写入错误。
这些退出值在编写 Bash 脚本时尤其有用。在实际应用中,例如在命令行中,我们可以演示如何只在你处于终端窗口(TTY 或 PTS 会话)中运行时执行某个命令:
tty-s&&echo"Inatty"
只有当前环境为终端时,才会执行 echo 命令输出 "In a tty",因为我们处于一个 TTY 会话中,退出码为 0,因此会执行第二个命令。
08WHO 命令
其他命令也可以显示你的 TTY 号码。who 命令将列出所有已登录用户的信息,包括你自己的。
Alec 和 Mary 是通过远程连接到 Linux 计算机的。他们分别连接到了 PTS 1 和 PTS 2。
用户 Dave 显示为连接到 “:0”。
这表示他是通过物理连接到计算机的屏幕和键盘,即本地会话访问的。这种连接通常用于图形界面用户会话。
而尽管屏幕和键盘是硬件设备,它们仍然可以通过设备文件与多路复用器连接,不过这在 who 命令的输出中体现为本地会话的标识符“:0”。
09如何访问 TTY
你可以通过同时按下 Ctrl+Alt 键和功能键之一,进入全屏 TTY 会话。
按下 Ctrl+Alt+F3 将带你进入 tty3 的登录界面。
登录后执行 tty 命令,你会发现自己连接到了 /dev/tty3。
这不是软件模拟的伪电传打字机,它实际上是一种硬件模拟的虚拟电传打字机。它利用连接到计算机的屏幕和键盘模拟像 DEC VT100 那样的虚拟电传打字机。
你可以使用 Ctrl+Alt 和 F3 到 F6 的功能键来同时开启多达四个 TTY 会话。例如,你可以在 tty3 登录,然后按 Ctrl+Alt+F6 跳转到 tty6。
要返回图形桌面环境,按 Ctrl+Alt+F2。
按 Ctrl+Alt+F1 将带你回到图形桌面环境的登录界面。
在以前,Ctrl+Alt+F1 到 Ctrl+Alt+F6 会打开全屏 TTY 控制台,而 Ctrl+Alt+F7 会带你回到图形桌面。如果你使用的是较旧版本的 Linux,你的系统可能还是这样运行的。
在 Manjaro、Ubuntu 和 Fedora 的最新版本上进行测试,它们的表现如下:
Ctrl+Alt+F1:带你回到图形桌面环境的登录界面。
Ctrl+Alt+F2:带你回到图形桌面环境。
Ctrl+Alt+F3:打开 TTY 3。
Ctrl+Alt+F4:打开 TTY 4。
Ctrl+Alt+F5:打开 TTY 5。
Ctrl+Alt+F6:打开 TTY 6。
Ctrl+Alt+F1:带你回到图形桌面环境的登录界面。
Ctrl+Alt+F2:带你回到图形桌面环境。
Ctrl+Alt+F3:打开 TTY 3。
Ctrl+Alt+F4:打开 TTY 4。
Ctrl+Alt+F5:打开 TTY 5。
Ctrl+Alt+F6:打开 TTY 6。
这种全屏控制台访问权允许只使用命令行安装的 Linux 用户——许多 Linux 服务器就是这样配置的——拥有多个控制台可用。
你是否曾在使用图形桌面环境的 Linux 机器工作时遇到系统冻结?现在,你可以切换到其中一个 TTY 控制台会话,尝试解决问题。
你可以使用 top 和 ps 命令来识别出问题应用程序,使用 kill 命令终止它,或者使用 shutdown 命令尽可能地优雅地关闭计算机。
10TTY 三个字母的历史
tty 命令的名称源自 19 世纪末的一种设备,它在 1971 年首次出现于 Unix 系统中,直到今天,它仍然是 Linux 和类 Unix 操作系统不可或缺的一部分。
这三个简单的字母背后藏着一段丰富的历史故事。
作者:Dave McKay