shell运行原理

这篇具有很好参考价值的文章主要介绍了shell运行原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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

本期类容介绍

为什么存在shell外壳?

什么是shell外壳?

shell外壳是如何工作的?

一、为什么存在shell外壳?

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

shell运行原理,Linux从入门到进阶,linux

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

举个栗子:

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

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

二、什么是shell外壳?

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

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

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

举个栗子:

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

OK,看看实际操作:

shell运行原理,Linux从入门到进阶,linux

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

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

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

他的工作方式主要是:

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

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

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

shell运行原理,Linux从入门到进阶,linux

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

#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运行原理,Linux从入门到进阶,linux

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

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

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

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

OK,本期内容就到这里,下期我们再见!文章来源地址https://www.toymoban.com/news/detail-832469.html

到了这里,关于shell运行原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】浅谈shell命令以及运行原理

    前言:上篇博文把linux下的基本指令讲解完了。本期我们聊聊Linux下【shell】命令及其运行原理。   目录 Shell的基本概念与作用 原理图展示  shell命令执行原理 Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。 而是通

    2024年02月03日
    浏览(30)
  • 【Linux】Shell命令运行原理和权限详解

    tar指令(重要): 打包/解包,不打开它,直接看内容 语法:tar [-cxtzjvf] 文件与目录 … 参数: 常用的为: (1)-c :建立一个压缩文件的参数指令(create 的意思); (2)-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩 (3)-f :使用档名,请留意,在 f 之后要立即接

    2024年03月14日
    浏览(95)
  • 深入篇【Linux】学习必备:Shell命令运行原理 + 基本指令

    Linux严格意义上来说是一个操作系统,我们称为\\\"核心\\\",但我们一般用户,是不能直接使用这个\\\"核心\\\"。而是通过\\\"核心\\\"的外壳程序,也就是所谓的Shell来与\\\"核心\\\"沟通。 其实我们所有的指令都要在OS内部运行,但是OS使用的难道太高,我们用户很难直接与OS打交道。 从技术角度

    2024年02月07日
    浏览(74)
  • Linux之Shell进阶(变量和条件判定语句)

    变量的含义 什么是量? 量就是数据. 什么是变量? 数据可以发生改变就是变量。 在一个脚本周期内,其值可以发生改变的量就是变量。 什么叫做一个脚本周期? 一个脚本周期我们可以简单的理解为当前的shell文件。 变量是shell中不可或缺的一部分,也是 最基础、最重要 的组

    2024年02月15日
    浏览(41)
  • shell脚本在linux重启之后继续运行

    首先,我是需要写一个hadoop集群启动的脚本,脚本代码中有需要重启Linux 的操作,那么如何在重启Linux后,继续执行脚本中的代码呢? 我暂时查询到的方法如下: nohup命令用于忽略HUP信号(当用户退出登录时会发送这个信号),保证脚本不会因为用户退出而停止运行; 符号用

    2024年02月02日
    浏览(38)
  • Linux shell:脚本判断进程是否在运行

    一.命令说明 ps aux | grep 进程名 | grep -v grep :进程存在则输出信息,不存在则没输出 ps -ef | grep 进程名 | grep -v grep | wc -l :进程存在则输出行数(也就是数量),不存在则输出0 二.运行示例demo 方法一: 新建脚本:touch test.sh 添加如下内容: 赋予权限:chmod 777 test.sh 运行结果

    2024年02月11日
    浏览(46)
  • Linux 查询正在运行的shell脚本命令

    1.查看当前运行的所有进程。 ps -A 2.如果太多了找不到,看的眼花,可以加条件 grep是分组 查看正在运行的shell脚本的进程shell脚本就是 sh ps -ef |grep  sh 如图下面就是查询出来的所有sh脚本,看第三列就是脚本的进程UID,直接杀死UID就行    3.杀死进程UID kill  4491 如图 直接杀

    2024年02月12日
    浏览(37)
  • 【Linux】Shell脚本中获取命令运行的结果

    写shell脚本的时候,常需要将一个命令的运行结果做为参数传递给另外一个命令,除了我们熟知的管道 | 和args,我们也可以通过获取命令的运行结果。 执行结果: 来点复杂的应用: 再比如: 😉 运行结果: 把反引号``换成$()即可 反引号不支持嵌套,而 $ 支持嵌套。 举个例

    2024年02月11日
    浏览(28)
  • shell_68.Linux在非控制台下运行脚本

    在非控制台下运行脚本 有时候,即便退出了终端会话,你也想在终端会话中启动 shell 脚本,让脚本一直以后台模式运行到结束。 这可以用 nohup 命令来实现。nohup 命令能阻断发给特定进程的 SIGHUP 信号。当退出终端会话时,这可以避免进程退出。 nohup 命令的格式如下: 下面

    2024年02月05日
    浏览(46)
  • shell文件在linux系统无法运行,报错解决办法

    问题:bin/sh^M: bad interpreter: No such file or directory 原因:.sh脚本在windows系统下用记事本文件编写的。不同系统的编码格式引起的。 解决方法:修改.sh文件格式    (1)使用vi工具       vi test.sh     (2)利用如下命令查看文件格式       :set ff 或 :set fileformat       可以看到

    2024年02月08日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包