Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1863873
  • 博文数量: 343
  • 博客积分: 10342
  • 博客等级: 上将
  • 技术积分: 2892
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-15 12:34
个人简介

你必须非常努力,才能看起来毫不费力!

文章存档

2012年(3)

2011年(5)

2010年(2)

2009年(40)

2008年(293)

分类: LINUX

2008-10-24 20:10:00

   今天看到有人问终端和控制台的区别,而且这个问题比较有普遍性,因此想抽出一点时间来解释一下这两个术语的区别。

  终端,英文叫做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,他提供好几种标准可供用户选择。用户只要设置一下就可以了。

  现在,由于原先的这些设备在我们的视线中渐渐淡出,控制台和终端的概念也慢慢谈化。普通用户可以简单的把终端和控制台理解为:可以输入命令行并显示程序运行过程中的信息以及程序运行结果的窗口。 不必要严格区分这两者的差别。

 
一 控制台和终端的历史遗留差别
(一)   终端
1大家都知道,最初的计算机由于价格昂贵,因此,一台计算机一般是由多个人同时使用的。
2一台计算机需要连接上许多套键盘和显示器来供多个人使用。
3在以前,专门有这种能连上一台计算机的设备,只有显示器和键盘,更有简单的处理电路,本身不具有处理计算机信息的能力,他是负责连接到一台正常的计算机上(通常是通过串口) ,然后登陆计算机,并对该计算机进行操作。

4 一台只有显示器和键盘能够通过串口连接到计算机的设备就叫做终端,是通过电缆、网络等等和主机连接的设备。


(二)   控制台
1控制台,就是个直接控制设备的台面。
2 计算机里,把那套直接连接在计算机上的键盘和显示器就叫做控制台,是直接和计算机相连接的原生设备。
注意:和终端的差别,终端是通过串口连接上的,不是计算机本身就有的设备,而控制台是计算机本身就有的设备,一个计算机只有一个控制台。
3 控制台也有终端相同的功能,控制台有时候也被模糊的统称为终端。
4 计算机启动的时候,所有的信息都会显示到控制台上,而不会显示到终端上。
5和终端不相关的信息,比如内核消息,后台服务消息,都能显示到控制台上,但不会显示到终端上。



二 目前的控制台和终端
1由于计算机硬件越来越便宜,通常都是个人独占一台计算机操作,不再连接以前那种真正意义上的“终端设备了”。
2 终端和控制台的概念也慢慢演化了。终端和控制台由硬件的概念,演化成了软件的概念。
3目前说的终端,比如linux中的虚拟终端,都是软件的概念,他用计算机的软件来模拟以前硬件的方式。
4能直接显示系统消息的那个终端称为控制台,其他的则称为终端。
注意:不过在linux系统中,这个概念也已模糊化了。
5 echo "hello,world" > /dev/console
这条命令的目的是将"hello,world"显示到控制台上,/dev/console是控制台设备的设备名。在linux中,在字符模式下,你无论在哪个虚拟终端下执行这条命令,字符hello,world都会显示在当前的虚拟终端下。也就是说,linux把当前的终端当作控制台来看待。

控制台和终端的概念也慢慢谈化



三 /dev/console
1 /dev/console是控制台设备的设备名。
2 在所有终端中,能指定某一个终端作为控制台,用dev/console这个设备名字,能代表和找到那个用于控制台的终端。
3 /dev/console始终需要一个实际的东西,这是在系统管理中设置的。每个UNIX系统都会有一个指定的终端或显示屏用来接受控制台消息。
在过去,他可能是一台专用的打印终端;在现代的linux上,他通常是活跃的虚拟控制台;在X窗口系统中,他会是屏幕上一个特别的控制台窗口。
例如:你将/dev/console和/dev/tty0联系起来,那么,系统的监视消息和显示给用户的消息都会打印在你的屏幕上,无论你转到哪个tty。
注意:tty0则是当前所使用虚拟终端的一个别名。
例如:如果你在写某个应用程式的时候,需要将程式中某些异常情况报告给系统管理员,你能简单地open(/dev/console, ..),然后将消息write()到这个fd,那么系统管理员就能看见这条消息。如果你在写一个telnet程式,你发现了有人在攻击你的系统,你就能用这种方式通知系统管理员,并不一定要显示在用户终端上,因为,用户不能处理这种情况,知道了也没有什么意义。


四 /dev/tty

1 进程控制终端
       顾名思义,即控制进程运行的终端(从这个终端向主机提交进程,同时,进程会讲一些信息显示到这个终端上来)。---个人理解,如有错误,哎,也没招!

2 /dev/tty是当前进程控制终端的别名(逻辑设备,虚拟设备),
3 如果当前进程有控制终端,那么/dev/tty就是当前进程的控制终端的设备特别文件。
4 能使用命令”ps -ax”来查看进程和哪个控制终端相连。
5 用命令”tty”能查看他具体对应哪个实际终端设备。
6 他并不指所有物理意义上的终端,/dev/tty有些类似于到实际所使用终端设备的一个链接


注意:在windows中,你会发现他映射为伪终端。 伪终端(/dev/pty/)这个是终端的发展,为满足目前需求(比如网络登陆、xwindow窗口的管理)。
 
阅读(2584) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

chinaunix网友2009-05-15 15:36:48

小小一个细节,如此详细。典故 , 信手拈来 ;出处 ,娓娓而谈。。。向大哥学习了。