Linux中tty、pty、pts的概念及区别
参考、理解、修改:
https://zhuanlan.zhihu.com/p/42771810
https://zhuanlan.zhihu.com/p/337366679
1 基本概念
①tty (虚拟终端)
②pty (伪终端)
③pts/ptmx (pts/ptmx结合使用,进而实现pty)
2 在Linux系统的设备特殊文件目录/dev/下,终端特殊设备文件一般有以下几种:
-
串行端口终端(/dev/ttySn)
串行端口所对应的设备名称是/dev/tts/0(或/dev/ttyS0), /dev/tts/1(或/dev/ttyS1)等,设备号分别是(4,0), (4,1)等,分别对应于DOS系统下的COM1、COM2等
echo test > /dev/ttyS1会把单词”test”发送到连接在ttyS1(COM2)端口的设备上。可接串口来实验。 -
虚拟终端(/dev/ttyn)
tty:电传打字机‘teletypewriter’的缩写
/dev/tty就是进程的控制终端的设备特殊文件。可以使用命令”ps ax”来查看进程与哪个控制终端相连
使用命令”tty”可以查看它具体对应哪个实际终端设备
“w”也可以看 -
控制台终端(/dev/console)
在Linux系统中,电脑显示器通常被称为控制台终端(Console)。他仿真了类型为Linux的一种终端(TERM=Linux),并且有一些设备特别文档和之相关联:tty0、tty1、tty2等。当您在控制台上登录时,使用的是tty1。使用Alt+[F1―F6]组合键时,我们就能够转换到tty2、tty3等上面去。tty1~tty6等称为虚拟终端,而tty0则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上(这时也叫控制台终端)。因此不管当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上。您能够登录到不同的虚拟终端上去,因而能够让系统同时有几个不同的会话期存在。只有系统或终极用户root能够向/dev/tty0进行写操作 -
伪终端(/dev/pts/n 或 /dev/pty/)
在Xwindows模式下的伪终端:
ls /dev/pt*
一台服务器有多个tty,一个tty可以对多个pty(pts)
TELNET —> TTYP3(S3: slave) —> PTYP3(M3: master) —> GETTY -
其它类型
Linux系统中还针对很多不同的字符设备存在有很多其它种类的终端设备特殊文件。例如针对ISDN设备的/dev/ttyIn终端设备等。
3 命令行查看
#### 1- xWindows下
# 执行tty命令,若执行结果为/dev/pts/0说明是伪终端连接,若执行结果为/dev/tty*说明是虚拟终端
$ tty
/dev/pts/0
$ w
11:41:30 up 1 day, 23 min, 1 user, load average: 0.27, 0.29, 0.25
USER TTY 来自 LOGIN@ IDLE JCPU PCPU WHAT
kevin tty7 :0 六11 24:23m 19:31 0.29s /usr/libexec/gnome-session
$ w
11:42:48 up 23:33, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
pi pts/0 192.168.32.13 10:25 0.00s 0.90s 0.04s w
# 可以发消息到其他伪终端窗口
echo 'test' > /dev/pts/2
# 显示在当前的终端中
echo “hello” > /dev/tty
#### 2 - console下
# 通过 Ctrl + Alt + F2 把控制台中的终端切换到 tty2
# echo "hello world" > /dev/console
hello world
# tty
/dev/tty2
# w
22:20:51 up 1 day, 11:03, 2 users, load average: 0.32, 0.24, 0.28
USER TTY 来自 LOGIN@ IDLE JCPU PCPU WHAT
kevin tty7 :0 六11 35:03m 25:29 0.33s /usr/libexec/gnome-session-binary --systemd --builtin --session=pantheon
kevin tty2 - 22:14 26.00s 0.11s 0.05s -bash
4 概念强化
- 终端: 输入和输出设备(键盘+显示器)
- 物理终端:直接连接在主机上的物理设备(键盘、显示器);串行终端:与机器的串口对应,每一个串口对应的一个串行终端,串口对应的也是物理终端
- 虚拟终端:Linux默认有6个虚拟终端,这6个虚拟终端可以使用快捷键
(Ctrl+Alt+F1)...(Ctrl+Alt+F6)
切换,虚拟终端使用tty(teletypewriter)显示(/dev/tty1~/dev/tty6),他们共用一套物理终端设备 - 伪终端: 虚拟终端是有限的,但网络端口和图形端窗口的数目却是无限的,这是通过伪终端来实现的,使用SSH或者Telnet远程连接Linux时使用的就是伪终端,伪终端使用pts(pseudo-terminal slave)显示,执行
tty
命令执行结果为pts则是伪终端,tty则是虚拟终端 - 控制终端:这是一个逻辑概念,即用户正在控制的终端,可以使串行终端、虚拟终端、伪终端
- 控制台终端:控制台终端可以认为是一台主机对应的一套键盘和显示器,所有虚拟终端是对应的都是同一控制台终端
5 最后
爱你