linux之什么是shell以及shell如何解析命令

Shell是什么

Shell是命令解释器,它负责执行和解析输入的命令。

相当于一个对象,当终端等待用户输入命令,解析执行命令,反馈给用用户结果。

既然shell只是一个解释器,那么shell就有很多种,查看当前的shell类型 

[root@loaclhost ~]# echo $SHELL

/bin/bash

Shell是如何解析执行一个“字符串”

在Linux终端中,输入一行“字符串”shell会检查这个字符串是否是内部命令,如果是内部命令,直接执行,如果不是内部命令,就去外部命令的存放路径找一下,查看是否有对应的可执行文件。

Shell内置的命令叫做内部命令,在用户登录的时候进行初始化到内存中的命令,在硬盘的指定路径存放的二进制可执行文件叫做外部命令。

那么如何判断一个命令是内部命令还是外部命令呢?

[root@loaclhost ~]# type hostname

hostname is /bin/hostname

[root@loaclhost ~]# type uname

uname is /bin/uname

[root@loaclhost ~]# type echo

echo is a shell builtin

Shell中的外部命令是存放在固定的路径,$PATH这个变量就是存放着的外部命令二进制文件的存放路径,在寻找外部命令的时候,会一个路径一个路径的找,找到以后就结束查找

[root@loaclhost ~]# echo $PATH

/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

因此在终端输入一个字符串的时候,只要在$PATH路径项下有指定的二进制文件名称即可,并不一定非要是一个常规的命令

[root@CentOS8 data]# type hostname
hostname is hashed (/usr/bin/hostname)
[root@CentOS8 data]# cp /usr/bin/hostname /usr/bin/hostname_back
[root@CentOS8 data]# ls -lrt /usr/bin/hostname*
-rwxr-xr-x. 1 root root 21664 May 11  2019 /usr/bin/hostname
-rwxr-xr-x. 1 root root 21344 Mar 17 03:43 /usr/bin/hostnamectl
-rwxr-xr-x. 1 root root 21664 Aug 13 08:53 /usr/bin/hostname_b
-rwxr-xr-x. 1 root root 21664 Aug 13 08:58 /usr/bin/hostname_back
[root@CentOS8 data]# hostname_back
CentOS8
[root@CentOS8 data]# hostname
CentOS8 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值