Linux TTY/PTS概述

1 当前控制终端(/dev/tty)
/dev/tty指的是当前所处的终端,输出到此的内容只会显示在当前工作的终端显示器上;可以使用命令”ps –ax”来查看进程与哪个控制终端相连.对于你登录的shell,
/dev/tty就是你使用的终端,设备号是(5,0).
使用命令”tty”可以查看自己具体对应哪个实际终端设备./dev/tty有些类似于到实际所使用终端设备的一个联接

2./dev/pts
/dev/pts是远程登陆(telnet,ssh等)后创建的控制台设备文件所在的目录。由于可能有好几千个用户登陆,所以/dev/pts其实是动态生成的,不象其他设备文件是构建系统时就已经产生的硬盘节点.

3.控制台终端-系统控制台(/dev/console 和 /dev/tty*)
在Linux系统中,计算机显示器通常被称为控制台终端(Console).它仿真了类型为Linux的一种终端(TERM=Linux),并且有一些设备特殊文件与之相关联:
tty0、tty1、tty2等.当你在控制台上登录时,使用的是tty1.使用Alt+[F1—F6]组合键时,我们就可以切换到tty2、tty3等上面去.tty1–tty6等称为虚拟终端,
而tty0则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上.因此不管当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上.
你可以登录到不同的虚拟终端上去,因而可以让系统同时有几个不同的会话期存在.只有系统或超级用户root可以向/dev/tty0进行写操作.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#先用tty命令看看当前bash关联到了哪个tty
root@kali:/dev/pts# tty
/dev/pts/0

#看tty都被哪些进程打开了
root@kali:/dev/pts# lsof /dev/pts/0
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
zsh 4710 root 0u CHR 136,0 0t0 3 /dev/pts/0
zsh 4710 root 1u CHR 136,0 0t0 3 /dev/pts/0
zsh 4710 root 2u CHR 136,0 0t0 3 /dev/pts/0
zsh 4710 root 10u CHR 136,0 0t0 3 /dev/pts/0
bash 10662 root 0u CHR 136,0 0t0 3 /dev/pts/0
bash 10662 root 1u CHR 136,0 0t0 3 /dev/pts/0
bash 10662 root 2u CHR 136,0 0t0 3 /dev/pts/0
bash 10662 root 255u CHR 136,0 0t0 3 /dev/pts/0
lsof 10752 root 0u CHR 136,0 0t0 3 /dev/pts/0
lsof 10752 root 1u CHR 136,0 0t0 3 /dev/pts/0
lsof 10752 root 2u CHR 136,0 0t0 3 /dev/pts/0

#往tty里面直接写数据跟写标准输出是一样的效果
root@kali:/dev/pts# echo asd> /dev/pts/2
root@kali:/dev/pts# echo asd> /dev/pts/2
root@kali:/dev/pts# echo asd> /dev/pts/2
root@kali:/dev/pts# echo asd> /dev/pts/0
asd
root@kali:/dev/pts# echo asd> /dev/pts/1
root@kali:/dev/pts# echo asd> /dev/pts/1

image-20191202105236254

通过上面的lsof可以看出,当前运行的bash和lsof进程的stdin(0u)、stdout(1u)、stderr(2u)都绑定到了这个TTY上。