0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅析Linux控制台、终端与shell之间的关系

jf_f8pIz0xS 来源:itworld123 作者:itworld123 2021-04-15 15:57 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

当使用Linux时,我们经常会遇到终端和外壳程序的概念。 例如,在桌面版Ubuntu中,我们可以右键单击桌面,然后单击“打开终端”以打开终端。 此时,我们可以在终端中输入Linux命令。 可能有人会问,这不是错字吗? 那么终端和外壳之间是什么关系呢?

1什么是终端

对于什么是终端,我们先看一个定义。可以看出终端就是一个输入输出设备,简单的可以理解为鼠标,键盘和显示器。但是这个好像跟Linux中终端的概念有些出入,下面听我来娓娓道来。

a combination of a keyboard and output device (such as a video display unit) by which data can be entered into or output from a computer or electronic communications system.

但如果想理解了解什么是终端,还需要从“远古”时期说起。在1970年之前,那个时候还没有个人电脑。那个使用只有大型机和小型机,也就是衣柜那么大的计算机。当时比较著名的计算机如DPD-7和GE-45等。

当时Ken Thompson和Dennis Ritchie(就是下图中的两位大神)负责在DPD-7上面开发一个新的操作系统,没错,就是UNIX操作系统。为了提高计算机的使用效率,他们打算让这个操作系统支持多个用户同时使用这台计算机。

但是,当时的显示器是一个非常贵的设备,不太可能每个人都有一个显示器。因此两个人想出了一个变通的方法。他们选择了便宜的电传打字机来做终端设备。这个电传打字机(TeleType)就是ASR33,就是下图这个设备。

这个设备通过键盘将信息输入计算机当中,而计算机的输出则是通过上面的纸打印出来。这样UNIX就成为世界上第一个支持多用户的操作系统,而ASR33则成为第一个Unix终端。后来,缩写TTY也就是用来表示Unix或者Linux终端了。

随着技术的发展和硬件价格的不断降低,终端也变得越来越先进和便宜。1970年,DEC发明了VT05视频终端。就是下面这个东东,可以看出她有个小显示器。也越来越像现在的键盘显示器了。

聊到这里我们知道了,所谓终端,其实就是一个物理设备,也就是计算机的输入输出设备。

2什么是控制台

在上个世纪70年代,终端是通过线缆连接在主机上的。同时,在主机上还有一种特殊终端,它是直接集成在主机上的。这个特殊的终端被称为控制台。这个终端的特点是只能被管理员使用。每一个计算机只有一个控制台,它在外观上与普通终端并没有太大的差异,但最重要的是控制台可以做一些普通终端不能做的事情。

比如当操作系统出现启动失败的时候,它会打印一些信息到控制台上,但终端并不会收到该信息。另外,当操作系统以单用户模式启动的时候,我们就只能通过使用控制台来登录了。这个时候其它终端是没有权限登录的。

3Linux操作系统的终端模拟

前面我们了解到终端实际上是硬件设备,但是前面我们在Ubuntu上可以用菜单打开一个终端(Open Terminal)。其实,我们打开的这个窗口也是一个终端,我们称这个终端为终端模拟器,它是用软件的方式来模拟一个终端设备。有的时候我们又称它为虚拟终端。

如果你使用的是gnome终端,我们可以通过下面命令看一下它的帮助问答

man gnome-terminal

可以看出gnome-terminal就是一个终端模拟程序,而它的功能就是访问Unix shell。

gnome是用来模拟Xterm的,而Xterm本身也是一个终端模拟器。它模拟了VT102物理终端。

打开Linux虚拟终端的方法有很多种,如果我们使用的是桌面版的Linux,也就是图形界面版的。那么通常我们可以通过命令打开一个命令行终端。如下所示。

另外,Linux操作系统起来的时候默认是有7个虚拟终端的。这些虚拟终端并非前面所说的在桌面中打开的虚拟终端,而是通过显示器直接显示的。我们可以通过快捷键在这些终端之间进行切换,比如Ctrl+Alt+ F1可以切换到第一个终端,而Ctrl+Alt+ F2可以切换到第二个终端,以此类推Ctrl+Alt+F7可以切换到第七个终端。通常情况下对于图形界面来说,第七个是图形终端,其它是文字终端。

