目录
0.观前提醒
(1)建议可以直接先看 3.生动形象的例子(直接点目录跳转) , 再回来看前面的理论。
(2) 本文结合了生动的例子以及操作系统理论来解释Shell外壳的作用,一定会让你有所收获。
ONE首先第一个问题就是知道Shell外壳究竟是个什么,TA在哪里呢?
1.外壳程序
在狭义上 , 我们称Linux操作系统的内核 为 Linux。
在广义上 , Linux发行版 == Linux内核 + 外壳程序
就比如市面上现在的redhat,centos,Ubuntu等等我们耳熟能详的Linux发行版,
事实上这些Linux发行版都是基于Linux操作系统的内核,
然后对之加装了不同的Shell外壳 ,最终做出不同种类的Linux发行版。
我们作为用户,是不能直接去操作Linux内核的,
一来是直接去操作Linxu内核成本是极高的,学习成本,操作成本都不低
二来用户直接操作Linux内核是存在风险性的,所以Linux内核对用户设置了权限,不能直接操作
所以我们有了shell外壳程序来间接帮助我们操作Linux内核。
windows操作系统的Shell外壳是一个窗口图形界面,所以我们可以通过这个窗口图形,接收来自用户的点击、拖拽等操作, 从而使用windows的各个功能。
Linux操作系统的Shell外壳的名字叫bash,所以我们也可以通过bash来传达我们的操作,即用户对bash输入指令,从而使用Linux操作系统的功能。
简单的说 , Shell外壳程序是对Linux内核的一层封装 , 架起了用户和Linux沟通的桥梁。
TWO那这层Shell外壳具体在Linux中的表现是什么,Shell外壳是如何沟通用户和Linux的呢?
2.命令行解释器
首先我们看Linux系统中每一行都会有一个输入指令的提示
例如 [zy@VM-20-9-centos ~]$ 来提示用户在后面输入指令+选项
这个东西实际上叫做 命令行解释器 。
命令行解释器 , 其实就是shell外壳程序在Linux系统中的具体表现。
Shell外壳 , 即命令行解释器 , 用户对之输入指令之后 , shell外壳接收并解析该指令, 然后发送给Linux内核去处理执行。
Linux内核处理之后,将结果反馈给shell外壳 , shell外壳再将结果解析返还给用户。
所以Shell外壳是这样沟通了用户和Linux操作系统。
3.生动形象的例子(无敌爆炸好笑)
现在你可能对Linux的Shell外壳有了迷迷糊糊的理解,接下来我们通过一个超级生动的例子讲解Shell外壳的作用。
从前有座山,山里有个村,村里有个老村长,而你是老村长的儿子。同时,你们村还有一个远近闻名的媒婆--王婆,在你们当地有非常不错的招牌,曾撮合了无数对男女。
你作为村长的儿子,也老大不小了,也到了找对象的时候,你作为一个纯情的小男生,自然心底里自然还想着你们村的如花姑娘。
但是你还是害羞的小男孩~,是不方便也不敢和如花姑娘直接去沟通的,所以你就只得找王媒婆来代为传递你的信息。
这天,你找到了王婆,说你想找如花姑娘约会(相亲),王婆说可以给你办这件事,然后她就把你想找如花姑娘约会这件事委婉的传达给了如花姑娘。如花姑娘说不行,她并不想和我谈对象,便给王婆委婉的表达了拒绝与歉意。王婆就很直白的跟我这个小伙子说,如花姑娘压根不喜欢你,你还是放弃她吧。
所以王婆事实上成为沟通你和如花姑娘的桥梁。
(这个例子可以类比Shell外壳对 用户 和 操作系统内核 之间沟通的媒介作用)
你心想,作为一个纯情的男人,我是不会放弃的!!!所以这天你又找到了王婆,说再帮孩子一把吧,我真的喜欢如花姑娘[大哭]。王婆说好吧,那我再给你传达最后一次,不过不出所料,结局再次上演,如花再次拒绝,王婆又把这个残忍的事实传达给了你。
这时你又跟王婆说能不能再帮我问一下,王婆此时直接拒绝了你,说不要了再这样了.这样如花姑娘的内心会很厌烦甚至是无奈痛苦的,(王婆要顾及如花姑娘的心情,事实上这也是在保护如花姑娘,防止你去亲自找她,做出极端的事情)。
所以事实上,王婆拥有拒绝你的权利。
(这个例子可以类比Shell外壳可以直接拒绝用户的一些非法请求,从而保护操作系统)
不过故事仍然没有结束,你可是村长的儿子呀,你的一再要求,王婆肯定会考虑到村长的面子,
但是王婆也得考虑到,不能因为你这事把她的招牌给砸了,而且我王婆还得忙着给别的男女说媒呢。
所以这时王婆会有一个绝妙的对策,招一个实习生给你办这件事,(王婆:让我的实习生给你办这件棘手且有风险的事情吧,我溜了哦)。
实习生给你办,这样的好处是,一方面王婆可以跟我说这件事可是一直在办着的哦,只不过是我的实习生在给你办这件事,不过这件事可是一直在办着呢。另一方面实习生就是办砸了这件事也没关系,反正只要不是我王婆办的,我这个招牌就不会砸。
所以对于一些棘手有风险的事情,王婆不会直接去干而是交给实习生。
这个例子可以类比Shell外壳可以自己创建子进程,去执行一些具有风险的请求,从而不影响 危害Shell外壳。
4.稍作总结
从上我们了解到,Shell外壳是对Linux内核的封装,连接沟通了用户(需求)与Linux内核(执行),
这降低了用户的操作学习成本。
Shell外壳可以传达用户指令,交给操作系统内核去执行 ,最终把执行结果翻译反馈给用户。
同时Shell外壳也可以直接拒绝用户,从而保护操作系统内核。
Shell外壳也可以通过创建Shell外壳程序的子进程的方式,来执行有风险的指令,从而来保护bash即Shell外壳本身。