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

简介: Linux终端(Terminal)与控制台(Console)的区别

终端(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连接的。

目录
相关文章
|
4月前
|
Linux Shell
在Linux中,umask 和 ulimit有什么区别?
在Linux中,umask 和 ulimit有什么区别?
|
4月前
|
安全 Linux 应用服务中间件
在Linux中,包过滤防火墙与代理应用防火墙有什么区别?有哪些相应的产品?
在Linux中,包过滤防火墙与代理应用防火墙有什么区别?有哪些相应的产品?
|
4月前
|
Linux 索引
在Linux中,符号链接与硬链接有何区别?
在Linux中,符号链接与硬链接有何区别?
|
2月前
|
运维 Java Linux
Linux 下命令后台运行秘籍:无惧终端断开的魔法
本文详细介绍了在 Linux 系统下使命令不受终端断开影响、持续在后台运行的多种方法及其原理。包括使用 `nohup`、`setsid`、括号括起来、作业调度和 `screen` 等技巧,帮助读者提高工作效率,确保任务不被意外中断。
75 0
Linux 下命令后台运行秘籍:无惧终端断开的魔法
|
3月前
|
监控 Linux
Linux系统中du命令与df命令的区别与用法
总的来说,`du` 和 `df` 在磁盘管理中互补使用,能够提供全面的磁盘空间使用信息,帮助用户和管理员有效地监控和管理系统资源。
102 3
|
3月前
|
Shell Linux API
C语言在linux环境下执行终端命令
本文介绍了在Linux环境下使用C语言执行终端命令的方法。首先,文章描述了`system()`函数,其可以直接执行shell命令并返回结果。接着介绍了更强大的`popen()`函数,它允许程序与命令行命令交互,并详细说明了如何使用此函数及其配套的`pclose()`函数。此外,还讲解了`fork()`和`exec`系列函数,前者创建新进程,后者替换当前进程执行文件。最后,对比了`system()`与`exec`系列函数的区别,并针对不同场景推荐了合适的函数选择。
|
4月前
|
缓存 Java 应用服务中间件
在Linux中,Tomcat和Resin有什么区别,工作中怎么选择?
在Linux中,Tomcat和Resin有什么区别,工作中怎么选择?
|
4月前
|
缓存 负载均衡 应用服务中间件
在Linux中,Squid、Varinsh和Nginx有什么区别,工作中怎么选择?
在Linux中,Squid、Varinsh和Nginx有什么区别,工作中怎么选择?
|
4月前
|
安全 Linux 虚拟化
在Linux中,Jail和Chroot有何区别?
在Linux中,Jail和Chroot有何区别?
|
4月前
|
负载均衡 应用服务中间件 Linux
在Linux中,LVS、Nginx、HAproxy有什么区别?工作中怎么选择?
在Linux中,LVS、Nginx、HAproxy有什么区别?工作中怎么选择?