Linux终端(Terminal)与控制台(Console)的区别_linux c terminal-程序员宅基地

技术标签: c++  c语言  运维  linux  服务器  Linux系统编程:从入门到放弃  开发语言  

终端(Terminal)与控制台(Console)的区别

一、终端Terminal

1.1 终端的定义

(1)什么是终端?

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

(2)终端的本质。

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

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

1.2 终端的分类

  • 本地终端 
    用VGA连接主机和显示器,用PS/2或者USB连接主机和键盘,这样的一个显示器/键盘组合就是一个本地终端。* 用串口连接的远程终端 
    通过串口线把主机接到另外一个有显示器和键盘的主机,通过运行一个终端模拟程序,比如**“Windows超级终端”*来将这台主机的显示器和键盘借给串口对端的主机。 用TCP/IP承载的远程终端 
    类似Telnet,SSH这般。

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

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

二、控制台Console

2.1 什么是控制台

显示系统消息的终端就叫控制台,Linux 默认所有虚拟终端都是控制台,都能显示系统消息。
另外,对于那些专门用来模拟终端设备的程序,我们也可以称之为控制台Console,像gnome-terminal,urxvt,mlterm,xterm等软件,都可以称之为控制台,

**总结:**控制台是终端的特例,是终端的真子集,它是虚拟的终端,

2.2 终端与控制台的区分

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

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

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

**伪终端(pty):**两种应用场景,

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

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

总结三个观点:

(1)控制台是终端的真子集

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

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

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

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

Linux下一切皆文件。

3.1 /dev/ttyX 设备文件

**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.1中的有所重复,还有一些小的细节没搞清楚,比如tty2-tty6称之为虚拟终端,那tty7-tty63指的又是什么,又有什么作用呢?还不是很清楚,望有大佬告知!)

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配对,这样在ptmxpts***之间就构成了一条管道,数据可以顺利被导入到sshd,然后通过TCP/IP封装发往ssh client所在的机器。

总结:

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

四、tty命令

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

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

命令格式如下:

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

4.1 伪终端——桌面GUI下的terminal和远程通过ssh创建的terminal

比如在我的centos系统中,默认进入到的是带有桌面的哪一个tty,即所谓的tty1,现在打开一个terminal,然后执行tty命令,得到:



[zoe@localhost ~]$ tty

/dev/pts/1   # 这是第一个伪终端

如果是我再打开一个terminal,如下:



[zoe@localhost ~]$ tty

/dev/pts/2   # 这是第二个伪终端

这里属于伪终端的第一种情况——桌面环境下的terminal。

现在我在自己的电脑上通过ssh连接到一个Linux服务器,然后执行命令,得到:



tengjian@tcl-Super-Server:~$ tty

/dev/pts/21   # 通过ssh远程连接创建的伪终端,这里由于服务器有多个人连接,创建的是第21个伪终端

伪终端总结:

**(1)/dev/ptsn 伪终端(pseudo-tty)。**n取值动态增长。Telnet和ssh远程登录或桌面环境下即是此情况。

(2)伪终端是动态增加的。/dev/pts是远程登陆(telnet,ssh等)后创建的控制台设备文件所在的目录。由于可能有好几千个用户登陆,所以/dev/pts其实是动态生成的,不像其他设备文件是构建系统时就已经产生了。

4.2 虚拟终端——tty1-tty6,我们称这几个为控制台console

在同样的这个centos系统上,先按Ctrl+Alt+F2,激活第二个tty2,然后执行tty命令,如下:



[zoe@localhost ~]$ tty

/dev/tty2    #第二个虚拟终端

在同样的这个centos系统上,先按Ctrl+Alt+F3,激活第二个tty3,然后执行tty命令,如下:



[zoe@localhost ~]$ tty

/dev/tty3    #第三个虚拟终端

五、全文总结:

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

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

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_21438461/article/details/131266982

智能推荐

JWT(Json Web Token)实现无状态登录_无状态token登录-程序员宅基地

文章浏览阅读685次。1.1.什么是有状态?有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。缺点是什么?服务端保存大量数据,增加服务端压力 服务端保存用户状态,无法进行水平扩展 客户端请求依赖服务.._无状态token登录

SDUT OJ逆置正整数-程序员宅基地

文章浏览阅读293次。SDUT OnlineJudge#include<iostream>using namespace std;int main(){int a,b,c,d;cin>>a;b=a%10;c=a/10%10;d=a/100%10;int key[3];key[0]=b;key[1]=c;key[2]=d;for(int i = 0;i<3;i++){ if(key[i]!=0) { cout<<key[i.

