【Linux】Linux系统编程——Linux命令解析器

news2024/11/15 23:36:02

【Linux】Linux系统编程——Linux命令解析器

什么是Linux 命令解析器?

Linux 命令解析器,通常被称为 shell,是 Linux 操作系统中的一个关键组件。它充当用户和系统内核之间的接口,允许用户通过输入命令来控制和管理操作系统和应用程序。

命令解析器的作用与基本原理

Linux系统结构简介

在这里插入图片描述

这张图是 Linux 系统结构的一个简化表示,展示了不同组成部分之间的层次关系。从内到外,各层次代表了系统的不同部分:

  1. 内核:位于最中心的是 Linux 系统的核心。内核是操作系统的心脏,负责管理硬件资源,以及进程、内存、文件系统的控制等。

  2. 内核空间:紧接着内核的是内核空间,这是指那些直接运行在内核权限下的程序或内核模块的空间。在这个层次上,代码能够直接访问硬件和内存等资源。

  3. shell层:离内核更远一些的是 shell 层。这个层次代表了系统中的命令解析器,也就是前面解释过的 shell,它为用户提供了一个与系统交互的界面。

  4. 应用层:最外层是应用层,代表运行在用户空间的各种应用程序。这些程序通过系统调用与内核进行交云,并通过 shell 与用户进行交互。

  5. 用户:在最外层,表示操作系统的用户,他们通过应用程序和 shell 与系统互动。

整个图表示了操作系统的“圈层模型”,其中最内层是最底层的系统组件,负责直接与硬件交互,而向外层逐渐过渡到用户空间和应用程序。这种模型有助于保护系统的安全,因为它限制了对核心系统组件的直接访问。只有经过适当的权限和系统调用,外层的应用程序和用户才能与内核层的组件交互。

作用

  1. 命令解释器:用户通过 shell 输入命令,shell 解释这些命令并将其转换为内核能理解的指令。例如,当用户输入文件管理命令(如 ls, cp, mv)时,shell 解释这些命令并将它们传递给内核执行。

  2. 程序启动器:用户可以通过 shell 启动应用程序。用户输入程序名后,shell 会在系统中查找这个程序并启动它。

  3. 用户界面:shell 提供了一个用户与操作系统交互的界面,既可以是命令行界面(CLI),也可以是图形界面(通过脚本实现)。

  4. 脚本执行:shell 脚本是一系列的命令集合,它们被保存在文件中以供以后执行。shell 可以执行这些脚本,使得自动化复杂的任务变得可能。

  5. 环境管理:shell 管理着用户的工作环境,包括环境变量、当前工作目录、用户权限等。

  6. 输入/输出重定向:shell 允许用户将命令的输出重定向到文件中,或者从文件中读取输入。

基本原理

在这里插入图片描述

shell就是用户与系统内核之间的一个桥梁,基本原理是用户在终端输入命令, 由shell命令解析器对命令进行解析(按照$PATH环境变量搜索命令), 解析成内核能够识别的指令, 然后由内核执行命令, 最后由终端显示命令执行的结果给用户。

注意:shell在寻找命令的时候是按照$PATH环境变量去查找的,如果找到了就执行对应的命令,若找不到就报错, 执行echo $PATH可以查看PATH环境变量的值.

以下是 shell 工作的基本步骤和机制:

  1. 命令输入

    • 用户在命令行界面输入命令。
    • 这些命令可以是简单的单个命令、一连串的命令(使用管道 | 连接)、或者是复杂的脚本。
  2. 命令解析

    • Shell 读取输入的命令并进行解析。
    • 它会检查语法并将命令分解为基本的组成部分,如命令名、选项和参数。
  3. 变量和文件名展开

    • Shell 会展开命令行中的变量到它们的值。
    • 它还会对文件名进行通配符匹配,如将 *.txt 展开为当前目录下所有以 .txt 结尾的文件名。
  4. 命令执行

    • 解析后的命令被传递给操作系统。
    • Shell 会查找命令的可执行文件,并启动一个新的进程来运行该命令。
    • 如果命令是内建命令(shell 内部提供的命令,如 cd),shell 会直接执行而不是启动新的进程。
  5. 输入/输出重定向

    • 在执行命令之前,shell 可以根据需要重新分配标准输入、输出和错误流。
    • 用户可以使用重定向操作符,如 ><>>,来指定输出应该被写入到文件或从文件读取输入。
  6. 管道

    • Shell 允许使用管道将多个命令链接起来。
    • 管道操作符 | 用于将一个命令的输出作为下一个命令的输入。
  7. 命令执行反馈

    • 一旦命令执行完成,shell 会返回状态码给用户。
    • 状态码通常表示命令是否成功执行(通常用 0 表示成功,非 0 值表示错误或异常)。
  8. 控制流

    • Shell 脚本可以包含控制流结构,比如循环(for, while)、条件判断(if, case)和函数。
    • 这些结构控制脚本的执行流程。
  9. 信号处理

    • Shell 能够处理来自操作系统的信号,比如用户按下 Ctrl+C 发出的中断信号。
    • 它可以根据信号执行特定的操作,例如终止当前运行的命令。
  10. 环境管理

    • Shell 管理着一个环境,这个环境包括了定义了用户工作环境的环境变量。
    • 环境变量可以被脚本和程序用来获取有关系统的信息。

