网站建设医药,上海企业网络推广公司,网站标签怎样修改,wordpress产品列表Linux 终端(TTY)
TTY 是 Teletype 或 Teletypewriter 的缩写#xff0c;原来是指电传打字机#xff0c;后来这种设备逐渐键盘和显示器取代。不管是电传打字机还是键盘显示器#xff0c;都是作为计算机的终端设备存在的#xff0c;所以 TTY 也泛指计算机的终端(terminal)设…Linux 终端(TTY)
TTY 是 Teletype 或 Teletypewriter 的缩写原来是指电传打字机后来这种设备逐渐键盘和显示器取代。不管是电传打字机还是键盘显示器都是作为计算机的终端设备存在的所以 TTY 也泛指计算机的终端(terminal)设备。为了支持这些 TTY 设备Linux 实现了一个叫做 TTY 的子系统。所以 TTY 既指终端也指 Linux 的 TTY 子系统。本文中演示部分使用的环境为 ubuntu 22.04。
硬件终端 terminal(TTY)
早期的终端(terminal) 是一台独立于计算机的机器(teletype 即, TTY)大概像下面的样子 它终端通过线缆与计算机连接并完成计算机的输入输出功能 现在物理终端实际上已经灭绝了我们看到的所有 TTY 都是模拟视频终端即软件仿真出来的终端。可以通过 toe -a 命令查看系统支持的终端类型该列表很长。
qzubuntu22:~$ toe -a
ergo4000 microterm ergo 4000
excel62-w datamedia Excel 62 in 132 char mode
excel62-rv datamedia Excel 62 in reverse video mode
emu emu native mode
env230 envision 230 graphics terminal
ecmacolor color control for ECMA-48-compatible terminals
excel62 datamedia Excel 62
elks default ELKS console
elks-glasstty ELKS glass-TTY capabilities
elks-vt52 ELKS vt52 console
esprit-am hazeltine esprit auto-margin
eterm-color Emacs term.el terminal emulator term-protocol-version 0.96
emu-220 Emu-220 (vt200-7bit mode)
ep40 execuport 4000
esprit Hazeltine Esprit I
ecmasgr attribute capabilities for true ECMA-48 terminals
.....................
控制台
提到终端就不能不提控制台 console。控制台的概念与终端含义非常相近其实现在我们经常用它们表示相同的东西但是在计算机的早期时代它们确实是不同的东西。 一些数控设备(比如数控机床)的控制箱通常会被称为控制台顾名思义控制台就是一个直接控制设备的面板上面有很多控制按钮。 在计算机里把那套直接连接在电脑上的键盘和显示器就叫做控制台。而终端是通过串口连接上的不是计算机自身的设备而控制台是计算机本身就有的设备一个计算机只有一个控制台。**计算机启动的时候所有的信息都会显示到控制台上而不会显示到终端上。**这同样说明控制台是计算机的基本设备而终端是附加设备。计算机操作系统中与终端不相关的信息比如内核消息后台服务消息都可以显示到控制台上但不会显示到终端上。比如在启动和关闭 Linux 系统时我们可以在控制台上看到很多的内核信息(下图来自 vSphere Client 中的 “Virtual Machine Console”)
现在终端和控制台都由硬件概念逐渐演化成了软件的概念。简单的说能直接显示系统消息的那个终端称为控制台其他的则称为终端(控制台也是一个终端)。或者我们在平时的使用中压根就不区分 Linux 中的终端与控制台。
Linux 总是把写入 /dev/console 的内容会显示在控制台中当前的虚拟终端(tty1-tty6)里。
TTY 设备
从历史上看终端刚开始就是终端机配有打印机键盘带有一个串口通过串口传送数据到主机端然后主机处理完交给终端打印出来。电传打字机(teletype)可以被看作是这类设备的统称因此终端也被简称为 TTY(teletype 的缩写)。 如下图所示 UART 驱动 如上图所示物理终端通过电缆连接到计算机上的 UART(通用异步接收器和发射器)。操作系统中有一个 UART 驱动程序用于管理字节的物理传输。 行规范 上图中内核中的 Line discipline(行规范)用来提供一个编辑缓冲区和一些基本的编辑命令(退格清除单个单词清除行重新打印)主要用来支持用户在输入时的行为(比如输错了需要退格)。 TTY 驱动 TTY 驱动用来进行会话管理并且处理各种终端设备。 UART 驱动、行规范和 TTY 驱动都位于内核中它们的一端是终端设备另一端是用户进程。因为在 Linux 下所有的设备都是文件所以它们三个加在一起被称为 “TTY 设备”即我们常说的 TTY。
从软件仿真终端到伪终端
后来的终端慢慢演变成了键盘 显示器。如果我们要把内容输出到显示器只要把这些内容写入到显示器对应的 TTY 设备就可以了然后由 TTY 层负责匹配合适的驱动完成输出这也是 Linux 控制台的工作原理( 上图中TTY 驱动和行规范的行为与前面的示例类似但不再有 UART 或物理终端。相反软件仿真出视频终端并最终被渲染到 VGA 显示器。注意这里出现了软件仿真终端它们是运行在内核态的。 tty1-tty6 都是软件仿真终端 /dev/tty1-/dev/tty6 是这些仿真终端在文件系统中的表示程序通过对这些文件的读写实现对仿真终端的读写。
如果我们在用户空间也进行终端仿真情况会变得更加灵活下图是 xterm 及其克隆的工作方式 为了便于将终端仿真移入用户空间同时仍保持 TTY 子系统(TTY 子系统指 TTY 驱动和行规范)的完整伪终端被发明了出来(pseudo terminal 或 pty)。伪终端在内核中分为两部分分别是 master side 和 在 TTY 驱动中实现的 slave side。注意上图中的 xterm这是一个运行在用户态的终端仿真程序比如 Ubuntu Desktop 中的 GNOME Terminal 当创建一个伪终端时会在 /dev/pts 目录下创建一个设备文件 如果是通过 PuTTY 等终端仿真程序通过 SSH 的方式远程连接 Linux那么终端仿真程序通过 SSH 与 PTY master side 交换数据。
终端与伪终端的区别
至此我们可以得出这样的结论现在所说的终端已经不是硬件终端了而是软件仿真终端(终端模拟软件)。 关于终端和伪终端可以简单的理解如下
真正的硬件终端基本上已经看不到了现在所说的终端、伪终端都是软件仿真终端(即终端模拟软件)一些连接了键盘和显示器的系统中我们可以接触到运行在内核态的软件仿真终端(tty1-tty6)通过 SSH 等方式建立的连接中使用的都是伪终端伪终端是运行在用户态的软件仿真终端
总结
通过本文我们可以了解到真正的硬件终端基本上已经看不到了。在一些连接了键盘和显示器的系统中(当然也包括一些 vsphere 等虚拟环境)我们可以接触到运行在内核态的软件仿真终端。而我们使用最多的则是伪终端。