年终奖盲区_年终奖盲区表-程序员宅基地

文章浏览阅读2.2k次。年终奖采用的平均每月的收入来评定缴税级数的,速算扣除数也按照月份计算出来,但是最终减去的也是一个月的速算扣除数。为什么这么做呢,这样的收的税更多啊,年终也是一个月的收入,凭什么减去12*速算扣除数了?这个霸道(不要脸)的说法,我们只能合理避免的这些跨级的区域了,那具体是那些区域呢?可以参考下面的表格:年终奖一列标红的一对便是盲区的上下线,发放年终奖的数额一定一定要避免这个区域,不然公司多花了钱..._年终奖盲区表

matlab 提取struct结构体中某个字段所有变量的值_matlab读取struct类型数据中的值-程序员宅基地

文章浏览阅读7.5k次,点赞5次,收藏19次。matlab结构体struct字段变量值提取_matlab读取struct类型数据中的值

Android fragment的用法_android reader fragment-程序员宅基地

文章浏览阅读4.8k次。1,什么情况下使用fragment通常用来作为一个activity的用户界面的一部分例如, 一个新闻应用可以在屏幕左侧使用一个fragment来展示一个文章的列表,然后在屏幕右侧使用另一个fragment来展示一篇文章 – 2个fragment并排显示在相同的一个activity中,并且每一个fragment拥有它自己的一套生命周期回调方法,并且处理它们自己的用户输_android reader fragment

FFT of waveIn audio signals-程序员宅基地

文章浏览阅读2.8k次。FFT of waveIn audio signalsBy Aqiruse An article on using the Fast Fourier Transform on audio signals. IntroductionThe Fast Fourier Transform (FFT) allows users to view the spectrum content of _fft of wavein audio signals

随便推点

Awesome Mac:收集的非常全面好用的Mac应用程序、软件以及工具_awesomemac-程序员宅基地

文章浏览阅读5.9k次。https://jaywcjlove.github.io/awesome-mac/ 这个仓库主要是收集非常好用的Mac应用程序、软件以及工具,主要面向开发者和设计师。有这个想法是因为我最近发了一篇较为火爆的涨粉儿微信公众号文章《工具武装的前端开发工程师》,于是建了这么一个仓库,持续更新作为补充,搜集更多好用的软件工具。请Star、Pull Request或者使劲搓它 issu_awesomemac

java前端技术---jquery基础详解_简介java中jquery技术-程序员宅基地

文章浏览阅读616次。一.jquery简介 jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互 jQuery 的功能概括1、html 的元素选取2、html的元素操作3、html dom遍历和修改4、js特效和动画效果5、css操作6、html事件操作7、ajax_简介java中jquery技术

Ant Design Table换滚动条的样式_ant design ::-webkit-scrollbar-corner-程序员宅基地

文章浏览阅读1.6w次,点赞5次,收藏19次。我修改的是表格的固定列滚动而产生的滚动条引用Table的组件的css文件中加入下面的样式:.ant-table-body{ &amp;amp;::-webkit-scrollbar { height: 5px; } &amp;amp;::-webkit-scrollbar-thumb { border-radius: 5px; -webkit-box..._ant design ::-webkit-scrollbar-corner

javaWeb毕设分享 健身俱乐部会员管理系统【源码+论文】-程序员宅基地

文章浏览阅读269次。基于JSP的健身俱乐部会员管理系统项目分享:见文末!

论文开题报告怎么写?_开题报告研究难点-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏15次。同学们,是不是又到了一年一度写开题报告的时候呀?是不是还在为不知道论文的开题报告怎么写而苦恼?Take it easy!我带着倾尽我所有开题报告写作经验总结出来的最强保姆级开题报告解说来啦,一定让你脱胎换骨,顺利拿下开题报告这个高塔,你确定还不赶快点赞收藏学起来吗?_开题报告研究难点

原生JS 与 VUE获取父级、子级、兄弟节点的方法 及一些DOM对象的获取_获取子节点的路径 vue-程序员宅基地

文章浏览阅读6k次,点赞4次,收藏17次。原生先获取对象var a = document.getElementById("dom");vue先添加ref <div class="" ref="divBox">获取对象let a = this.$refs.divBox获取父、子、兄弟节点方法var b = a.childNodes; 获取a的全部子节点 var c = a.parentNode; 获取a的父节点var d = a.nextSbiling; 获取a的下一个兄弟节点 var e = a.previ_获取子节点的路径 vue

推荐文章

热门文章

相关标签