Linux : 实现一个简易的 shell( mini_shell )

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

Shell介绍:

  • Linux系统提供给用户的最重要的系统程序是Shell命令语言解释程序。它不属于内核部分,而是在核心之外,是操作系统的外壳程序,以用户态方式运行。其基本功能是解释并执行用户打入的各种命令,实现用户与Linux核心的接口。系统初启后,核心为每个终端用户建立一个进程去执行Shell解释程序。
  • 从技术角度,Shel的最简单定义:命令行解释器(command Interpreter)主要包含:
  • 将使用者的命令翻译给核心(kernel)处理。
  • 同时,将核心的处理结果翻译给使用者

shell的执行过程:
1> 读取用户由键盘输入的命令行
2> 分析命令,以命令名作为文件名,并将其它参数改造为系统调用 execve( ) 内部处理所要求的形式
3> 将读取到的字符串按照空格分成多个字符串,放进 myargv[] 中,并在最后加一个 NULL
4> 终端进程调用 fork( ) 建立一个子进程
5> 终端进程本身用系统调用 waitpid( ) 来等待子进程完成(如果是后台命令,则不等待)。当子进程运行时调用 execve() ,子进程根据文件名(即命令名)到目录中查找有关文件(这是命令解释程序构成的文件),将它调入内存,执行这个程序(解释这条命令)

shell 进行命令行解释
功能 :1.把用户是输入转给操作系统 2.把操作系统的结果转给用户
命令行提示符:
原来的 —> [admin@localhost mini_shell]$
更改后的 —> [zcc@localhost zccccc]#
获取主机名字:

#include <stdio.h>
#include <stdlib.h>

#define MAX 1024   

