当前位置: 首页 > news >正文

shell命令以及运行原理

shell命令以及运行原理

  • shell命令以及运行原理

shell命令以及运行原理

Linux严格意义上来说说的是操作系统,我们把操作系统称之为“内核”(kernel),但是我们用户是不会直接与kernel直接打交道的,我们是通过一个“外壳程序”来与kernel进行交互,这个外壳程序也就是我们说所的shell,就比如window下,在用户和操作系统之间进行交互的就是windows GUI,我闷操作window并不是直接就去操作window内核,而是通过鼠标点击,调用图形接口,从而将我们的操作传达给操作系统!
在这里插入图片描述

那么我们用户为什么不能直接与kernel直接进行交互嘞?
这个问题也就是要回答shell存在的意义:

1、课可以更好的帮助操作系统与用户之间的交互,通过shell我们可以将用户的命令翻译给操作系统,同时我们也可以将我们操作系统的反馈翻译给我们的用户;
2、保护操作系统;假设我们的用户下达了一些比较危险的指令,那么我们就可以在shell层就终止掉该指令,从而间接的保护操作系统;
3、执行命令的时候可以创建子进程来执行;就算子进程运行失败,也不会影响到shell进程!

下面我们可以通过一个比较实际的例子来理解这个shell命令和运行原理:

就比如张三是一个腼腆的程序员,只适合与计算机打交道,不适合与人打交道;他的老爹嘞是村长,现在张三看上了隔壁村的小花,但是嘞由于他的这个性格就不适合去和小花进行交流,他的老爹就去请了一个媒婆帮助张三,让媒婆去小花家说亲,然后张三将他的需求和要求给王婆说了一下,王婆进行了简单包装,然后就去小花家了,去跟小花交流了很久,小花最终得出了一个不同意的结论!!为此王婆就将这个信息也简单包装了一下并带来回来,反馈给了张三!
这上面的媒婆嘞就相当于我们用户、shell、操作系统中的shell,而张三就相当于用户、小花就相当于操作系统,张三通过媒婆给小花表达心意就相当于用户通过shell与操作系统进行交流,小花拒绝了他的要求,就相当于用户给操作系统下达的命令操作系统做出了反馈,然后由王婆带回反馈给了张三!;
好现在我们故事继续:
张三得知了这个消息,不甘心啊,就叫王婆继续去说,王婆又去了,但是当他要进门的时候,他看到了小花竟和李四正手拉手看电视,双方家长也都还早,王婆看到这就知道张三的事铁定成不了了,为了防止张三做出过激行为,王婆就直接拒绝了张三的请求!
那么这里王婆没要将请求送到小花家,就自动做出判断拒绝了张三的请求,也就相当于shell阻止了用户下达的危险指令,从而间接的保护了操作系统;
好现在故事继续!
但是迫于张三村长父亲的压力和自己的金子招牌,王婆得想个办法解决这个问题,于是王婆想到了一个办法,通过招牌实习生!每当张三要再次去小花家说媒的时候王婆就派一个实习生过去,无论实习生是谈成功了还是失败了都与我王婆无关!!
那么这里王婆的这个办法就相当于shell创建子进程去执行用户命令,无论是执行失败还是成功都不会影响我们的shell进程!!

相关文章:

  • 【MySQL】 B+ 树存储的原理
  • 网络安全——SQL注入之安全狗bypass深度剖析
  • java每日一练(2)
  • C# 类实现接口(Interface) 多态 多继承
  • 量子计算(八):观测量和计算基下的测量
  • 2022年第三季度泛出行行业洞察:泛出行行业正在经历数智化升级的关键时期,用户规模保持平稳增长,行业整体良性发展
  • 配置FTP站点操作步骤—图解
  • lazada买家订单导出
  • MySQL事务管理 MVCC,隔离性详解
  • Docker入门教程(详细)
  • 免费申请Jetbrains全家桶
  • C语言中字符串相关操作函数
  • linux篇【11】:linux下的线程<后序>
  • 让学前端不再害怕英语单词(二)
  • Java培训教程给bean的属性赋值
  • ES6--对象的扩展
  • FastReport在线报表设计器工作原理
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • k8s 面向应用开发者的基础命令
  • MySQL QA
  • Next.js之基础概念(二)
  • PAT A1120
  • SegmentFault 2015 Top Rank
  • Web标准制定过程
  • 从0实现一个tiny react(三)生命周期
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 关于使用markdown的方法(引自CSDN教程)
  • 简析gRPC client 连接管理
  • 前端路由实现-history
  • 实习面试笔记
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 在Mac OS X上安装 Ruby运行环境
  • 智能合约Solidity教程-事件和日志(一)
  • 从如何停掉 Promise 链说起
  • ​人工智能书单(数学基础篇)
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (层次遍历)104. 二叉树的最大深度
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (七)c52学习之旅-中断
  • (三)uboot源码分析
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .gitignore文件_Git:.gitignore
  • .Net中间语言BeforeFieldInit
  • /dev下添加设备节点的方法步骤(通过device_create)
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @ConditionalOnProperty注解使用说明
  • [.NET]桃源网络硬盘 v7.4
  • [2023-年度总结]凡是过往,皆为序章
  • [Android Pro] android 混淆文件project.properties和proguard-project.txt
  • [Android]使用Git将项目提交到GitHub
  • [ASP.NET MVC]Ajax与CustomErrors的尴尬