LinuxTTY 子系统1

LinuxTTY 子系统1(基于Linux6.6)---基本概念

 


一、概述

在 Linux 操作系统中,tty(Teletypewriter)是指一个与终端设备(例如命令行界面、串口设备等)交互的抽象层。尽管最初的 tty 源自早期的电传打字机(teletypewriter)设备,但在现代 Linux 系统中,tty 主要代表了用户与操作系统之间的文本输入输出设备,通常通过命令行界面进行交互。

1. tty 的起源与历史

tty 最早是指与计算机进行交互的物理终端设备,如电传打字机和早期的字符显示器。后来,随着计算机技术的发展,物理终端逐渐被虚拟终端(pseudo-terminal,简称 PTY)所替代,尤其是在 UNIX 和 Linux 系统中,虚拟终端使得多个用户和会话可以同时访问操作系统。

2. tty 的现代含义

在现代 Linux 系统中,tty 通常有以下几个含义:

  • 物理终端设备:指系统中的物理串口设备或控制台终端(例如 /dev/tty1, /dev/ttyS0 等)。
  • 虚拟终端(VT):指通过屏幕和键盘模拟的终端设备,通常是多用户环境下的用户输入输出通道。例如,使用 Ctrl+Alt+F1 切换到的终端会话就是一个虚拟终端(如 /dev/tty1)。
  • 伪终端(PTY):用于支持终端仿真和远程连接。伪终端设备通常由应用程序(如 sshxtermscreen 等)使用,提供虚拟的终端会话。例如 /dev/pts/0 是一个伪终端设备,通常由 ssh 或终端仿真程序使用。

3. tty 设备类型

在 Linux 系统中,tty 设备通常可以分为以下几类:

  • 物理终端设备(Physical TTY)

    • 控制台终端:例如 /dev/tty1, /dev/tty2 等,表示系统的物理终端。每个数字表示一个控制台,用户可以在这些控制台之间切换。
    • 串口设备:如 /dev/ttyS0/dev/ttyUSB0 等,表示串口或 USB 转串口设备。用于与外部设备(如调试工具、嵌入式设备等)进行串行通信。
  • 虚拟终端(Virtual Terminal):每个虚拟终端都映射到一个设备文件,例如 /dev/tty1/dev/tty6 通常用于控制台登录。通过 Ctrl+Alt+F1Ctrl+Alt+F6 可以切换到这些虚拟终端。

  • 伪终端(PTY,Pseudo-terminal)

    • 伪终端主要用于应用程序(如远程登录、图形化终端、命令行工具等)之间的交互。伪终端包括主设备(Master)和从设备(Slave)。主设备是虚拟终端的创建者,通常通过 /dev/pts/0/dev/pts/1 等表示,从设备则用于输入输出的实际交互。
    • 例如,在 SSH 会话中,每个用户连接都会通过一个伪终端(如 /dev/pts/0)进行通信。

4. 如何使用 tty

查看当前终端设备

可以使用 tty 命令来查看当前用户会话所在的终端设备:

$ tty
/dev/tty1

该命令返回当前终端的设备文件。例如,/dev/tty1 表示用户正在 /dev/tty1 虚拟终端中工作。

切换终端会话

在 Linux 中,用户可以通过快捷键 Ctrl+Alt+F1Ctrl+Alt+F6 在不同的虚拟终端之间切换。每个虚拟终端都映射到 /dev/tty1/dev/tty6

使用 dmesg 查看 tty 设备信息

可以通过 dmesg 命令查看内核启动过程中识别到的终端设备:

$ dmesg | grep tty
[    0.000000] console [tty0] enabled
[    0.547317] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

stty 命令配置 tty 设备

stty(set terminal)命令用于配置终端设备的行为。例如,可以设置字符大小、控制字符、输入输出模式等。

$ stty -F /dev/ttyS0 9600

这条命令将串口设备 /dev/ttyS0 的波特率设置为 9600。

5. tty 的应用场景

  • 远程连接:通过 SSH 或其他协议远程登录到 Linux 系统时,每个会话都会通过一个伪终端(如 /dev/pts/0)与主机进行交互。
  • 串口通信:嵌入式开发和调试中,经常使用串口设备(如 /dev/ttyS0)与外部硬件进行通信。
  • 多用户系统:多用户可以同时登录到不同的虚拟终端(例如 /dev/tty1/dev/tty6),并在系统中独立操作。
  • 终端仿真:像 xtermgnome-terminal 这样的终端仿真程序,实际上会在虚拟终端中创建伪终端设备,通过图形界面与操作系统交互。

