【Linux】一个小故事让你秒懂shell外壳程序
目录
🌈前言
今天我将为大家详细讲解shell外壳程序,并且通过一个小故事来帮助大家理解和加深印象,故事非常有趣,建议收藏,没事的时候可以看看放松一下,在放松的同时还可以加深对知识的理解。那么我们废话不多说,开始我们今天的内容。
🌞shell外壳程序
🐣用户是直接访问操作系统吗?
众所周知,我们在Windows下使用图形化界面进行操作,在Linux下使用各种指令来进行操作从而达到自己的目的,但用户这是在直接访问操作系统吗?
答案是:不是,具体原因我们马上就说,我们先来看看计算机的体系结构。
计算机的体系结构:
操作系统:在这里操作系统会借助驱动程序来进行对硬件的操作,这里的硬件可以是我们连接的键盘鼠标等,大家在使用这些硬件之前,通常会出现驱动程序安装成功的文字,这就是操作系统在通过驱动程序来对硬件进行操作。
操作系统的功能其实很复杂:操作系统在对硬件进行操作的时候,需要知道应该调用哪种驱动程序来对此硬件进行控制,并且需要知道这个驱动程序在哪,如何才能找到,怎样才能连接上硬件?所以面临以上诸多问题,如果让人直接访问操作系统的话,是很不合适的。
总结不直接访问操作系统的原因:
- 不是所有人都擅长直接访问操作系统,用户需要足够熟悉操作系统才有可能正确的访问操作系统,但绝大多数人是不熟悉操作系统的。
- 直接访问操作系统的操作成本过高,需要学习很多知识。
- 人总是会犯错的,容易带来一些不安全的因素,如果操作失误可能会导致计算机直接崩溃。
银行的故事:
上面所说就好比我们去银行存一笔巨款的时候,我们会先到前台去,并且告诉工作人员说我们要存一笔巨款,这时工作人员会给你几个表,你签上自己名字就可以了,剩下的工作都由工作人员来做。银行是不可能让你自己到金库里面把钱放进去,然后在电脑上自行更改自己存款的数据,万一你是个小偷怎么办,那不直接把金库里面的钱卷走跑路吗?由或者说你在更改自己存款数据的时候一不小心多加了几个0,那这不轻松实现一个小目标吗?再或者说你是一个不识字的老奶奶,银行让你去用电脑自行更改数据,这不是在开玩笑吗,我字都不认识几个,难道会用电脑,太高看我了吧你!正是因为有这些潜在的问题,所以银行安排了很多工作人员,来服务我们这些上帝。(这里的我就相当于用户,这里的银行就相当于操作系统,这里的工作人员就相当于我们等会要讲的shell外壳程序)
🐣什么是Shell外壳程序
原理:Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)”,但我们一般用户,不能直接使用kernel。 而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
- 将使用者的命令翻译给核心(kernel)处理。
- 同时,将核心的处理结果翻译给使用者。
Windows与Linux对比:
- 对比windows GUI,我们操作 windows 不是直接操作 windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符。或者双击运行起来一个应用程序)
- shell 对于 Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。(比如敲击pwd命令,则会显示出你目前所在的工作目录的绝对路径名称)
🐣一个小故事加深你对Shell外壳程序的理解
第一章
在一个遥远的地方有个小村庄,里面住着一群和谐友爱的村民。我们故事的主角张三就曾经住在这里,而他的老爹就是这里的村长。张三高中就离开村子到城里面读书去了,现如今10年已经过去,张三也完成了他的梦想成为了一名大厂的程序员。
今天,张三和往常一样下班回家后就打开csdn并听着舒缓的音乐开始写博客,正当张三写到一半时,突然!音乐里响起常回家看看这首歌,顿时张三陷入了沉思,我已经有10年没有回家了,父母一定很想我吧,正好还有半个月就过年了,不如回家看看父母。于是张三毅然决然的订了下个星期回家的火车票。
一个星期后,张三来到火车站,踏上了回家的旅程。3天过后,张三踏过千山和万水,终于回到了那个熟悉而又陌生的村庄。10年过去,村子里已经物是人非了,但是张三还是记得自己家住在哪里,于是张三来到自家门口悄悄的打开门,他准备给自己父母一个surprise,结果张三刚打开门就看见正在洗菜的母亲,母亲尖叫了一声,有小偷,快点抓小偷啊,母亲正准备用洗菜水泼张三时,幸好张三他爸眼疾手快拦住了母亲,他说这是我们儿子回来了啊,不是什么小偷,这时母亲才仔细一看,还真是自己儿子。于是母亲赶紧做了几个儿子爱吃的菜,就这样一家人开开心心的吃着晚饭。
晚饭过后,一家人坐在客厅看电视,这时父亲问儿子,小三啊怎么就你一个人回来啊,怎么不把女朋友一起带回家呢?这时张三就尴尬的说,我没有女朋友。后面老爸又接连跟张三聊了很多才发现,我的儿子居然是个宅男,让张三对电脑操作,他可以对电脑各种拿捏,但是却不擅长跟女孩打交道。张三跟女同学一起出去玩,女孩说我饿了,张三说我又没饿;女孩说我冷,张三说我都给你说了外面冷你还不穿外套,哎不听老人言,吃亏在眼前,幸好我穿了外套的哈哈哈;女孩说我肚子疼,张三说那你打车回家吧,我自己去玩。就这样张三10年里面没有交过一个女朋友,老爸听完直叹气,我的儿子真是千年难遇的 “奇才” 啊。但是一直这样下去也不是办法,儿子也不小了,得想个办法给他找个媳妇。
到了第二天,父亲联系了村里面最好的媒婆——王婆,让王婆给张三说说媒。于是王婆就到了张三家,她问张三,你找对象有什么要求吗?张三回答说,我 “没有” 什么要求,我觉得我们村的翠花就不错(翠花和张三从小学到初中都是同学并且还是同桌,张三觉得她特别好,是从小玩到大青梅竹马,但是高中张三就到城里读书了,从此分道扬镳,但是张三心里面依然惦记着她,但是随着翠花和张三的成长,让他们变得不擅长交流,尤其是张三的成长)。王婆跟张三沟通完后就说,放心吧小伙子,婆这就给你说媒去,你就在家等婆消息吧。于是王婆来到翠花家,她对翠花说,小姑凉啊隔壁有个叫张三的小伙子人挺不错的,跟你是从小玩到大的青梅竹马,有没有兴趣跟他交往一下呀。翠花听了满脸问号,张什么?什么三?我怎么不知道有这么一个青梅竹马,于是她就跟王婆说,我不认识张三是谁呀,要不还是算了吧。于是王婆又带着满脸的问号回到了张三的家里,她对张三说,你也不小年纪了,怎么能骗婆呢,明明你跟翠花都不认识,又何来的青梅竹马?张三听完王婆的话才突然想起,自己与翠花小时候都是以小名称呼的,小时候翠花并不知道我叫张三,以前他叫翠花为小花,翠花称自己为三哥。
第一章总结:
故事中我们知道,张三是一个不擅长与女孩打交道的宅男程序员,所以张三就必须找一个中间人来给他传递消息(也就是王婆),张三就把要求说给王婆,王婆就将张三的需求传给翠花,翠花在自己的大脑中做搜索,发现这个人在自己的记忆中并没有印象,然后把结果告诉王婆说这个人我不认识,你不要再给我说媒了,直接拒绝了王婆。王婆返回后再将结果交给张三。故事里面的翠花就相当于操作系统,张三就相当于用户,然而用户不善于直接与操作系统打交道,于是在用户和操作系统之间就有了Shell外壳程序,也就是故事中的王婆。而Shell外壳程序的核心工作就是将用户的需求交给操作系统,操作系统执行完毕后把执行结果(无论正确与否、成功或失败)都传递给Shell外壳程序,然后Shell外壳程序将最后结果传递给用户。
举例:
我们随便乱输入一行指令
这时操作系统就拒绝了我们的命令,外壳程序就在屏幕上打印 command not found 告诉用户说,这行命令没有被操作系统发现。也就相当于第一章故事里面讲的翠花不认识张三一样,然后王婆将最后结果告诉张三。
第二章
王婆从张三那里知道,他与翠花小时候都是以小名称呼的后,于是又来到了翠花家里。王婆这时跟翠花说,其实张三就是你以前一口一个的三哥啊。翠花这时想起来了,原来他就是三哥啊,三哥这个人很好,我以前都是把三哥当哥哥看待,但是并没有和三哥谈恋爱的想法,于是毅然决然的给张三发了张好人卡。这时王婆又返回,如实的告诉了张三,张三听到翠花拒绝他的消息后,如遭雷击,眼泪止不住的往下掉。
第二章总结:
王婆把张三是三哥的身份告诉翠花后,翠花这时认识三哥,但是却不喜欢他,于是拒绝了三哥,然后王婆把最后结果告诉张三。这就好比生活中一个人认识你,难道他就一定会喜欢你吗?Linux中也是这样,虽然有时候一条命令存在,但是如果你的权限不够,还是会被操作系统拒绝。(后面我们会单独将权限的)
举例:
我们创建一个test.c文件,然后把这个文件所有权限去掉,我们再用ehco命令向test.c文件里面写数据试试。
这时我们发现我们的命令被操作系统拒绝了,由外壳程序返回了Permission denied,难道echo命令不存在吗,echo当然是存在的,原因是权限不够,所以被拒绝了。就好比翠花认识三哥,并且是青梅竹马,但是翠花就是不喜欢张三,觉得不符合自己要求,所以还是可以拒绝张三。
第三章
张三越哭越伤心,但是张三却不死心,一把鼻涕一把泪的问王婆,可不可以再帮我给翠花说一次,王婆看见张三这个样子有点不忍心拒绝他。于是王婆又来到翠花家门口,发现翠花家的门正好开着,正当王婆要进入翠花家的时候,突然!看见了惊天动人的一幕,翠花正红着脸在跟隔壁的帅哥杨六畅谈人生。这时王婆明白了,原来真相只有一个,翠花已经有男朋友了,怪不得翠花不接受张三,要是老婆子再年轻二十岁也会拒绝张三的,毕竟杨六那么帅是张三能比的吗,王婆在心里默默的对翠花说好样的,老婆子祝你们幸福。于是王婆没有进门,直接返回到张三的家里,这次王婆直接对张三说,小三啊翠花可能是真的不喜欢你,我们还是换一个姑凉吧,婆这里还有很多资源,什么样的姑凉有,何必吊死在一棵树上呢?这时张三就倔强的说,我就是喜欢翠花,非他我不娶。(看不出来就这样一个闷骚的宅男程序员还有一颗倔强的心,可是不是因为张三不够优秀,而是有个老六捷足先登了)这时王婆其实心里面明白,翠花已经有男朋友了,翠花是不可能再接受张三的,于是王婆毅然决然的替翠花做了决定,王婆直接拒绝了张三。
第三章总结:
王婆知道翠花有男朋友后,直接帮翠花做了决定,拒绝了张三,因为王婆知道翠花已经不可能接受张三了。如果让张三直接去跟翠花交流就可能出现一些不必要的麻烦,很有可能导致翠花和杨六的幸福破裂。于是王婆这样的做法就相当于间接的保护了翠花也保护了杨六(老六),让他们能够幸福。所以Shell外壳程序的存在,在一定的程度上,可以起到保护操作系统的作用。
第四章
张三这时心里就很不平衡了,翠花拒绝我就算了,现在连王婆都拒绝我了,想当年我在网上可是被人送外号法外狂徒张三的,我一声键来吓得各个网站的人都不敢跟我叫板。于是张三就找到了他的老爹求助,老爹听到后大怒,于是找到了王婆并对她说,我交给你这点小事都办不好,你还称村里第一媒婆,我给你一天的时间考虑,把这件事情给我 “办了”,不然的话,我可是村长,你知道后果的。
这时王婆回到家里就头大啊,张三这件事注定是办不成的,成功的概率几乎看不到,可是他爸是村长啊,我又不能拒绝他,如果我一连说了十几次媒都没有成功的话,那岂不是砸了我自己在村里面的招牌吗,我不能让时代的悲哀成为我的悲哀啊。于是王婆立马走到村子最繁华的中心位置贴上了招收实习生的公告(王婆婚介所现招实习生,要求本科及,实习阶段月薪过万),于是回村过年的大学生们纷纷来面试,最后王婆招了一个看起来最能干的人来当实习生。王婆招到实习生后就告诉村长说,村长啊我已经跟翠花打交道很多次了,这事我去办的话可能会很难,我帮你找个生面孔去办吧,如果他办不成我就再给你找个生面孔去,只要你愿意,我可以一直找生面孔去给你办(王婆心想,反正你只是让我把这事情办了,至于办没办成就不管我的事了)。于是王婆让实习生去办这件事情,这时这件事办没办成已经不重要了,就算实习生没有办成这件事也是在意料之中的,如果事情闹得很大也没有关系,大不了我把这个实习生开除掉,反正都是实习生的错,与我王婆无关。用这种方法,只要我王婆不倒,我依然是村里的第一媒婆,并且在实习生办这件事情的同时,我还可以去接其他人的媒事。
第四章总结:
通过第四章我们可以知道,王婆可以在保护自己的同时,并一直给你办这个件事情,为什么要一直给你办这件事情呢,因为你是村长他儿子啊。这就是为什么你在命令行输入错误的命令,外壳程序会一直帮你做呢,因为你是用户,所以外壳程序就必须帮你做。
例如:
你一直输入命令,外壳程序就会一直帮你处理,就算你输入的是错误的命令。
故事完结后的整体总结:
- 人不直接使用操作系统的原因是人不善于直接使用操作系统。
- 如果直接访问操作系统会导致成本特别高,并且人是会犯错的,可能带来不安全的因素。
- Windows下的图形化界面和Linux下的命令行操作都是外壳程序。
- 外壳程序存在的意义:是用户和操作系统交互的中间软件层(将使用者的命令翻译给核心(kernel)处理。同时,将核心的处理结果翻译给使用者。),并且在一定程度上起到保护操作系统的作用。
🐣如何查看自己的外壳程序
通过以下命令就可以查看外壳程序了。
echo $BASH
这里的bash就是我们的外壳程序。
我们用ls命令可以查看到bash就是个可执行文件。
实际上bash就是一个死循环程序,而你的命令行就是bash打印出来的。
额外补充:
我们最开始讲的是shell外壳,这里的bash也是外壳,他们都是外壳,那么他们有什么区别呢?shell外壳可以对应我们故事中的媒婆,bash就对应我们故事中的王婆,他们的关系就跟程序员与程序员张三的关系是一样的。shell就是外壳的统称,bash就是外壳里面的一种。而故事中的实习生就是bash程序里面创建出来的子进程(这个以后我们会说)。
🌄总结
到这里我们的小故事就结束了,相信大家都能够看懂。如果大家有什么解决不了的问题,欢迎大家评论区留言或者私信告诉我。如果感觉对自己有用的话,可以点个赞或关注鼓励一下博主,我会越做越好的,感谢各位的支持。
来源地址:https://blog.csdn.net/qq_64042727/article/details/126723732
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341