Linux命令运行原理shell和bash

news/2024/11/9 2:49:02/

目录

  • 前言
  • 什么是shell,什么是bash?
  • ls -l 执行过程

前言

学习操作系统的过程中我们经常在自己的shell中执行一些Linux命令,那么当我们输入一个类似于 ls -a 这样的命令式,发生了什么?

换句话说,从我们在shell中输入ls -a 按下回车之后,这条命令在linux底层是怎么被执行的?下面我们详细分析!


什么是shell,什么是bash?

这里写图片描述

shell是一种处于用户态运行的解释器(也是进程),相当于操作系统的"使用界面",是用户和内核通信的中间桥梁, 好比内核的外壳, 我们用户通过对shell的交互,来实现对系统的操作;

bash(/bin/bash)就是linux中默认的shell。他是随着用户连接OS后,启动的不断运行的一个进程;


ls -l 执行过程

回答前言中提出的问题,shell命令框中输入一个ls -l 然后会发生什么?

如下图:
在这里插入图片描述

当某个用户连接系统的时候,会随之创建一个属于他的shell(bash)进程,形成终端界面,等待使用者输入命令进行操作;

当我们按下ls -l后:

  1. shell的main(argc,argv)函数会以命令行传参的形式读取字符串 ls 和 -l,内部解析出命令名称 ls 和参数 l ;
  2. 检查输入的命令是完整命令还是别名,并将其替换成原始的命令名称;

(比如 alias rm=‘rm -i’; 给rm -i命令起别名rm,删除东西时提醒输入Y/N 防止用户误删!这些机制与上面命令处理流程不冲突!)

  1. 进一步检查原始的命令是内部命令(程序)还是外部命令(程序);

(type+命令 可以查看是外部还是内部命令)

  1. 找到这个命令(程序)的位置,并结合对应的选项以某种方式运行这个命令(程序),返回结果;


其实各种命令,本质上也是一个个独立的程序:

内部命令(程序),随着shell进程的初始创建一同存入了内存中,相当于shell进程中的一些函数,直接运行,不需要文件系统IO进内存,也不受环境变量影响,因此执行效率比较高!

ls cd等都是内部命令; vim cat等都是外部命令

外部命令(程序),存在某些PATH环境变量路径中,需要shell去一个路径一个路径的找这个程序,并通过文件系统inode节点等IO进内存,通过shell fork出子进程进行exec程序替换运行,之后shell还要回收,因此执行效率慢;

(创建子进程,进行exec进程替换的原因是为了shell的安全性,万一非法的第三方外部命令是黑客设计的,不能让他影响到shell解释器)

如果键入的命令既不是内部命令,外部的PATH路径也没有,就显示一条command not found的提示信息;;


http://www.ppmy.cn/news/34584.html

相关文章

基于springboot框架实现校园闲置物品交易 源码+论文

基于springboot框架实现校园闲置物品交易 源码论文开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Ma…

锂电池充电的同时也能放电吗?

大家应该都有这样经历,我们的手机在充电的同时也能边使用,有的同学就会说了,这是因为手机电池在充电的同时也在放电。如果这样想我们可能就把锂电池类比了一个蓄水池,以为它在进水的同时也能出水,其实这个比喻是错误的…

Selenium基础篇之多窗口切换

文章目录前言一、场景二、设计1.访问C站首页2.在toolbar输入框输入selenium3.点击toolbar的搜索按钮4.点击搜索结果页第一个资源三、问题四、分析五、解决六、代码总结前言 大家好,我是空空star,本篇给大家分享一下Selenium多窗口切换。 本篇使用的selen…

Jetbotmini中的PID驱动算法控制与代码实现

PID算法在工业领域应用极为广泛,汽车、飞机、导弹、设备上的温度控制等等都有它的身影,其中的PID三个字母分别是Proportional比例、Integral积分、Derivative微分的首字母,PID控制算法是结合比例、积分和微分三种环节于一体的控制算法。PID控…

C语言自定义数据类型(五)共用体类型

目录 一、什么是共用体类型 二、引用共用体变量的方式 三、共用体类型数据的特点 3.1特点 3.2举例说明 一、什么是共用体类型 有时想用同一段内存单元存放不同类型的变量。例如,把一个短整型变量、一个字符型变量和一个实型变量放在同一个地址开始的内存单元中…

I2C和SPI总线以及通信

通讯属性 概括 Serial/parallel 串行/并行Synchronous/asynchronous 同步/异步Point-to-point / bus 点对点 总线Half-duplex/full-duplex 半双工/全双工Master-slave/ equal partners 主从/对等single-ending / differential 单端/差分 点对点和总线 点对点通讯 只有两个通…

linux简单入门

目录Linux简介Linux目录结构Linux文件命令文件处理命令文件查看命令常用文件查看命令Linux的用户和组介绍Linux权限管理Linux简介 Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯本纳第克特托瓦兹&#xff0…

js 往指定位置添加对象

var arr [1,2,2,3,4,5] arr.splice(2,0,4) // 第一个参数表示index(索引) 第二个参数要移除的个数, 第三个参数表示要添加的元素 // 返回的结果为空, 改变原来的数组 // 最终 arr [1,2,4,2,3,4,5]