二、终端(terminal)

2.1 基本概念

在计算机或者通信系统中,终端是一个电子(或电气)设备,用于向系统输入数据(input),或者将系统接收到的数据显示出来(output),即我们常说的“人机交互设备”。

关于终端最典型的例子,就是电传打字机(Teletype)[1][2]----一种基于电报技术的远距离信息传送器械。电传打字机通常由键盘、收发报器和印字机构等组成。发报时,按下某一字符键,就能将该字符的电码信号自动发送到信道(input);收报时,能自动接收来自信道的电码信号,并打印出相应的字符(output)。

2.2 Unix终端

在计算机的世界里,键盘和显示器,是最常用的终端设备,一个用于向计算机输入信息,一个用于显示计算机的输出信息。

在大型机(mainframe)和小型机(minicomputer)的时代里,终端设备和计算机主机都同属一个整体。但到PC时代,情况发生了变化。Unix创始人肯•汤普逊和丹尼斯•里奇想让Unix成为一个多用户系统。多用户系统意味着要给每个用户配置一个终端,每个用户都要有一个显示器、一个键盘。但当时所有的计算机设备(包括显示器)价格都非常昂贵,而且键盘和主机是集成在一起的,根本没有独立的键盘。

最后他们找到了一样东西,那就是ASR33电传打字机。虽然电传打字机的用途是在电报线路上收发电报,但是它也可以作为人与计算机的接口,而且价格低廉。ASR33打字机的键盘用来输入信息,打印纸用来输出信息。所以他们把ASR33电传打字机作为终端,很多个ASR33连接到同一个主机,每个用户都可以在终端输入用户名和密码登录主机。这样他们创造了计算机历史上的第一个真正的多用户系统Unix,而ASR33成为第一个Unix终端。

2.3 TTY设备

由上面的介绍可知,第一个Unix终端是一个名字为ASR33的电传打字机,而电传打字机的英文单词为Teletype(或Teletypewritter),缩写为TTY。因此,该终端设备也被称为TTY设备。这就是TTY这个名称的来源,当然,在现在的Unix/Linux系统中,TTY设备已经演变为不同的意义了,后面我们会介绍演变的过程。

注1:读到这里,希望读者再仔细思索一下“设备”的概念。ASR33的电传打字机本身是一个硬件设备,在Unix/Linux系统中,这个硬件设备被抽象为“TTY设备”。

2.4 串口终端(Serials Terminal)

早期的TTY终端(这里暂时特指电传打字机),一般通过串口和Unix设备连接的,如下所示:

可以把上面红色部分(电传打字机),替换为任意的具有键盘、显示器、串口的硬件设备(如另一台PC),如下:

因此,对Unix/Linux系统来说,只要是通过串口连接的设备,都可以作为终端设备,因而不再需要关注具体的终端形态。久而久之,终端设备、TTY设备、串口设备等概念,逐渐混在一起,就不再区分了,总结来说,在当今的Linux系统中:

1)TTY设备就是终端设备,终端设备就是TTY设备,无需区分。

2)所有的串口设备都是TTY设备。

3)当然,除了串口设备,也发展出来了其它形式的TTY设备,例如虚拟终端(VT)、伪终端(Pseudo Terminal)等等。

三、控制台(console)

了解了终端和TTY的概念之后,再来看看另一个比较熟悉的概念:console。

回到Unix系统刚刚支持多用户(2.2小节的描述)的时代,此时的PC有一个自带的、昂贵的终端(自身的键盘、显示器等),另外为了支持多用户,可以通过串口线连接多个TTY终端(Teletype)。为了彰显自带终端崇高的江湖地位,人们称它为console。

从console的中文翻译-----控制台,可以看出,自带终端(console)有别于TTY终端的地方如下:

1)控制台(console)是昂贵的。

2)控制台(console)比TTY终端拥有更多的权限,例如用户建立、密码更改、权限分配等等,这也是“控制”的意义所在。

3)系统的运行日志、出错信息等内容,通常只会输出到控制台(console)终端中,以方便管理员进行“控制”和“管理”。

不过,随着计算机技术的发展、操作系统的改进,控制台(console)终端和普通TTY终端的界限越来越模糊,console能做的事情,普通终端也都能做了。因此,console逐渐退化,以至于在当前的Linux系统中,它仅仅保留了第三点“日志输出”的功能,这就是Linux TTY framework中console的概念。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值