常用的命令解析器

常用的命令解析器主要有以下几种:

  1. Bash:Bash是Linux上最常用的命令解析器,它是Bourne-Again SHell的缩写。支持命令行历史记录、自动补全、别名、管道等。

  2. Bourne Shell:Bourne Shell是Linux系统默认的shell,它是最早的一种shell,也是最基础的一种。在Linux系统中,当我们输入用户名和密码登陆之后,我们就开始执行一个shell解释器程序,通常是/bin/bash,当然也可以是别的,比如/bin/sh。

  3. C Shell (csh):C Shell是另一种常用的Unix shell,它是由Bill Joy在Bourne Shell的基础上开发的,提供了一些Bourne Shell没有的特性,如命令补全、历史命令、作业控制等。

  4. Korn Shell (ksh):Korn Shell是在Bourne Shell的基础上发展起来的,它的设计目标是提供Bourne Shell的所有功能,并增加一些新的特性,如命令补全、历史命令、作业控制等。它是一种非常流行的Unix shell,广泛应用于各种Unix系统中。

  5. Tcsh:Tcsh是在Korn Shell的基础上发展起来的,它的设计目标是提供Bourne Shell和Korn Shell的所有功能,并增加一些新的特性,如命令补全、历史命令、作业控制等。它是一种非常流行的Unix shell,广泛应用于各种Unix系统中。

  6. Windows PowerShell:Windows PowerShell是微软的.NET Framework技术的Windows NT系统中的一种命令解析器,它提供了强大的命令行操作功能,支持.NET Framework技术,可以方便地进行脚本编程[3]。

    在这里插入图片描述

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

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

相关文章

【Spring Cloud】关于Nacos配置管理的详解介绍

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Spring Cloud》。&#x1f3af;&#x1f3af; &am…

Java面试汇总——redis篇

1、什么是缓存穿透 ? 怎么解决 ? 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存就形同虚设&#xff08;只有数据库查到了&#xff0c;才会让redis缓存&#xff0c;但现在的问题是查不到&#xff09;&#xff0c;会频繁的去访问数据库。 解决…

关键字:package关键字

在 Java 中&#xff0c;package关键字用于组织和管理类文件。它将类文件分组到不同的包中&#xff0c;以提供更好的代码组织和可读性。 以下是package关键字的用法&#xff1a; 1.package语句&#xff1a;在 Java 源代码的开头使用package关键字来声明当前类所属的包。例如&a…

基于yolov5的PCB板缺陷检测(附有详细步骤通俗易懂版)

PCB板缺陷检测 模型训练 在初学的时候&#xff0c;可能不太了解到底模型训练是个什么流程&#xff0c;到底是什么意思。其实也很简单&#xff0c;就是我们用一个框架&#xff08;如pytorch&#xff0c;tensorflow等&#xff09;通过一定的算法如yolov5&#xff0c;对一定的数…

Python笔记07-异常、模块和包

文章目录 异常及捕获方法python模块python包安装第三方包 异常及捕获方法 当检测到一个错误时&#xff0c;Python解释器就无法继续执行了&#xff0c;反而出现了一些错误的提示&#xff0c;这就是所谓的“异常”, 也就是我们常说的BUG 例如&#xff1a;以r方式打开一个不存在的…

有没有一个完美的葡萄酒饮用温度呢?

我们很多人都有一个简单的冷藏葡萄酒的方法&#xff0c;把白葡萄酒扔进冰箱&#xff0c;在室温下饮用红葡萄酒。虽然这很容易&#xff0c;但会导致红葡萄酒上桌时温度过高&#xff0c;白葡萄酒上桌时温度过低。为了帮助你从你的葡萄酒收藏中获得最长的寿命、香气和风味&#xf…

