Linux命令运行原理shell和bash

目录

  • 前言
  • 什么是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.kler.cn/a/2816.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AJAX,Axios,JSON简单了解

一. AJAX简介概念: AJAX(Asynchronous JavaScript And XML): 异步的JavaScript 和XMLAJAX作用:1.与服务器进行数据交换: 通过AJAX可以给服务器发送请求,并获取服务器响应的数据使用了AJAX和服务器进行通信,就可以使用 HTMLAJAX来替换JSP页面了2.异步交互…

看齐iOS砍掉祖传功能,Android 16G内存也危险了

手机内存发展是真的迅速,12GB 没保持几年现在又朝着 16GB 普及。 相比 iOS 的墓碑机制,Android 后台就主打一个真实,只是可惜 APP 不那么老实。 如果你较早接触 Android 机,各种系统管理、优化 APP 的一键加速、清理应该还历历在…

HFish蜜罐的介绍和简单测试(一)

目录 0、什么是蜜罐 0.1、蜜罐的定义 0.2、蜜罐的优势 0.3、蜜罐与情报 1、HFish介绍 1.1、设计理念 1.2、HFish架构 1.3、HFish特点 1.4、常见蜜罐场景 2、快速部署 2.1、环境要求 2.2、联网环境,一键安装 2.3、安装效果 3、错误排查 3.1、管理端问题…

KafKa知识汇总

前言 汇总相关知识 Kafka快速实战与基本原理详解

【C++进阶】十一、哈希的应用---布隆过滤器(二)

目录 一、布隆过滤器提出 二、布隆过滤器概念 三、布隆过滤器实现 3.1 布隆过滤器的插入 3.2 布隆过滤器的查找 3.3 布隆过滤器的删除 3.4 完整代码 四、布隆过滤器优点 五、布隆过滤器缺陷 一、布隆过滤器提出 在注册账号设置昵称的时候,有些软件要求每个…

Element table组件内容\n换行解决办法

项目使用<el-table>组件 <el-table :data"warnings" :row-class-name"highlightRow" v-loading"isLoading"> <el-table-column label"ID" prop"id"/> <el-table-column label"时间" pro…

【C++】STL容器、算法的简单认识

几种模板首先认识一下函数模板、类模板、栈模板。函数模板函数模板就是一个模型&#xff0c;而模板函数是函数模板经过类型实例化的函数。如下template<class T>是一个简单的函数模板&#xff1a;template<class T> T Max(T a, T b) {return a > b ? a : b; } …

【CodeForces】Codeforces Round 859 (Div. 4) D

嘿嘿嘿&#xff0c;CF虐我千百遍&#xff0c;我待CF如初见&#xff01; &#xff08;doge&#xff09; 目录 题目含义&#xff1a; 前缀和&#xff1a; 代码 &#x1f386;音乐分享&#xff08;点击链接可以听哦&#xff09; A Hundred Miles&#xff08;一百英里&#xff09;…

看完这篇 教你玩转渗透测试靶机vulnhub——My File Server: 1

Vulnhub靶机My File Server: 1渗透测试详解Vulnhub靶机介绍&#xff1a;Vulnhub靶机下载&#xff1a;Vulnhub靶机安装&#xff1a;Vulnhub靶机漏洞详解&#xff1a;①&#xff1a;信息收集&#xff1a;②&#xff1a;FTP匿名登入&#xff1a;③&#xff1a;SMB共享服务&#xf…

微软Bing GPT支持AI绘画了,输入文字就能出图

我想要一张图片&#xff1a;大象、珊瑚、火山、云朵我想要一张图片&#xff1a;亚特兰蒂斯&#xff0c;奥利匹克&#xff0c;喜马拉雅山我想要一张图片&#xff1a;洗衣机、长颈鹿、电视、鲸鱼我想要一张蓝色长颈鹿、红色鲸鱼和飘逸的绿色长发的图片我想要一张有趣的Docker标志…

