Linux下简单Shell实现(一)前言

本文详细介绍了如何从《Advanced Programming in the UNIX Environment》(APUE)出发,逐步实现一个基本的Linux Shell TLSH。涵盖了Shell的基本功能实现,包括系统调用执行、管道、输入输出重定向、cd命令等,并提及了Shell的局限性和未来的扩展方向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看完了APUE后,打算写一个简单的Shell练练手,于是就实现了一个最最基本的Shell,下面先看看到底Shell是什么?

Shell是什么

shell,翻译成中文就是壳的意思,在操作系统中就是指包裹着操作系统内核,用来和用户进行交互的那个界面。如下图中所示:
这里写图片描述

也就是说shell实际上是用户和系统内核之间的一条纽带,用于用户和内核之间交互。比如说用户希望改变某个文件的权限,在Linux中需要使用chmod这个系统调用。然而身为一个用户你却不知道如何调用这个命令。通过Shell我们就可以完成这个任务,无论是什么版本的Linux,打开终端后敲入chmod即可完成这个系统调用,而终端中的Shell负责完成用户态向内核态的切换和相关接口的调用。

需要实现什么

1. Linux提供的系统调用

首先我们肯定需要Shell能够执行Linux提供的系统调用,然而这一块儿非常easy的在于大部分的系统调用的可执行文件都由操作系统自带了,所以我们需要做的就是像很多书上写的一样,按下图三步走就可以实现一个最最最最基本的Shell:

这里写图片描述

2. 能再给力点儿吗?

当然我们说了是为了锻炼在APUE里面学到的知识,所以只用fork,exec和wait这几个进程控制调用是无法满足我们的目的的,所以我们还需要实现的有:

  • 管道
  • 输入输出重定向
  • cd命令
  • 基本的alias(我还没写完,程序内部可以使用,没有留出用户接口)
  • 待补充

3. 还能再给力点儿吗?

我们知道在一般的Linux的Shell中,例如bash,其实这本身已经是一门脚本语言了,但是由于本人并没有编译原理和语言解释器方面的知识,所以我们的Shell真的只是一个简单的壳而已,并没有实现语法解释器的功能。如果读者有能力可以自己实现,不过有这份能力,估计也不用看这文章。。。。

实现第一步

起一个炫酷的名字,我写的Shell起名叫TLSH,就这样吧。。。

实现第二步

整一个github用来管理自己的源文件。本文所有源代码均在TLSH可以找到。

具体实现

请阅读《Linux下简单Shell实现(二)基本功能》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值