用了这么多年Linux,你清楚这些概念吗?

2021-02-27    分类: 网站建设

终端(Terminal)、控制台(Console)、tty和shell,这些概念是我们经常听到的概念。单独说一个概念,你可能七七八八说一大堆。但具体说到这几个概念的区别,估计很多人都说不上来。今天创新互联就一起了解一下这几个概念的差异。

历史渊源

我们先说一下控制台和终端,这些概念都有历史渊源,如果从历史上进行了解,会更加的清晰的明白这些概念的差异。


早期计算机精贵,一台主机,连很多终端,终端为主机提供了人机接口,很多人都通过终端使用主机的资源。终端有字符哑终端和图形终端两种。

而控制台是另一种人机接口。 不通过串行线路与主机相连,直接安在主机上,这是人控制主机的第一人机接口。

可以想象成主机上有块面板,面板上方小灯闪,人得站着才能够着它(控制台),主机上面一些电缆延伸到很多人办公桌的屏幕和键盘上(终端)。

为了更加清晰的了解这些概念,我们给出一个老爷机的实物图,红色方框是具体的说明。


现在的情况

随着硬件技术的飞速发展,过去那种多人使用同一台计算机的时代已经过去。但如果我们连接数据中心的服务器的话,会出现多个人同时连接同一台服务器的情况。但此时我们并不是通过硬件终端连接的,而是通过xshell或者Eterm等软件进行连接的。

随着技术的发展,Linux操作系统在软件层面保留了对硬件的兼容,因此在操作系统内部出现了多种概念。下面本文逐个解释一下这些概念的差异。

1. 名词解释

  • -------tty-------:代指所有终端设备
  • -------pyt-------:没有实际设备的其他虚拟终端
  • --pts --ptmx--:两者结合,进而实现pty,是pty的实现方法

tty(teletype):电传打字机

ttyS(tty serial) :tty + 串行

pty(pseudo-tty):伪君子 + tty=伪终端

pts(pseudo-terminal slave):伪君子 + 终端 + 女仆=伪终端从端

ptmx(pseudo-terminal master):伪君子 + 终端 + 主人=伪终端主端

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。

2. 分类


3.类别解释

串行端口终端

历史上只有这些串口设备才被叫做终端,也即现在的串行端口终端。计算机把每个串行设备看作一个字符设备。如你所知,Linux把设备当作文件,对应的设备文件名是ttyS。

伪终端/模拟终端

通过X Windows(图形界面)、SSH、telnet等登入主机所用的终端。成对的逻辑终端设备,包含主端和从端。有两套伪终端接口:

  • BSD
  • master(主端)为 pty[p-za-e][0-9a-f],slave(从端)为 tty[p-za-e][0-9a-f]
  • 由于在编程时想找到合适的终端需要逐个尝试,所以使用逐渐减少
  • UNIX 98
  • ptmx作为master设备,每次打开获得master的信息,动态生成pts/n
  • 并不与实际物理设备相关,大多数系统选择这个接口作为pty实现

伪终端即假的,由模拟软件(gnome-terminal,urxvt,mlterm,xterm、konsole等)模拟出来的终端,ctrl + alt + T出来的那个小黑框就是其中一种

对master的操作会反应到slave上

控制终端

控制终端是指能够控制一个、一套设备或者几套设备的终端控制器;

/dev/tty是一个应用程序概念,面对进程;

/dev/tty会映射到当前使用的终端,使用命令tty查看其当前指向的“设备”

  • X Windows下(图形化界面):映射到pts,也即你开启的是伪终端
  • 哑字符界面下(alt + Fn):映射到tty1-6中的一个,也即控制台虚拟终端

tty(控制终端)会映射到你正在使用的任何类型的终端上,用tty命令查看

控制台终端/virtual consoles虚拟控制台

  • 控制台终端(/dev/ttyn)是在系统视频监视器上全屏的显示终端;
  • 其特殊性在于系统自动创建了64或6或10个(说法不一),且与cosloe关联;
  • tty0较特殊,指向当前控制台终端,即你正在使用的ttyn;有些ttyn,如tty1,tty2可能由图形化界面占用;
  • 图形界面下:alt + Fn(ttyn)切换
  • 哑终端下:ctrl + alt + Fn(ttyn)切换

4. 其他名称解释

哑终端(瘦客户端)

早期的计算机终端是通过串行RS-232通信的,它只能解释有限数量的控制码(CR,LF

等),但没有能力处理执行特殊的转义序列功能(如清行、清屏或控制光标的位置)。

总之就是很有限,很基本的终端;

X Windows下按ctrl + alt + Fn(n为特定数字时是X Windows),其他时候按alt + Fn;

你得到的虚拟控制台终端,就是模仿的字符哑终端。

智能终端(胖客户端)

智能终端就是有能力处理转义序列,也就是说处理能力较强的终端机。

虚拟终端

本质上现代的终端都虚拟化了,但虚拟终端可特指伪终端,或者说模拟终端

  • 串行端口终端需要外接一个真的物理上的终端,一般个人PC很少用到
  • 控制终端比较特殊,是对其他的终端映射和管理,指的是当前用到的那个终端
  • 控制台终端也叫虚拟控制台,可以理解为虚拟终端的高权限版本
  • 所以,一般人在PC上会打开的都属于虚拟终端

