Shell内建命令(内置命令)

所谓 Shell 内建命令,就是由 Bash 自身提供的命令,而不是文件系统中的某个可执行文件。
我们在linux中执行命令的时候,有些命令是Shell中的内置命令,有些则是一个外部文件。就比如我们的javac命令,我们可以将其看成一个外部命令(一个外部命令一定对应一个可执行文件)。
Shell执行一个命令的时候,会首先判断他是一个内置命令还是外部命令,如果不是内置命令,就会到系统变量$PATH的路径下去查找当前命令所对应的可执行文件,也就是对应的外部命令。

用于进入或者切换目录的 cd 命令,就是一个内置命令。可以使用 type 来确定一个命令是否是内建命令:

[root@izbp11n3l4rtpjb412qrm6z c]# type cd
cd 是 shell 内嵌
[root@izbp11n3l4rtpjb412qrm6z c]# ^C
[root@izbp11n3l4rtpjb412qrm6z c]# type java
java 是 /usr/local/java/bin/java

通常来说,内建命令会比外部命令执行得更快,执行外部命令时不但会触发磁盘 I/O,还需要 fork 出一个单独的进程来执行,执行完成后再退出。而执行内建命令相当于调用当前 Shell 进程的一个函数。

几个常见的内建命令

. 读取并执行指定文件中的命令(在当前 shell 环境中)
alias 为指定命令定义一个别名
bg 将作业以后台模式运行
cd 将当前目录切换为指定的目录
echo 将指定字符串输出到 STDOUT

注意上面的.命令,他的作用是执行指定文件中的命令,注意是命令,而不是可执行文件,也就是二进制文件。
比如说这样

# profile文件中就是包含了很多命令的文件(脚本文件),就可以利用.来进行执行
# source命令与.的作用是一样的
. /etc/profile

.命令只能用来执行指脚本文件,而不能用来执行一个可执行文件

[root@izbp11n3l4rtpjb412qrm6z c]# . a
-bash: .: /root/c/a: 无法执行二进制文件

而对于我们的可执行文件,其实是不需要任何命令就能执行的,直接输入文件名就可以执行,只不过我们在shell中,直接输出文件名,其是到$PATH路径下去查找对应的可执行文件,如果我们要执行当前路径下的可执行文件,就可以使用下面的命令

# ./就是当前路径的意思,下面命令就是执行当前路径下的a这个可执行文件
./a

当然./也可以用来执行脚本文件,前提是这个脚本文件有执行权限

[root@izbp11n3l4rtpjb412qrm6z c]# ./test.sh
-bash: ./test.sh: 权限不够
发布了162 篇原创文章 · 获赞 44 · 访问量 8827

猜你喜欢

转载自blog.csdn.net/P19777/article/details/104025338