【Linux系统】Shell命令运行及其原理
Linux严格意义上说的是⼀个操作系统,我们称之为“核⼼(kernel)“ ,但我们⼀般⽤⼾,不能直接 使⽤kernel。⽽是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。
从技术⻆度,Shell的最简单定义:命令⾏解释器(command Interpreter)主要包含:
- 将使⽤者的命令翻译给核⼼(kernel)处理。
- 同时,将核⼼的处理结果翻译给使⽤者。
【补充】
为什么存在外壳程序?
1.方便用户操作
2.外壳程序,可以保护内核
图像表示:
图像解说:
- 小王 = 用户
- 如花 = 操作系统内核(真正负责所有底层功能、处理请求的核心)
- 王婆 = Shell外壳(用户与内核之间唯一的中间交互层、命令中转站)
- 媒婆 = 外壳自带的交互接口
- 小帅 = 内核已经绑定、优先服务的进程/资源
小王(用户)很喜欢如花(内核),想要和如花在一起。但是用户无法直接接触内核,中间必须经过中间人王婆(外壳Shell)来传递所有请求。于是小王把自己想要追求如花、和如花在一起的请求,以命令的形式,全部发给了王婆(外壳)。外壳王婆收到用户指令后,再把这个请求转发给底层的如花(内核)去执行。可内核如花本身对小王完全没有兴趣,内核处理请求直接失败、执行报错,所以这次请求没有任何结果,事情办不成。小王(用户)不死心,再次找到外壳王婆,重复发送请求:你再帮我撮合一次。外壳王婆再次带着用户小王的请求,前去访问内核如花。结果这次登门才发现,如花早就和小帅在一起了,小帅外形优秀、各方面条件都好,二人十分般配。王婆(外壳)见状没有继续尝试请求内核,立刻原路返回,把自己看到的情况全部告诉了小王(用户)就说指定成不了了给用户下达错误信息的指令从而保护了操作系统。
之后,小王的父亲老王,身为村里村长,地位高、威望大,出面给王婆施压,交代道:你再去帮忙说一次,我儿子小王是真心喜欢如花。面对来自高权限用户的再次请求,王婆(Shell)心里犯难,不想自己承担事情成败的责任。于是王婆灵机一动,自己开了一家婚介事务所,招了两个实习生专门去帮忙传话、撮合。所有追求、沟通、交涉的事情,全部交给这两位实习生去对接如花。 这样一来,最后不管事情有没有成功、有没有被拒绝、出了任何问题、闹了任何结果,责任全都归属于前去办事的实习生,从头到尾都和王婆(shell)本人没有任何关系。
这里的实习生,就是操作系统里的进程。
Shell(外壳王婆)创建出子进程去执行用户的任务请求,无论子进程运行成功、失败、报错、异常结束,都不会影响到外壳 Shell 本身的运行,Shell 自身完全不受牵连、不会崩,无需负责。
这就是进程与 Shell 外壳之间最核心的特性:进程独立运行,与父外壳相互隔离。
问题一:小王为什么不直接去呢?
因为用户(小王)不擅长和操作系统(如花)交流
问题二:Shell存在的价值是什么?
结局小王(用户)不擅长的问题,还有保护操作系统(如花)
【总结】
普通用户不擅长去访问操作系统,Shell外壳就是用来传递客户的需求的,同时也可以保护操作系统。
对⽐windows GUI,我们操作windows 不是直接操作windows内核,⽽是通过图形接⼝,点击,从 ⽽完成我们的操作(⽐如进⼊D盘的操作,我们通常是双击D盘盘符.或者运⾏起来⼀个应⽤程序)。shell 对于Linux,有相同的作⽤,主要是对我们的指令进⾏解析,解析指令给Linux内核。反馈结果在通过内核运⾏出结果,通过shell解析给⽤⼾。
【补充】
【思考】
Shell和Bash有啥区别呢?
简单来说shell是媒婆,那么bash就是王婆(媒婆的名字),shell是统称,bash是一个具体的名字。bash也是许多Linux发行版的默认shell
