网站建设方案选公司/做微商如何引流推广怎么找客源

网站建设方案选公司,做微商如何引流推广怎么找客源,做网站也分内存大小的吗,社会新闻热点事件2022浅谈Linux中的Shell及其原理 Linux中Shell的运行原理github地址前言一、Linux内核与Shell的关系1.1 操作系统核心1.2 用户与内核的隔离 二、Shell的演进与核心机制2.1 发展历程2.2 核心功能解析2.3 shell的工作流程1. 用户输入命令2. 解析器拆分指令3. 扩展器处理动态内容变量替…

浅谈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.mzph.cn/news/898393.shtml

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

相关文章

可视化图解算法:链表中倒数(最后)k个结点

1. 题目 描述 输入一个长度为 n 的链表,设链表中的元素的值为ai ,返回该链表中倒数第k个节点。 如果该链表长度小于k,请返回一个长度为 0 的链表。 数据范围:0≤n≤105,0 ≤ai≤109,0 ≤k≤109 要求&am…

在线教育网站项目第四步:deepseek骗我, WSL2不能创建两个独立的Ubuntu,但我们能实现实例互访及外部访问

一、说明 上一章折腾了半天,搞出不少问题,今天我们在deepseek的帮助下,完成多个独立ubuntu24.04实例的安装,并完成固定ip,实践证明,deepseek不靠谱,浪费我2个小时时间,我们将在下面实…

Spring Cloud之负载均衡之LoadBalance

目录 负载均衡 问题 步骤 现象 什么是负载均衡? 负载均衡的一些实现 服务端负载均衡 客户端负载均衡 使用Spring Cloud LoadBalance实现负载均衡 负载均衡策略 ​编辑 ​编辑LoadBalancer原理 服务部署 准备环境和数据 服务构建打包 启动服务 上传J…

数据无忧:自动备份策略全解析

引言 在信息化飞速发展的今天,数据已成为个人、企业乃至国家最为宝贵的资产之一。无论是日常办公文档、科研数据、客户资料,还是个人隐私信息,一旦丢失或损坏,都可能带来不可估量的损失。因此,备份文件作为数据安全的…

Latex2024安装教程(附安装包)Latex2024详细图文安装教程

文章目录 前言一、Latex2024下载二、Texlive 2024安装教程1.准备安装文件2.启动安装程序3.配置安装选项4.开始安装5.安装完成6.TeX Live 2024 安装后确认 三、Texstudio 安装教程1.准备 Texstudio 安装2.启动 Texstudio 安装向导3.选择安装位置4.等待安装完成5.启动 Texstudio6…

C++ 语法之函数和函数指针

在上一章中 C 语法之 指针的一些应用说明-CSDN博客 我们了解了指针变量&#xff0c;int *p;取变量a的地址这些。 那么函数同样也有个地址&#xff0c;直接输出函数名就可以得到地址&#xff0c;如下&#xff1a; #include<iostream> using namespace std; void fun() …

关于“碰一碰发视频”系统的技术开发文档框架

以下是关于“碰一碰发视频”系统的技术开发文档框架&#xff0c;涵盖核心功能、技术选型、开发流程和关键模块设计&#xff0c;帮助您快速搭建一站式解决方案 --- 随着短视频平台的兴起&#xff0c;用户的创作与分享需求日益增长。而如何让视频分享更加便捷、有趣&#xff0c…

基于django+vue的购物商城系统

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.8数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 系统首页 热卖商品 优惠资讯 个人中心 后台登录 管理员功能界面 用户管理 商品分类管理…

Ardunio 连接OLED触摸屏(SSD1106驱动 4针 IIC通信)

一、准备工作 1、硬件 UNO R3 &#xff1a;1套 OLED触摸屏&#xff1a;1套 导线诺干 2、软件 arduino 二、接线 UNO R3OLED5VVCCGNDGNDA5SCLA4SDA 脚位如下图所示&#xff1a; Uno R3脚位图 触摸屏脚位图 查阅显示屏的驱动规格&#xff1a;通常显示屏驱动芯片有SSD1306,SH110…

07. 面向对象高级(2)_设计模式

什么是设计模式 一个问题通常有种解法&#xff0c;其中肯定有一种解法是最优的&#xff0c;这个最优的解法被人总结出来了&#xff0c;称之为设计模式。 设计模式有20多种&#xff0c;对应20多种软件开发中会遇到的问题。 关于设计模式&#xff0c;主要学什么&#xff1f; 解…

