BLOG

Record, summarize, and improve.

终端

tty是终端(它代表电传打字-原始终端使用行式打印机进行输出,而键盘则用于输入!)。 终端基本上只是一个使用文本进行输入和输出的用户界面设备。

pty是伪终端-它是一种软件实现,在附加程序中像终端一样出现,但是它不直接与“真实”终端进行通信,而是将输入和输出传输到另一个程序。 例如,当您进入计算机并运行ls时,ls命令会将其输出发送到伪终端,该伪终端的另一端连接到SSH守护程序。 pts是pty的奴隶部分。 ptmx是pty的主要部分。

您可以使用“ man pty”命令来获取有关“ pty / pts / ptmx”的更多信息。

  • 本地终端 用VGA连接主机和显示器,用PS/2或者USB连接主机和键盘,这样的一个显示器/键盘组合就是一个本地终端。
  • 用串口连接的远程终端 通过串口线把主机接到另外一个有显示器和键盘的主机,通过运行一个终端模拟程序,比如“Windows超级终端”来将这台主机的显示器和键盘借给串口对端的主机。
  • 用TCP/IP承载的远程终端 类似Telnet,SSH这般。

可见上述的三类中,前两类都是在本地就直接关联了物理设备的,比如VGA口啊,PS/2口啊,串口啊之类的,这种终端叫做物理终端

第三类在本地则没有关联任何物理设备,注意,不要把物理网卡当成终端关联的物理设备,它只是隧道关联的物理设备,这里的物理网卡完全可以换成卡车,它们与终端并不直接相关,所以这类不直接关联物理设备的终端叫做伪终端

在Linux中,/dev/ttyX代表的都是上述的物理终端,其中,/dev/tty1~/dev/tty63代表的是本地终端,也就是接到本机的键盘显示器可以操作的终端。

通过键盘上的Fn-Alt-FX(X为1,2,3…)可以在这些终端之间切换,每切换到一个终端,该终端就是当前的焦点终端,系统中/dev/console用于表示焦点终端,不管你在哪里往/dev/console里写东西,这些东西总会出现在系统当前的焦点终端上!

/dev/tty代表自己,也就是说,无论你在哪个终端下工作,当你往/dev/tty里写东西的时候,它总是会马上出现在你的眼前。

以ttyS 开头的就是串口连接的终端

Linux设计出一对虚拟终端设备,即/dev/ptmx/dev/pts/X,这就跟TUN/TAP网卡的网卡与字符设备之前的对应关系一致。

简单来讲,当有ssh客户端连接后,sshd会fork一个进程,然后在子进程中打开一个叫做/dev/pts/1(或者2,3,4,5…)的设备,然后和sshd进程的/dev/ptmx配对,这样在ptmxpts之间就构成了一条管道,数据可以顺利被导入到sshd,然后通过TCP/IP封装发往ssh client所在的机器。

Image in a image block

ttyS0

Image in a image block

ttyUSB0

Image in a image block

ttyAMA0

ARM许可的UART控制器

ttySAC0

ARM64体系结构Samsung Artik 710等设备