天天看点

Linux中的tty、pty、pts与ptmx辨析一、 tty(teletypes)二、 pty(pseudo-tty)三、 pts(pseudo-terminal slave)四、 ptmx(pseudo-terminal master)

一、 tty(teletypes)

tty设备包括虚拟控制台,串口以及伪终端设备。tty的种类有很多:

Linux中的tty、pty、pts与ptmx辨析一、 tty(teletypes)二、 pty(pseudo-tty)三、 pts(pseudo-terminal slave)四、 ptmx(pseudo-terminal master)

1.1 tty

其中,tty是当前进程的控制终端的设备特殊文件。可以通过如下方式验证:

[email protected]:/dev$ echo hello >/dev/tty
hello

           

当我们将输出重定向到/dev/tty文件时,结果总会输出到当前终端上。

1.2 ttyn

tty0~tty63是虚拟终端的设备特殊文件。/dev/tty0代表当前虚拟控制台,而/dev/tty1等代表第一个虚拟控制台。使用Alt+[F1—F6]组合键时,我们就可以切换到tty2、tty3等上面去。(待深入补充)

1.3 ttySn

ttyS代表tty serial,/dev/ttyS*是串行终端设备。这些设备文件会映射到物理串行端口,如果我们执行下列命令:

echo 2 > /dev/ttyS2
           

那么在对应的物理端口,如COM2上可以检测到输出。

二、 pty(pseudo-tty)

pty全称pseudo-tty,即伪终端设备,用于远程连接。它由master和slave两端构成,在任何一端的输入都会传达到另一端。与tty不同,系统中并不存在pty这种文件,它是由pts(pseudo-terminal slave)和ptmx(pseudo-teiminal master)两种设备文件来实现的。

三、 pts(pseudo-terminal slave)

pts(pseudo-terminal slave)即伪终端的slave端。在Linux的/dev/pts/文件夹下有对应设设备文件。

我们可以通过tty命令查看当前用户的登录终端,如下图所示:

[email protected]:/dev$ tty
/dev/pts/1
           

当我们设备文件/dev/pts/1进行输出时,屏幕上会显示相应输出:

[email protected]:/dev$ echo hello >/dev/pts/1
hello
           

倘若访问别的slave文件,如/dev/pts/2,则会返回权限不足错误:

[email protected]:/dev$ echo hello >/dev/pts/2
-bash: /dev/pts/2: Permission denied
           

四、 ptmx(pseudo-terminal master)

ptmx是伪终端的master端。在/dev下仅有2个ptmx文件,其信息如下:

[email protected]:/dev$ ll /dev/ptmx
crw-rw-rw- 1 root tty 5, 2 Jan 16 16:38 /dev/ptmx
[email protected]:/dev$ ll /dev/pts/ptmx
c--------- 1 root root 5, 2 Mar 17  2018 /dev/pts/ptmx
           

从中可以看出任何用户都可对/dev/ptmx进行读写,而任何用户对/dev/pts/ptmx都没有读写权限。(这两个文件更加具体的作用暂不清楚,留待后续深入)