shell和linux内核的关系


通过前面的学习,相信大家已经掌握了很多命令了,也学会了通过linux命令行执行命令。 虽然到现在才开始介绍bash,但是在前面我们早就已经接触到bash了,我们开机登陆进入linux命令行后,进行的所有操作都和bash有关。 我们经常说linux命令行模式,其实准确的说法应该是shell命令行,因为linux的命令行环境就是由bash shell提供的。 虽然目前的shell有很多版本,但是目前主流的shell就是bash了。所以本书提到shell的时候,默认指的就是bash。 如果没有特别说明,书中bash和shell这两个词可以互相替换使用。
bash所涉及的内容非常的多,包括变量的设置与使用、bash操作环境的设置、数据流重导向、管道命令等! bash是命令行模式(command line)下主机维护与管理的重要基础,必须完全掌握!
管理整个计算机硬件的其实是操作系统的内核kernel,linux操作系统内核也是一种软件,linux内核控制计算机硬件资源,提供程序运行环境。 linux内核向应用程序提供服务。linux内核提供的服务典型的有执行新程序、打开文件、读文件、分配存储区、获得当前时间等等。
出于安全以及易用性的考虑,linux并不希望用户直接和内核打交道,而是通过shell来和内核沟通。

Shell和linux内核的关系

回到顶部
我们刚才提到linux内核为用户应用程序(或进程)提供各种服务, 这些服务包括进程管理、内存管理、文件系统管理、设备管理、网络管理、时间管理等。 linux内核向外提供服务的唯一接口就是系统调用(system call)。应用程序(或进程)通过linux系统调用获取这些基础服务, 而用户的特定业务逻辑则由用户应用程序(或进程)实现。
例如我们前面接触的chmod, chown, vi, fdisk, mkfs等命令都是应用程序, 包括以后要学习的ssh、nginx、vsftp、这些提供网络服务的应用程序。
这些应用程序都是通过系统调用与linux内核打交道。这些应用程序都是由程序开发工程师编写,有他们规划应用程序应该用到哪些linux系统调用 如果你对这方面的内容感兴趣,可以参考linux环境高级编程部分链接。对linux内核感兴趣的话可以参考我们的linux内核部分链接。
我们前面学习的各种命令包括 man, chmod, chown, vi, fdisk, mkfs 等等命令,这些指 令都是独立的应用程序, 但是我们可以透过壳程序 (就是命令列模式) 来操作这些应用程序,让这 些应用程序呼叫核心来运作所需的工作哩!
而如果你学习linux的方向是服务器运维或者就是单纯的喜欢使用linux,那么主要的工作其实就是使用这些由程序开发工程师编写的这些应用程序了。 我们之前执行的那个命令,其实就是用的程序开发工程师编写的命令应用程序啦! 那么这些应用程序怎么使用呢?也就是我我们怎么执行命令呢?总得有一个应用环境吧,这就是shell提供的命令行环境了。我们前面执行的命令也就是在shell命令行下执行的。 其实shell也是一个应用程序,也是通过linux系统调用和linux内核打交道。 shell的主要作用就是为用户执行命令(使用应用程序)提供操作环境,所以shell也叫命令解释器。解释用户输入,然后执行用户输入的命令 unix系统体系结构 公用函数库构建在系统调用接口之上,上层应用程序既可以使用公用函数库,也可以使用系统调用。 shell是一个特殊的应用程序,为运行其他应用程序提供操作接口。
从广义上说,操作系统包括了内核和一些其他软件,这些软件包括系统实用程序(system utility)、应用程序、shell以及公用函数库。 这些软件使得计算机能够发挥作用,并使计算机具有自己的特性。
而我们其实也就是通过应用程序来和内核进行沟通
真正能和linux内核打交道的是研发工程师。
我们可以发现应用程序其实是在最外层,就如同鸡蛋的外壳一样,因此这个咚咚也就被称呼为壳程序 (shell) 啰!
其实壳程序的功能只是提供用户操作系统的一个接口,因此这个壳程序需要可以呼叫其他软件才好。
也就是说,只要能够操作应用程序的接口都能够称为壳程序。狭义的壳程序指的是指 令列方面的软件,包括本章要介绍的 bash 等。 广义的壳程序则包括图形接口的软件!因为图形接口其实也能够操 作各种应用程序来呼叫核心工作啊! 不过在本章中,我们主要还是在使用 bash 啦!

initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读