通过前面的介绍,我们从外面理解了关于终端、控制器和虚拟终端等概念。也对Linux操作系统中虚拟终端有所了解。接下来我们将进一步的深入介绍到Linux的内部。

4什么是Shell

其实我们在前面文章中介绍过关于Shell的内容。Shell其实就是一个应用程序,它实现了用户对操作系统访问的接口。比如我们常见的管理文件,用户和网络资源等等,都是通过Shell来完成的。

Shell是一个应用程序,同时它又有很多具体的实现,比较常见的包括Bash、Zsh、 Csh和Ksh等等。

我们前面了解到终端是个物理设备,它被用户用来输入和现实信息,而目前我们使用的虚拟终端则是对物理设备的模拟。Shell则是用来执行用户命令的。这样我们现在就很容易理解终端和Shell的关系。

如果我们通过桌面版打开一个虚拟终端的话,那么终端和Shell的关系如下图所示。

如果我们不是通过本地的设备连接的,而是通过网络来访问计算机的话,那么其关系如下图所示。可以看出,这里面有个pty的组件起了比较关键的作用,它建立了两者之间的关联。

1Linux系统中的tty、pty和pts

前面我们从概念层面对终端、控制台和shell等进行了介绍。但是这些概念在Linux操作系统中是怎样的呢?它们之间的关系又是怎样的呢?

前面已经介绍过tty,它是一个终端,也就是一个输入输出设备的集合。而目前在Linux中都是通过虚拟终端来与计算机交互的,因此在Linux中tty其实就是虚拟终端,可以将其理解为一个软件。如果我们同时按住Ctrl+Alt+F5就可以切换到虚拟终端5,具体如下。

在Linux操作系统中,软件的整体架构要复杂一些,这是因为Linux不仅仅要支持虚拟终端,还有能够支持键盘显示器的物理外围设备,还要支持通过telnet或者ssh等网络的形式的连接。如下图给出了一个完整的示例。

为了支持不同类型的接入方式,在Linux实现了一个伪终端的概念,也就是pty。其中p是pseudo的缩写。

伪终端分为两部分,如上图所示,包括master和slave两部分。其中master实现了对不同接入方式的适配,它实现对来自不同设备或者软件消息的解析,将结果传输给slave;而slave端其实就是一个虚拟终端,它实现了与shell的交互,对于shell来说,ptsiu是一个终端设备。

可能还是不太好理解,我们举一个具体的例子,比如telnet实现对远程计算机的管理,其实在客户端就是发送的各种字符串,通过网络发送给telnet守护进程,然后telnet守护进程调用master的功能实现解析。

