【Linux系统编程】shell的感性理解

举报
YIN_尹 发表于 2023/12/11 22:32:11 2023/12/11
【摘要】 @[TOC]1. shell是什么?它有什么作用?Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?从技术角度,Shell的最简单定义:命令行解释器(command Interpreter) 主要工作...

@[TOC]

1. shell是什么?它有什么作用?

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?

从技术角度,Shell的最简单定义:命令行解释器(command Interpreter) 主要工作包含:将使用者的命令翻译给核心(kernel)处理;同时,将核心的处理结果翻译给使用者。 对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符)。 shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。

这些概念大家可以先了解一下,接下来,正式进行今天的学习!

在之前的文章里我们学习了Linux中常见的一些基本指令,那不知道大家有没有一些疑惑:

<font color = black>在这里插入图片描述 我们输入相关的指令,然后它就会被执行,并返回对应的结果。 那我们输入的命令是怎么被执行的呢? 其实这里面要借助一个叫shell的东西。

那shell是个什么东西呢?

Shell是一种命令行解释器,Shell充当了用户和内核之间的接口,负责解析用户输入的命令并将其传递给操作系统内核执行,并将执行结果返回给用户。 <font color = black>Linux中的shell一般是bash,Bash(Bourne Again SHell)是一种常见的shell。 在这里插入图片描述

我们可以画个图来理解一下:

<font color = black>假设这是我们的操作系统 在这里插入图片描述 而我们作为用户,其实是不能直接访问操作系统的,那我们如何和操作系统进行交互呢? 🆗,那在操作系统的外面呢,包裹了一层软件层,我们一般把它称为shell,或者叫外壳程序,那我们现在其实就可以把它认为是命令行。 在这里插入图片描述 那对应Windows下面其实就是Windows GUI,即Windows的图形化界面。 那我们输入的命令其实就先给到了shell,shell负责解析用户输入的命令并将其传递给操作系统内核执行,并将执行后的结果返回给我们用户。 在这里插入图片描述

那通过这张图,大家可能还是不能很好的理解。下面我们讲一个故事,来帮助大家更好的理解

2. 通过一个故事感性理解shell的运行机制

认真听,故事开始了✈

开端

<font color = black>在这里插入图片描述 故事的主人公——小帅,住在一个美丽的小村庄里,村上有这样几户人家 在这里插入图片描述 小帅是村长家的儿子,有权有势,但小帅却是一个闷骚且害羞的程序员,喜欢隔壁的MM如花。

发展

<font color = black>小帅呢,今年已经不小了,已经到了该找媳妇的年纪了。 它的老爹也是非常着急,每天催小帅。 在这里插入图片描述 终于有一天,小帅鼓起勇气跟他爹说,我们觉得隔壁的如花不错,我挺喜欢的,但是我不敢去找人家。 小帅的村长老爹胸脯一拍,说,包在我身上,于是就想到了村东头著名的媒婆——王婆。打算请王婆去如花家给小帅说媒。

波澜渐起(正常命令的处理)

<font color = black>第二天,王婆就如约来到小帅家,问小帅,你对你的另一半有什么要求吗? ==小帅告诉王婆==说,没什么要求,我就喜欢隔壁的如花,您帮我说一说。 ==需求很明确==,于是==王婆出门直奔如花家==,跟如花说道,你家隔壁的小帅,工作也不错,还是村长家的儿子,并且对你一直有意思,你看你们两个能不能处一处。 可是如花一直对小帅的印象不好,一口==回绝了王婆==。 那==王婆于是便返回了小帅家==,告诉小帅,人家如花对你没有那个意思,要不就算了吧。

故事角色与处理过程中各部分的映射

那通过上面的故事,相信大家已经有了一点理解了:

<font color = black>在这里插入图片描述 那故事中的小帅,其实就是对应用户,王婆就对应shell,如花就对应操作系统。

为什么小帅不直接找如花呢?

<font color = black>因为小帅害羞内敛,不“善于”直接和如花打交道(==用户不能直接和操作系统交互==)。那你不善于,有人善于,这个世界上存在一种职业——媒婆,于是呢,小帅就把对应的需求告诉了王婆(==用户输入的命令被传递给shell==),王婆把小帅的想法整理成自己的话并告诉如花(==shell解析用户输入的命令并将其传递给操作系统内核执行==),如花思考一番之后,把自己的决定告诉王婆,由王婆转告给小帅(==shell将执行后的结果返回给用户==)。

故事到这里还没有结束...

走向高潮(非法请求的处理)

<font color = black>上面说到,王婆把如花的意思告知了小帅,但是小帅不想放弃,对王婆死缠烂打,恳求她再去说一说。 王婆拗不过小帅,更拗不过小帅的村长父亲,只能再去找如花。 可是呢,王婆刚走到如花家门口,还没进去呢,就看到如花和同村的李四两个人在一起了,已经准备结婚了。 王婆一看人家都这样了,我再去说媒,不是找打嘛。 ==王婆知道现在小帅跟如花肯定是不可能了,于是直接原路返回,不再告诉如花小帅还想和她处对象的请求了。==

那与之对应

<font color = blue>如果我们用户输入的指令是非法请求,在shell层就直接被拒绝了 在这里插入图片描述

继续我们的故事:

<font color = black>王婆原路返回,告诉小帅,人家已经有男朋友了,你们不可能了,死了心吧,也不要再去打扰和纠缠人家了。 那在这里王婆的做法其实也是对如花的一种保护,想让小帅死心,害怕小帅疯狂的迷恋会影响到如花的生活。 <font color = blue>那由此我们也得出shell存在的另一个意义或者说作用,就是可以保护操作系统。

那我们来总结一下:

shell 存在的意义

  1. Shell是一种命令行解释器,Shell充当了用户和内核之间的接口,负责解析用户输入的命令并将其传递给操作系统内核执行,并将执行结果返回给用户。

  2. 保护操作系统。

结尾

<font color = black>王婆上一次已经很明确地表明了如花和小帅是不可能的了,可是痴情的小帅依然不死心,苦苦哀求王婆再次传达自己的心意。 而王婆也确实不好拒绝,因为小帅是顾客啊,是用户啊,况且小帅还有个村长老爹。 但是呢,王婆又考虑到,如果最后自己跑了好多趟,还是办不成这件事,还自己的招牌不就被砸了嘛,我王婆可是十里八村著名的媒婆啊。 王婆苦思冥想,终于想到一个办法,既能把事办了,如果失败了,也不影响自己的名声。那就是找自己招的实习生去干,这样即使没说成,对王婆自己的名声也没影响。 在这里插入图片描述 那这样久而久之,王婆也有了一套自己的操作方式,再有人找我说媒,就派几个实习生去做。

那与之对应的:

<font color = black>就是我们后面要讲的——执行命令时,创建子进程去执行。

那这个大家先了解一下,我们后面会讲,王婆说媒的故事到此也就告一段落了... 在这里插入图片描述

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。