计算机操作系统和进程

目录 一. 操作系统 1. 操作系统的概念 2. 操作系统的功能 二. 进程 1. 进程的概念 2. 进程在系统中的管理 3. PBC &#xff08;1&#xff09;pid &#xff08;2&#xff09;内存指针 &#xff08;3&#xff09;文件标识符 4. 资源分配 5. 进程的调度 &#xff08;…

【Matlab GUI】封装matlab GUI为exe文件

注&#xff1a;封装后的exe还是需要有matlab环境才能运行 &#xff08;1&#xff09;安装MCRinstaller.exe文件&#xff0c;在matlab安装目录下的toolbox/compiler/deploy/win64文件夹里 &#xff08;2&#xff09;安装完MCRinstaller.exe&#xff0c;字命令窗口输入&#x…

登山第二十梯:无人机实时自主探索——我是一只小小小鸟

文章目录 一 摘要 二 资源 三 内容 一 摘要 自主探索是无人机 &#xff08;UAV&#xff09; 各种应用的基本问题。最近&#xff0c;基于 LiDAR 的探索因其能够生成大规模环境的高精度点云地图而受到广泛关注。虽然点云本身就为导航提供了信息&#xff0c;但许多现有的勘探方…

JAVA序列化与反序列化URLDNS链CC1链

1、序列化的实现 java序列化的是对象属性的&#xff0c;只有实现了Serializable或者Externalizable接口的类的对象才能被序列化为字节序列。&#xff08;不是则会抛出异常&#xff09;&#xff0c;静态成员变量是属于类的&#xff0c;所以静态成员变量是不能被序列化的&#x…

Android7 Input(一)Android Input服务初始化

本系列博客主要描述Android 7.1系统中输入管理服务InputManagerService的源码分析。 概述 本文主要描述了InputManagerService服务的初始化和启动&#xff0c;在Android7系统上InputManagerService服务的框架如下所示: 注&#xff1a;箭头的方向&#xff0c;并不能真实代表数…

用于 RGB-D 显著目标检测的点感知交互和 CNN 诱导的细化网络(问题)

摘要 问题一&#xff1a;但在对自模态和跨模态的全局长距离依赖关系进行建模方面仍显不足。什么意思&#xff1f; 自模态&#xff08;Intra-modal&#xff09;全局依赖&#xff1a;在同一模态内&#xff0c;长距离像素之间的信息交互对于理解全局背景很重要&#xff0c;但 CN…

html5基于Canvas的经典打砖块游戏开发实践

基于Canvas的经典打砖块游戏开发实践 这里写目录标题 基于Canvas的经典打砖块游戏开发实践项目介绍技术栈核心功能实现1. 游戏初始化2. 游戏对象设计3. 碰撞检测系统4. 动画系统5. 用户界面设计 性能优化1. 渲染优化2. 内存管理 项目亮点技术难点突破项目总结 项目介绍 在这个…

MySQL外键约束下的索引删除难题:从报错到完美解决的实战指南

&#x1f6a8; MySQL外键约束下的索引删除难题&#xff1a;从报错到完美解决的实战指南 &#x1f525; 问题背景&#xff1a;一个看似简单的删除操作引发的连环坑 场景复现&#xff1a;某日接到需求&#xff0c;需删除 invite_codes 表中的冗余索引 FKnqn27fyjlgio5y60eieohi0…

Rust嵌入式开发环境搭建指南(基于Stm32+Vscode)

Rust嵌入式开发环境搭建指南(基于Stm32+Vscode) 部分目录如下所示: 目录 简介Rust开发环境安装STM32开发工具链安装VSCode环境配置VSCode插件安装调试器配置项目创建与配置常见问题与解决方案简介 本文档旨在指导开发者如何搭建基于Rust语言的STM32嵌入式开发环境。相比传…

动态规划合集——动态规划基本原理

动态规划合集——动态规划基本原理 动态规划原理1258&#xff1a;【例9.2】数字金字塔 动态规划原理深度优先搜索记忆化搜索动态规划&#xff08;顺推&#xff09;动态规划原理题解分析 滚动数组优化动态规划&#xff08;逆推&#xff09; 动态规划原理 从数塔问题出发理解动态…