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

Shell脚本
34
0
0
2024-04-30

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

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

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

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

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

在这里插入图片描述

我们输入相关的指令,然后它就会被执行,并返回对应的结果。 那我们输入的命令是怎么被执行的呢? 其实这里面要借助一个叫shell的东西。

那shell是个什么东西呢?

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

在这里插入图片描述

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

假设这是我们的操作系统

在这里插入图片描述

而我们作为用户,其实是不能直接访问操作系统的,那我们如何和操作系统进行交互呢? 🆗,那在操作系统的外面呢,包裹了一层软件层,我们一般把它称为shell,或者叫外壳程序,那我们现在其实就可以把它认为是命令行。

在这里插入图片描述

那对应Windows下面其实就是Windows GUI,即Windows的图形化界面。 那我们输入的命令其实就先给到了shell,shell负责解析用户输入的命令并将其传递给操作系统内核执行,并将执行后的结果返回给我们用户。

在这里插入图片描述

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

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

认真听,故事开始了✈

开端

在这里插入图片描述

故事的主人公——小帅,住在一个美丽的小村庄里,村上有这样几户人家

在这里插入图片描述

小帅是村长家的儿子,有权有势,但小帅却是一个闷骚且害羞的程序员,喜欢隔壁的MM如花。

发展
小帅呢,今年已经不小了,已经到了该找媳妇的年纪了。 它的老爹也是非常着急,每天催小帅。

在这里插入图片描述

终于有一天,小帅鼓起勇气跟他爹说,我们觉得隔壁的如花不错,我挺喜欢的,但是我不敢去找人家。 小帅的村长老爹胸脯一拍,说,包在我身上,于是就想到了村东头著名的媒婆——王婆。打算请王婆去如花家给小帅说媒。

波澜渐起(正常命令的处理)
第二天,王婆就如约来到小帅家,问小帅,你对你的另一半有什么要求吗? 小帅告诉王婆说,没什么要求,我就喜欢隔壁的如花,您帮我说一说。 需求很明确,于是王婆出门直奔如花家,跟如花说道,你家隔壁的小帅,工作也不错,还是村长家的儿子,并且对你一直有意思,你看你们两个能不能处一处。 可是如花一直对小帅的印象不好,一口回绝了王婆。 那王婆于是便返回了小帅家,告诉小帅,人家如花对你没有那个意思,要不就算了吧。
故事角色与处理过程中各部分的映射

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


在这里插入图片描述

那故事中的小帅,其实就是对应用户,王婆就对应shell,如花就对应操作系统。

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

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

故事到这里还没有结束…

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

那与之对应

如果我们用户输入的指令是非法请求,在shell层就直接被拒绝了

在这里插入图片描述

继续我们的故事:

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

那我们来总结一下:

shell 存在的意义
  1. Shell是一种命令行解释器,Shell充当了用户和内核之间的接口,负责解析用户输入的命令并将其传递给操作系统内核执行,并将执行结果返回给用户。
  2. 保护操作系统。
结尾
王婆上一次已经很明确地表明了如花和小帅是不可能的了,可是痴情的小帅依然不死心,苦苦哀求王婆再次传达自己的心意。 而王婆也确实不好拒绝,因为小帅是顾客啊,是用户啊,况且小帅还有个村长老爹。 但是呢,王婆又考虑到,如果最后自己跑了好多趟,还是办不成这件事,还自己的招牌不就被砸了嘛,我王婆可是十里八村著名的媒婆啊。 王婆苦思冥想,终于想到一个办法,既能把事办了,如果失败了,也不影响自己的名声。那就是找自己招的实习生去干,这样即使没说成,对王婆自己的名声也没影响。

在这里插入图片描述

那这样久而久之,王婆也有了一套自己的操作方式,再有人找我说媒,就派几个实习生去做。

那与之对应的:

就是我们后面要讲的——执行命令时,创建子进程去执行。

那这个大家先了解一下,我们后面会讲,王婆说媒的故事到此也就告一段落了…