【Linux系统编程】shell的感性理解

news2024/11/15 5:40:02

文章目录

    • 1. shell是什么?它有什么作用?
    • 2. 通过一个故事感性理解shell的运行机制
      • 开端
      • 发展
      • 波澜渐起(正常命令的处理)
      • 故事角色与处理过程中各部分的映射
      • 走向高潮(非法请求的处理)
      • shell 存在的意义
      • 结尾

1. shell是什么?它有什么作用?

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?

从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)
主要工作包含:将使用者的命令翻译给核心(kernel)处理;同时,将核心的处理结果翻译给使用者。
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。

这些概念大家可以先了解一下,接下来,正式进行今天的学习!

在之前的文章里我们学习了Linux中常见的一些基本指令,那不知道大家有没有一些疑惑:

在这里插入图片描述
我们输入相关的指令,然后它就会被执行,并返回对应的结果。
那我们输入的命令是怎么被执行的呢?
其实这里面要借助一个叫shell的东西。

那shell是个什么东西呢?

Shell是一种命令行解释器,Shell充当了用户和内核之间的接口,负责解析用户输入的命令并将其传递给操作系统内核执行,并将执行结果返回给用户。
Linux中的shell一般是bash,Bash(Bourne Again SHell)是一种常见的shell。
在这里插入图片描述

我们可以画个图来理解一下:

假设这是我们的操作系统
在这里插入图片描述
而我们作为用户,其实是不能直接访问操作系统的,那我们如何和操作系统进行交互呢?
🆗,那在操作系统的外面呢,包裹了一层软件层,我们一般把它称为shell,或者叫外壳程序,那我们现在其实就可以把它认为是命令行。
在这里插入图片描述
那对应Windows下面其实就是Windows GUI,即Windows的图形化界面。
那我们输入的命令其实就先给到了shell,shell负责解析用户输入的命令并将其传递给操作系统内核执行,并将执行后的结果返回给我们用户。
在这里插入图片描述

那通过这张图,大家可能还是不能很好的理解。下面我们讲一个故事,来帮助大家更好的理解

2. 通过一个故事感性理解shell的运行机制

认真听,故事开始了✈

开端

在这里插入图片描述
故事的主人公——小帅,住在一个美丽的小村庄里,村上有这样几户人家
在这里插入图片描述
小帅是村长家的儿子,有权有势,但小帅却是一个闷骚且害羞的程序员,喜欢隔壁的MM如花。

发展

小帅呢,今年已经不小了,已经到了该找媳妇的年纪了。
它的老爹也是非常着急,每天催小帅。
在这里插入图片描述
终于有一天,小帅鼓起勇气跟他爹说,我们觉得隔壁的如花不错,我挺喜欢的,但是我不敢去找人家。
小帅的村长老爹胸脯一拍,说,包在我身上,于是就想到了村东头著名的媒婆——王婆。打算请王婆去如花家给小帅说媒。

波澜渐起(正常命令的处理)

第二天,王婆就如约来到小帅家,问小帅,你对你的另一半有什么要求吗?
小帅告诉王婆说,没什么要求,我就喜欢隔壁的如花,您帮我说一说。
需求很明确,于是王婆出门直奔如花家,跟如花说道,你家隔壁的小帅,工作也不错,还是村长家的儿子,并且对你一直有意思,你看你们两个能不能处一处。
可是如花一直对小帅的印象不好,一口回绝了王婆
王婆于是便返回了小帅家,告诉小帅,人家如花对你没有那个意思,要不就算了吧。

故事角色与处理过程中各部分的映射

那通过上面的故事,相信大家已经有了一点理解了:

在这里插入图片描述
那故事中的小帅,其实就是对应用户,王婆就对应shell,如花就对应操作系统。

为什么小帅不直接找如花呢?

因为小帅害羞内敛,不“善于”直接和如花打交道(用户不能直接和操作系统交互)。那你不善于,有人善于,这个世界上存在一种职业——媒婆,于是呢,小帅就把对应的需求告诉了王婆(用户输入的命令被传递给shell),王婆把小帅的想法整理成自己的话并告诉如花(shell解析用户输入的命令并将其传递给操作系统内核执行),如花思考一番之后,把自己的决定告诉王婆,由王婆转告给小帅(shell将执行后的结果返回给用户)。

故事到这里还没有结束…

走向高潮(非法请求的处理)