今天我们主要从概念和架构的层面介绍了终端、控制台和Shell等概念,并介绍了Linux操作系统中常见的诸如tty、pty和pts等名称。后面我们以一个具体的实例来让大家更加清楚的理解上述架构。
编辑:lyn

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    217959
  • 终端
    +关注

    关注

    1

    文章

    1240

    浏览量

    31497
  • Shell
    +关注

    关注

    1

    文章

    373

    浏览量

    25171
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【瑞萨RA6E2】板载uart测试,控制台shell及带颜色输出log的实现

    控制台,接下来我们就移植一个开源的shell到开发板中,实现如linux那样的交互体验。我们要移植的是nr_micro_shell,开源地址https://gitee.com/nru
    发表于 11-09 23:50

    FlashDB移植到rt-thread nano,运行时控制台无输出怎么解决?

    rt-thread标准版和HAL裸机版,移植非常成功,换成nano 3.15版,就出现控制台无输出,也无法输入,调试时进入死循环,如图所示 ,关闭hook也不行,请求指点。谢谢! 上传测试代码,用的是nano4.1.1 4.1.1 (test).7z
    发表于 10-11 09:34

    怎么读取到msh控制台输入的命令?

    如题,怎么读取到msh控制台输入的命令(我的意思是输入的内容全部重定向获取出来),请各位大佬赐教 这个代码会提示Failed to find console device! #include
    发表于 09-29 08:37

    shell基本介绍及常用命令之shell基本介绍

    Shell是什么?我们在刚开始接触Linux的时候,经常会听到工程师提到Shell这个词,刚开始不知道这是个干什么的,简单的说,它是一个应用,接收用户命令,调用相应的内核接口函数或应用程序,并输出
    发表于 09-28 09:05

    rtt studio中 终端窗口输入不了命令,是没打开什么东西吗?

    studio新建的工程,控制台程序能正常运行终端输出了RTT的logo,想输入list_device等命令,无法输入,是哪儿配置问题?还是要自己写命令顶层?
    发表于 09-24 06:04

    启用了控制台后,空闲线程是不是永远不会进入?

    控制台里打印线程(list thread)时,发现已经退出的线程已经是CLOSE状态,但是都是僵尸线程。然后查看shell代码,看到控制台一直在跑,所以手动添加了延时(rt_thread_delay)进入,但调试看到空闲线程还
    发表于 09-19 06:53

    刚创建的项目控制台为什么不能用?

    我用cubmaxIDE配置的板子串口可以输出,但我用rt去直接创建的项目,就是rt自身刚创建时的那个打印数据,控制台都没反应这个问题处在哪个吗,按回车键也没有反应,这个那个大神知道为什么吗?
    发表于 09-17 07:40

    finsh 控制台dma发送如何操作?

    今天因为在高优先级线程中频繁调用rt_kprintf导致低优先级运行阻塞,所以突发奇想想试试控制台能不能dma发送,在保证对应uart tx dma的驱动打开后,rt_device_open里
    发表于 09-11 07:48

    用 树莓派4 打造专属流媒体控制台

    用树莓派体验DIY智能科技!如今市面上有各种各样的流媒体控制台,但购买现成的哪有自己从零开始制作的有趣呢?至少,这似乎是树莓派创客社区的精神所在,就像创客兼开发者Last-Shake-9874所展示
    的头像 发表于 05-11 08:33 425次阅读
    用 树莓派4 打造专属流媒体<b class='flag-5'>控制台</b>!

    UART控制台通信问题:命令出现拆分或缺失字母,怎么解决?

    我正在使用 Explorer Kit 并使用 John Hyde 书中的示例固件,特别是第 4 章示例 4。我已连接两根 USB 电缆,并且线程显示正确。 固件的调试控制台打印工作正常。 但是,当从
    发表于 05-09 07:19

    TWR-VF65GS10塔式模块上编译的U-Boot没有控制台输出是怎么回事?

    和 RS232-to-FTDI USB 适配器成功启动,控制台输出。但是,当我从源代码编译 U-Boot 时(例如,使用 GitHub 上的 v2025.01 分支)并将生成的 U-Boot 二进制文件
    发表于 04-03 06:03

    树莓派新手必看!在树莓派上编写和运行 Shell 脚本!

    在本教程中,我将讨论Shell脚本的基础知识、它们的用途以及如何在RaspberryPi上编写和运行Shell脚本。什么是Shell脚本?Shell脚本可以让你自动化几乎所有在
    的头像 发表于 03-25 09:28 885次阅读
    树莓派新手必看!在树莓派上编写和运行 <b class='flag-5'>Shell</b> 脚本!

    加载示例图像时,COM7的调试控制台hello_world不显示消息怎么解决?

    板是 mimxrt1180_evk。 我无法从板中找到 JP5。 使用示例映像进行测试时,调试控制台(通过 Windows11 电脑中的 J53、COM7 连接hello_world不显示任何消息。 但是 gdb 在源文件中显示了我的简单代码更改。 请尽快发现,谢谢!
    发表于 03-25 07:01

    Linux 服务器检查以及常用运维 shell 命令

    华为云主机 Flexus 云服务器 X 实例,进入官网去购买服务器。 1.2、管理服务 购买完成之后,进入到华为云 Flexus 云服务控制台,选择
    的头像 发表于 01-23 18:00 478次阅读
    <b class='flag-5'>Linux</b> 服务器检查以及常用运维 <b class='flag-5'>shell</b> 命令

    电功率与热量产生之间关系

    电功率与热量产生之间存在密切的关系,这种关系在纯电阻电路和非纯电阻电路中有所不同。 一、纯电阻电路中的关系 在纯电阻电路中,电流通过导体时,如果电能全部转化为热,而没有同时转化为其他形
    的头像 发表于 12-09 11:06 6902次阅读