tty
tty的基本概念
tty(通常用tty来简称各种类型的设备)一词源于Teletypes,原来指的是电传打印机。
电传打印机:
后来有了键盘和显示器,所以叫做终端比较合适。
在早期计算机时代,小型机主机的显卡显示器和键盘就是控制台,这是人控制主机的第一人机接口;同时小型机还需要提供多个终端给多个人接入主机,终端有字符哑终端和图形终端两种,字符哑终端就是tty。
回到现在的pc时代,个人计算机只有控制台,没有终端。linux为了实现tty设备,在控制台上通过getty软件虚拟了六个字符哑终端(也叫控制台终端tty1-tty6,数量可以在/etc/inittab里自己调)和一个图型终端(X-Window), 在虚拟图形终端中又可以通过软件(如rxvt)再虚拟无限多个虚拟字符哑终端(pts/0….),网络连接telnet、ssh等创建的也都是虚拟字符哑终端。当然,linux也有自己的实际tty设备,串口终端就是实际的tty设备。
综上描述,linux中现有的tty终端有以下类型:
控制台虚拟字符终端/dev/ttyN
Linux在控制台上模拟了6个tty字符终端,对应/dev/tty1~/dev/tty6,ubuntu上可以使用“Ctrl+Alt + Fn”(fn=f1 – f6)组合键来进行切换。
/dev/tty0是一个特殊的设备,指向这六个终端中目前在使用的那一个。
其实tty驱动一共注册了63个控制台虚拟字符终端,可以在/dev/目录中看到tty1 – tty63,但是init程序只创建了6个对应的用户态程序。
其他虚拟字符终端/dev/pty/(伪终端)
如果我们远程telnet到主机或使用xterm时不也需要一个终端交互么?是的,这就是虚拟终端pty(pseudo-tty)
pts(pseudo-terminal slave)是pty的实现方法,与ptmx(pseudo-terminal master)配合使用实现pty。
在网络连接和图形终端中虚拟字符终端,需要成对的虚拟逻辑终端设备(即master和slave设备)
其设计的思想是,应用程序在使用虚拟字符终端时和使用实际字符终端方法是一致的,slave设备提供虚拟字符终端对应用程序接口,master设备关注实际不同方式通道的接口。
比如,我们通过ssh登陆的shell,就是一种网络连接虚拟字符终端。
串口字符终端/dev/ttySN
Linux自己实际的tty设备
见上图
当前字符终端/dev/tty
例如: