首页 > 代码库 > 终端的一些概念

终端的一些概念

首先:

1。终端和控制台都不是个人电脑的概念,而是多人共用的小型中型大型计算机上的概念。
一台主机,连很多终端,终端为主机提供了人机接口,每个人都通过终端使用主机的资源.。

终端有字符哑终端和图形终端两种.

 

控制台是另一种人机接口,,不通过终端与主机相连,,而是通过显示卡-显示器和键盘接口分

别与主机相连, 这是人控制主机的第一人机接口。

 

回到个人计算机上,个人计算机只有控制台,没有终端. 当然愿意的话,,可以在串口上连一

两台字符哑终端.。但是linux偏要按POSIX标准把个人计算机当成小型机来用,那么就在控制

台上通过getty软件虚拟了六个字符哑终端(或者叫控制台终端tty1-tty6,数量可以在

/etc/inittab里自己调)和一个图型终端。在虚拟图形终端中又可以通过软件(如rxvt)再虚拟

无限多个虚拟字符哑终端(pts/0....)。记住,这全是虚拟的,用起来一样,但实际上并不是。


所以在个人计算机上,只有一个实际的控制台,没有终端,所有终端都是在控制台上用软件模拟的。
要把个人计算机当主机再通过串口或网卡外连真正的物理终端也可以,但由于真正的物理终端

并不比个人计算机本身便宜,一般没有人这么做。

 

2.如同其他UNIX类系统,Linux本身也是基于命令行的。试试“Ctrl”+“Alt”+“Fx”。这就是控制台

算是Linux的本来面目。至于使用方法,除了多出登录注销外,其它操作和我们在linux图形界面

(X—window)下的终端操作是一样的,在X-Window出问题或不运行X-Window的时候,操作

主要在这里完成。


  Linux在控制台下提供了不止一个(字符哑)终端,支持多用户同时登录,包括在本机同时登录。

控制台“Alt”+“Fx”能够切换到第x个(字符哑)终端。如果需要从X-Window里跳到第(字符哑)终端,

需要“Ctrl”+“Alt”+“Fx”。一般情况下如果要从控制台返回Xwindow可用““Alt”+7”来返回到Xwind的

图形界面。(Linux发行版提供7个虚拟屏幕,1~6号是控制台终端((字符哑)终端),第7个

上面跑X-Window。)

 

3.控制终端(/dev/tty)这是个在应用程序中的一个概念,前台进程有个控制终端,就对应这个。

不过它并不指任何物理意义上的终端,其实/dev/tty会映射到当前的设备(通过tty命令可以看到),

比如你如果在控制台界面下(即字符界面下)那么dev/tty就是映射到dev/tty1-6之间的一个(取决于你当

前的控制台号),但是如果你现在是在图形界面(Xwindows),那么你会发现现在的/dev/tty映射到

的是/dev/pts的伪终端上。比如你可以输入命令 #tty 那么将显示当前映射终端如:/dev/tty1或者/dev/pts/0等。

 

4。伪终端(/dev/pty/)这个是终端的发展,为满足现在需求(比如网络登陆、xwindow窗口的管理)。

伪终端(Pseudo Terminal)是成对的逻辑终端设备,例如/dev/ptyp3和/dev/ttyp3(或着在设备文件系统

中分别是/dev/pty/m3和/dev/pty/s3)。它们与实际物理设备并不直接相关。如果一个程序把ttyp3看作是一个

串行端口设备,则它对该端口的读/写操作会反映在该逻辑终端设备对的另一个上面(ttyp3)。而ttyp3则是

另一个程序用于读写操作的逻辑设备。这样,两个程序就可以通过这种逻辑设备进行互相交流,而其中一个

使用ttyp3的程序则认为自己正在与一个串行端口进行通信。这很象是逻辑设备对之间的管道操作。 

对于ttyp3(s3),任何设计成使用一个串行端口设备的程序都可以使用该逻辑设备。但对于使用ptyp3的程

序,则需要专门设计来使用ptyp3(m3)逻辑设备。 例如,如果某人在网上使用telnet程序连接到你的计算

机上,则telnet程序就可能会开始连接到设备ptyp2(m2)上(一个伪终端端口上)。此时一个getty程序就应

该运行在对应的ttyp2(s2)端口上。当telnet从远端获取了一个字符时,该字符就会通过m2、s2传递给getty

程序,而getty程序就会通过s2、m2和telnet程序往网络上返回”login:”字符串信息。这样,登录程序与telnet程

序就通过“伪终端”进行通信。通过使用适当的软件,就可以把两个甚至多个伪终端设备连接到同一个物理串

行端口上。在使用设备文件系统(device filesystem)之前,为了得到大量的伪终端设备特殊文件,HP-UX、

AIX等使用了 比较复杂的文件名命名方式。

 

5.控制台终端(/dev/ttyn, /dev/console) 
在UNIX系统中,计算机显示器通常被称为控制台终端(Console)。它仿真了类型为Linux的一种终端

(TERM=Linux),并且有一些设备特殊文件与之相关联:tty0、tty1、tty2等。当你在控制台上登录时,

使用的是tty1。使用Alt+[F1—F6]组合键时,我们就可以切换到tty2、tty3等上面去。tty1 –tty6等称为虚

拟终端,而tty0则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上。因此不管

当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上。你可以登录到不同的虚拟终端上去,

因而可以让系统同时有几个不同的会话期存在。只有系统或超级用户root可以向/dev/tty0进行写操作

 

console是一个缓冲的概念,其实是为内核提供打印的。我们的pc,终端常用的是显示器和键盘构成,

我们用户打印和内核打印都从这个终端反映给用户。所以,这里,/dev/console是连接到/dev/tty0的,

其实这里有2个概念,console和tty这2个咚咚,怎么实现,其实console这个结构中有个device,这里

其实就是tty0对应的一个虚拟终端设备。如果,我们来个专门打印内核的设备(比如通过串口),我

们把那个串口register_console,那么/dev/console就到这个串口设备了。这时,内核打印就到这个串

口设备了,而用户的打印还是和上面的/dev/tty相关,如果/dev/tty对应/dev/tty0,那么用户打印还在窗口

中出现。所以说/dev/console是用来外接控制台的。

 

 

6.串行端口终端(/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)端口的设备上。可接串口来实验。

即是相对与dos下的com1和com2等....

 总结一下:感觉概念还是比较模糊的,因为可能是时间命名的缘故吧,有很多概念都很模糊吧!

首先:两种模式:字符模式:对应的为控制台,设备文件为/dev/tty1-6(是一个控制台终端的设备文件),

而/dev/tty0则是当前终端设备文件的别名(我觉得可以说是链接吧,即tty0就是指当前的设备文件)。

图形模式(Xwindow): 对应的应该是tty7,但是在Xwindow下终端(即输入命令的窗口)对应的设备

文件为/dev/pts/0-(是一个伪终端设备文件)

 

关于dev/tty其实很简单:就是当前终端设备的一个链接(有点像/dev/tty0吧,但是他好像更强大一点),

我们可以做下这个实验:在Xwindow下打开多个终端(输入命令的窗口):#tty命令,发现在各个窗口

分别显示为# dev/pts/0  #dev/pts/1  #dev/pts/2....

然后在#dev/pts/0终端中输入echo"test">/dev/pts/0 结果显示test。然后你在#dev/pts/0终端中输入

echo"test">/dev/tty,你会发现在当前窗口也显示test字符串。也就是说dev/tty其实就是当前设备文件

的一个链接。

 

关于/dev/console  应该来说更像一个缓冲结果吧,来实现对内核的打印,比如说内核把

要打印的内容装入缓冲区,然后由console来决定打印到哪里吧(比如是tty0还是串口等等吧)。