上面说到,王婆把如花的意思告知了小帅,但是小帅不想放弃,对王婆死缠烂打,恳求她再去说一说。
王婆拗不过小帅,更拗不过小帅的村长父亲,只能再去找如花。
可是呢,王婆刚走到如花家门口,还没进去呢,就看到如花和同村的李四两个人在一起了,已经准备结婚了。
王婆一看人家都这样了,我再去说媒,不是找打嘛。
王婆知道现在小帅跟如花肯定是不可能了,于是直接原路返回,不再告诉如花小帅还想和她处对象的请求了。

那与之对应

如果我们用户输入的指令是非法请求,在shell层就直接被拒绝了
在这里插入图片描述

继续我们的故事:

王婆原路返回,告诉小帅,人家已经有男朋友了,你们不可能了,死了心吧,也不要再去打扰和纠缠人家了。
那在这里王婆的做法其实也是对如花的一种保护,想让小帅死心,害怕小帅疯狂的迷恋会影响到如花的生活。
那由此我们也得出shell存在的另一个意义或者说作用,就是可以保护操作系统。

那我们来总结一下:

shell 存在的意义

  1. Shell是一种命令行解释器,Shell充当了用户和内核之间的接口,负责解析用户输入的命令并将其传递给操作系统内核执行,并将执行结果返回给用户。
  2. 保护操作系统。

结尾

王婆上一次已经很明确地表明了如花和小帅是不可能的了,可是痴情的小帅依然不死心,苦苦哀求王婆再次传达自己的心意。
而王婆也确实不好拒绝,因为小帅是顾客啊,是用户啊,况且小帅还有个村长老爹。
但是呢,王婆又考虑到,如果最后自己跑了好多趟,还是办不成这件事,还自己的招牌不就被砸了嘛,我王婆可是十里八村著名的媒婆啊。
王婆苦思冥想,终于想到一个办法,既能把事办了,如果失败了,也不影响自己的名声。那就是找自己招的实习生去干,这样即使没说成,对王婆自己的名声也没影响。
在这里插入图片描述
那这样久而久之,王婆也有了一套自己的操作方式,再有人找我说媒,就派几个实习生去做。

那与之对应的:

就是我们后面要讲的——执行命令时,创建子进程去执行。

那这个大家先了解一下,我们后面会讲,王婆说媒的故事到此也就告一段落了…
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/709421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode-每日一题【142.环形链表Ⅱ】

题目 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部…

每天一点Python——day45

#第四十五天 #字典元素的特点: #例:字典中的所有元素都是一个key-value对【键值对】,key不允许重复,value可以重复 a{name:张三,name:李四} print(a) #只会输出李四,因为键不允许重复,否则会出现值覆盖的情…

QMenu代码生成器

共4种选项: 文本:输入父对象名,文本即可 文本图标:输入父对象名,文本,图标 文本图标菜单:输入父对象名,子对象名,文本,图标 文本菜单:输入父对象名…

14 | count(*)这么慢,我该怎么办?

一下内容出自《MySQL 实战 45 讲》 14 | count(*)这么慢,我该怎么办? count(*) 的实现方式 不同的 MySQL 引擎中,count(*) 有不同的实现方式。 MyISAM 引擎把一个表的总行数存在了磁盘上,执行 count(*) 的时候会直接返回这个数…

斯坦福大学吴佳俊:通过自然监督编码理解视觉世界

导读 在智源大会的生成模型论坛上,斯坦福大学助理教授吴佳俊带来了精彩的演讲 “通过自然监督编码理解视觉世界”(Understanding the Visual World Through Naturally Supervised Code)。此次演讲从二维图像拓展到三维世界,从人类…

linux高并发网络编程开发(xml json)16_xml和Json相关api及文件解析制作

pdf详细版 01 学习目标 xml xml基础语法和规范C程序中如何使用xml开源库借助开源库,在C程序中生成xml文件已知一个xml文件,如何借助开源库解析xml文件数据 Json json的基础语法和规范C程序中如何使用json开源库 - cjson使用cjson生成json文件已知一个json文件,使用cjson库解析…

列存储、行存储

一、定义 1.1定义 Sybase在2004年左右就推出了列存储的Sybase IQ数据库系统,主要用于在线分析、数据挖掘等查询密集型应用。列存储,缩写为DSM,相对于NSM(N-ary storage model),其主要区别在于: DSM将所有记录中相同字段的数据聚…