前端如何结合数据库查看本地头像文件,配置静态资源

由于oss过期了&#xff0c;项目中又需要一个上传头像功能&#xff0c;于是研究了一下上传文件至本地&#xff0c;用java将文件存储到本地的代码好写&#xff0c;但是如何利用前端Vue把我难住了&#xff0c;因为之前存在OSS服务器直接查看就可以了&#xff0c;于是记录本文。 后…

集合框架 Map的常见使用及循环的五种方式

目录 一、Map常见方法使用二、Map循环的五种循环方式方式 一、Map常见方法使用 Java的集合框架中的Map接口表示一组键值对&#xff0c;并提供了各种方法来操作这些键值对。以下是Map接口中常见的方法&#xff1a; 代码示例如下&#xff1a; Testpublic void HashMapTest() {M…

为什么大型服务器要用 Linux 系统?

为什么大型服务器要用 Linux 系统&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Linux的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff…

基于JAVA+SpringBoot的咖啡商城

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着互联网的普及和发…

JavaWeb实验报告

JavaWeb实验报告 JavaWeb实验报告 2024 年 1 月 7 日 课程名称&#xff1a; JavaWeb 实验名称&#xff1a; 期末作业 班级&#xff1a; 姓名 同组人&#xff1a; 指导教师评定&#xff…

【一文搞定】Linux、Mac、Windows安装Docker与配置教程!

【一文搞定】Linux、Mac、Windows安装Docker与配置教程&#xff01; 文章目录 【一文搞定】Linux、Mac、Windows安装Docker与配置教程&#xff01;一、Windows 安装1.1 安装与启用 Hyper-V1.2 安装 WSL1.3 Docker Desktop 官方下载1.4 安装Docker Desktop 二、MacOS 安装2.1 Do…

已解决 | Go Error: redeclared as imported package name 问题

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…

杨中科 ASP.NET Core前后端分离开发

一、 前后端分离 1、传统MVC开发模式: 前后端的代码被放到同一个项目中&#xff0c;前端人员负责编写页面的模板&#xff0c;而后端开发人员负责编写控制器和模型的代码并且“套模板”。 缺点: 互相依赖&#xff0c;耦合性强&#xff0c;责任划分不清。 2、主流的“前后端分离…

数据库基本知识2

目录 为保证数据库是可恢复的&#xff0c;登记日志文件时 排他锁 并发操作带来的数据不一致性 数据模型的三要素 数据独立性 为保证数据库是可恢复的&#xff0c;登记日志文件时 为保证数据库是可恢复的&#xff0c;登记日志文件时必须遵循两条原则&#xff1a; 1. 登记的…

Redis Geo:掌握地理空间数据的艺术

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Redis Geo&#xff1a;掌握地理空间数据的艺术 前言Redis Geo基本概念Geo模块的目的工作原理地理坐标系统 GEO的分值1. 经纬度范围2. 二分编码3. Base32编码4. 精度为什么使用Geohash&#xff1f; GEO…

【设计模式】一文理解记住设计模式的原则

目录——阅读所需预计5-10分钟 &#x1f396;️前言&#x1f3af;单一职责原则&#x1f4e3;1. 定义&#x1f49e;2. 定义很抽象&#xff0c;咱继续看&#x1f389;3. 举几个栗子&#x1f49e;4. 以上栗子出现了一个问题&#xff0c;单一职责的划分究竟可以分多细&#x1f449;…

计算机毕业设计-----ssm+mysql实现的JavaWeb酒店管理系统

项目介绍 本项目为基于ssmmysql实现的JavaWeb酒店管理系统; 主要功能包括&#xff1a; 管理员登录,收入统计,客房管理,商品管理,客房预订,住宿登记,财务统计,旅客管理,接待对象管理等功能。 环境需要 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上…

解压方法之一 zip

文章目录 解压方法之一 zip语法参数参考实例仅保存文件名更多信息 解压方法之一 zip … _linux-beginner-zip: Linux zip命令的功能是用于压缩文件&#xff0c;解压命令为unzip。 通过zip命令可以将很多文件打包成.zip格式的压缩包&#xff0c;里面会包含文件的名称、路径、…

#define宏定义的初探

前言&#xff1a; 最基本的#define定义方式 #define可以定义宏&#xff0c;这点相信大家并不陌生&#xff0c;其定义的方式十分简单&#xff0c;给大家随便来一个最简单、最基础的定义方式看看&#xff1a; #include<stdio.h> #define a 3 int main() { printf(&quo…