Linux严格意义上说是一个操作系统,我们称之为“核心(kernel)”,但我们一般用户不能直接使用kernel,而是通过kernel的“外壳”程序,也就是所谓的 shell,来与kernel沟通。
为什么不能直接使用kernel呢?
原因一是内核的使用成本很高,第二个原因是 权限约束 的问题。
广义上,Linux发行版 = Linux内核 + 外壳程序
狭义上,Linux = Linux内核
从技术角度,Shell的最简单定义:命令行解释器(command interpreter):
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
在shell让OS执行命令时,shell会创建子进程来进行执行具有风险的事情,以确保风险命令不会影响到shell,它可以继续进行命令的接收。
注意,这里说的进程可以这么理解,程序运行起来就是一个进程,shell本身就是一个进程。
再解释一下shell和bash的区别:
shell是所有外壳程序的统称,而Linux下centos用的外壳就是bash。举个形象点的例子,shell就相当于是程序员这个行业,而bash就是你这个具体的一个程序员。