shell命令以及运行原理
Linux严格意义上说是一个操作系统,我们称之为“核心(kernel)”,但我们一般用户不能直接使用kernel,而是通过kernel的“外壳”程序,也就是所谓的 shell,来与kernel沟通。
为什么不能直接使用kernel呢?
原因一是内核的使用成本很高,第二个原因是 权限约束 的问题。
广义上,Linux发行版 = Linux内核 + 外壳程序
狭义上,Linux = Linux内核
从技术角度,Shell的最简单定义:命令行解释器(command interpreter):
- 将使用者的命令翻译给kernel处理。同时,将核心的处理结果翻译给使用者。
- 对于非法请求,shell外壳是有权利拒绝的,起到了保护内核的作用。
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
在shell让OS执行命令时,shell会创建子进程来进行执行具有风险的事情,以确保风险命令不会影响到shell,它可以继续进行命令的接收。
注意,这里说的进程可以这么理解,程序运行起来就是一个进程,shell本身就是一个进程。
再解释一下shell和bash的区别:
shell是所有外壳程序的统称,而Linux下centos用的外壳就是bash。举个形象点的例子,shell就相当于是程序员这个行业,而bash就是你这个具体的一个程序员。
- 帮助理解:如果说你是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的且有让你心动的MM小花。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的bash。