
正文
linux命令解释器 linux 解析命令行参数
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
bash(shell)命令解释器,Linux界面介绍
Linux bash命令行:bash命令行解释器或者翻译官,命令行输入命令都是由bash解释执行的。
一、命令行
二、查询当前登录的用户:
root
三、查询当前用户主机名:
oldboy
四、查询当前用户所在的路径:
/root
五、切换用户:
#切换到oldboy用户
(#$是普通用户的提示符。一般大臣,布衣。)
oldboy
六、符号的意思
~ 用户家目录
- 上一次所在的目录
. 表示当前目录
.. 上一级目录
../.. 表示上一级的上一级目录
相关问答
Q1: 【Linux】实现一个简单的shell命令解释器
姓名:罗学元 学号:21181214375 学院:广州研究院
【嵌牛导读】shell命令解释器该包含哪些部分
【嵌牛鼻子】shell命令解释器该包含哪些部分
【嵌牛提问】shell命令解释器该包含哪些部分
linux命令解释器我们所做linux命令解释器的这个简单linux命令解释器的shell命令解释器可以实现简单的常用的基本命令,如ls、pwd、cd、cd - 、cd ~ 等
根据简单命令的定义,它的第一个参数是要执行的命令,后面的参数作为该命令的参数。
要执行的命令有两种情况:
一种是外部命令: 也就是对应着磁盘上的某个程序,例如 pwd、ls等等。对于这种外部命令,linux命令解释器我们首先要到指定的路径下找到它,然后再执行它。
另一种是内部命令:内部命令并不对应磁盘上的程序,例如cd等等,它需要shell自己来决定该如何执行。例如对 cd 命令,shell就应该根据它后面的参数改变当前路径。
对于外部命令,需要创建一个子进程来执行它,本质就是fork+exec
#include stdio.h
#include stdlib.h
#include assert.h
#include string.h
#include pwd.h
#include sys/utsname.h
#include sys/types.h
#include unistd.h
#define MAX 10
#define STRLEN 128
#define PATH "/bin/" //系统bin路径位置
char OLDPWD[STRLEN]={0}; //记录上一次的命令,为了cd -这条命令
//================================================================================
//每次敲回车输出当前所在用户信息
//普通用户和root用户的提示符区别
void Printf_Info()
{
char flag='$';
struct passwd *pw=getpwuid(getuid());
assert(pw!=NULL);
//uid为0则为root用户
if(pw-pw_uid==0)
{
flag='#';
}
struct utsname hostname; //主机名
uname(hostname);
char node[STRLEN]={0};
strcpy(node,hostname.nodename); //获取网络上的名称
char* name=strtok(node,".");
//获取绝对路径
char path[STRLEN]={0};
getcwd(path,STRLEN-1);
char*p=path+strlen(path); //p指向绝对路径的末尾
while(*p!='/')
{
p--;
}
//p指向路径末尾往前的第一个‘/’位置处
if(strlen(path)!=1)
{
p++; //++前,p-'/'
}
if(strcmp(path,pw-pw_dir)==0)
{
p="~";
}
printf("\033[;32mMyBash[%s@%s %s]%c\033[0m",pw-pw_name,name,p,flag);
// \033[47;31mThis is a color test\033[0m 设置打印结果的颜色
fflush(stdout);
}
//================================================================================
void Mycd(char*path)
{
//第一个字符串为cd而第二为空 如:cd 则结束本轮循环
if(path==NULL)
{
exit(0);
}
//cd ~ 回到用户根目录
if(strcmp(path,"~")==0)
{
struct passwd*pw=getpwuid(getuid());
path=pw-pw_dir;
}
//cd - 回到上一次的位置
if(strcmp(path,"-")==0)
{
//若是第一次输入命令,则cd -命令不存在linux命令解释器!
if(strlen(OLDPWD)==0)
{
printf("\033[;31mMyBash:cd:OLDPWD not set\n\033[0m");
return ;
}
//否则把上一次的命令给path
path=OLDPWD;
}
//getpwd记录当前工作目录的绝对路径
char oldpwd[STRLEN]={0};
getcwd(oldpwd,STRLEN-1);
if(-1==chdir(path))//反之则不是空,则通过chdir系统调用进入到该目录中
{
char err[128]="\033[;31mMybash: cd \033[0m";
strcat(err,path);
perror(err);
}
//每次执行完cd命令后,把工作路径赋给OLDPWD
strcpy(OLDPWD,oldpwd);
}
//================================================================================
//命令分割函数
void Strtok_cmd(char*buff,char*myargv[])
{
char *s=strtok(buff," "); //分割输入的字符串
if(s==NULL) //如果s为空,则进入下一轮循环
{
exit(0);
}
myargv[0]=s; //把分割出来的第一个字符串放在myargv[0]中
int i=1;
while((s=strtok(NULL,""))!=NULL) //把后续分割出来的字符串依次存放在数组中
{
myargv[i++]=s;
}
}
//===============================================================
int main()
{
while(1)
{
char buff[128]={0};
Printf_Info();
//从终端获取命令存入buff中
fgets(buff,128,stdin);
buff[strlen(buff)-1]=0;
char *myargv[MAX]={0};
//分割输入的命令
Strtok_cmd(buff,myargv);
//如果输入exit则退出循环
if(strcmp(myargv[0],"exit")==0)
{
exit(0);
}
//如果分割出来的第一个字符串为cd
else if(strcmp(myargv[0],"cd")==0)
{
Mycd(myargv[1]);
continue;
}
//若是系统调用,直接替换fork+exec
pid_t pid=fork();
assert(pid!=-1);
if(pid==0)
{
char path[256]={0};
if(strncmp(myargv[0],"./",2)!=0 strncmp(myargv[0],"/",1)!=0)
{
//先把路径放入path中
strcpy(path,PATH);
}
//进行命令拼接,路径+名称
strcat(path,myargv[0]);
//替换进程 例如:/bin/ls
execv(path,myargv);
perror("\033[;31mexecv error\033[0m");
}
//处理僵死进程
else
{
wait(NULL);
}
}
}
运行结果如下 :
异常处理如下:
若是第一次运行程序,则不能使用cd - 命令,因为此时还没有历史路径
若进入一个不存在的目录则会报错,没有这个文件或目录
若直接输入一个不存在的无法识别的命令,也会报错。
Q2: linux中bash是什么
; linux中bash是什么linux命令解释器?linux命令解释器我们一起来了解一下吧。
bash是指GNU项目编写的中的Unixshelllinux命令解释器,也就是指的linux所用的shell,而Shell是指提供使用者使用界面的软件,也就是一个命令行解释器,BASH是SHELL中的一种,是大多数LINUX发行版默认的SHELL。
linux系统与windows系统的区别
区别1linux命令解释器:开放性
所谓的开放性就是linux操作系统是开放源码系统,可以对其程序进行编辑修改。而微软的windows系统是手微软版权保护,就是只能微软内部进行开发及修改。
区别2:价格不同
linux系统是免费使用,而微软开发的windows系统则是需要花费金钱去购买。
区别3:文件格式不同
windows操作系统内核是NT,而linux是shell;另外,windows硬盘文件格式是fat32或NTSF,而linux需要的文件格式是ext2或ext3,该操作系统还多一个SWAP格式的交换分区。
本文章基于ThinkpadE15品牌、centos7系统撰写的。
Q3: Linux操作系统由什么组成?
Linux系统结构一般有3个主要部分:内核kernel、命令解释层Shell或其他操作环境、实用工具
1.Linux内核
内核是系统的核心,是运行程序和管理磁盘、打印机等硬件设备的核心程序。操作系统向用户提供一个操作界面,它从用户那里接收命令,并且把命令送给内核去执行。
当 Linux安装完毕之后,一个通用的内核就被安装到主机中,这个通用内核能满足绝大部分用户的需求,但普遍适用性内核对具体的某台主机来说,可能有一些并不需要的内核程序将被安装。因此,Linux允许用户根据主机的实际配置定制 Linux的内核,从而有效地简化 Linux内核,提高系统启动速度。
2.Linux Shell
Shell是系统的用户界面,提供了用户与内核进行交互操作的接口。它接收用户输入的命今,并且把它送入内核执行。操作系统在系统内核与用户之间提供操作界面, Linux存在多种操作环境,分别是基于图形界面的集成桌面环境和基于Shell命令行环境。
Shell是一个命令解释器,它解释由用户输入的命令,并且送到内核。Shell编程语言具有普通编程语言的很多特点,如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。
作为命令行操作界面的替代, Linux还提供了像 Windows那样的可视化图形界面X-window的图形用户界面。
3.实用工具
标准的 Linux系统都有配套的实用工具程序,如编辑器、浏览器、办公套件及其它系统管理工具等,用户可以自行编写需要的应用程序。
linux命令解释器的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux 解析命令行参数、linux命令解释器的信息别忘了在本站进行查找喔。





