Unix/Linux编程:终端(Terminal)与控制台(Console)的区别 您所在的位置:网站首页 windows的终端和控制台 Unix/Linux编程:终端(Terminal)与控制台(Console)的区别

Unix/Linux编程:终端(Terminal)与控制台(Console)的区别

2023-08-20 08:27| 来源: 网络整理| 查看: 265

一、终端Terminal 1.1 终端的定义

(1)什么是终端?

终端就是处理计算机主机输入输出的一套设备,它用来显示主机运算的输出,并且接受主机要求的输入,典型的终端包括显示器键盘套件,打印机打字机套件等。

(2)终端的本质。

其实根本上也就一句话,能接受输入,能显示输出,就这就够了,不管到了什么时代,终端始终扮演着人机接口的角色,所谓Terminal,即机器的边缘!

只要能提供给计算机输入和输出功能,它就是终端,而与其所在的位置无关

1.2 终端的分类

(1) 本地终端

用VGA连接主机和显示器,用PS/2或者USB连接主机和键盘,这样的一个显示器/键盘组合就是一个本地终端。

(2)用串口连接的远程终端

通过串口线把主机接到另外一个有显示器和键盘的主机,通过运行一个终端模拟程序,比如“Windows超级终端”来将这台主机的显示器和键盘借给串口对端的主机。

(3)用TCP/IP承载的远程终端

类似Telnet,SSH这般。

前两类又称之为“物理终端”,后面的那个称之为“伪终端”

上述的三类中,前两类都是在本地就直接关联了物理设备的,比如VGA口,PS/2口,串口之类的,这种终端叫做物理终端,而第三类在本地则没有关联任何物理设备,注意,不要把物理网卡当成终端关联的物理设备,它只是隧道关联的物理设备,这里的物理网卡完全可以换成卡车,它们与终端并不直接相关,所以这类不直接关联物理设备的终端叫做伪终端。

(1) 物理终端:

直接连接在主机上的显示器、键盘鼠标统称。在实际机架式服务器部署中,一般是多台服务器共享一套终端,简称KVM(Keyboard键盘,video显示器,mouse鼠标)

(2)虚拟终端(tty):

附加在物理终端之上,用软件方式虚拟实现,CentOS默认启用6个虚拟终端,可以通过快捷键来切换,切换方式:Ctrl-Alt-F[1–6], 对应的文件是/dev/tty#。

可以同过tty命令来查看当前的虚拟终端号。tty是teletype writer的简称。

(3)伪终端(pty):

伪终端是一对相互连接的设备,也叫做主从设备。在这对设备之间,设有一条IPC信道,可供数据进行双向传递

两种应用场景

第一在图形界面下打开的命令行接口,我们经常使用Ctrl+Alt+T打开的那个实际上就是一个 伪终端

第二基于ssh协议或telnet协议等远程打开的命令行界面,是运维工程师用的最多的一种连接服务器的方式。pts(pseudo-terminal slave)是pty的实现方法。

1.3 其他

也叫做TTY设备

tty(通常用tty来简称各种类型的设备)一词源于Teletypes,原来指的是电传打印机。 在这里插入图片描述 它终端通过线缆与计算机连接,并完成计算机的输入输出功能: 在这里插入图片描述 也叫做物理终端。

现在物理终端实际上已经灭绝了,我们看到的所有 TTY 都是模拟视频终端,即软件仿真出来的终端。可以通过 toe -a 命令查看系统支持的终端类型

二、控制台Console 2.1 什么是控制台

显示系统消息的终端就叫控制台,Linux 默认所有虚拟终端都是控制台,都能显示系统消息。

另外,对于那些专门用来模拟终端设备的程序,我们也可以称之为控制台Console,像gnome-terminal,urxvt,mlterm,xterm等软件,都可以称之为控制台,

总结:控制台是终端的特例,是终端的真子集,它是虚拟的终端,因此控制台也叫做 控制终端

2.2 终端与控制台的区分

总结: (1)控制台是终端的真子集;

(2)tty2-tty6,这五个黑色的界面是虚拟终端,它们是真正的控制台,此时的5个虚拟终端,我们就称之为控制台;

(3)桌面之下通过Ctrl+Alt+T打开的那个东西是一个伪终端,远程通过Telnet或者是ssh连接的也是创建的伪终端;

linux中已经完全淡化了控制台和终端的区别

三、Linux下关于终端的一些设备文件

Linux下一切皆文件。

3.1 /dev/ttyX 设备文件

tty是最令人熟悉的了。

在早期计算机时代,小型机主机的显卡显示器和键盘就是控制台,这是人控制主机的第一人机接口;同时小型机还需要提供多个终端给多个人接入主机,终端有字符哑终端和图形终端两种,字符哑终端就是tty。

回到现在的pc时代,个人计算机只有控制台,没有终端。linux为了实现tty设备,在控制台上通过getty软件虚拟了六个字符哑终端(也叫控制台终端tty1-tty6,数量可以在/etc/inittab里自己调)和一个图型终端(X-Window), 在虚拟图形终端中又可以通过软件(如rxvt)再虚拟无限多个虚拟字符哑终端(pts/0….),网络连接telnet、ssh等创建的也都是虚拟字符哑终端。

