Linux/Unix命令通常被分为两类:
内部命令:cd、source、fg
外部命令:ls、cat
我们来看看它们的区别。
内部命令:内部命令被构建在shell之中。当执行shell命令时,内部命令的执行速度非常快。这是因为没有其他的进程因为执行这条命令而被创建。比如说,当我们执行“cd”命令时,没有进程被创建。在执行过程中只是简单的改变当前的目录。
外部命令:外部命令并没有被构建在shell中。这些可执行的外部命令保存在一个独立的文件当中。当一个外部命令被执行时,一个新的进程即被创建同时命令被执行。比如说,当我们执行“cat”(通常被保存在/usr/bin目录下)命令时,然后/usr/bin/cat被执行。
如何得到内部命令列表?
如果你使用的是bash shell,你可以通过“help”命令得到所有内部命令列表
- $ help
- alias [-p] [name[=value] ... ] bg [job_spec ...]
- bind [-lpvsPVS] [-m keymap] [-f fi break [n]
- builtin [shell-builtin [arg ...]] caller [EXPR]
- case WORD in [PATTERN [| PATTERN]. cd [-L|-P] [dir]
- command [-pVv] command [arg ...] compgen [-abcdefgjksuv] [-o option
- .....
如何知道一个命令是内部命令还是外部命令?
你可以使用type命令:
- $ type cd
- cd is a shell builtin
- $ type cat
- cat is /bin/cat
如果命令为内部命令,则type命令会明确的指出该命令是shell内嵌的。如果命令时外部命令,type则会给出该命令的执行路径。
内部VS外部?
我们该使用外部命令还是内部命令或者哪一种命令更好?像这样的问题是没有任何意义的。因为大多数情况下我们只要达成我们的目标,而不必在意使用的是内部命令还是外部命令。
内部命令和外部命令最大的区别之处就是性能。内部命令由于构建在shell中而不必创建多余的进程,要比外部命令执行快得多。因此和执行更大的脚本道理一样,执行包含很多外部命令的脚本会损害脚本的性能。
我们并不是总要面对内部命令与外部命令的选择。但是在我们脚本联系的过程中只要我们认真的观察,我们可以发现有些地方我们可以避免使用外部命令。
比如说:将变量x与变量y求和赋予变量z。
外部命令:
内部命令
let命令是shell的内嵌命令,然而expr则是外部命令。使用expr执行速度要慢一些。或许在一次性实例中这看起来微不足道。但是如果在执行大文件时,其区别则是显而易见的。
阅读(8972) | 评论(3) | 转发(4) |