什么是 Linux 上的 TTY? (以及如何使用 tty 命令)
tty 命令有什么作用? 它打印您正在使用的终端的名称。 TTY 代表“电传打字机”(TeleTypeWriter)。 命令名称背后的故事是什么? 这需要更多解释。
1800 年代的电传打字机
在 1830 年代和 1840 年代,开发了称为电传打字机的机器。 这些机器可以将键入的消息“沿着线路”发送到遥远的地方。 这些消息是由发件人在某种键盘上输入的。 它们在接收端打印在纸上。 它们是电报的进化步骤,以前依赖于莫尔斯电码和类似的电码。
消息被编码和传输,然后被接收、解码和打印。 有几种技术用于对消息进行编码和解码。 最著名的也是最多产的之一,于 1874 年由 Émile Baudot 获得专利,波特率就是以他的名字命名的。 他的字符编码方案比 ASCII 早 89 年。
Baudot 编码最终成为电传打字机编码中最接近标准的编码,并被大多数制造商采用。 Baudot 最初的硬件设计只有五个键,类似于钢琴键。 操作员需要学习每个字母的特定组合键。 最终,Baudot 编码系统与传统的键盘布局相结合。
为了纪念这一进步,这些机器被命名为电传打字机(teletypewriters),这被缩短为电传打字机(teletypes),并最终缩短为 TTY。 这就是我们从中获得首字母缩略词 TTY 的来源,但是电报与计算有什么关系呢?
ASCII 和电传
当 ASCII 于 1963 年问世时,它被电传打字机制造商采用。 尽管电话发明并广泛使用,电传打字机仍然很流行。
Telex 是一个全球性的电传打字机网络,可以将书面信息发送到全球各地。 在第二次世界大战后到 1980 年代传真机繁荣时期,它们是传输书面信息的主要方式。
计算机也在不断发展。 他们变得能够与用户实时交互,并支持多个用户。 旧的分批工作方法变得不够用了。 人们不想等待 24 小时或更长时间才能获得结果。 制作一堆穿孔卡片并通宵等待结果不再是可以接受的。
人们需要一种允许他们输入指令并将结果发回给他们的设备。 人们想要效率。
电传打字机的用途被重新定义
电传打字机是作为输入/输出设备的完美候选者。 毕竟,它是一种设计用于对信息进行打字、编码、发送、接收、解码和打印的设备。
如果连接另一端的设备不是另一种电传打字机,电传打字机会关心什么? 只要它使用相同的编码语言并且可以接收消息并发回消息,电传打字机就很满意。
当然,它使用了或多或少的标准键盘。
硬件模拟:电传打字机
电传打字机成为那个时代与大型小型计算机和大型计算机交互的默认方式。
它们最终被使用电子设备模拟那些机电机器的设备所取代。 这些有阴极射线管 (CRT) 而不是纸卷。 当从计算机传递响应时,他们没有动摇。 它们实现了迄今为止不可能实现的功能,例如在屏幕上移动光标、清除屏幕、加粗文本等。
DEC VT05 是虚拟电传打字机的早期示例,也是著名的 DEC VT100 的祖先。 售出了数百万台 DEC VT100。
软件模拟:电传打字机
在 Linux 和其他类 Unix 操作系统(如 macOS)的桌面环境中,终端窗口和应用程序(如 x-term 和 Konsole)都是虚拟电传打字机的示例。 但这些完全是在软件中模拟的。 它们被称为伪电传打字机。 这被缩短为 PTS。
这就是 tty 的用武之地。
tty 能告诉我们什么?
在 Linux 中,有一个伪电传多路复用器,它处理来自所有终端窗口伪电传打字机 (PTS) 的连接。 多路复用器是主机,PTS 是从机。 多路复用器由内核通过位于 /dev/ptmx 的设备文件寻址。
tty 命令将打印您的伪电传从属设备用于连接到主设备的设备文件的名称。 实际上,这就是您的终端窗口的编号。
让我们看看终端窗口的 tty 命令响应给我们什么:
$ tty
/dev/pts/1
响应显示:我们已连接到位于 /dev/pts/0 的设备文件。
我们的终端窗口是电传打字机 (TTY) 的软件仿真,作为伪电传打字机 (PTS) 连接到伪电传打字机多路复用器。 它恰好是零号。
静默选项
-s(静默)选项导致 tty 不生成任何输出。
但它执行完成后,确实会产生一个退出值,如下所示:
0:如果标准输入来自 TTY 设备,模拟的或物理的。
1:如果标准输入不是来自 TTY 设备。
2:语法错误,使用了不正确的命令行参数。
3:发生写入错误。
这可能在 Bash 脚本中最有用。 但是,即使在命令行上,我们也可以演示如何仅当您在终端窗口(TTY 或 PTS 会话)中运行时才执行命令。
因为我们在 TTY 会话中运行,所以我们的退出代码是 0,并且执行第二条命令。
$ tty -s && echo "In a tty"
who 命令
其他命令可以显示您的 TTY 号码。 who 命令将列出所有登录用户的信息,包括您自己。
Alec 和 Mary 远程连接到 Linux 计算机。 它们连接到 PTS 1 和 2。
用户 Dave 显示为连接到“:0”。
这表示物理连接到计算机的屏幕和键盘。 即使屏幕和键盘是硬件设备,它们仍然通过设备文件连接到多路复用器。 tty 显示它是 /dev/pts/2。
访问 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。
访问这些全屏控制台允许使用仅命令行安装 Linux 的人——许多 Linux 服务器都是这样配置的——可以使用多个控制台。
是否曾经在具有图形桌面环境的 Linux 机器上工作并且遇到过导致会话冻结的问题? 现在您可以跳到其中一个 TTY 控制台会话,以便您可以尝试纠正这种情况。
您可以使用 top 和 ps 来尝试识别失败的应用程序,然后使用 kill 来终止它,或者只是使用 shutdown 来尝试在计算机状态允许的情况下优雅地关闭。
三个小字母却历史悠久
tty 命令得名于 1800 年代后期的一种设备,于 1971 年出现在 Unix 中,至今仍是 Linux 和类 Unix 操作系统的一部分。
这个小家伙背后有很多故事。
ref:
https://www.howtogeek.com/428174/what-is-a-tty-on-linux-and-how-to-use-the-tty-command/