终端(Terminal)与控制台(Console)的区别
一、终端Terminal
1.1 终端的定义
(1)什么是终端?
终端就是处理计算机主机输入输出的一套设备,它用来显示主机运算的输出,并且接受主机要求的输入,典型的终端包括**显示器键盘套件**,**打印机打字机套件**等。
(2)终端的本质。
其实根本上也就一句话,能接受输入,能显示输出,就这就够了,不管到了什么时代,终端始终扮演着人机接口的角色,所谓Terminal,即机器的边缘!
只要能提供给计算机输入和输出功能,它就是终端,而与其所在的位置无关
1.2 终端的分类
- 本地终端
用VGA连接主机和显示器,用PS/2或者USB连接主机和键盘,这样的一个显示器/键盘组合就是一个本地终端。* 用串口连接的远程终端
通过串口线把主机接到另外一个有显示器和键盘的主机,通过运行一个终端模拟程序,比如**“Windows超级终端”*来将这台主机的显示器和键盘借给串口对端的主机。 用TCP/IP承载的远程终端
类似Telnet,SSH这般。前两类又称之为“物理终端”,后面的那个称之为“伪终端”
大致就先说这几类吧。可见上述的三类中,前两类都是在本地就直接关联了物理设备的,比如VGA口啊,PS/2口啊,串口啊之类的,这种终端叫做**物理终端**,而第三类在本地则没有关联任何物理设备,注意,不要把物理网卡当成终端关联的物理设备,它只是隧道关联的物理设备,这里的物理网卡完全可以换成卡车,它们与终端并不直接相关,所以这类不直接关联物理设备的终端叫做**伪终端**。
二、控制台Console
2.1 什么是控制台
显示系统消息的终端就叫控制台,Linux 默认所有虚拟终端都是控制台,都能显示系统消息。
另外,对于那些专门用来模拟终端设备的程序,我们也可以称之为控制台Console,像gnome-terminal,urxvt,mlterm,xterm等软件,都可以称之为控制台,
**总结:**控制台是终端的特例,是终端的真子集,它是虚拟的终端,
2.2 终端与控制台的区分
**物理终端:**直接连接在主机上的显示器、键盘鼠标统称。在实际机架式服务器部署中,一般是多台服务器共享一套终端,简称KVM(Keyboard键盘,video显示器,mouse鼠标)
虚拟终端(tty):附加在物理终端之上,用软件方式虚拟实现,CentOS默认启用6个虚拟终端,可以通过快捷键来切换,切换方式:Ctrl-Alt-F[1–6], 对应的文件是/dev/tty#。
可以同过tty命令来查看当前的虚拟终端号。tty是teletype writer的简称。
**伪终端(pty):**两种应用场景,
(1)第一在图形界面下打开的命令行接口,我们经常使用Ctrl+Alt+T打开的那个实际上就是一个 伪终端
(2)第二基于ssh协议或telnet协议等远程打开的命令行界面,是运维工程师用的最多的一种连接服务器的方式。pts(pseudo-terminal slave)是pty的实现方法。
总结三个观点:
(1)控制台是终端的真子集;
(2)tty2-tty6,这五个黑色的界面是虚拟终端,它们是真正的控制台,此时的5个虚拟终端,我们就称之为控制台;
(3)桌面之下通过Ctrl+Alt+T打开的那个东西是一个伪终端,远程通过Telnet或者是ssh连接的也是创建的伪终端;
linux中已经完全淡化了控制台和终端的区别
三、Linux下关于终端的一些设备文件
Linux下一切皆文件。
3.1 /dev/ttyX 设备文件
**tty是最令人熟悉的了,在Linux中,/dev/ttyX代表的都是上述的物理终端,其中,/dev/tty1~/dev/tty63代表的是本地终端,也就是接到本机的键盘显示器可以操作的终端。事实上Linux内核在初始化时会生成63个本地终端,通过键盘上的Fn-Alt-FX(X为1,2,3…)可以在这些终端之间切换,每切换到一个终端,该终端就是当前的焦点终端**,比如说,你按下了Fn-Alt-F4组合键,那么此时第4个终端就是焦点终端,即***/dev/tty4***就是焦点终端设备。
**3.2 **/dev/console 设备文件
系统中有没有什么变量可以表示焦点终端呢?当然有了,那就是**_/dev/console_,不管你在哪里往*/dev/console***里写东西,这些东西总会出现在系统当前的焦点终端上!
本质上**_/dev/console_其实就是一个全局变量**,指代当前的焦点终端,如果当前的焦点是***/dev/tty4***,那么***/dev/console指的就是/dev/tty4***,当然这一切都是由内核来维护的。
那么系统中有没有一个叫做**自己的全局变量呢?当然有,那就是*/dev/tty***,也就是说,无论你在哪个终端下工作,当你往***/dev/tty***里写东西的时候,它总是会马上出现在你的眼前。
**总结:/dev/tty1~/dev/tty63我们知道了它们是什么,/dev/tty表示自己,/dev/console**表示焦点终端这些我们也知道了,
3.3 串口终端 ttyS
开头的就是串口连接的终端,比如**ttyS0,ttyS1,ttyS2**…
最后,解释一下伪终端。其实也很好解释,只要你理解**TUN/TAP**虚拟网卡的原理就行,它们如出一辙!类似Telnet,SSH不是没有实际的物理设备吗?简单,给它模拟一个不就得了?系统是分层的,执行流只管调用接口,并不管具体实现。
模拟一个虚拟的终端设备,实现它的write,read等回调即可。对于VGA连接的显示器而言,write其实就是将显存刷新,而对于伪终端而言,write其实是想将数据导入到一个用户态的程序中(不然又能去哪里呢?它下面又没有任何物理的东西),这简直跟很多VPN的原理非常类似。
3.4 桌面系统虚拟终端tty2-tty6,又称之为控制台终端
在Linux系统中,计算机显示器通常被称为控制台终端(Console)。它仿真了类型为Linux的一种终端,并且有一些设备特殊文件与之相关联:tty0、tty1、tty2等。当你在控制台上登录时,使用的是tty1。使用Alt+[F1—F6]组合键时,我们就可以切换到tty2、tty3等上面去。tty1 –tty6等称为**虚拟终端**,而tty0则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上。因此不管当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上。你可以登录到不同的虚拟终端上去,因而可以让系统同时有几个不同的会话期存在。只有系统或超级用户root可以向/dev /tty0进行写操作,
(**备注:**这个地方跟3.1中的有所重复,还有一些小的细节没搞清楚,比如tty2-tty6称之为虚拟终端,那tty7-tty63指的又是什么,又有什么作用呢?还不是很清楚,望有大佬告知!)
3.5 伪终端
前面说过伪终端的两种情况:
第一是在Xwindows(桌面GUI环境之下)模式下的启动的终端称之为伪终端;
第二是在远程如果用telnet远程登录的话,也是创建的一个伪终端
Linux设计出一对虚拟终端设备,即**_/dev/ptmx_和*/dev/pts/X。这就跟TUN/TAP***网卡的网卡与字符设备之前的对应关系一致。
简单来讲,当有ssh客户端连接后,sshd会fork一个进程,然后在子进程中打开一个叫做**_/dev/pts/1(或者2,3,4,5…)_的设备,然后和sshd进程的*/dev/ptmx配对,这样在ptmx与pts***之间就构成了一条管道,数据可以顺利被导入到sshd,然后通过TCP/IP封装发往ssh client所在的机器。
总结:
/dev目录下的各种tty**,ptmx,pts/X(X是1,2,3等数字),**console 等等这些是令人混淆的根源,其实理解这些是有窍门的,记住它们只是**操作某种终端设备的设备文件而已**,这是UNIX风格的延续,这些设备文件对应的真实设备也就那么几种,比如显示器键盘套件,串口对面的超级终端,伪终端对面的SSH,Telnet等等。
四、tty命令
Linux tty命令用于显示终端机连接标准输入设备的文件名称。
在Linux操作系统中,所有外围设备都有其名称与代号,这些名称代号以特殊文件的类型存放于/dev目录下。你可以执行tty(teletypewriter)指令查询目前使用的终端机的文件名称。
命令格式如下:
tty [-s][--help][--version]
4.1 伪终端——桌面GUI下的terminal和远程通过ssh创建的terminal
比如在我的centos系统中,默认进入到的是带有桌面的哪一个tty,即所谓的tty1,现在打开一个terminal,然后执行tty命令,得到:
[zoe@localhost ~]$ tty /dev/pts/1 # 这是第一个伪终端
如果是我再打开一个terminal,如下:
[zoe@localhost ~]$ tty /dev/pts/2 # 这是第二个伪终端
这里属于伪终端的第一种情况——桌面环境下的terminal。
现在我在自己的电脑上通过ssh连接到一个Linux服务器,然后执行命令,得到:
tengjian@tcl-Super-Server:~$ tty /dev/pts/21 # 通过ssh远程连接创建的伪终端,这里由于服务器有多个人连接,创建的是第21个伪终端
伪终端总结:
**(1)/dev/ptsn 伪终端(pseudo-tty)。**n取值动态增长。Telnet和ssh远程登录或桌面环境下即是此情况。
(2)伪终端是动态增加的。/dev/pts是远程登陆(telnet,ssh等)后创建的控制台设备文件所在的目录。由于可能有好几千个用户登陆,所以/dev/pts其实是动态生成的,不像其他设备文件是构建系统时就已经产生了。
4.2 虚拟终端——tty1-tty6,我们称这几个为控制台console
在同样的这个centos系统上,先按Ctrl+Alt+F2,激活第二个tty2,然后执行tty命令,如下:
[zoe@localhost ~]$ tty /dev/tty2 #第二个虚拟终端
在同样的这个centos系统上,先按Ctrl+Alt+F3,激活第二个tty3,然后执行tty命令,如下:
[zoe@localhost ~]$ tty /dev/tty3 #第三个虚拟终端
五、全文总结:
(1)终端terminal是一个非常宽泛的概念;
(2)桌面Linux系统中,tty2-tty6 是虚拟终端,也称之为控制台终端,也称之为控制台console;
(3)伪终端的两种情况,第一是桌面环境下的终端,第二种是通过Telnet或者是ssh连接的。