首页 > 自考资讯 > 高考百科

Shell是什么?1分钟理解Shell的概念!(shell是什么意思)

小条 2024-10-14

我们今天使用的操作系统(Windows、Mac OS、Android、iOS 等)都具有简单、直观、易于使用的图形界面,适合专业用户(程序员、网络管理员等)。计算机的普及与图形界面密不可分。

然而,在计算机的早期,没有图形界面,只能一次控制一个命令。不用说,这些命令非常难记。我们面对的是无色的“黑屏”,本身就很无聊,而且当时的电脑一点也不酷也不流行,只有专业人士才能使用。

e026f60223d944c988d248516543a3c4~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1729511757&x-signature=xwaK65Moh9W1TNj%2Bi0BhQ9yolEY%3D

图:早期的计算机都是“黑纸白字”

要评估早期计算机,请按《带你逛西雅图活电脑博物馆》。

对于图形界面,用户可以单击图标来启动程序。在命令行中,用户可以通过键入程序名称(可以显示为命令)来启动程序。两者的基本过程相似:它们都需要找到程序在硬盘上的安装位置并将程序加载到内存中才能运行。

有关该计划如何运作的更多信息,请按《载入内存,让程序运行起来》。

换句话说,图形界面和命令行的目的是相同的:让您控制计算机。

然而,只有操作系统内核(kernel)才能真正控制计算机硬件(CPU、内存、显示器等)。图形界面和命令行只是用户和内核之间的桥梁。

如果您不确定您的操作系统的功能,请访问《操作系统是什么》。

出于安全性、复杂性和麻烦的原因,用户不能(也不需要)直接访问内核。该程序的功能是让用户直接使用它。用户可以通过执行操作(点击图标、键入命令)、执行简单操作并将其传递给内核来间接与操作系统内核交互。为什么在用户和内核之间添加一层“代理”不仅可以简化用户体验,还可以保证内核安全呢?

用户界面和命令行是这个单独开发的程序,这一层是“代理”。在Linux 上,这个命令行程序称为shell。

Shell 是一个将用户连接到Linux 内核的应用程序,使他们能够更高效、更安全、更低成本地使用它。这就是Shell的精髓。

shell本身并不是内核的一部分,它只是基于内核编写的应用程序。这和QQ、迅雷、火狐等软件没有什么区别。然而,贝壳也有一些特点。也就是说,shell 在启动后立即启动,并且对用户可见。除非启动shell,否则用户无法使用Linux。

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

shell 可以接受用户输入的命令,处理这些命令,并在处理后将结果反馈给用户,例如通过将输出打印到监视器或写入文件。这就是大多数读者对shell 的了解。我正在使用shell,但是如何使用内核?我看不到shell 连接到内核?

事实上,shell程序本身就很弱,文件操作、输入/输出、进程管理等一切都依赖于内核。当你运行命令时,大多数情况下shell会调用内核公开的接口,但这个进程被shell隐藏并在后台静默运行,因此你看不到它。

接口实际上就是函数,使用内核就是调用这些函数。这是使用内核的唯一方法吗?除了函数之外,没有其他方法可以使用内核。

例如,我们都知道可以通过在shell 中输入cat log.txt 命令来查看log.txt 文件的内容,但是log.txt 位于磁盘上的什么位置呢?它分为多少个数据块?从哪里开始到哪里结束?我如何操作和读取探针? shell 不知道这些基本细节。你只能通过调用内核提供的open()和read()函数来告诉内核你要读取log.txt文件。内核按照shell的指令,读取文件,将读取到的文件内容传递给shell,最后shell将其显示给用户(其实显示器上的显示取决于内核)。整个过程中,shell就是一个在用户和内核之间“转卖”数据的“中间人”,而用户却浑然不知。

Shell 还能连接其它程序

输入到shell 中的一些命令内置于shell 本身中(称为内置命令),而其他命令则来自其他应用程序(称为程序即命令)。

shell本身支持的命令不多,功能有限,但由于shell可以调用其他程序,每个程序都是一个命令,所以shell命令的数量可以无限扩展。 Linux 功能包括检索文本和字符串、查找和创建文件、大规模自动部署软件、更改系统设置、监控服务器性能、发送警报电子邮件、抓取Web 内容、压缩文件等。

更令人惊奇的是,shell 可以连接多个外部程序并轻松地在它们之间传输数据。也就是说,一个程序的输出作为输入传递给另一个程序。

你所说的shell 能力并不是指shell 本身功能丰富,而是指它擅长使用和组织其他程序。壳牌是领导者,这就是壳牌的魅力所在。

shell在整个Linux系统中的位置可以如下图所示进行解释。请注意“用户”和“其他应用程序”之间的虚线。这是因为用户在Linux启动后直接访问shell,其他应用程序可以通过shell运行。

2f56ae093ee6496baa2fc0df00883754~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1729511757&x-signature=weAbJpA2lRHLkkniKkAoAcBEMOY%3D

Shell 也支持编程

shell 不仅仅是简单的命令堆栈。您还可以在shell 中编程。这与使用任何流行的编程语言(例如C++、C#、Java 或Python)没有什么不同。

虽然Shell 不如C++、Java、Python 等强大,但它支持基本的编程元素,例如:

switch 语句中的if.else 选择结构、case. 等概念、变量、数组、字符串、注释、加法、减法、乘法和除法以及逻辑运算。这包括用户定义的函数和内置函数(printf、export、eval 等)。

从这个角度来说,Shell也是一种编程语言,它的编译器(解释器)就是Shell程序。我们平时所说的shell有时指的是连接用户与内核的程序,有时指的是shell编程。

shell主要用于开发实用、自动化的小工具,而不是用于开发业务逻辑复杂的中大型软件,如发现计算机硬件参数、搭建Web运行环境、日志分析等用于。贝壳非常适合。

你使用shell 的熟练程度反映了你对Linux 的熟练程度。运维工程师、网络管理员、程序员都需要学习shell。

尤其对于Linux运维工程师来说,一个能够自动管理服务器集群的shell是一项必备技能。否则,您可能需要逐一登录每台服务器来执行操作。由于数百或数千台具有相同配置的服务器,大量时间浪费在重复性任务上。

Shell 是一种脚本语言

代码最终必须“转换”为二进制形式,然后才能在计算机上运行。

某些编程语言,例如C/C++、Pascal、Go 和汇编,要求所有代码都转换为二进制格式,然后才能执行程序。换句话说,用户得到的是一个可执行文件。源代码在最终生成的可执行文件中不可见。

这个过程称为编译,这样的编程语言称为编译型语言,完成编译过程的软件称为编译器。

一些编程语言,例如Shell、JavaScript、Python 和PHP,需要即时翻译,用户不需要获取源代码来运行程序。程序运行时,会完成一些翻译,然后执行一些代码。您不必等到所有代码都被翻译。

这个过程称为解释器,这样的编程语言称为解释性语言或脚本语言(脚本),完成解释过程的软件称为解释器。

编译型语言的优点是执行速度更快、硬件要求更低、保密性更高。适合开发操作系统、大型应用程序、数据库等。

脚本语言的优点是使用灵活、部署方便、跨平台性能好。非常适合网络开发和小工具创建。

Shell 是一种脚本语言。创建源代码后,无需编译,直接运行即可。

版权声明:本文转载于网络,版权归作者所有。如有侵权,请联系本站编辑删除。

猜你喜欢