终端、虚拟终端、shell、控制台、tty的区别
终端与控制台的区别?
最近开始接触Linux,终端、虚拟终端、shell、控制台、tty等概念让我很混乱,有必要认识清楚。
今天看到有人问终端和控制台的区别,而且这个问题比较有普遍性,因此想抽出一点时间来解释一下这两个术语的区别。
终端,英文叫做terminal ,通常简称为term ,比如我们在X下的xterm.
控制台,英文叫做console.
要明白这两者的关系,还得从以前的多人使用的计算机开始。
大家都知道,最初的计算机由于价格昂贵,因此,一台计算机一般是由多个人同时使用的。
在这种情况下一台计算机需要连接上许多套键盘和显示器来供多个人使用。
在以前专门有这种可以连上一台电脑的设备,只有显示器和键盘,还有简单的处理电路,本身不具有处理计算机信息的能力,他是负责连接到一台正常的计算 机上(通常是通过串口) ,然后登陆计算机,并对该计算机进行操作。当然,那时候的计算机操作系统都是多任务多用户的操作系统。这样一台只有显示器和键盘能够通过串口连接到计算机 的设备就叫做终端。
而控制台又是什么回事呢?
学机电的人应该知道,一台机床,或者数控设备的控制箱,通常会被称为控制台,顾名思义,控制台就是一个直接控制设备的台面(一个面板,上面有很多控制按钮)。 在计算机里,把那套直接连接在电脑上的键盘和显示器就叫做控制台。
请注意它和终端的区别,终端是通过串口连接上的,不是计算机本身就有的设备,而控制台是 计算机本身就有的设备,一个计算机只有一个控制台。
计算机启动的时候,所有的信息都会显示到控制台上,而不会显示到终端上。也就是说,控制台是计算机的基 本设备,而终端是附加设备。
当然,由于控制台也有终端一样的功能,控制台有时候也被模糊的统称为终端。
计算机操作系统中,与终端不相关的信息,比如内核消息,后台服务消息,都可以显示到控制台上,但不会显示到终端上。
以上是控制台和终端的历史遗留区别。
现在由于计算机硬件越来越便宜,通常都是一个人独占一台计算机超做,不再连接以前那种真正意义上的“终端设备了”,因此,终端和控制台的概念也慢慢演化了。终端和控制台由硬件的概念,演化成了软件的概念。
现在说的终端,比如linux中的虚拟终端,都是软件的概念,他用计算机的软件来模拟以前硬件的方式。
比如在linux中,用 alt+f1~f6 可以切换六个虚拟终端,就好比是以前多人公用的计算机中的六个终端设备,这就是为什么这叫“虚拟终端”的原因。
当然,现在的linux也可以通过串口 线,连接一个真正的终端,现在这种终端设备已经非常罕见了,但是还存在,只是一般人很难见到。也有人利用以前的老电脑(386,486)装上一个串口通信 软件,连上一台计算机,来模拟一个终端来用。这样可以达到一台电脑多人使用的目的。
简单的说,能直接显示系统消息的那个终端称为控制台,其他的则称为终端。
但是在linux系统中,这个概念也已经模糊化了。
比如下面这条命令:echo "hello,world" > /dev/console 这条命令的目的是将"hello,world"显示到控制台上/dev/console是控制台设备的设备名。
在linux中,在字符模式下,你无论在哪个虚拟终端下执行这条命令,字符hello,world都会显示在当前的虚拟终端下。也就是说,linux把当前的终端当作控制台来看待。
可见,linux中已经完全淡化了控制台和终端的区别。
但是在其他的UNIX类系统中,却很明显的有虚拟终端和控制台的区别。比如 freeBSD系统。
在freebsd中,只有第一个“终端”才是真正的控制台。(就是说按alt+f1得到的那个虚拟终端) ,你无论在哪个虚拟终端上执行上面的那条命令(哪怕是通过网络连接的伪终端上执行这条命令)。hello,world字符总会显示到第一个“终端”也就是 真正的控制台上。
另外,其他的一些系统内部信息,比如哪个用户在哪个终端登陆,系统有何严重错误警告等信息,全都显示在这个真正的控制台上。在这里,就明显的区分了终端和控制台的概念。
其他UNIX中也是这样的。比如Tru64 unix 在X下有一个控制台模拟软件,你无论在哪里输入echo "hello,world" > /dev/console命令,hello,world总会显示在这个控制台模拟器中。
我们在X界面下用的那些输入命令的软件,比如xterm ,rxvt, gnome-terminal等等,都应该被称为终端模拟软件。请注意它和控制台模拟软件的区别。
linux中好象没有控制台模拟软件。在X中的终端模拟软件中输入的echo "hello,world">/dev/console 命令的输出信息,都会输出到启动该X服务器的虚拟终端上。比如,你用字符方式登陆系统。进入第一个虚拟终端,然后startx启动X服务器。再打开 xterm 来输入echo"hello,world">/dev/console 命令,那么字符串hello,world就显示在第一个虚拟终端上。你按ctrl+alt+f1,回到那个启动X服务器的终端,就可以看到hello, world字符串。
现在该明白终端和控制台的区别了吧。
再简单的说,控制台是直接和计算机相连接的原生设备,终端是通过电缆、网络等等和主机连接的设备。
在以前的硬件终端设备中,由于生产厂家不同,所遵循的标准不同,因此有不同的型号标准。比如vt100等。这里的vt100就是一个标准,那么现在我们所说的终端,往往不是真正的硬件终端了,而是终端模拟软件了,因此不同的终端模拟软件可能符合不同的标准,还有一些终端模拟软件符合很多种不同终端的标准。比如gnome的终端模拟软件gnome-terminal,他提供好几中标准可供用户选择。用户只要设置一下就可以了。
现在,由于原先的这些设备在我们的视线中渐渐淡出,控制台和终端的概念也慢慢谈化。
普通用户可以简单的把终端和控制台理解为:可以输入命令行并显示程序运行过程中的信息以及程序运行结果的窗口。不必要严格区分这两者的差别。
——by:http://blog.csdn.net/caomiao2006/article/details/8791775
******************************************************************华丽分割线********************************************************
从历史角度看,终端刚开始就是终端机,配有打印机,键盘,带有一个串口,通过串口传送数据到主机端,然后主机处理完交给终端打印出来。
那么现在终端也就是键盘+显示器。但是不同的设备可能协议不同,要操作系统怎么识别呢?简单。就像linux 的虚拟文件系统一样,抽象出一层就可以了。
tty层横空出世,tty的一边是操作系统,一边是不同的设备驱动。大家知道,在linux下所有的设备都是文件,那么假设我们要打印到显示器,只要write到显示器对应的tty层的文件,然后它自己去匹配合适的驱动,这部分就不是系统考虑的问题了。
现在的终端还是实体(也就是有实际的硬件),只不过由tty层做了逻辑抽象。
但是随着互联网的兴起,人们有了远程使用计算机的要求,于是终端仿真系统诞生了。把本地PC当成是一个终端,远程的计算机当成是主机。由软件模拟硬件终端的工作过程(无非就是编码格式,电位等等,设计组成原理等)。比如现在嵌入式开发,不就是把个人PC当作输入输出工具,由开发板做主机么?
现在的个人计算机常常被仿真成一个终端与主机相连(虽然没让我发现有什么优点,也许是为了本地用户和远程用户的同等地位?)
人们用终端仿真技术开发了各种的虚拟终端,伪终端等等。相当于PC不在逻辑上处理数据,只是按照行业标准,进行数据传输(应该有编码过程?)和接受显示(解码?)
此时此刻,终端已经不是狭义的硬件了,它更多的被理解为模拟硬件的软件。
现在说说tty。之前提到了,抽象为了tty层。为什么叫tty呢?
Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,和古老的电报机区别并不是很大。最终,电传打字机被键盘和显示器终端(这里时硬件)所取代,但在终端或TTY接插的地方,操作系统仍然需要一个程序来监视串行窗口。一个getty“Get TTY”的处理过程是:一个程序监视物理的TTY/终端接口。
从上面百度百科的定义,可以知道,后来getty就是一个见识TTY/终端的接口,那么这个将操作系统内核和终端连接的层叫什么名字也就呼之欲出了。
——by:http://blog.chinaunix.net/uid-28596231-id-3516101.html
终端特殊设备文件有哪些?
1.串行端口终端(/dev/ttySn)
串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。有段时间这些串行端口设备通常被称为终端设备,因为那时它的最大用途就是用来连接终端。这些串行端口所对应的设备名称是/dev/tts/0(或/dev/ttyS0),/dev/tts/1(或/dev/ttyS1)等,设备号分别是(4,0),(4,1)等,分别对应于DOS系统下的COM1、COM2等。若要向一个端口发送数据,可以在命令行上把标准输出重定向到这些特殊文件名上即可。例如,在命令行提示符下键入:echo test > /dev/ttyS1会把单词”test”发送到连接在ttyS1(COM2)端口的设备上
2.伪终端(/dev/pty/)
3.控制终端(/dev/tty)
如果当前进程有控制终端(Controlling Terminal)的话,那么/dev/tty就是当前进程的控制终端的设备特殊文件。可以使用命令”ps –ax”来查看进程与哪个控制终端相连。对于你登录的shell,/dev/tty就是你使用的终端,设备号是(5,0)。使用命令”tty”可以查看它具体对应哪个实际终端设备。/dev/tty有些类似于到实际所使用终端设备的一个联接。
4.控制台(/dev/ttyn, /dev/console)
在Linux 系统中,计算机显示器通常被称为控制台终端(Console)。它仿真了类型为Linux的一种终端(TERM=Linux),并且有一些设备特殊文件与之相关联:tty0、tty1、tty2 等。当你在控制台上登录时,使用的是tty1。使用Alt+[F1—F6]组合键时,我们就可以切换到tty2、tty3等上面去。tty1–tty6等称为虚拟终端,而tty0则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上(这时也叫控制台终端)。因此不管当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上。/dev/console即控制台,是与操作系统交互的设备,系统将一些信息直接输出到控制台上。只有在单用户模式下,才允许用户登录控制台。
5.虚拟终端
在Xwindow模式下的伪终端.如在Kubuntu下用konsole,就是用的虚拟终端,用tty命令可看到/dev/pts/name,name为当前用户名。
6.其他类型
——by:百度百科
**************************************************************华丽分割线************************************************************
shell(计算机壳层)