所以说/dev/console是用来外接控制台的。

 
 
 
基本概念:
1> tty(终端设备的统称):
tty一词源于Teletypes,或teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘和显示器取代,所以现在叫终端比较合适。
终端是一种字符型设备,他有多种类型,通常使用tty来简称各种类型的终端设备。
2> pty(虚拟终端):
但是假如我们远程telnet到主机或使用xterm时不也需要一个终端交互么?是的,这就是虚拟终端pty(pseudo-tty)
3> pts/ptmx(pts/ptmx结合使用,进而实现pty):
pts(pseudo-terminal slave)是pty的实现方法,和ptmx(pseudo-terminal master)配合使用实现pty。
Linux终端:
在Linux系统的设备特别文档目录/dev/下,终端特别设备文档一般有以下几种:
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/)
伪终端(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程式就通
过“伪终端”进行通信。通过使用适当的软件,就能够把两个甚至多个伪终端设备连接到同一个物理串行端口上。
在使用设备文档系统
(device
filesystem)之前,为了得到大量的伪终端设备特别文档,使用了比较复杂的文档名命名方式。因为只存在16个ttyp(ttyp0―ttypf)
的设备文档,为了得到更多的逻辑设备对,就使用了象q、r、s等字符来代替p。例如,ttys8和ptys8就是个伪终端设备对。但是这种命名方式现在
仍然在RedHat等Linux系统中使用着。
但Linux系统上的Unix98并不使用上述方法,而使用了”pty
master”方式,例如/dev/ptm3。他的对应端则会被自动地创建成/dev/pts/3。这样就能够在需要时提供一个pty伪终端。目录
/dev/pts是个类型为devpts的文档系统,并且能够在被加载文档系统列表中看到。虽然“文档”/dev/pts/3看上去是设备文档系统中的
一项,但其实他完全是一种不同的文档系统。
即: TELNET ---> TTYP3(S3: slave) ---> PTYP3(M3: master) ---> GETTY
=========================================================================
实验:
1、在X下打开一个或N个终端窗口
2、#ls /dev/pt*
3、关闭这个X下的终端窗口,再次运行;比较两次输出信息就明白了。
在RHEL4环境下: 输出为/dev/ptmx /dev/pts/1存在一(master)对多(slave)的情况
=========================================================================
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等上面去。tty1tty6等
称为虚拟终端,而tty0则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上(这时也叫控制台终端)。因此不管当前正在使用哪个虚拟终
端,系统信息都会发送到控制台终端上。您能够登录到不同的虚拟终端上去,因而能够让系统同时有几个不同的会话期存在。只有系统或终极用户root能够向
/dev/tty0进行写操作 即下例:
1、# tty(查看当前TTY)
/dev/tty1
2、#echo "test tty0" > /dev/tty0
test tty0
5 虚拟终端(/dev/pts/n)
在Xwindows模式下的伪终端.
6 其他类型
Linux系统中还针对很多不同的字符设备存在有很多其他种类的终端设备特别文档。例如针对ISDN设备的/dev/ttyIn终端设备等。这里不再赘述。
FAQ: 终端和控制台
Q:/dev/console 是什么?
A:/dev/console即控制台,是和操作系统交互的设备,系统将一些信息直接输出到控制台上。现在只有在单用户模式下,才允许用户登录控制台。
Q:/dev/tty是什么?
A:tty设备包括虚拟控制台,串口连同伪终端设备。
/dev/tty代表当前tty设备,在当前的终端中输入 echo “hello” > /dev/tty ,都会直接显示在当前的终端中。
Q:/dev/ttyS*是什么?
A:/dev/ttyS*是串行终端设备。
Q:/dev/pty*是什么?
A:/dev/pty*即伪终端,所谓伪终端是逻辑上的终端设备,多用于模拟终端程式。例如,我们在X Window下打开的终端,连同我们在Windows使用telnet 或ssh等方式登录Linux主机,此时均在使用pty设备(准确的说在使用pty从设备)。
Q:/dev/tty0和/dev/tty1 …/dev/tty63是什么?他们之间有什么区分?
A:/dev/tty0代表当前虚拟控制台,而/dev/tty1等代表第一个虚拟控制台,例如当使用ALT+F2进行转换时,系统的虚拟控制台为/dev/tty2 ,当前的控制台则指向/dev/tty2
Q:怎样确定当前所在的终端(或控制台)?
A:使用tty命令能够确定当前的终端或控制台。
Q:/dev/console是到/dev/tty0的符号链接吗?
A:
现在的大多数文本中都称/dev/console是到/dev/tty0的链接(包括《Linux内核源代码情景分析》),但是这样说是不确切的。根据内
核文档,在2.1.71之前,/dev/console根据不同系统的设定能够链接到/dev/tty0或其他tty*上,在2.1.71版本之后则完
全由内核控制。现在,只有在单用户模式下能够登录/dev/console(能够在单用户模式下输入tty命令进行确认)。
Q:/dev/tty0和/dev/fb*有什么区分?
A: 在Framebuffer设备没有启用的系统中,能够使用/dev/tty0访问显卡。
Q:关于终端和控制台的区分能够参考哪些文本
A:
能够参考内核文档中的 Documents/devices.txt 中关于”TERMINAL DEVICES”
的章节。另外,《Linux内核源代码情景分析》的8.7节 连同《Operating Systems : Design and
Implementation》中的3.9节(第3版中为3.8节)都对终端设备的概念和历史做了很好的介绍。另外在《Modern
Operating system》中也有对终端设备的介绍,由于和《Operating Systems : Design and
Implementation》的作者相同,所以文本内容也大致相同。需要注意的一点是《Operating Systems : Design
and Implementation》中将终端设备分为3类,而《Modern Operating
system》将终端硬件设备分为2类,差别在于前者将 X Terminal作为一个类别。
PS:

只有2410的2.6才叫ttySAC0,9200等的还是叫ttyS0
 
 

终端的一些概念