Shell命令-内置、外部

Shell 命令分为两种:
        Shell 自带的命令称为内置命令,它在 Shell 内部可以通过函数来实现,当 Shell 启动后,这些命令所对应的代码(函数体代码)也被加载到内存中,所以使用内置命令是非常快速的。
        更多的命令是外部的应用程序,一个命令就对应一个应用程序。运行外部命令要开启一个新的进程,所以效率上比内置命令差很多。
        用户输入一个命令后,Shell 先检测该命令是不是内置命令,如果是就执行,如果不是就检测有没有对应的外部程序:有的话就转而执行外部程序,执行结束后再回到 Shell;没有的话就报错,告诉用户该命令不存在。

内置命令

        内置命令不宜过多,过多的内置命令会导致 Shell 程序本身体积膨胀,运行 Shell 程序后就会占用更多的内存。Shell 是一个常驻内存的程序,占用过多内存会影响其它的程序。
        只有那些最常用的命令才有理由成为内置命令,比如 cd、kill、echo 等;接下来,将列出Bash Shell中内建命令,以及如何判断一个命令是否是内置命令。

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

Bash Shell 内建命令
命令说明
:扩展参数列表,执行重定向操作
.读取并执行指定文件中的命令(在当前 shell 环境中)
alias为指定命令定义一个别名
bg将作业以后台模式运行
bind将键盘序列绑定到一个 readline 函数或宏
break退出 for、while、select 或 until 循环
builtin执行指定的 shell 内建命令
caller返回活动子函数调用的上下文
cd将当前目录切换为指定的目录
command执行指定的命令,无需进行通常的 shell 查找
compgen为指定单词生成可能的补全匹配
complete显示指定的单词是如何补全的
compopt修改指定单词的补全选项
continue继续执行 for、while、select 或 until 循环的下一次迭代
declare声明一个变量或变量类型。
dirs显示当前存储目录的列表
disown从进程作业表中刪除指定的作业
echo将指定字符串输出到 STDOUT
enable启用或禁用指定的内建shell命令
eval将指定的参数拼接成一个命令,然后执行该命令
exec用指定命令替换 shell 进程
exit强制 shell 以指定的退出状态码退出
export设置子 shell 进程可用的变量
fc从历史记录中选择命令列表
fg将作业以前台模式运行
getopts分析指定的位置参数
hash查找并记住指定命令的全路径名
help显示帮助文件
history显示命令历史记录
jobs列出活动作业
kill向指定的进程 ID(PID) 发送一个系统信号
let计算一个数学表达式中的每个参数
local在函数中创建一个作用域受限的变量
logout退出登录 shell
mapfile从 STDIN 读取数据行,并将其加入索引数组
popd从目录栈中删除记录
printf使用格式化字符串显示文本
pushd向目录栈添加一个目录
pwd显示当前工作目录的路径名
read从 STDIN 读取一行数据并将其赋给一个变量
readarray从 STDIN 读取数据行并将其放入索引数组
readonly从 STDIN 读取一行数据并将其赋给一个不可修改的变量
return强制函数以某个值退出,这个值可以被调用脚本提取
set设置并显示环境变量的值和 shell 属性
shift将位置参数依次向下降一个位置
shopt打开/关闭控制 shell 可选行为的变量值
source读取并执行指定文件中的命令(在当前 shell 环境中)
suspend暂停 Shell 的执行,直到收到一个 SIGCONT 信号
test基于指定条件返回退出状态码 0 或 1
times显示累计的用户和系统时间
trap如果收到了指定的系统信号,执行指定的命令
type显示指定的单词如果作为命令将会如何被解释
typeset声明一个变量或变量类型。
ulimit为系统用户设置指定的资源的上限
umask为新建的文件和目录设置默认权限
unalias刪除指定的别名
unset刪除指定的环境变量或 shell 属性
wait等待指定的进程完成,并返回退出状态码

可以使用 type 来确定一个命令是否是内建命令

ccoy@ccoy-PC:~$ type cd
cd 是 shell 内建
ccoy@ccoy-PC:~$ type ifconfig
ifconfig 是 /sbin/ifconfig
由此可见,cd 是一个 Shell 内建命令,而 ifconfig 是一个外部文件,它的位置是/sbin/ifconfig

外部命令

        外部命令可能是读者比较疑惑的,一个外部的应用程序究竟是如何变成一个 Shell 命令的呢?
        应用程序就是一个文件,只不过这个文件是可以执行的。既然是文件,那么它就有一个名字,并且存放在文件系统中。用户在 Shell 中输入一个外部命令后,只是将可执行文件的名字告诉了 Shell,但是并没有告诉 Shell 去哪里寻找这个文件。
        难道Shell要遍历整个文件系统,查看每个目录吗?这显然是不能实现的。
        为了解决这个问题,Shell 在启动文件中增加了一个叫做PATH的环境变量,该变量就保存了Shell对外部命令的查找路径,如果在这些路径下找不到同名的文件,Shell 也不会再去其它路径下查找了,它就直接报错。

        $PATH 变量包含的目录中几乎聚集了系统中绝大多数的可执行命令,它们都是外部命令。

接下来,使用echo命令输出PATH变量的值,看看它保存了哪些检索路径:

ccoy@ccoy-PC:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin

不同的路径之间以:分隔,毕竟,Shell只会在几个固定的路径中查找外部命令。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux中,有两种类型的命令shell命令外部命令。 1. Shell命令Shell命令是Linux命令行提示符(Shell)的内置命令,是通过Shell程序(比如Bash、Zsh等)执行的。Shell命令提供了用于操作文件、目录、进程等操作系统资源的功能。它们是操作系统的一部分,不需要额外安装。例如,cd命令用于改变当前工作目录,ls命令用于列出目录内容,mkdir命令用于创建目录等。 2. 外部命令外部命令是不同于Shell的独立的可执行程序,这些程序通过Shell命令行调用来执行特定任务。外部命令通常是由第三方开发者编写的,并且可以通过软件包管理器或手动安装在系统中。例如,grep命令用于在文件中查找指定的文本,gcc命令用于编译C代码,ping命令用于测试网络连接等。 区别: - 执行速度:由于Shell命令Shell的一部分,它们可以直接调用操作系统资源,因此比外部命令执行速度更快。 - 功能扩展:外部命令通常由第三方开发者编写,可以提供更多功能和选项,而Shell命令的功能相对较少。 - 灵活性:外部命令的输入和输出可以通过Shell的重定向功能进行处理,可以与其他命令进行组合,灵活性更高。 总结:Shell命令是Linux Shell内置命令,提供基本的操作系统资源操作功能;外部命令是独立的可执行程序,通过Shell命令行调用,可以提供更多高级功能。在实际使用中,我们可以根据需要选择使用Shell命令还是外部命令来完成任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值