实现一个最简单的shell

        shell本身也是个应用程序,利用C库或者系统调用执行相应的操作。考虑最简单的场景,读取用户输入,并执行指令,即可实现一个最简单的shell。

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

#define BUFF_LEN 128

int main()
{
	char buff[BUFF_LEN] = {0};
	while (1) {
		printf("yihelscBash>");
		fflush(stdout);

		fgets(buff, BUFF_LEN, stdin);
		buff[strlen(buff) - 1] = 0;

		system(buff);
	}
}

        简单的几行代码即可获取stdin的输入,然后直接调用system执行。在UBUNTU环境,实际生效为shell还需要将这个shell路径加入到/etc/shells。

        然后切换shell指令,输入密码即可。

        我们可以从/etc/passwd中看到用户的shell已经修改成功。

        当我们再次通过ssh登陆到到用户时,就会进入我们自己的shell。

       这样我们最简单的shell就开发并替换完成了。请注意,这个shell虽然可以执行很多输入的命令,但是距离一个可以实用的,让系统各个功能运行起来的成熟shell还差很远,至少当前阻塞性读取stdin的机制就会导致其他应用或系统部调用shell去执行命令时直接卡住。

       最后提醒大家测试完成后,及时换回到原来的shell。另外,测试shell程序时要创建一个测试用户,修改测试用户的shell,避免因为shell写的有问题,导致用户再也无法回到原来的shell等严重问题。

gitcode链接:

GitCode - 全球开发者的开源社区,开源代码托管平台

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值