【Linux我做主】浅谈Shell及其原理

news2025/3/18 18:29:03

浅谈Linux中的Shell及其原理

  • Linux中Shell的运行原理
  • github地址
    • 前言
    • 一、Linux内核与Shell的关系
      • 1.1 操作系统核心
      • 1.2 用户与内核的隔离
    • 二、Shell的演进与核心机制
      • 2.1 发展历程
      • 2.2 核心功能解析
      • 2.3 shell的工作流程
        • 1. 用户输入命令
        • 2. 解析器拆分指令
        • 3. 扩展器处理动态内容
          • 变量替换
          • 通配符扩展
          • 命令替换
        • 4. 执行器运行命令
        • 5. 内核处理系统调用
        • 6. 返回结果
        • 关键组件协作
    • 三、Shell家族与使用技巧
      • 3.1 主流Shell对比
      • 3.2 实用技巧
        • 导航类:
        • 编辑类:
        • 历史命令:
    • 四、Shell核心原理深入
      • 4.1 命令执行四阶段
      • 4.2 重定向原理
    • 总结

Linux中Shell的运行原理

github地址

有梦想的电信狗

前言

Shell作为用户与Linux内核交互的桥梁,是系统管理员和开发者的核心工具。本文深入解析Shell的核心原理与高效使用技巧,帮助读者掌握这一重要工具。

对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。

shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户

一、Linux内核与Shell的关系

1.1 操作系统核心

Linux内核作为操作系统的核心引擎,承担着以下关键职责:

  • 硬件抽象:通过设备驱动管理硬件资源
  • 进程管理:使用CFS调度器进行任务调度(Linux 2.6.23+)
  • 内存管理:采用伙伴系统分配算法
  • 文件系统:支持ext4、XFS、Btrfs等多种文件系统
  • 网络协议栈:实现TCP/IP协议族

1.2 用户与内核的隔离

我们所有的指令最终都要在OS内部运行,但用户和操作系统内核往往是隔离的。

  • 一方面直接使用OS内核的难度比较高,绝大多数用户无法做到直接和OS打交道。
  • 另一方面:直接操作内核可能导致系统崩溃、权限绕过等风险。

windows中的图形化界面和Linux中的命令行解释器(shell)充当了一个安全代理的角色。

shell的作用有以下两3个:

  1. 将使用者的命令翻译给核心(kernel)处理。
  2. 核心的处理结果翻译给使用者
  3. 对于用户错误的、权限之外的危险行为,直接在shell层面报错,防止用户的行为破坏操作系统。

二、Shell的演进与核心机制

2.1 发展历程

1971 Thompson Shell
1979 Bourne Shell
1989 Bash
2005 Fish

2.2 核心功能解析

  1. 命令解析流程
    词法分析(识别命令、参数)
    语法解析(处理管道、重定向)
    语义分析(变量扩展)

  2. 进程创建机制

shell其实是操作系统之上的一种软件,我们在shell中输入的所有命令,都是shell命令行解释器的子进程,因此shell有自己的进程创建机制。

pid_t pid = fork();  // 创建子进程
if(pid == 0){
    execvp(command, args);  // 替换进程映像
} else {
    waitpid(pid, &status, 0);  // 等待子进程
}
  1. 环境管理
    • 通过PATH环境变量查找可执行文件
    • 使用alias创建命令别名

2.3 shell的工作流程

shell的工作流程如下图所示。

用户 Shell 解析器 扩展器 执行器 内核 输入命令 拆分指令 变量替换 创建进程 系统调用 返回结果 用户 Shell 解析器 扩展器 执行器 内核

对照着图片来理解一下流程。

1. 用户输入命令
  • 用户通过终端输入命令行指令(例如 ls -l *.txt)。
  • Shell 进入读取-解析-执行循环(REPL)