当然,linux也有自己的实际tty设备,串口终端就是实际的tty设备。

总结:

在Linux中,/dev/ttyX代表的都是物理终端,其中,/dev/tty1~/dev/tty63代表的是本地终端,也就是接到本机的键盘显示器可以操作的终端。事实上Linux内核在初始化时会生成63个本地终端,通过键盘上的Fn-Alt-FX(X为1,2,3…)可以在这些终端之间切换,每切换到一个终端,该终端就是当前的焦点终端,比如说,你按下了Fn-Alt-F4组合键,那么此时第4个终端就是焦点终端,即/dev/tty4就是焦点终端设备。

3.2 /dev/console 设备文件

系统中有没有什么变量可以表示焦点终端呢?当然有了,那就是/dev/console,不管你在哪里往/dev/console里写东西,这些东西总会出现在系统当前的焦点终端上!

本质上/dev/console其实就是一个全局变量,指代当前的焦点终端,如果当前的焦点是/dev/tty4,那么/dev/console指的就是/dev/tty4,当然这一切都是由内核来维护的。

那么系统中有没有一个叫做自己的全局变量呢?当然有,那就是/dev/tty,也就是说,无论你在哪个终端下工作,当你往/dev/tty里写东西的时候,它总是会马上出现在你的眼前。

总结:/dev/tty1~/dev/tty63我们知道了它们是什么,/dev/tty表示自己,/dev/console表示焦点终端

3.3 串口终端 ttyS

开头的就是串口连接的终端,比如ttyS0,ttyS1,ttyS2…

最后,解释一下伪终端。其实也很好解释,只要你理解TUN/TAP虚拟网卡的原理就行,它们如出一辙!类似Telnet,SSH不是没有实际的物理设备吗?简单,给它模拟一个不就得了?系统是分层的,执行流只管调用接口,并不管具体实现。

模拟一个虚拟的终端设备,实现它的write,read等回调即可。对于VGA连接的显示器而言,write其实就是将显存刷新,而对于伪终端而言,write其实是想将数据导入到一个用户态的程序中(不然又能去哪里呢?它下面又没有任何物理的东西),这简直跟很多VPN的原理非常类似。

3.4 桌面系统虚拟终端tty2-tty6,又称之为控制台终端

在Linux系统中,计算机显示器通常被称为控制台终端(Console)。

它仿真了类型为Linux的一种终端,并且有一些设备特殊文件与之相关联:tty0、tty1、tty2等。当你在控制台上登录时,使用的是tty1。使用Alt+[F1—F6]组合键时,我们就可以切换到tty2、tty3等上面去。

tty1 –tty6等称为虚拟终端,而tty0则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上。因此不管当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上。

你可以登录到不同的虚拟终端上去,因而可以让系统同时有几个不同的会话期存在。

只有系统或超级用户root可以向/dev /tty0进行写操作

3.5 伪终端

前面说过伪终端的两种情况:

第一是在Xwindows(桌面GUI环境之下)模式下的启动的终端称之为伪终端;

第二是在远程如果用telnet远程登录的话,也是创建的一个伪终端

Linux设计出一对虚拟终端设备,即/dev/ptmx和/dev/pts/X。这就跟TUN/TAP网卡的网卡与字符设备之前的对应关系一致。

简单来讲,当有ssh客户端连接后,sshd会fork一个进程,然后在子进程中打开一个叫做/dev/pts/1(或者2,3,4,5…)的设备,然后和sshd进程的/dev/ptmx配对,这样在ptmx与pts之间就构成了一条管道,数据可以顺利被导入到sshd,然后通过TCP/IP封装发往ssh client所在的机器。

总结:

/dev目录下的各种tty,ptmx,pts/X(X是1,2,3等数字),console 等等这些是令人混淆的根源,其实理解这些是有窍门的,记住它们只是操作某种终端设备的设备文件而已,这是UNIX风格的延续,这些设备文件对应的真实设备也就那么几种,比如显示器键盘套件,串口对面的超级终端,伪终端对面的SSH,Telnet等等。

四、tty命令

Linux tty命令用于显示终端机连接标准输入设备的文件名称。

在Linux操作系统中,所有外围设备都有其名称与代号,这些名称代号以特殊文件的类型存放于/dev目录下。你可以执行tty(teletypewriter)指令查询目前使用的终端机的文件名称。

命令格式如下:

tty [-s][--help][--version]

-s或–silent或–quiet 不显示任何信息,只回传状态代码。 –help 在线帮助。 –version 显示版本信息。

显示当前终端

# tty /dev/pts/4 五、全文总结:

(1)终端terminal是一个非常宽泛的概念;

(2)桌面Linux系统中,tty2-tty6 是虚拟终端,也称之为控制台终端,也称之为控制台console;

(3)伪终端的两种情况,第一是桌面环境下的终端,第二种是通过Telnet或者是ssh连接的。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有