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

【Linux】Shell 命令以及运行原理

Shell 命令以及运行原理

当用户登录 Linux 系统的时候,系统会给用户创建一个新的进程,一般叫做 bash(命令行解释器)。
Linux 严格意义上说的是一个操作系统,我们称之为 “核心( kernel )” ,但对于我们一般用户,是不能直接使用  kernel 的 。而是通过 kernel 的  外壳 ”  程序,也就是所谓的 S hell ,来与  kernel 进行 沟通。

如何理解?为什么不能直接使用 kernel?

从技术角度,Shell 的最简单定义:命令行解释器( command Interpreter )主要包含:
  • 将使用者的命令翻译给核心(kernel)处理。
  • 同时,将核心的处理结果翻译给使用者。

对比 W indows GUI ,我们操作 W indows 不是直接操作 W indows  内核,而是通过图形接口,点击,从而完成我们的操作(比如进入 D  盘的操作,我们通常是双击  盘盘符 或者运行起来一个应用程序)。
Shell 对于  Linux ,有相同的作用,主要是对我们的指令进行解析,解析指令给  Linux  内核。反馈结果在通过内核运行出结果,通过 Shell  解析给用户。

张三是一个闷骚且害羞的程序员,不擅长和女生交往,Shell 就像媒婆,操作系统内核就相当于村里漂亮且让张三感到心动的一位女生名叫如花。
张三看上了她,但是又不好意思直接去向她表白,于是张三就让家人找媒婆去帮他提亲,所有的事情张三都直接跟媒婆沟通,由媒婆(Shell)转达他的意思给如花,而家人找到的媒婆她姓王,所以大家都叫它王婆(bash),王婆就对应我们常使用的 bash。
如花拒绝了他的提亲,就相当于用户给操作系统下达的命令操作系统做出了反馈,然后由王婆将反馈告知张三。张三得知了这个消息,非常不甘心,就让王婆帮他继续去说,王婆又去了,但是当王婆要进如花家的门时,她看到了小花竟和李四正手拉手,双方家长也见了面,王婆看到这就知道张三的事铁定成不了了,为了防止张三做出过激行为,王婆就直接拒绝了张三的请求。
那么王婆没有将请求送到小花家,就是自动做出判断拒绝了张三的请求,也就相当于 Shell 阻止了用户下达的危险指令,从而间接的保护了操作系统。
张三的父亲是村长,他特意交代把这件事情交给王婆,让她去办了,王婆迫于张三村长父亲的压力,同时也不想砸了自己的招牌,王婆得想个办法解决这个棘手的问题。于是她想到通过招聘实习生,每当张三要再次去小花家说媒的时候王婆就派一个实习生过去,无论实习生最终是谈成功了还是失败了都与我王婆无关,只要有去办这件事就行。
那么这里王婆的这个办法就相当于 Shell 创建子进程去执行用户命令,无论是执行失败还是成功都不会影响 Shell 进程。

张三(用户)为什么不直接去找小花(操作系统内核)呢?

因为不擅长。

媒婆(Shell)存在的价值是什么?

解决张三 “不擅长” 的问题以及保护如花(操作系统内核)。


【结论】

普通用户不擅长直接去访问操作系统,Shell 外壳就是用来将用户的需求传递给操作系统,同时也可以保护操作系统(假如用户有非法操作)。

【思考】

Shell VS Bash,这两者有什么区别呢?

Shell 是对所有外壳程序的统称,而 Bash 是某一个具体的 Shell。Bash 也是许多 Linux 发行版的默认 Shell。

相关文章:

  • 【Linux】进程退出和进程等待
  • 单点安装3.6.23_ubuntu18.04
  • 前端构建工具对比 webpack、vite、esbuild等
  • 广和通AI解决方案“智”赋室外机器人迈向新天地!
  • 使用Python自动化操作手机,自动执行常见任务,例如滑动手势、呼叫、发送短信等等
  • 【SpringCloud Alibaba】 介绍及微服务模块搭建
  • 基于Spring+mybatis+vue的社区健康管理系统(Java毕业设计)
  • C++ :命名空间域
  • mysql学习打卡day16
  • 敏捷测试和DevOpes自动化测试的区别
  • 【汇编】 13.3 对int iret和栈的深入理解
  • vue+elementui实现12个日历平铺,初始化工作日,并且可点击
  • IS-IS:01 ISIS基本配置
  • 【Docker】部署和运行青龙面板:一个支持python3、javaScript、shell、typescript 的定时任务管理面板
  • C++11 =default,=delete
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【前端学习】-粗谈选择器
  • const let
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • nginx 负载服务器优化
  • SpiderData 2019年2月13日 DApp数据排行榜
  • TypeScript实现数据结构(一)栈,队列,链表
  • windows-nginx-https-本地配置
  • 分布式熔断降级平台aegis
  • 关于List、List?、ListObject的区别
  • 入门级的git使用指北
  • 思维导图—你不知道的JavaScript中卷
  • 我的面试准备过程--容器(更新中)
  • 一些css基础学习笔记
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • (1)(1.9) MSP (version 4.2)
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (LeetCode) T14. Longest Common Prefix
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (二)c52学习之旅-简单了解单片机
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (实战篇)如何缓存数据
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)shell调试方法
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET框架
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • [ 转载 ] SharePoint 资料
  • [Android]Tool-Systrace
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析
  • [BUUCTF NewStarCTF 2023 公开赛道] week4 crypto/pwn