📌  相关文章
📜  Linux 中的内部和外部命令

📅  最后修改于: 2022-05-13 01:57:34.572000             🧑  作者: Mango

Linux 中的内部和外部命令

UNIX 系统是基于命令的,也就是说,事情的发生取决于您键入的命令。所有 UNIX 命令的长度很少超过四个字符。
它们分为两类:

  • 内部命令:内置于 shell 中的命令。对于所有 shell 内置命令,执行相同的命令是快速的,因为 shell 不必在 PATH 变量中搜索给定的路径,也不需要生成任何进程来执行它。
    示例:源、cd、fg 等。
  • 外部命令:未内置到 shell 中的命令。当必须执行外部命令时,shell 会查找 PATH 变量中给出的路径,并且还必须生成一个新进程并执行命令。它们通常位于 /bin 或 /usr/bin 中。例如,当您执行通常位于 /usr/bin 的“cat”命令时,可执行文件 /usr/bin/cat 被执行。
    例如:ls、cat 等。

如果您了解 UNIX 命令,那么您一定听说过ls命令。由于ls是一个独立存在于 /bin 目录(或 /usr/bin)中的程序或文件,因此它被标记为外部命令,这实际上意味着 ls 命令没有内置到 shell 中,而这些是存在于 shell 中的可执行文件一个单独的文件。简单来说,当你输入 ls 命令时,要执行的命令会在 /bin 中找到。大多数命令本质上是外部命令,但有些命令实际上在任何地方都找不到,有些即使在 PATH 指定的目录之一中,通常也不会执行。例如,使用echo命令:

$type echo
echo is a shell builtin

echo不是外部命令,因为当您键入 echo 时,shell 不会在其 PATH 中查找它(即使它在 /bin 中)。相反,它将从它自己的一组内置命令中执行它,这些命令不存储为单独的文件。这些内置命令,其中echo是一个成员,被称为内部命令

您现在可能已经注意到,实际上是外壳完成了所有这些工作。该程序在用户登录后立即开始运行,并在用户注销时终止。 shell 是一个不同的外部命令,它拥有自己的一组内部命令。因此,如果一个命令既作为 shell 的内部命令又作为外部命令(在 /bin 或 /usr/bib 中)存在,则 shell 将优先考虑它自己的同名内部命令。



这正是echo的情况,它也在 /bin 中找到,但很少被执行,因为 shell 确保内部echo命令优先于外部命令。现在,更多地讨论内部和外部命令。

获取内部命令列表

如果您使用的是 bash shell,您可以使用help命令获取 shell 内置命令列表:

$help

// this will list all
the shell built-in commands //

如何找出一个命令是内部的还是外部的?

除此之外,您还可以在type command 的帮助下找到有关特定命令的信息,它是内部命令还是外部命令:

$type cat
cat is /bin/cat

//specifying that cat is
external type//

$type cd
cd is a shell builtin

//specifying that cd is
internal type//

内部与外部

什么时候使用内部命令和外部命令之间的哪个命令是没有用的问题,因为用户根据他要解决的问题的需要使用命令。内部命令和外部命令之间存在的唯一区别是内部命令的工作速度比外部命令快得多,因为外壳程序在使用外部命令时必须寻找路径。

在某些情况下,您可以通过使用 internal 代替 internal 来避免使用 external ,例如如果您需要添加两个数字,您可以这样做:

//use of internal command let
for addition//

$let c=a+b

而不是使用:

//use of external command expr
for addition//

$c=`expr $a+$b`

在这种情况下,使用 let 将是一个更好的选择,因为它是一个 shell 内置命令,因此它比 expr 是一个外部命令运行得更快。