【题记】
写在开头。压楼。。。
1、终端与控制台
1.1、历史上
终端与控制台两者的关系,可以算得上一个历史的遗留,简要介绍下:
在那个计算机是块宝的年代,不是每个人都能独自拥有一台计算机的(关键没地方摆啊,那时候基本都是大型机、中型机,得好个大屋子才摆得下呢),因此一台计算机一般是由多个人同时使用的,在这种情况下一台计算机需要连接上许多套键盘和显示器。在以前专门有这种可以连上一台电脑的设备,只有显示器和键盘,还有简单的处理电路,本身不具有处理计算机信息的能力,它们负责连接到一台正常的计算机上(通常是通过串口),然后登陆计算机并对该计算机进行操作。
终端(Terminal):通常简称为Term,比如我们在X下的xterm。在计算机系统中,能够通过串口(网络等)连接到计算机的这一类只有显示器和键盘的设备,就叫做终端。
控制台(console):计算机系统中,直接连接(通过显卡接口)在电脑上的键盘和显示器就叫做控制台。
终端是通过串口连接上的,不是计算机本身就有的设备,而控制台是计算机本身就有的设备,一个计算机只有一个控制台,但可以有许多终端。计算机启动的时候,所有的信息都会显示到控制台上,而不会显示到终端上。也就是说,控制台是计算机的基本设备,而终端是附加设备。当然,由于控制台也有终端一样的功能,控制台有时候也被模糊的统称为终端。计算机操作系统中,与终端不相关的信息,比如内核消息,后台服务消息,都可以显示到控制台上,但不会显示到终端上。
1.2、当前情况
现在由于计算机硬件越来越便宜,通常都是一个人独占一台计算机超做,不再连接以前那种真正意义上的“终端设备了”,因此,终端和控制台的概念也慢慢演化了。终端和控制台由硬件的概念,演化成了软件的概念。
现在说的终端,比如linux中的虚拟终端,都是软件的概念,他用计算机的软件来模拟以前硬件的方式。比如在linux中,你用 【Alt+F1 ~ F6】 可以切换六个虚拟终端,就好比是以前多人公用的计算机中的六个终端设备,这就是为什么这个叫“虚拟终端”的原因。另外,还有一些伪终端等。
1.2.1、Linux系统中终端与控制台概念的模糊
比如【echo "hello,world" > /dev/console】这条命令的目的是将"hello,world"显示到控制台上(/dev/console是控制台设备的设备名),在linux中,在字符模式下,你无论在哪个虚拟终端下执行这条命令,字符“hello,world”都会显示在当前的虚拟终端下。也就是说,linux把当前的终端当作控制台来看待。可见, linux中已经完全淡化了控制台和终端的区别。
1.2.2、其它UNIX类系统中终端与控制台的区别
在其他的UNIX类系统中,如FreeBSD却很明显的有虚拟终端和控制台的区别。在Freebsd中,只有第一个“终端”(就是说按【Alt+F1】得到的那个虚拟终端)才是真正的控制台,你无论在哪个虚拟终端上执行【echo "hello,world" > /dev/console】这条命令(哪怕是通过网络连接的伪终端上执行这条命令),hello,world字符总会显示到第一个“终端”也就是真正的控制台上。另外,其他的一些系统内部信息,比如哪个用户在哪个终端登陆,系统有何严重错误警告等信息,全都显示在这个真正的控制台上。
如Tru64 unix 在X下有一个控制台模拟软件,你无论在哪里输入【echo "hello,world" > /dev/console】命令,“hello,world”总会显示在这个控制台模拟器中。 我们在X界面下用的那些输入命令的软件,比如xterm ,rxvt, gnome-terminal等等,都应该被称为终端模拟软件,请注意它和控制台模拟软件的区别。 linux中好象没有控制台模拟软件。在X中的终端模拟软件中输入的【echo "hello,world">/dev/console】命令的输出信息都会输出到启动该X服务器的虚拟终端上。比如,你用字符方式登陆系统进入第一个虚拟终端【Alt+F1那个虚拟终端】,然后startx启动X服务器,再打开 xterm 来输入【 echo "hello,world">/dev/console】命令,那么字符串“hello,world”就显示在第一个虚拟终端上。你按【Ctrl+Alt+F1】回到那个启动X服务器的虚拟终端就可以看到“hello, world”字符串。
1.3、最后
现在,由于原先的这些设备在我们的视线中渐渐淡出,控制台和终端的概念也慢慢谈化。普通用户可以简单的把终端和控制台理解为:可以输入命令行并显示程序运行过程中的信息以及程序运行结果的窗口,不必要严格区分这两者的差别。
2、终端类型
tty(终端设备的统称):tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,后来这东西被键盘与显示器取代,所以现在叫终端比较合适。终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。终端为主机提供了人机接口,每个人都通过终端使用主机的资源。总体上来说,终端有字符哑终端和图形终端(GUI)两种.
Linux在控制台(即显卡-显示器-键盘电路设备)上通过getty软件虚拟了六个字符哑终端(或者叫控制台终端tty1-tty6)(数量可以在/etc/inittab里自己设置)和一个图型终端,在虚拟图形终端中又可以通过软件(如rxvt)再虚拟无限多个虚拟字符哑终端(pts/0....). 记住,这全是虚拟的,用起来和真实的终端一样,但实际上并不是。所以在个人计算机上,只有一个实际的控制台,没有真实的终端,所有终端都是通过终端模拟软件在控制台上模拟的。要把个人计算机当主机再通过串口或网卡外连真正的物理终端也可以,但由于真正的物理终端并不比个人计算机本身便宜,所以现在一般没有人这么做了。
在Linux系统的设备特殊文件目录/dev/下,终端特殊设备文件一般有以下几种:
1、控制台终端(/dev/ttyn, /dev/console)
在Linux 系统中,终端与控制台的概念已经较为模糊,通常把直接连接计算机的显示器(显卡-显示器电路)称为控制台终端 (Console)。系统仿真了类型为Linux的一种终端(TERM=Linux),并且有一些设备特殊文件与之相关联:tty0、tty1、tty2 等。当你在控制台上登录时,使用的是tty1。使用【Alt+[F1~F6]】组合键时,我们就可以切换到tty2、tty3等上面去。tty1–tty6等称为“虚拟终端”,而tty0则是当前所使用的控制台终端的一个别名,系统所产生的信息会发送到该终端上(这时也叫控制台终端)。因此不管当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上。/dev/console即控制台,是与操作系统交互的设备,系统将一些信息直接输出到控制台上。
Linux控制台所虚拟出几个字符终端间的切换:【Alt+[F1~F6]】
字符终端向图形终端的切换:【Alt+F7】
图形终端向字符终端切换:【Ctrl+Alt+[F1~F6]】
2、伪终端(/dev/pty/)这个是终端的发展,为满足现在需求(比如网络登陆、xwindow窗口的管理)。
伪终端(Pseudo Terminal)是成对的逻辑终端设备(即master和slave设备, 对master的操作会反映到slave上)。
例如/dev/ptyp3和/dev/ttyp3(或者在设备文件系统中分别是/dev/pty/m3和 /dev/pty/s3)。它们与实际物理设备并不直接相关。如果一个程序把ptyp3(master设备)看作是一个串行端口设备,则它对该端口的读/ 写操作会反映在该逻辑终端设备对应的另一个ttyp3(slave设备)上面。而ttyp3则是另一个程序用于读写操作的逻辑设备。这样,两个程序就可以通过这种逻辑设备进行互相交流,而其中一个使用ttyp3的程序则认为自己正在与一个串行端口进行通信。这很象是逻辑设备对之间的管道操作。对于ttyp3(s3),任何设计成使用一个串行端口设备的程序都可以使用该逻辑设备。但对于使用ptyp3的程序,则需要专门设计来使用 ptyp3(m3)逻辑设备。
例如,如果某人在网上使用telnet程序连接到你的计算机上,则telnet程序就可能会开始连接到设备 ptyp2(m2)上(一个伪终端端口上)。此时一个getty程序就应该运行在对应的ttyp2(s2)端口上。当telnet从远端获取了一个字符时,该字符就会通过m2、s2传递给 getty程序,而getty程序就会通过s2、m2和telnet程序往网络上返回”login:”字符串信息。这样,登录程序与telnet程序就通过“伪终端”进行通信。通过使用适当的软件,就可以把两个甚至多个伪终端设备连接到同一个物理串行端口上。
pts/ptmx(pts/ptmx结合使用,进而实现pty),pts(pseudo-terminal slave)是pty的实现方法,与ptmx(pseudo-terminal master)配合使用实现pty。如在Xwindows模式下的伪终端,使用tty命令可看到/dev/pts/1
3、串行端口终端(/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)端口的设备上。
4、控制终端(/dev/tty)
控制终端(Controlling Terminal)是个在应用程序中的一个概念,前台进程有一个控制终端,就对应这个。可以使用命令【ps –ax】来查看进程与哪个控制终端相连。对于你登录的shell,“/dev/tty”就是你使用的终端,设备号是(5,0)。使用命令【tty】可以查看它具体对应哪个实际终端设备。/dev/tty有些类似于到实际所使用终端设备的一个联接。比如你如果在控制台终端界面下(控制台终端字符界面下)那么dev/tty就是映射到dev/tty1-6之间的一个(取决于你当前的控制台终端号),但是如果你现在是在图形界面(Xwindows),那么你会发现现在的/dev/tty映射到的是/dev/pts的伪终端上。比如你可以输入命令【tty】那么将显示当前映射终端如:/dev/tty1或者/dev/pts/0等。
阅读(2588) | 评论(0) | 转发(0) |