2. 解析器拆分指令
# 示例输入命令
ls -l $HOME/*.txt
  • Shell 将原始命令传递给 解析器(Parser)
    • 按空格、引号等拆分出命令主体 ls、选项 -l 和未处理部分 $HOME/*.txt
    • 识别特殊符号(如管道 |、重定向 >
3. 扩展器处理动态内容
变量替换
  • $HOME 替换为环境变量值(如 /home/user
通配符扩展
  • 展开 *.txt 为匹配的文件名(如 file1.txt file2.txt
命令替换
  • 处理 `date`$(date) 为子命令输出结果
4. 执行器运行命令
# 扩展后的最终命令可能是:
ls -l /home/user/file1.txt /home/user/file2.txt
  • **执行器(Executor)**操作:
    1. 调用 fork() 创建子进程
    2. 在子进程中通过 exec() 加载 /bin/ls 程序
    3. 父进程通过 wait() 等待子进程结束
5. 内核处理系统调用
  • 子进程运行时涉及的系统调用:
    系统调用类型示例作用
    文件操作open(), read()访问文件系统
    进程控制fork(), exec()管理进程生命周期
    内存管理brk(), mmap()分配内存空间
6. 返回结果
  • 内核将以下结果返回给用户:
    • 标准输出(stdout):命令的正常输出
    • 标准错误(stderr):错误信息
    • 退出状态码(通过 $? 查看)

关键组件协作
组件角色说明
Shell用户与操作系统的桥梁,协调整个执行流程
解析器分析命令语法结构,拆分为可执行单元
扩展器处理变量、通配符、算术扩展等动态内容
执行器管理进程创建、信号处理和资源分配
内核实际操作硬件资源(CPU调度、内存分配、设备驱动等)的核心层

三、Shell家族与使用技巧

3.1 主流Shell对比

特性BashZshFish
自动补全★★★★★★★★★★★★★
配置复杂度中等
启动速度较慢中等

3.2 实用技巧

  1. 查看当前Linux系统中的可用Shell
cat /etc/shells

在这里插入图片描述2. 高效快捷键

导航类:
快捷键功能描述
Ctrl + A移动到行首
Ctrl + E移动到行尾
Alt + B向后跳一个单词
Alt + F向前跳一个单词
编辑类:
快捷键功能描述
Ctrl + U删除到行首
Ctrl + K删除到行尾
Ctrl + W删除前一个单词
Ctrl + Y粘贴上次删除内容
Ctrl + C终止当前程序
Tab补全命令
Ctrl + d退出当前登陆
历史命令:
快捷键功能描述
Ctrl + R反向搜索历史
Ctrl + P上一条命令(同↑)
Ctrl + N下一条命令(同↓)
!!执行上一条命令

四、Shell核心原理深入

4.1 命令执行四阶段

  1. 读取:通过readline库获取输入
  2. 解析:识别管道、重定向符号
  3. 扩展:处理$VAR变量替换
  4. 执行:区分内置命令与外部程序

4.2 重定向原理

文件描述符映射表:

FD用途默认指向
0标准输入键盘
1标准输出终端

示例解析:

cmd > file 2>&1  # 将标准输出和错误都重定向到文件

总结

Shell作为Linux系统的核心接口,其核心价值体现在

  1. 安全隔离用户与内核
  2. 提供灵活的命令扩展机制
  3. 支持自动化脚本开发(如shell脚本)

以上就是本文的所有内容了,如果觉得文章写的不错,还请留下免费的赞和收藏,也欢迎各位大佬在评论区交流

分享到此结束啦
一键三连,好运连连!

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

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

相关文章

数据结构篇——二叉树的存储与遍历

一、引入 书接上文,文于此续。上文我们学到了树的存储结构,那么今天,我们来学习下几种特殊的二叉树以及关于它的各种遍历,让我们一起加油吧。 二、特殊的二叉树 二叉树的特殊形式这里介绍3种,其中需要着重记忆的有…

分而治之:用于 RGB-T 显著目标检测的 Confluent Triple-Flow 网络(问题)

摘要 问题一:RGB-thermal显著对象检测这是什么? RGB图像是可见光的三通道图像,而thermal是热红外图像,通常为单通道,记录物体的热辐射信息。结合RGB和thermal两种模态的数据,可以利用两者的互补信息&…

求职招聘网站源码,找工作招工系统,支持H5和各种小程序

招聘找活招工平台系统源码 招聘求职找工作软件 发布信息积分充值招聘系统,里面带纤细教程 功能介绍: 招工小程序主要针对工地招工工人找工作,工地可以发布招工信息,工人可以发布找活信息,招工信息可以置顶,置顶需要积分,积分可以通过签到、分享邀请好友、充值获取,后…

企业微信群聊机器人开发

拿到机器人hook 机器人开发文档 https://developer.work.weixin.qq.com/document/path/91770

基于Python的tkinter开发的一个工具,解析图片文件名并将数据自动化导出为Excel文件

文章目录 一、开发背景与业务价值二、系统架构设计1. 分层架构图解2. 核心类结构3. 文件解析流程 三、关键技术实现详解1. 高性能文件名解析引擎2. 可视化数据展示3. 智能Excel导出模块 四、完整代码五、行业应用展望 一、开发背景与业务价值 在零售行业会员管理场景中&#x…

Flutter_学习记录_状态管理之GetX

1. 状态管理、Flutter Getx介绍 1.1 状态管理 通俗的讲:当我们想在多个页面(组件/Widget)之间共享状态(数据),或者一个页面(组件/Widget)中的多个子组件之间共享状态(数…

【网络】数据流(Data Workflow)Routes(路由)、Controllers(控制器)、Models(模型) 和 Middleware(中间件)

在图片中,数据流(Data Workflow)描述了应用程序中数据的流动过程,涉及 Routes(路由)、Controllers(控制器)、Models(模型) 和 Middleware(中间件&…

Git下载安装(保姆教程)

目录 1、Git下载 2、Git安装(windows版) (1)启动安装程序 (2)阅读许可协议 (3)选择安装路径 (4)选择组件 (5)选择开始菜单文件夹…

Blender-MCP服务源码2-依赖分析

Blender-MCP服务源码2-依赖分析 有个大佬做了一个Blender-MCP源码,第一次提交代码是【2025年3月7号】今天是【2025年月15日】也就是刚过去一周的时间,所以想从0开始学习这个代码,了解一下大佬们的开发思路 1-核心知识点 from mcp.server.fas…

LabVIEW压比调节器动态试验台

本案介绍了一种基于LabVIEW的压比调节器动态试验台的设计,通过实用的LabVIEW图形化编程语言,优化了数据采集与处理的整个流程。案例通过实际应用展示了设计的专业性与高效性,以及如何通过系统化的方法实现精确的动态测试和结果分析。 ​ 项目…

2025-03-17 Unity 网络基础1——网络基本概念

文章目录 1 网络1.1 局域网1.2 以太网1.3 城域网1.4 广域网1.5 互联网(因特网)1.6 万维网1.7 小结 2 IP 地址2.1 IP 地址2.2 端口号2.3 Mac 地址2.4 小结 3 客户端与服务端3.1 客户端3.2 服务端3.3 网络游戏中的客户端与服务端 1 网络 ​ 在没有网络之前…

springboot441-基于SpringBoot的校园自助交易系统(源码+数据库+纯前后端分离+部署讲解等)

💕💕作者: 爱笑学姐 💕💕个人简介:十年Java,Python美女程序员一枚,精通计算机专业前后端各类框架。 💕💕各类成品Java毕设 。javaweb,ssm&#xf…

浅谈数据分析及数据思维

目录 一、数据分析及数据分析思维?1.1 数据分析的本质1.2 数据分析思维的本质1.2.1 拥有数据思维的具体表现1.2.2 如何培养自己的数据思维1.2.2.1 书籍1.2.2.2 借助工具1.2.2.3 刻意练习 二、数据分析的价值及必备能力?2.1 数据分析的价值2.1.1 现状分析…

自定义uniapp组件,以picker组件为例

编写目的 本文说明基于vue3定义uniapp组件的关键点: 1、一般定义在components文件夹创建组件,组件与页面已经没有明确的语法格式区别,所以可以与页面的语法保持一致 ; 2、组件定义后使用该组件的页面不需要引用组件即可使用&am…

【操作系统安全】任务4:Windows 系统网络安全实践里常用 DOS 命令

目录 一、引言 二、网络信息收集类命令 2.1 ipconfig 命令 2.1.1 功能概述 2.1.2 实例与代码 2.2 ping 命令 2.2.1 功能概述 2.2.2 实例与代码 2.3 tracert 命令 2.3.1 功能概述 2.3.2 实例与代码 三、网络连接与端口管理类命令 3.1 netstat 命令 3.1.1 功能概述…

【从零开始学习计算机科学】信息安全(二)物理安全

【从零开始学习计算机科学】信息安全(二)物理安全 物理安全物理安全的涵义物理安全威胁常见物理安全问题物理安全需求规划物理安全需求设备安全防盗和防毁机房门禁系统机房入侵检测和报警系统防电磁泄漏防窃听设备管理设备维护设备的处置和重复利用设备的转移电源安全电源调整…

LeetCode hot 100—验证二叉搜索树

题目 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 示例 1&#…

MongoDB 可观测性最佳实践

MongoDB 介绍 MongoDB 是一个高性能、开源的 NoSQL 数据库,它采用灵活的文档数据模型,非常适合处理大规模的分布式数据。MongoDB 的文档存储方式使得数据结构可以随需求变化而变化,提供了极高的灵活性。它支持丰富的查询语言,允许…

论文阅读笔记——LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

LoRA 论文 传统全面微调&#xff0c;对每个任务学习的参数与原始模型相同&#xff1a; m a x Φ ∑ ( x , y ) ∈ Z ∑ t 1 ∣ y ∣ l o g ( P Φ ( y t ∣ x , y < t ) ) 式(1) max_{\Phi}\sum_{(x,y)\in Z}\sum^{|y|}_{t1}log(P_{\Phi}(y_t|x,y<t)) \qquad \text{式(…

UE5中 Character、PlayerController、PlayerState、GameMode和GameState核心类之间的联动和分工·

1. GameMode 与 GameState 关系描述 GameMode&#xff1a;定义游戏规则和逻辑&#xff0c;控制游戏的开始、进行和结束。GameState&#xff1a;存储和同步全局游戏状态&#xff0c;如得分、时间、胜利条件等。 联动方式 GameMode初始化GameState&#xff1a;GameMode在游戏…