命令行解释器
我们目前学了很多的指令,并且这些指令在磁盘上都是以文件的形式存在的:
通过file可以查看这些文件的信息,我们发现这些文件都含有executable这个单词,那么executable的意思就是这个文件在x86-64平台下是可以执行的,那么这就说明我们所使用的每一个指令其实都是在磁盘中存在的可执行程序,那这里就会存在一个问题,这些可执行程序是如何在xshell这个平台上运行起来的呢?我们平时总是说shell,那shell究竟是什么呢?我们首先来回答一下后面的问题Shell最简单定义就是命令行解释器(command Interpreter)。命令行解释器的表现就在于我们平时使用xshell时所看到的命令行提示符
以及我们输入指令并且可以执行都是命令行解释器
而在linux当中我们通常把这个命令行解释器称为shell外壳程序,当然看到这里很多人还是不知道shell到底时干什么的,那么接下来我们就通过一个相亲的例子来带着大家看看shell究竟是什么?有什么用?
例子
在一个村里的最西边住着一个张村长,张村长有个儿子叫张三
在村子的东边有个王婆,王婆开了一家婚介公司专门帮别人说媒使两个人凑成一对
然后张三喜欢上了一个女孩叫如花,但是张三是一个经典的直男对于如何撩女孩子如何追女孩子那是一窍不通天天只会说吃了没?睡了没?你在干嘛?时不时给如花买一个奇怪的礼物花冤枉钱,那如花看到这些消息收到完全不喜欢的礼物那简直就无语啦?不知道怎么跟他交流,所以就直接拒绝了他的好意将他屏蔽了,
但是张三是一个舔狗他说过他这一生非如花不娶,所以张三就奔赴千里来到村子的东边找到了婚介公司的老总王婆,王婆看到张村长的儿子不远千里来找自己帮忙十分的感动决定亲自去找如花劝说如花同意成为张三的女朋友:
王婆在c村特别的有钱是神话般的存在,所以如花在见到王婆的时候那是十分的热情礼貌,非常热情的接待王婆的到来,但是王婆这次来是帮张三说好话的,如花一听张三请的王婆,她就直接跟王婆说我不可能和张三在一起的他跟我完全是两个世界的人,他实在是太直男了不知道怎么跟他交流,所以我和他是不可能的,而且我已经有个男朋友了叫李四,我们两马上就要结婚了:
王婆听到如花的这般说辞直接傻眼了,这还怎么说媒啊完全说不了啊,所以王婆就直接回到婚介公司打电话跟张三说:张三啊这件事不好办啊如花她都快结婚了这我无能为力啊要不我给你介绍其他的菇凉吧,我先把电话挂了去跟你找找有没有跟你十分匹配的女孩子,说完媒婆就把电话挂了。然后媒婆就跑到电脑旁边仔细的挑选女孩子给张三,但是王婆挑着挑着张三就又跑到婚介公司来吵着跟王婆说:王婆我不要其他的我就要如花,要不你跟如花说说李四的坏话吧,把李四和如花拆散吧这样我和她就会有机会了,但是王婆是一个很正道的人心想做人怎么可以这样呢!别人过的好好的怎么能为了你的请求把他们拆散了,所以王婆直接拒绝了张三的请求。
好看到了这里我们的故事就讲了一大半了 ,相比大家应该能够了解这里执行的过程,我们每一个使用者就相当于这里的张三,而llinux操作系统就相当于这里的如花,我们人和操作系统很难的沟通就相当于张三是个直男无法跟如花进行沟通,张三无法跟如花沟通就知道找到一个媒介王婆来转述自己的请求以此达到自己的目的,所以我们人也会找到一个媒介来和Linux操作系统进行沟通以此来达到使用者的目的,比如说创建一个文件删除一个文件,那么人和操作系统的媒介就是shell,也就是我们所说的命令行解释器,所以我们每次执行的指令并不是直接交给操作系统的而是交给了shell,shell再交给操作系统从而执行对应的操作
张三给王婆提供了一些不好的建议以此来破坏如花现在的幸福就相当于用户使用一些非法的指令来破坏操作系统的稳定和安全,王婆拒绝了张三的请求就相当于shell拒绝执行我们给他的指令以此来保护操作系统的安全,所以看到这里相比大家能够理解shell为什么存在的原因首先:shell能够帮助我们用户与操作系统打交道,其次shell的存在还可以变相的保护操作系统不被破坏,只要到操作系统了都是shell认为的安全操作,故事到这里还差最后一点:当年王婆创业成立婚介公司的时候,张村长是鼎力相助的帮了王婆很大的忙,张三看到自己请求被拒绝之后就十分的恼火直接把自己的爸爸叫着一起去了婚介公司,王婆看到这阵势直接被吓到了毕竟当初村长帮了很大的忙,但是王婆更知道如花是不会答应自己的请求的所以王婆就想了一个办法说:我同意你的请求但是我现在确实没有时间去跟如花沟通,这样好吧我们公司的不停的招聘说媒专家,我让这些专家去跟如花沟通如何?村长和张三听到这方法十分的合理,毕竟他们也知道王婆每天很胖没办法只办我们自己的事情,听到这个方法后村长和张三就走了,王婆招聘了一个说媒专家前往了如花家:
但是很显然这个说媒专家去也是失败王婆将这个结果告诉张三,张三依然不服气依旧想着还有机会能够争取获得如花就又想着王婆再帮忙,王婆一想这还不好办,我再给你拍一个说媒专家不就够了,虽然这些说媒专家去的结局都是失败的但是这不会影响我本公司的业务能力这些说媒专家都是临时招聘的不记录在我本公司的帐底下,无所谓只要你张三来找我我就招聘一个临时工,至于临时工怎么样和我没关系,那么这里的不停招聘临时工就相当于我们shell在执行命令的时候是通过派生子进程的方式来执行用户的命令,而shell本身一般而言是不会执行相对的指令的,这样的话用户的指令出现了错误是不会导致shell这个外壳挂掉的而是让shell创建的子进程挂掉,但是子进程可以不停的创建它挂不挂无所谓,如果shell挂掉之后用户就无法与操作系统进行沟通了。在我们平时的生活中我们一般把内部的操作系统称为linux内核:
把操作系统加shell称之为linux,所以我们作为用户在使用操作系统的时候是与操作系统外壳打交道,而不是与操作系统内核进行打交道。从技术角度,Shell的最简单定义:命令行解释器,他的作用就是:将使用者的命令翻译给核心处理,同时将核心的处理结果翻译给使用者。同时我们平时使用的Windows的图形界面实际上也是一种外壳程序,Linux shell命令行外壳和win图形化界面实际上是一个兄弟关系,这里大家最后再了解一点就是这里的shell其实是一个统称,在不同版本下拥有着不同的命令行解释器,比如说红旗红帽的具体shell外壳那就是不一样的,我们这里是centos7版本所以这里具体的shell外壳就是bash,我们可以在xshell上面找到具体的bash,比如说下面的操作:
我们每次登录linux操作系统的时候,第一个跑起来的程序其实就是bash,它跑起来之后再给你打印解释器,然后你输入的每个指令就会交给解释器 ,如果大家这里还是不能够理解的话,这里我们就来做一个类比,如果说shell是媒婆的话,那么这里的bash就是王婆,一个是行业的统称,一个是行业中具体的人,那么这就是shell的感性认识,希望大家可以理解。