https://juejin.cn/post/7521356618174873642
https://zhuanlan.zhihu.com/p/447014333
tty历史:电传打字机
terminal和tty区别
在 Linux/Unix 系统中,terminal(终端)和 tty 是两个密切相关但含义不同的概念,它们的区别主要体现在抽象层次和功能定位上。简单来说,tty 是系统内核提供的 “硬件 / 虚拟设备接口”,而 terminal 是基于这些接口的 “用户交互工具”。
核心区别:层次与定位
概念 本质含义 核心作用 典型实例
- tty:内核级设备接口(Teletypewriter 的缩写),是系统与输入输出设备的 “桥梁” 处理底层数据传输,将用户输入传递给系统,将系统输出返回给用户,如:/dev/tty1(本地虚拟终端)、/dev/ttyS0(串口)
- terminal:用户级交互工具,是基于 tty 设备的 “应用程序” 或 “界面” 提供友好的交互环境(如显示字符、处理快捷键、支持颜色等)如:GNOME Terminal、Konsole、xterm、screen
详细解析
- tty:系统底层的 “设备接口”
tty 最初指物理的 “电传打字机”(早期计算机的输入输出设备),后来演变为 Linux 内核中所有输入输出设备的抽象接口。它是操作系统内核的一部分,负责:
- 接收用户输入(如键盘按键)并传递给内核;
- 将内核输出(如命令执行结果)传递给输出设备(如显示器);
- 处理基本的输入输出规则(如回车换行转换、特殊字符处理)。
特点: - 是 “设备文件”(位于 /dev/ 目录下),如 /dev/tty1(本地虚拟终端)、/dev/pts/0(远程终端)、/dev/ttyS0(串口);
- 不直接提供用户友好的交互功能(如颜色、光标移动),仅负责数据传输;
- 系统中所有与 “输入输出” 相关的交互,最终都要通过某个 tty 设备完成。
- terminal:用户交互的 “应用程序”
terminal(终端程序)是运行在用户空间的应用程序,它基于 tty 设备,为用户提供更友好的命令行交互环境。它在 tty 的基础上增加了额外功能:
- 支持字符颜色、字体样式;
- 处理复杂快捷键(如 Ctrl+Shift+C 复制);
- 提供窗口大小调整、标签页等界面功能;
- 模拟传统物理终端的行为(如 xterm 模拟 VT100 终端)。
特点: - 是用户直接操作的 “窗口” 或 “程序”,而非内核设备;
- 必须关联一个 tty 设备才能工作(例如,GNOME Terminal 启动时会自动关联 /dev/pts/0 这样的伪终端);
- 现代图形界面中的 “终端模拟器”(Terminal Emulator)都属于此类。
关系:terminal 依赖 tty 工作
终端程序(terminal)和 tty 设备是 “上层应用” 与 “底层接口” 的关系:
- 当你打开一个终端程序(如 GNOME Terminal),系统会自动创建一个 tty 设备(通常是 /dev/pts/ 目录下的伪终端,如 /dev/pts/1);
- 终端程序将用户输入(如键盘敲击)发送到关联的 tty 设备;
- tty 设备将输入传递给内核,内核处理后将输出返回给 tty 设备;
- 终端程序从 tty 设备读取输出,并用友好的方式(如彩色、排版)展示给用户。
总结:如何区分?
- 如果你看到的是 /dev/ 目录下的文件(如 /dev/tty1、/dev/pts/0),那是 tty 设备;
- 如果你使用的是一个带窗口、有菜单、支持复制粘贴的程序(如终端图标打开的窗口),那是 terminal 程序;
- tty 是 “管道”,负责数据传输;terminal 是 “显示器 + 键盘” 的高级包装,让用户更方便地使用这个管道。
简单来说:所有 terminal 都需要通过 tty 工作,但 tty 可以独立存在(如服务器的物理控制台,没有图形终端程序时也能通过 tty 操作)。