shell运行原理

前言

前一段时间由于身体的缘故和一些琐事,好久没有更新Linux的博文了。从本篇博文开始会接着以前的内容一直持续更新!

本期类容介绍

为什么存在shell外壳?

什么是shell外壳?

shell外壳是如何工作的?

一、为什么存在shell外壳?

Linux广义上说是内核+外壳组成的,内核就是说操作系统的内核,外壳为就是在内核周围的一个可执行程序(命令行的等你输入,并给你输出的那个)。

狭义上讲,Linux是一款操作系统,只有单纯的内核组成。但是Linux的内核是非常复杂的,我们一般的使用者(用户)是无法直接和内核进行正常的交互的!主要的原因有两方面:一是内核操作难度很大一般用户容易控制不住,二是一般的用户可能在直接访问内核时会有一些非法的或不安全的操作会造成内核的安全问题!总之,就是一般的用户对内核操作很困难!此时,是通过内核的外壳程序即所谓的shell来与内核直接交互的!

举个栗子:

假设你要开车去上班,你是不是与车要交互呀!你是直接去打开发动机去与车交互在发动机那块让车起来的吗?不是吧!你开车直接与发动机交互的话是不是很难也很不安全呀!你只需要拿着钥匙,转一下。让钥匙这个对象帮你去与发动机交互呀!这里也是一样的!你不需要直接与内核交互,你只需要与内核周围的shell外壳进行交互即可!

这里也就知道了为什要存在shell外壳了:原因是用户不能直接访问操作系统的内核!

二、什么是shell外壳?

shell是一款内核的外壳程序。

从技术角度最简单的shell的定义是:命令行解释器!

它的核心就是将用户输入的指令翻译给内核处理,同时将内核的处理结果反馈给用户!

举个栗子:

就很像你一开始谈对象的时候的那个中间人一样!你把你的想法告诉中间人,中间人告诉你的意中人,你的意中人处理后的结果在给中间人,中间人在反馈给你!

OK,看看实际操作:

对比win的GUI,我们在操作win的时候也不是直接对win的内核直接操作的,而是通过点击图标进行的,其实点击的图标类似于我们这里的shell外壳!只不过win将shell外壳图形化了!同理shell对于Linux有相同的作用,主要是对我们的指令进行解析,然后内核,然后将内核的结果解析反馈给用户!

三、shell外壳是如何工作的?

我们上面刚刚解说过shell外壳本质是一款执行起来的程序(进程)!

他的工作方式主要是:

1、低风险的操作自己亲自去执行。

2、困难的、有风险的让shell外壳创建的子进程去尝试!

每次你登录xshell的时候系统会给你当前登录的用户创建一个shell外壳程序只不过名字不一样!一般是bash!我们登录上去看看!命令解释器不只是有shell, shell如果是媒婆的话,那么bash就是王婆,sh就是李婆!

低风险的自己去做我可以理解,但是有风险的不应该自己去做吗?简单的不应该让子进程去做吗?是的!现实生活中的很多是这样的!但是这个不同!如果高风险的操作自己亲自去做当前进程挂了咋办?是不是直接出问题了!所以为了保险起见,让子进程去执行高风险的操作,这样即使子进程挂科,shell还在,还可以继续正常工作!OK,我们可以写一个代码看看:

cpp 复制代码
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
    printf("我的pid:%d \n", getpid());//获取子进程
    printf("我的父进程的pid:%d\n",getppid());//获取父进程
    return 0;
}

shell一看这是用户写的,是不是有风险呀!所以就让子进程去执行了!

OK,shell的运行原理暂时只能介绍到这里了,后面的知识学了会在后面介绍的!下面我将所有的内容用一个例子来帮助理解一下:

假设你是一个从小就学习很好的学生,高考后考上了大学学的计算机,你也比较刻苦每天专心在学习,等到毕业后你的技术已经超过了学校的同龄人!也如愿的找到了一份满意的工作,但是过了两年后你爹坐不住了,每天催你找对象结婚!但是大学时期你每天都在和电脑打交道,与电脑交流是非常熟悉的,但是与人交流不行了!害羞,社恐!这是你爹看出你的窘迫于是问你儿啊你看上哪家的菇凉了,你爹我认识村东头的王婆,她可是远近闻名!你爹我好嘚也是一个村长,我让她帮你问问保准可以成!你同意了,你爹找来了王婆,你说你看上了隔壁的翠花,于是王婆得知后就去隔壁家问了!但王婆一到翠花家里就发现,翠花和张三好上了。。。于是王婆不好意思的回来,想着哎呦这可咋办嘛,人家是村长不好得罪,但是这里强行问的话或有被骂的风险,毁坏了我王婆的名声。于是他就让她的徒弟替他去问了,结果出事情了,但是王婆给村长的就是是徒弟业务不行,这次搞砸了,下次遇到好的我给你推荐!这样下来给了村长家一个交代,也自己的名声好着了!

你就是用户,王婆就是shell\bash\sh等命令行解释器,王婆的徒弟就是子进程,翠花就是内核!

OK,本期内容就到这里,下期我们再见!

相关推荐
a_安徒生13 分钟前
linux安装TDengine
linux·数据库·tdengine
追风赶月、20 分钟前
【Linux】线程概念与线程控制
linux·运维·服务器
小字节,大梦想22 分钟前
【Linux】重定向,dup
linux
blessing。。1 小时前
I2C学习
linux·单片机·嵌入式硬件·嵌入式
2202_754421542 小时前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
运维&陈同学2 小时前
【zookeeper03】消息队列与微服务之zookeeper集群部署
linux·微服务·zookeeper·云原生·消息队列·云计算·java-zookeeper
周末不下雨3 小时前
win11+ubuntu22.04双系统 | 联想 24 y7000p | ubuntu 22.04 | 把ubuntu系统装到1T的移动固态硬盘上!!!
linux·运维·ubuntu
哎呦喂-ll4 小时前
Linux进阶:环境变量
linux
Rverdoser4 小时前
Linux环境开启MongoDB的安全认证
linux·安全·mongodb