持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
前言
本文用一个简单的相亲例子来帮助你初步认识shell,希望对你有所帮助。
初识shell
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel) “ ,但我们一般用户,不能直接使用kernel,而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。
如何理解?为什么不能直接使用kernel?
因为人难以和操作系统直接沟通,就像你和外国人交流需要翻译一样,shell就是充当翻译的角色。
从技术角度, Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
- 将使用者的命令翻译给核心(kernel)处理。
- 同时,将核心的处理结果翻译给使用者。
简单来说表现在:用户可以看到命令行提示符以及可以输入指令并执行。
生活实例助理解
如果你是张三,家住在村西头,父亲是村长,你好歹也算个官二代,曾经发过一篇《我的村长父亲》在村里可谓无人不知。你刻苦学习,终有所成——成为一个闷骚且害羞的程序员。你父亲觉得你也该到了谈婚论嫁的年龄,于是打算找村东头家喻户晓的媒婆王婆来给你牵线,而你正好想起了附近人家的美女MM如花,不禁心猿意马。你觉得自己在网络上好不威风,可一到线下和别人聊天就支支吾吾半天憋不出一句话,更别谈和女生相亲了,但你父亲说什么也得把你的婚事给定下来,对你说我给你把王婆找来,她办事你放心,凭她那三寸不烂之舌绝对没问题,村里那么多男女都是她给撮合的。
王婆收到消息后就跑到你家,问你有什么要求,你说能跟如花处就行,没别的要求,王婆扔下一句“好嘞”拔腿就直奔如花家去。王婆在如花面前一顿猛夸你什么高富帅啦、村长儿子啦等等,而如花一听这不是张三么,以前小学同桌啊,不过并不很喜欢,于是婉拒了。王婆又回到你家把话原封不动转告给你,说:张三啊你的好人卡+1,要不我给你再找一个,别在一棵歪脖子树上挂死嘞。
我们先暂停分析一下,在上述过程中实际上相当于完成了一次命令解释的工作:
你不擅长和女生打交道,王婆就是两边传达信息的媒介,而且她总能精准地捕捉到你的想法和需求。
用户发送的请求并不是直接到操作系统的,而是先到shell,处理后再发送给操作系统,同理,操作系统也不会把信息直接返还给用户,需要借由shell来转述。
欸,故事还没完哩,咱们接着说。
村里唯一一栋豪宅就是李四家的,他爸可是村里首富,他这妥妥的富二代呀。话说如花对你没好感,而对李四那可是被迷得不行,而李四也喜欢如花,这么情投意合下,感情快速升温。另一边,瘫倒在沙发上阴着脸的你对王婆说:拜托你再给我向如花说说去,看看我们之间还有没有机会,从朋友做起也好啊。王婆看了一眼你的父亲,说行吧,又到如花家去了。而王婆刚到如花家的时候就瞅见了如花和李四的父母都在,哪能不知道意味着什么,心想:张三这趟婚事怕是黄了。但她还是简单地给如花说了一声你的想法,李四听到后说:你回去告诉张三,他没戏,别再找如花了。
王婆安慰你,说:小伙子,你这么年轻有为的,别在感情上钻牛角尖了,王婆我手里还有些其他菇凉的资料,方圆十里内的菇凉我都熟悉嘞,我再给你介绍介绍?可你说什么都要指名要找如花,死活不肯换人,王婆也不耐烦了,觉得你在无理取闹,也不再去如花家,也就是你现在的所有请求王婆都不理会了,不再传达你的请求,也就变相地拦截了你的所有请求,换言之其实也间接地保护了如花。
我们再来分析一下,如果用户发送了非法请求,那么shell就会直接拒绝掉,不会传达给操作系统,其实本质上也就间接地保护了操作系统:
故事到这里还还还还没完,你多少有点偏执,死缠烂打都不换人,对王婆说:你再给我说说去,别忘了我爸可是村长,软的不行就来硬的。王婆脸色也有点黑,你这压根就没戏啊,如花的婚事都要定下来了,你还要我去,这不为难我嘛,我王婆四十年的从业经历里没见过你这样的人,可想到你父亲是村长,这也不好直接拒绝,于是对你说回去考虑考虑再给你答复。如果你是王婆,你会怎么做?
王婆好歹也是这一带说媒的好手,要是给你说媒了十几次都没成的话不是砸自己招牌嘛,这可不行,本来你和如花就没什么机会了,但王婆也不能不顾村长威慑。这时王婆分析了一波:如果还硬要帮你向如花说媒,成功的可能性不能说没有,只能说中彩票都比这事儿有可能,要是走大运说成了倒还好,但大概率是说不成的,我的招牌不就砸这了嘛。于是王婆连夜在门口贴招聘启示,招了一大批实习生。
过了几天,王婆给你父亲打电话说:村长啊,我这边有事脱不开身,知道张三的婚事耽误不起,可我实在是没法子赶过去了,这样吧,我这里给你派个精兵强将,业务能力杠杠的,保证给你儿子把婚事谈妥了。不过结果可想而知,王婆都谈不成的婚事一个实习生哪里搞得定?你父亲一问王婆就说因为某某原因去不了了,虽然手下能力不错,但毕竟是个新人,这样吧,把他师兄给你派去。就这样,一个不行就让另一个顶上,王婆则去忙活别的业务去了。这样一来,虽然你的婚事还是没戏,不过王婆可是把招牌保住了,还敷衍了村长。
这就相当于:shell执行命令时通过派生子进程的方式执行用户的指令而本身并不执行对应指令(一般而言)。因为shell可是操作系统和用户交互的唯一桥梁,要是shell被你用户的非法请求搞砸了,那该如何是好?于是shell就让子进程去执行,反正子进程挂掉了对我shell没有影响。
shell存在的意义
- 帮助人与操作系统进行交流
- 变相地保护操作系统,把操作系统从大量繁复请求的泥潭中抽离出来,让它只执行合法请求
我们谈到Linux,宏观来说包括操作系统和shell外壳程序,微观来说操作系统就是Linux内核。
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口与点击,完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符或者运行起来一个应用程序),windows图形界面本质上也是一种外壳程序。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果通过内核运行出结果,再通过shell解析给用户。
于是我们就知道了为什么Linux有那么多发行版本,因为内核不变,只是把外壳程序改了(注意一下,shell是外壳程序的统称,centos7外壳程序是bash)。
以上就是本文全部内容,感谢观看,你的支持就是对我最大的鼓励~