虚拟控制台

与控制台终端同义,注意不要混淆虚拟终端与虚拟控制台,虚拟终端广义上包含虚拟控制台。

现代控制台


1. 控制台与终端区别

  • 控制台:直接连到机器上的物理主终端(primary teminal)
  • 终端:文本的输入输出环境
  • console:/dev/console是系统控制台,必須打開支持控制台的物理实际设备;本质上是一种访问内核的方式;一边基于PC的显示器键盘等物理控制台,一边面向用户。

在一些操作系统(比如Linux和FreeBSD)中console有多个tty(用特定的组合键能够在这些tty之间切换)。有时他们的命名很混乱,操作系统文档可能把那些tty叫做”console“ ”virtual console“ ”virtual terminal“等

/dev/console类似一个一个缓冲结果,用来实现对内核的打印,比如内核把要打印的内容装入缓冲区,然后由console来决定打印到哪里吧(如tty0或单用户模式)。所以说/dev/console是用来外接控制台的。

2. Linux控制台

  • 过去

/dev/console默认是到/dev/tty0的链接(而tty0又指当前虚拟控制台,即atl+Fn切换到哪);

即console -> tty0 -> ttyn;

/dev/console的指向可以改变,取决于系统配置,指向tty0,ttyn,或串行设备;

  • 现在(Linux 2.1.71开始)

/dev/console仍然默认映射到/dev/tty0;

但已完全由内核管理,控制它的映射;

如果一个终端设备要实现console功能,必须在单用户模式才能登入console,才可以向内核注册一个struct console结构(内核命令console=);

Ubuntu 18.04基于Linux内核v4.15,属于后一种,现在的情况

控制终端、tty0、console都是指向,但指向的范围和顺序不同

什么是Shell

Shell,壳,与Linux的核kernel对应。顾名思义就是机器的核心外面的一层壳,用于人机交互,只要是人与电脑之间交互的接口,就可以称为 Shell;

Shell=解释器,那解释什么呢?

  • 交互式:等待你的命令,执行你提交的命令(不止是命令行下的键盘输入,还有图形界面下的鼠标输入)
  • 非交互式:不与你交互,直接读取放在文件中的命令并执行,这种放在文件中的命令,也被叫做脚本

误解1:常见的对Shell 这个概念的误解,认为一定要是命令行的 Shell 才叫 Shell。其实 ,我们熟悉的 GNOME、KDE 等图形界面也都是 Shell,只不过是 GUI(图形化) Shell。

误解2:混同Shell与CLI(命令提示符),尽管指的是命令行下的Shell,这也是错的。对于命令行下的Shell,CLI命令提示符是Shell的核心,也是Shell负责交互的那一部分,但不是Shell的全部。对于图形化的Shell,这一负责交互的部分,当然由GUI,图形界面来取代了。

GUI和CLI都是shell,shell既不属于系统内核,也与一般应用程序不同,它属于系统工具,可以算作操作系统的一部分,主要用来管理文件和运行程序,并提供与用户的交互。

用户 > (<) Shell > (<) 操作系统内核

2. Shell有哪些

  • Windows 9X下:

核是DOS,图形化的壳叫Windows Explorer,命令行的壳叫command

  • Linux下:

核是Linux内核

命令行的壳有bash(Linux一般默认) 、sh 、csh 、ksh......

图形化的壳有KDE、GNOME、CDE、 XFCE......

3. Shell与tty的关系

  • tty是与计算机的输入输出相关的
  • Shell是与内核相关的

也即你向终端输入命令(或GUI下点击鼠标),终端自己是不会解释这些命令的,它只负责输入输出,而计算机是大爷,它只认二进制,不认你的命令。真正把这些命令解释成计算机明白的语言的是shell;

shell把一些信息适当的输送到终端设备,也接收来自终端设备的输入;

你每打开一个终端,都会启动一个shell进程与之关联

在除了GUI占用的控制台终端以外的字符哑终端上:shell进程在用户登陆之后才启动

shell进程也可以没有终端与之关联

对前面内容的实验

“在Ubuntu 18.04中,他們已經改變了一些東西,你無法訪問tty1,它總是顯示登錄屏幕。如果您已登錄,則無法訪問tty2,因為它將成為第一個登錄用戶的GUI。在tty7上顯示的兩個GUI的傳統已經結束。”

1. ctrl + alt + T(被图形化界面占用的tty2下的伪终端)

输入tty

输出/dev/pts/1

输入echo "hello" > /dev/tty

输出hello

输入echo “hello” > /dev/tty0

输出无

关机见hello

输入echo “hello”> /dev/console

输出无

关机见hello

2. ctrl + alt + F3(编号为tty3的虚拟控制台)

输入tty

输出tty3

输入echo "hello" > /dev/tty

输出hello

输入echo “hello” > /dev/tty0

输出hello

输入echo “hello”> /dev/console

名称栏目:用了这么多年Linux,你清楚这些概念吗?
转载注明:/news14/103214.html

成都网站建设公司_创新互联,为您提供外贸网站建设电子商务定制网站软件开发品牌网站制作品牌网站设计

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

营销型网站建设