tty、pty、pts等(小记)

来源:互联网 发布:c接收post数据 编辑:程序博客网 时间:2024/06/06 00:01
  • 整理一下,内容会不太准确,不太严谨。
  • 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是用来外接控制台的。




tty

teletypewriter (电传打字机)

终端设备(Terminal)

pty

pseudo tty

伪终端

pts

pseudo-terminal slave

 

ptmx

pseudo-terminal master multiplexer

历史?

tty ==> 泛指所有终端(Terminal)

tty

它是 Teletype(或者TeletypeWriter)的缩写,中文翻译:电传打字机。

电传打字机通常由键盘、收发报器和印字机构等组成。电传打印机是一个比较早出现的产品,为在传真机普遍使用以前的通信设备,其原理采用有点近似电报。它可安装在办公室内,因而毋须到电报局去发电传。

Terminal

终端,一种电子的或机电的硬件设备,用来向大型主机输入数据并显示来自主机的数据。

为了充分使用计算机提供的计算资源,早期很多计算机会连接若干终端控制台,这些终端从硬件上构造很简单,不执行计算的任务,只简单的把用户的输入发送到主计算机去处理,然后再把计算结果返回给用户。

前面的电传打字机就是最早的计算机的终端。后被显示器和键盘所取代。它们通过串口(通常是RS232)和主机相连。分哑终端(dumb terminal)和智能终端(start terminal)。或者叫瘦客户端(thin client)和胖客户端(fat client)。

注释:

什么是哑终端,它和智能终端有什么区别?

哑终端是只依赖于主机才能进行处理的终端。哑终端没有处理器、硬盘或软盘,只有键盘、显示器和到主机的通信途径(通常通过一些类型的控制器)。而智能终端有自己的处理器、存储设备以及软件程序。

进入PC时代,显示器不再包含字符生成的硬件,所有的视频信号都是由位于PC内的显卡生成的。这时的显示器不再是终端了,当PC链接大型主机时,可以来模拟终端(比如通过telnet)

Virual console

虚拟控制台(VC),或者称为虚拟终端(virtual terminal)。它是计算机用户界面键盘和显示的概念上的组合(is a conceptual combination of the keyboard and display for a computer user interface. )?

它是类unix系统的一个特性。比如在Linux下,通过

Ctrl+Alt+F1~6

可以在六个虚拟控制台之间进行切换。

terminal emulator

随着X视窗系统的广泛使用,虚拟控制台的使用需求也越来越少,控制台程序可以在终端模拟器(terminal emulator)中运行

这些被称为伪终端(Pseudo Terminal)

Pseudo Terminal

伪终端是是一个伪设备对。有两种命名风格

BSD PTYs
(obsolete)

slave

/dev/tty[p-za-e][o-9a-f]

master

/dev/pty[p-za-e][0-9a-f]

Unix98 PTYs

slave

/dev/pts/N

master

/dev/ptmx

Linux终端设备

  • 虚拟控制台(Virtual console)

在linux下,通过Ctrl+Alt+F1~6切换到虚拟控制台,运行tty和stty可以看到

debao@ubuntu:~$ tty/dev/tty1debao@ubuntu:~$ sttyspeed 38400 baud; line = 0; -brkint ixoff -imaxbel -iexten 
  • 控制台设备

系统启动时,选择单用户模式

debao@ubuntu:~$ tty/dev/console
  • 串口

这个东西好复杂啊

普通串口

/dev/ttyS[0~191]

Serial Mux Device

/dev/ttyB[0~]

Chase Serial Card(OBSOLETE)

/dev/ttyH[0~]

Cyclades Serial Card

/dev/ttyC[0~31]

Digiboadr Serial Card

/dev/ttyD[0~]

Stallion Serial Card

/dev/ttyE[0~63,64~127,...]

Specialix Serial Card

/dev/ttyX[0~]

isdn4linux virtual modem

/dev/ttyI[0~63]

Comtrol Rocketport serial card

/dev/ttyR[0~]

SDL RISCom serial card

/dev/ttyL[0~]

Hayes ESP serial card

/dev/ttyP[0~]

Computone IntelliPort II serial card

/dev/ttyF[0~63,64~127,...]

Specialix IO8+ serial card

/dev/ttyW[0~7,8~15,...]

PAM Software's multimodem boards

/dev/ttyM[0~]

Comtrol VS-1000 serial controller

/dev/ttyV[0~]

ISI serial card

/dev/ttyM[0~]

Technology Concepts serial card

/dev/ttyT[0~]

Specialix RIO serial card

/dev/ttySR[0~255]

Chase Research AT/PCI-Fast serial card

/dev/ttyCH[0~15,16~31,..]

ACM USB modems

/dev/ttyACM[0~]

Moxa Intellio serial card

/dev/ttyMX[0~127]

SmartIO serial card

/dev/ttySI[0~]

USB serial converters

/dev/ttyUSB[0~]

Low-density serial ports

/dev/ttyLU[0~3]

/dev/ttyFB0

/dev/ttySA[0~2]

/dev/ttySC[0~3]

/dev/ttyFW[0~3]

/dev/ttyAM[0~15]

/dev/ttyDB[0~7]

...

User space serial ports

/dev/ttyU[0~]

Bluetooth RFCOMM TTY devices

/dev/rfcomm[0~]

A2232 serial card

/dev/ttyY[0~]

Equinox SST multi-port serial boards

/dev/ttyEQ[0~127,...]

  • 伪终端(PTY)

在窗口系统中打开Terminal,运行tty和stty

debao@ubuntu:~/qt-labs/qt5$ cddebao@ubuntu:~$ tty/dev/pts/6debao@ubuntu:~$ sttyspeed 38400 baud; line = 0;-brkint ixoff -imaxbel iutf8

那么Linux的 /dev 目录下的东西,哪些和终端有关系呢?(所有均是字符设备)

列个表

每一个设备会有主、次设备号,主设备号相同的代表同类设备(即:使用同一个驱动程序)

主设备号

次设备号

  

2(伪终端 master)

0

/dev/ptyp0

老式的BSD风格

...

...

255

/dev/ptyef

3(伪终端 slave)

0

/dev/ttyp0

 

...

...

255

/dev/ttyef

4 (TTY设备)

0

/dev/tty0

当前虚拟控制台

1

/dev/tty1

各个虚拟控制台

...

...

63

/dev/tty63

64

/dev/ttyS1

串口(S代表Serial Port),注意大写

...

...

255

/dev/ttyS191

5 (其他TTY设备)

0

/dev/tty

当前TTY设备

1

/dev/console

系统控制台

2

/dev/ptmx

所有伪终端 PTY master 复用

3

/dev/ttyprintk

64

/dev/cua0

对应ttyS0~191的callout设备

...

...

255

/dev/cua191

7(虚拟控制台捕捉设备)

0

/dev/vcs

当前虚拟控制台(VC)的文本内容

1

/dev/vcs1

各个虚拟控制台的文本内容

...

...

6

/dev/vcs6

128

/dev/vcsa

当前虚拟控制台的文本/属性

129

/dev/vcsa1

各个虚拟控制台的文本/属性

...

...

134

/dev/vcsa6

128-135

Pty Master(不应该存在,使用 /dev/ptmx)?

136-143

0

/dev/pts/0

Pty Slave

1

/dev/pts/1

...

...

参考

  • http://en.wikipedia.org/wiki/Pseudo_terminal

  • http://en.wikipedia.org/wiki/Computer_terminal

  • http://en.wikipedia.org/wiki/Virtual_console_%28computer_user-interface%29

  • http://lamp.linux.gov.cn/Linux/device_files.html

0 0
原创粉丝点击