Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 除了编程语言之外,Unix/Linux shell还可以被视为操作系统吗?_Bash_Shell_Ubuntu_Sh_Dos - Fatal编程技术网

Bash 除了编程语言之外,Unix/Linux shell还可以被视为操作系统吗?

Bash 除了编程语言之外,Unix/Linux shell还可以被视为操作系统吗?,bash,shell,ubuntu,sh,dos,Bash,Shell,Ubuntu,Sh,Dos,与DOS相比,它似乎具有相同的功能和更多。因此,我想知道我是否可以把贝恩shell或BASH之类的shell看作DOS,而把它看作是一种操作系统。或者这些条款是相互排斥的 shell是否也将所有命令解释为汇编语言 如果shell是一种编程语言(脚本语言),那么当您使用C语言创建程序时,您仍然在通过shell(即脚本语言)使用命令执行它们,因此我假设您在这一点上引入了一个瓶颈,与使用非脚本中介相比,它会稍微限制速度。否,操作系统的定义特征是它为您管理硬件。shell不这样做,内核这样做 由于您使用

与DOS相比,它似乎具有相同的功能和更多。因此,我想知道我是否可以把贝恩shell或BASH之类的shell看作DOS,而把它看作是一种操作系统。或者这些条款是相互排斥的

shell是否也将所有命令解释为汇编语言


如果shell是一种编程语言(脚本语言),那么当您使用C语言创建程序时,您仍然在通过shell(即脚本语言)使用命令执行它们,因此我假设您在这一点上引入了一个瓶颈,与使用非脚本中介相比,它会稍微限制速度。

否,操作系统的定义特征是它为您管理硬件。shell不这样做,内核这样做

由于您使用了DOS,shell相当于命令解释器
command.com

DOS的“内核”可以在
msdos.sys
io.sys
ibmdos.com
ibmbio.com
中找到,这取决于你的口味


就shell的功能而言,它取决于shell,但它不太可能将您的输入转换为汇编语言或机器语言。例如,
bash
shell是一个简单明了的解释器。这是一个C程序,它读取命令并根据这些命令执行自己的函数

它不会将这些命令转换为较低级别的语言



关于bottlerneck的评论,虽然shell负责启动程序,但它不会在运行时减慢程序的速度。相反,它倾向于(默认情况下)避开,直到程序退出,然后它再次接管。

这个问题表明了对计算机硬件如何工作、操作系统做什么以及shell是什么的基本误解

标准模型(非常松散)如下:计算机硬件运行从内存加载的二进制指令。当满足各种条件(如超时、无效内存访问、硬IO等)时,硬件也会引发“异常”。当计算机开机时,它开始运行内核代码。内核设置代码来处理这些异常,设置内存管理单元并降低权限级别(从而限制内存访问等),然后调用用户代码。然后,用户代码在硬件上运行,直到引发一个异常(通常是一个超时异常,或者用户代码可以引发的特定“系统调用”异常),将控制权返回内核。因此,内核可以选择何时运行哪个用户代码,还可以选择向哪个用户代码提供什么特权

shell只是一个用户级程序,它为各种有用的操作系统功能(如创建文件和运行程序)提供基于文本的界面。它以与任何其他用户级程序相同的方式完成这些任务

(请注意,以上所有内容都是非常近似的,在某些方面可能不准确,并且肯定遗漏了很多细节,但了解操作系统如何完成其功能的基本知识仍有一定帮助。)

您可以(原则上)在没有任何shell的情况下运行Linux系统。然后,您将拥有一个专门的程序,该程序可能会使用和启动其他程序和进程

甚至可能是这样的事情。也许可以将其配置为避免任何shell

当然,您应该能够在没有任何shell的情况下设置运行Linux的Rasberry Pi(甚至是台式PC)(但是使用特定的
/sbin/init
,您可以使用引导加载程序将其传递到内核…)

但是,shell非常方便(并且像or这样的libc函数使用
/bin/sh
),因此删除它通常是不合理的,应该小心操作

也许一些Linux设备(路由器等)不需要任何shell,或者至少不使用它。他们可能有一个(通常充当shell)或自己的
init
类程序,而不使用shell

你需要阅读和编辑关于、、等的网页

shell是一个Linux应用程序(你可以自己编写,这很有启发性。至少要学习现有自由软件shell的源代码,如
sash
或)。Linux应用程序被视为基本的“原子”操作(实际上是由一条机器指令实现的,如特定约定,请参阅)。另外,了解并尝试一下


事实上,事情更复杂(例如。。。顺便说一句,您可以拥有一个完全由以下内容组成的Linux系统:不要犹豫,查看源代码

shell只是操作系统的一部分。拿走内核,它什么也不做。