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