【AUTOSAR】BMS开发实际项目讲解(二十三)----电池管理系统高压互锁保护

高压互锁保护 关联的系统需求 TSR-BMS-6101、TSR-BMS-6102、TSR-BMS-6103、TSR-BMS-6104、TSR-BMS-6105、TSR-BMS-6106、TSR-BMS-6107、TSR-BMS-6108、TSR-BMS-6109、TSR-BMS-6110、TSR-BMS-6111; TSR-BMS-6201; TSR-BMS-6301; TSR-BMS-S101、TSR-BMS-S102、TSR-BMS-S103、TS…

AutoSAR系列讲解(入门篇)4.3-BSW的Communication功能

一、架构与术语解释 BSW中以后每一节我都会放上一张模块图,所以就先上图: 由于汽车上一般都使用CAN总线,图中的bus大家可以就当成CAN来看待,如果使用的是LIN或者其他的,也相应的换成其总线看待就行。后续在实践篇中将会…

你需要了解的 50 个 ChatGPT 统计数据和事实

Rest assured that with the ChatGPT statistics you’re about to read, you’ll confirm that the popular chatbot from OpenAI is just the beginning of something bigger. Since its launch in November 2022, ChatGPT has broken unexpected records. For example, it r…

数据结构之串

1.串的基本概念 • 一个串是由n(n≥0)个字符组成的有限序列,记为s“s0s1 ⋯ sn-1”,其 中,s是串名,双引号括起来的字符序列s0s1 ⋯ sn-1是串值。 • 一个字符在串中的位置称为该字符在串中的序号&#xff…

微搭低代码实现表单打印功能

目录 1 引入第三方库2 搭建页面3 实现打印4 实现效果总结 在我们的日常开发场景中,表单打印是一个比较常见的场景,微搭本身不带打印功能,我们需要借助一个第三方的库来实现打印。 1 引入第三方库 在微搭中如果需要引入第三方库的&#xff0…

阿里云免费云服务器领取教程

阿里云推出了免费试用中心,提供超百款免费试用云产品,个人用户与企业用户均可免费试用,云服务器最长免费体验3个月! 一、活动地址 阿里云免费试用中心 二、活动对象 满足以下全部条件的阿里云用户: 1、阿里云注册会…

JS模块化规范及进化史

模块化规范及进化史 按照功能和需求分成各个模块,最后再把所有模块合并在一起。当然现在基于webpack vue/react,模块化开发很重要。某个功能板块单独写成一个模块,然后把模块合在一起,最后把整个页面的功能实现。方便团队管理 小插…

stunnel-加密通道-squid-IP缓存服务器-openssl自签名证书

文章目录 1.安装squid2.管理squid服务3.安装Stunnel服务器端4.安装Stunnel客户端5.在目标使用位置开启代理 1.安装squid yum install squid 2.管理squid服务 systemctl start squid systemctl stop squid systemctl status squid 查看端口 netstat -lntpo | grep 8**** 修改配…

集成增益采样电路误差计算--适用INA214

一、 一般集成电路结构如下: 二、 典型的计算步骤如下: 主要误差来源:采样电阻R-shunt,集成增益运放,ADC误差。 采样电阻误差 误差项包括常温下电阻的精度X1%,电阻的温漂值X2% 误差百分比为:…

《C++ Primer》--学习11

关联容器中的元素是按关键字来保存和访问的 两个主要的关联容器类型是 map 和 set。map 中的一个关键字-值(key - value)对:关键字起到索引作用,值则表示与索引相关联的数据。set 中每个元素只包含一个关键字; 以下八…

Java-数据结构(一)

这里写目录标题 前言一、为什么需要数据结构?1、低效的操作2、占用过多的内存空间3、困难的数据操作 二、枚举(Enumeration)1、定义2、关键字3、适用场景 三、 位集合(BitSet)1、定义2、方法3、适用场景 四、向量&…

文件操作 -- C语言

在之前学习的时候,我们可以发现当程序运行完,我们之前保存的数据就会消失,再次运行时还得重新输入,为了使我们保存的数据在下次运行时还能使用,我们这篇文章来学习一下怎么使用文件操作,将我们的数据保存在…

SQL14 操作符混合运用

select device_id,gender,age,university,gpa from user_profile where university山东大学 and gpa>3.5 or university复旦大学 and gpa>3.8;