程序员

终端、控制台、tty、shell等区别与概念初辨析

2018-12-18  本文已影响5人  yuanof

历史

控制台 终端
计算机内部 计算机外部
并口 串口
单计算机一个 单计算机多个
系统消息、内核消息、后台消息 用户需要、可以知道的消息
原生设备 电缆、网络、键盘、显示器等
console(一种机柜) terminal(电线的末端)

早期计算机精贵,一台主机,连很多终端,终端为主机提供了人机接口,很多人都通过终端使用主机的资源。终端有字符哑终端和图形终端两种。
而控制台是另一种人机接口。 不通过串行线路与主机相连,直接安在主机上,,这是人控制主机的第一人机接口。
可以想象成主机上有块面板,面板上方小灯闪,人得站着才能够着它(控制台),主机上面一些电缆延伸到很多人办公桌的屏幕和键盘上(终端)。

当下

现代终端(模糊硬件与软件)


1. 名词解释

tty(teletype):电传打字机
ttyS(tty serial) :tty + 串行
pty(pseudo-tty):伪君子 + tty=伪终端
pts(pseudo-terminal slave):伪君子 + 终端 + 女仆=伪终端从端
ptmx(pseudo-terminal master):伪君子 + 终端 + 主人=伪终端主端

terminal和tty已经成为同义词

2. 分类

串行端口终端 伪终端(pty) 控制终端 控制台终端
文件名 (/dev/) ttyS(n) ptmx、pts/n tty ttyn,console
其他接口别名 pty[p-za-e][0-9a-f] , tty[p-za-e][0-9a-f]
用途 连接物理终端设备 模拟终端与主机的通信 指向当前所使用终端 仿真了类型为Linux的终端
打开/查看方式 终端仿真软件,远程主机 命令tty alt + Fn

3.类别解释

串行端口终端

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

伪终端/模拟终端

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

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

对master的操作会反应到slave上

控制终端

控制终端是指能够控制一个、一套设备或者几套设备的终端控制器;
/dev/tty是一个应用程序概念,面对进程;
/dev/tty会映射到当前使用的终端,使用命令tty查看其当前指向的“设备”

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

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

详见“现代控制台”

4. 其他名称解释

哑终端(瘦客户端)

早期的计算机终端是通过串行RS-232通信的,它只能解释有限数量的控制码(CR,LF
等),但没有能力处理执行特殊的转义序列功能(如清行、清屏或控制光标的位置)。
总之就是很有限,很基本的终端;
X Windows下按ctrl + alt + Fn(n为特定数字时是X Windows),其他时候按alt + Fn;
你得到的虚拟控制台终端,就是模仿的字符哑终端。

智能终端(胖客户端)

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

虚拟终端

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

虚拟控制台

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

现代控制台


1. 控制台与终端区别

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

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

2. Linux控制台

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

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

shell


1. 什么是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有哪些

3. Shell与tty的关系

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

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

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

对前面内容的实验


在Ubuntu 18.04LST上进行

“在Ubuntu 18.04中,他們已經改變了一些東西,你無法訪問tty1,它總是顯示登錄屏幕。如果您已登錄,則無法訪問tty2,因為它將成為第一個登錄用戶的GUI。在tty7上顯示的兩個GUI的傳統已經結束。”
https://askubuntu.com/questions/1033206/switch-to-console-in-ubuntu-18-04-how-to-leave-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
输出hello

上一篇 下一篇

猜你喜欢

热点阅读