int main()
{
   
    
       char cmd[MAX];           //cmd缓冲区名字
       printf("[zcc@localhost zccccc]# ");    
       //更改之后的主机名,目的是为了跟原来的命令行区分开来; printf 不带“\n ”,表示消息不会立即显示,会被放在输出
Linux操作系统-shell程序设计最全版本(含运行截图) Shell程序设计 (一)Shell简介 主要功能:命令解释程序/作为一种高级程序实际语言。 (1)查看当前系统支持的Shell 主文件夹——其他位置——计算机——etc——passwd cat /etc/shells head /etc/shells more /etc/shells 例如tcsh --version查看显示的Shell版本 (2)Shell脚本的建立与执行 脚本的建立 vi编辑器或cat 利用vi编辑器进行录入 vi 脚本名 录入 ls -l c. 阅读详情

相关推荐

编写小型shellcode(writing small shellcode)

这本书介绍了如何编写小型的windows shellcode

Shell编程教程

Shell编程教程

s17856147699的博客 6528

【手把手教你制作一个简易版的shell

自己亲手做一个简易版本的shell命令行解释器,终于更好的理解了进程替换和环境变量!!

m0_68872612的博客 1374

Linux】教你实现一个简单的、属于自己的Shell

我们在Linux中使用的shell, 一般有两个 bash 和 zsh. 我们可以通过shell, 执行各种命令. 而本篇文章的主要内容, 就是实现一个简易shell

七月.cc的博客 7278

制作一个微型shell

1 /* 模拟shell一个咱们自己的微型myshell 2 * 功能:myshell&amp;amp;amp;gt; ls 3 * 能够执行各种命令 4 * 5 */ 6 #include &amp;amp;amp;lt;stdio.h&amp;amp;amp;gt; 7 #include &amp;amp;amp;lt;unistd.h&amp;amp;amp;gt; 8

Ferlan的博客 689

Linux】模拟实现一个 mini_shell

在学习了进程等待和程序替换及其相关函数之后,就可以实现一个我们自己简单mini_shell了。 shell及其运行原理: https://blog.csdn.net/Miss_Monster/article/details/86370076   shell工作的基本过程 1.读取用户由键盘输入的命令行。 2.分析命令,以命令名作为文件名,并将其它参数改造为系统调用execve( )内部...

Miss_Monster的博客 553

Linux】进程程序替换 &&简易mini_shell实现

进程替换

Bitdancing的专栏 961

Linux下面开发一个mini版的shell

整体思路 打印一个提示符,让用户输入一个指令。 解析输入的指令,找到对应的可执行程序。 创建子进程,子进程程序替换,来加载可执行程序。 父进程进行进程等待,等待子进程结束。 子进程结束,父进程从wait中返回,循环执行1. ...

赵铁蛋的博客 561

从exec到Shell:深度解析Linux进程等待,程序替换与自主Shell实现

本文深入解析Linux进程管理中exec系统调用、程序替换机制及进程等待的原理,通过分析进程创建、替换和回收的全流程,揭示Shell环境下的命令执行本质。文章将结合代码实例演示如何利用fork-exec-wait技术链实现简易Shell

2402_84532723的博客 1638

如何识别与防范轻量级后门:Mini Shell和p0wny-shell实现原理与安全防护

轻量级Web后门是网络攻击中常见的隐蔽手段,其中**Mini Shell**和**p0wny-shell**作为两款典型的PHP后门工具,凭借体积小、功能灵活的特点被广泛滥用。本文将深入解析这两款后门的实现原理,帮助新手用户快速识别潜在威胁并采取有效防护措施。 ## 轻量级后门的核心特征与危害 轻量级后门通常具有以下特点:体积小于10KB、免杀能力强、功能模块化,能够绕过基础安全检测工具。它们

gitblog_00321的博客 634

实现mini_shell

通过Linux实现一个mini_shell 进程控制是学习系统的一个重要知识点,涵盖有进程创建,进程终止,进程等待,程序替换这些方面。在学完这些知识后,想通过这个mini_shell将之前学过知识做一个小小的综合。 思路: 获取命令行 解析命令行 建立一个子进程 替换子进程 父进程等待子进程退出 首先第一步获取命令行,想想之前学过获取数据的方法,有scanf(),fgets(); //scan...

TROYE_Sn的博客 480

linux程序替换函数和编写一个mini shell

int execl(const char *path, const char *arg, ...); int execlp(const char *file, const char *arg, ...); int execle(const char *path, const char *arg, ..., char * const envp[]); ...

qq_43205670的博客 227

Linux进程控制与编程实战:从fork到mini-shell的完整指南

进程创建:掌握fork()的一次调用两次返回机制进程终止:理解exit()和_exit()的区别进程等待:熟练使用wait/waitpid回收子进程程序替换:掌握exec函数族的使用方法实战能力:能够实现一个功能完整的shell程序。

2301_76657443的博客 994

LInux】进程程序替换与shell实现:从fork到exec的完整闭环

本文深入讲解了Linux进程程序替换技术及其在shell实现中的应用。主要内容包括: 进程程序替换的必要性:fork创建的子进程只能执行父进程代码副本,而exec系列函数允许加载全新程序。 替换原理:详细分析了exec前后进程地址空间的变化,包括代码段、数据段等内存区域的替换过程。 exec函数族详解:介绍了6个exec函数的命名规律和使用场景,包括参数传递方式、PATH搜索和环境变量设置等特性。 实际应用示例:通过代码演示了execl和execlp的基本使用方法,展示了如何将当前进程替换为其他程序。 技术

半截诗的博客~ 1230

Linux下模拟实现自己的mini_shell,支持简单命令、重定向、管道。

一、shell是什么。 Linux是一款操作系统,我们称之为核心(Kernel),但我们一般用户不能直接使用Kernel,而是通过Kernel的外壳程序,也就是shell,来与Kernel沟通,从技术角度讲,shell的最简单定义就是命令行解释器。 下面来简单介绍一下实现思路,首先使用fork系统调用,创建子进程,在子进程中进行程序替换,使用exec系列函数(主要使用ecexvp函数)实现,让后让...

aixintianshideshouhu的博客 1037

Linux —— 进程控制 - mini shell

目录5.自主Shell命令行解释器 以下是mini shell的代码实现,仅供参考:6. 总结到此为止,代码结构搞定!!将上面以 .c 结尾的文件,重命名为 .cc 文件。Makefile文件做以下调整:运行结果:运行结果:但是此时打印出来的结果就不对了,所以要获取用户输入的命令。此时,在运行程序的话,就会停下来等待用户的输入:从运行的结果来看,会多一个空行,原因如下:再次,make:我们在写打印的时候是没有加 "\n"的,但是从上面的输出结果却自动换行了,是自动加上了 "\n" 的。这个是因为我们自己在输

2302_80045891的博客 402

LinuxMini-shell实现(C/C++)

问题描述: 使用C语言在Linux实现一个mini-shell,该shell从是stdin里面读取命令,然后执行该命令 输入: 输入包含单行多命令,命令之间使用管道符('|')连接,可以使用输入输出重定向功能, 输入的BNF规范 : line ::= command ("|" command)* [redirection] redirection :

Openking的专栏 3561

Linuxshell的认识和模拟实现

shell 模拟实现shell

xiaomage1213888的博客 992

模拟Linuxshell功能,实现简易minishell

什么是shell Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它接收用户命令,然后调用相应的应用程序。 编写思路 捕捉键盘输入的信息。 解析输入信息:将键盘的输入信息解析成 命令名称+运行参数 创建子进程:让子进程运行对应名称的程序。(程序替换) 等待子进程退出。 代码实现 #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string

qq_49959794的博客 336
上一篇: Linux:进程程序替换
下一篇: Linux 进程间通信——信号(阻塞信号、捕捉信号、可重⼊函数、SIGCHID信号)
TheWindRisesll
博客等级 码龄8年 35粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值