Shell基础知识点(1)---定义

shell是什么??

Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell的本质。

Shell 本身并不是内核的一部分,它只是站在内核的基础上编写的一个应用程序,它和 QQ、迅雷、Firefox等其它软件没有什么区别。然而 Shell 也有着它的特殊性,就是开机立马启动,并呈现在用户面前;用户通过 Shell 来使用Linux,不启动 Shell 的话,用户就没办法使用 Linux。

Shell 是如何连接用户和内核的?

shell能够接收用户输入的命令,并对命令进行处理,处理完毕后再将结果返回给用户,比如输出到显示器、写入到文件等,这就是大部分读者对shell的认知。
其实,shell程序本身的功能是很弱的,比如文件操作、输入输出、进程管理等都得依赖内核。我们运行一个命令,大部分情况下shell都会去调用内核暴露出来的接口,这就是再使用内核,只是这个过程被shell隐藏起来,它自己在背后默默进行,我们看不到而已。

接口其实就是一个一个函数,使用内核就是调用这些函数。 我们知道在shell中输入cat log.txt文件中的内容,然而,log.txt放在磁盘的哪个位置?分成几个数据块?在那里开始?在哪里终止?如何操作探头读取它?这些底层细节shell都不知道,它只能去调用内核提供的open( )函数和read( )函数,告诉内核我要读取log.txt文件,然后内核就按照shell的吩咐去读取文件了,并将读取的文件内容交给shell,最后再由shell呈现给用户(其实显示器还是以来内核)。整个过程shell就是一个中间商,它在用户和内核之间倒卖数据,只是用户不知道罢了。

shell也支持编程

shell虽然没有C++、Java、Python等强大,但也支持基本的编程元素,例如: if…else选择结构,case…in开关语句,for、while、until循环;变量、数组、字符串、注释、加减乘除、逻辑运算等概念;函数、包含用户自定义的函数和内置函数(例如printf、export、eval等)。 站在这个角度讲,shell是一种编程语言,它的编译器是shell这个程序。我们平时所说的shell,有时候是指连接用户和内核的这个程序,有时候又是指shell编程。
shell主要爱用来开发一些实用的、自动化的小工具,而不是用来复杂业务逻辑的中大型软件,例如检测计算机的硬件参数、搭建Web运行环境、日志分析等,shell都非常合适。
使用shell的熟练程度反映了用户对linux的掌握成都。运维工程师、网路管理员、程序员都应该学习shell。
由其是linux运维工程师,shell更是必不可少的,是必须掌握的技能,它使得我们能够自动化的管理服务器集群,否则就得一个一个的登录所有服务器,对每台服务器都得进行相同的设置,而这些服务器可能有成百上千之多,会浪费大量的时间在重复性的工作上。

shell是一种脚本语言

任何代码最终都得翻译成二进制的形式才能在计算机中进行。
有的编程语言,如C++、Pascal、Go语言、汇编等,必须在程序运行之前将所有代码都翻译成二进制形式,也就是生成可执行文件,用户拿到的是最终生成的可执行文件,看不到源码。
这个过程叫做编译,这样的编程语言叫做编译型语言,完成编译过程的软件叫做编译器。
而有的编译语言,如shell、javascript、python、php等,需要一边执行一边翻译,不会生成任何可执行文件,用户必须拿到源码才能进行程序。程序运行后,会即时翻译,翻译完一部分执行一部分,不用等到所有代码都翻译完。
这个过程加做解释,这样的编程语言叫做解释型语言或脚本语言,完成解释过程的软件叫做解释器。
编译型语言的优点是执行速度快,对硬件要求低、保密性好,适合开发操作系统、大型应用程序、数据库等。
语言脚本的优点是使用灵活、部署容易、跨平台性好,适合Web开发以及小工具的制作、
shell就是一种脚本语言,我们编写完源码后不用编译,直接运行源码即可。
————————————————
版权声明:本文为CSDN博主「一坨小红花」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_45652989/article/details/104314207

猜你喜欢

转载自blog.csdn.net/fangyuan621/article/details/114283577