Linux严格意义上来说是一个操作系统,但是我们的用户是无法直接与操作系统对话的,而是通过shell来使用。
shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。 shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。当从shell或其他程序向 Linux传递命令时,内核会做出相应的反应。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。常见分类有bash、dash。
对比Windows GUI,我们操作Windows不是直接操作Windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘,通常是双击D盘盘符;再比如运行起来一个应用程序)。
shell对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果再通过内核运行出结果,shell解析给用户。
shell管理用户与操作系统之间的交互:等待用户输入,向操作系统解释用户的输入,并且处理各种各样的操作系统的输出结果。 shell提供了用户与操作系统之间通讯的方式。
用一个生活中的例子来帮助理解:如果说你是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的且有让你心动的MM小花。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的bash。
从技术角度,Shel的最简单定义:命令行解释器(command Interpreter)它主要包含:
1.将使用者的命令翻译给操作系统核心(kernel)处理。
2.同时,将核心的处理结果翻译给使用者(用户)。