IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> shell命令背后的执行过程 -> 正文阅读

[系统运维]shell命令背后的执行过程

在命令行中敲入一个mkdir命令,背后发生了些什么?

?

这个是Linux中经常被问到的一个问题,看似简单的一个问题,其实背后包含的知识十分多,我了解的也不是很多,以我自己的理解来回答一下这个问题,如果有错误,欢迎指正!

首先,我们需要了解我们平常在xshell中敲的命令,叫做shell命令(是严格区分大小写的),shell是一个解释器,人们敲的命令通过解释器的翻译,机器才会执行(虚拟机并不能直接读懂我们敲的命令),背后的过程可以简单理解为:人-->命令-->shell解释器-->机器执行

一些基本概念:

Linux命令:

????????用于实现某一类功能的指令或程序;命令的执行依赖于解释器程序(例如:/bin/bash)

shell解释器是什么:

????????shell提供了一个命令行界面,解释和执行用户的命令;shell 也是一个程序,帮助我们人去操作计算机的,接受输入的命令,然后告诉Linux系统去执行;shell解释器还可以理解为一个人机交互程序,帮助我们告诉Linux系统去做什么事情,理解为一个翻译

shell解释器的作用:

????????对命令进行语法分析,得出哪些是命令,哪些是参数,哪些是选项等并且对变量和其他的语法进行分析

shell编程:

? ? ? ? 通过大量的shell命令组成,只在Linux中执行

在这里再科普一下Linux和unix的区别:

unix先出现,Linux是山寨的unix,Linux is very like unix

Linux里的绝大多数命令都是使用C语言编写的

了解shell解释器还需要了解Linux系统是由哪些组成的呢?主要包括以下五个方面

????????1.内核:是Linux系统内部最核心的软件 kernel 内核是开源免费的,并且是使用c语言编写的

????????2.系统调用:system call 是内核给外面的程序的接口,也是程序

????????3.应用程序:实现某个功能的程序,例如mkdir cd ls useradd

????????4.shell解释器:实现人机交互的,给人使用的,来操作操作系统的程序

????????5.库函数:实现某个功能的程序,给别的程序使用的——》某个库函数就是一个轮子,其他的程序可以直接调用,不需要重复造轮子了

Linux内核有什么作用?

????????1.对CPU进行调度——》CPU

????????2.对进程进行管理,例如创建一个进程、杀死一个进程、运行进程等

????????3.对内存进行管理,例如给那个进程分配内存空间,回收内存空间等——》内存 memory

????????4.对磁盘里的文件系统进行管理,例如:创建文件,删除一个文件等——》disk 磁盘

????????5.对网络进行管理——》网卡

????????6.其他硬件的管理

?接下来我们就可以正式的回答文章开始的那个问题了:在命令行中敲入一个mkdir命令,背后发生了些什么?

例如:mkdir -p /xieshan

1.首先,shell解释器会对我们敲入的命令进行语法解析,分解成一个一个的token(token是最基本的单元):mkdir 是命令,-p是选项,/xieshan是参数;

语法解析的具体过程如下:

  1. 首先会判断这是一个绝对路径的命令还是其他,是绝对路径命令就直接由bash去执行
  2. 如果是其他就会判断这是否是一个别名命令,别名命令会将其展开为原始命令
  3. 然后会再判断这是外部命令还是内部命令,是内部命令就执行
  4. 如果是外部命令就会到PATH变量中遍历寻找,找到命令路径就会往下执行,找不到bash就会抛出command not ?found 异常

tips:可以使用type命令来查看一个命令属于内部命令还是外部命令

2.shell解释器会到磁盘的PATH变量中查找mkdir命令的路径,经过查找发现mkdir命令存放在磁盘的/usr/bin/mkdir

3.磁盘会告诉Linux内核mkdir命令的位置,加载mkdir命令的二进制可执行程序到内存里

4.Linux内核首先会查看内存里是否有足够的空间,如果有,就会创建进程,加载代码,整个进程进入就绪队列

5.内存执行mkdir命令,在这个过程中由于时间片等原因,内存会和CPU发生上下文切换(也就是不断在就绪、执行、阻塞过程中环绕)

6.内存将执行结果返回给shell解释器,shell解释器再通过标准输出将命令的执行结果返回给用户

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-07-21 21:52:42  更:2022-07-21 21:53:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 12:54:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码