值得记忆的STL常用算法,分分钟摆脱容器调用的困境,以vector为例,其余容器写法类似

STL常用算法 概述&#xff1a; 算法主要是由头文件<algorithm> <functional> <numeric>组成 <algorithm>是所有STL头文件中最大的一个&#xff0c;范围涉及到比较、交换、查找、遍历操作、复制、修改等等 <nuneric>体积很小&#xff0c;只包括…

文心一言 vs GPT-4 —— 全面横向比较

文心一言 vs GPT-4 —— 全面横向比较 3月15日凌晨&#xff0c;OpenAI发布“迄今为止功能最强大的模型”——GPT-4。我第一时间为大家奉上了体验报告《OpenAI 发布GPT-4——全网抢先体验》。 时隔一日&#xff0c;3月16日下午百度发布大语言模型——文心一言。发布会上&#…

Halcon转OpenCV实例--纺织物折痕检测(附源码)

导 读 本文主要介绍Halcon转OpenCV实例--纺织物折痕检测(附源码)。 实例来源 实例来源于《Halcon机器视觉算法原理与编程实战》7.4.2实例 下面测试图片也来源于图书代码,如有侵权请联系删除: 上图肉眼可见的折痕,类似脏污,我们的目的是将折痕检测出来。 Halcon实现 …

防火墙和IDS

文章目录一、结合以下问题对当天内容进行总结1. 防火墙如何处理双通道协议&#xff1f;2&#xff0c;防火墙支持那些NAT技术&#xff0c;主要应用场景是什么&#xff1f;3. 防火墙如何处理NAT&#xff1f;4. 当内网PC通过公网域名解析访问内网服务器时&#xff0c;会存在什么问…

交通信号标志识别软件(Python+YOLOv5深度学习模型+清新界面)

摘要&#xff1a;交通信号标志识别软件用于交通信号标志的检测和识别&#xff0c;利用机器视觉和深度学习智能识别交通标志并可视化记录&#xff0c;以辅助无人驾驶等。本文详细介绍交通信号标志识别软件&#xff0c;在介绍算法原理的同时&#xff0c;给出Python的实现代码以及…

传输层协议----UDP/TCP

文章目录前言一、再谈端口号端口号的划分认识知名端口号(Well-Know Port Number)两个问题nestatpidof二、UDP协议UDP协议端格式UDP的特点面向数据报UDP的缓冲区UDP使用注意事项基于UDP的应用层协议二、TCP协议TCP协议段格式可靠性问题确认应答(ACK)机制流量控制六个标志位PSHUG…

经典七大比较排序算法 ·上

经典七大比较排序算法 上1 选择排序1.1 算法思想1.2 代码实现1.3 选择排序特性2 冒泡排序2.1 算法思想2.2 代码实现2.3 冒泡排序特性3 堆排序3.1 堆排序特性&#xff1a;4 快速排序4.1 算法思想4.2 代码实现4.3 快速排序特性5 归并排序5.1 算法思想5.2 代码实现5.3 归并排序特性…

【Zblog建站】搭建属于自己的博客网站,并内网穿透实现公网访问

文章目录1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置4. 公网访问测试5. 结语1. 前言 想要成为一个合格的技术宅或程序员&#xff0c;自己搭建网站制作网页是绕不开…

Golang每日一练(leetDay0014)

目录 40. 组合总和 II Combination Sum II &#x1f31f;&#x1f31f; 41. 缺失的第一个正数 First Missing Positive &#x1f31f;&#x1f31f;&#x1f31f; 42. 接雨水 Trapping Rain Water &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题…

MySQL主从复制

主从复制概述 如何提升数据库并发能力 在实际工作中&#xff0c;我们常常将 Redis 作为缓存与 MySQL 配合来使用&#xff0c;当有请求的时候&#xff0c;首先会从缓存中进行查找&#xff0c;如果存在就直接取出。如果不存在再访问数据库&#xff0c;这样就 提升了读取的效率&…
最新文章