Chinaunix首页 | 论坛 | 博客
  • 博客访问: 105135
  • 博文数量: 21
  • 博客积分: 415
  • 博客等级: 一等列兵
  • 技术积分: 228
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-11 12:17
文章分类

全部博文(21)

文章存档

2014年(1)

2012年(7)

2011年(13)

分类:

2012-05-13 16:27:19

原文地址:内部命令VS外部命令 作者:wang_nets

Linux/Unix命令通常被分为两类:
内部命令:cd、source、fg
外部命令:ls、cat
我们来看看它们的区别。
内部命令:内部命令被构建在shell之中。当执行shell命令时,内部命令的执行速度非常快。这是因为没有其他的进程因为执行这条命令而被创建。比如说,当我们执行“cd”命令时,没有进程被创建。在执行过程中只是简单的改变当前的目录。
外部命令:外部命令并没有被构建在shell中。这些可执行的外部命令保存在一个独立的文件当中。当一个外部命令被执行时,一个新的进程即被创建同时命令被执行。比如说,当我们执行“cat”(通常被保存在/usr/bin目录下)命令时,然后/usr/bin/cat被执行。
如何得到内部命令列表?
如果你使用的是bash shell,你可以通过“help”命令得到所有内部命令列表

点击(此处)折叠或打开

  1. $ help
  2. alias [-p] [name[=value] ... ] bg [job_spec ...]
  3. bind [-lpvsPVS] [-m keymap] [-f fi break [n]
  4. builtin [shell-builtin [arg ...]] caller [EXPR]
  5. case WORD in [PATTERN [| PATTERN]. cd [-L|-P] [dir]
  6. command [-pVv] command [arg ...] compgen [-abcdefgjksuv] [-o option
  7. .....
如何知道一个命令是内部命令还是外部命令?
你可以使用type命令:

点击(此处)折叠或打开

  1. $ type cd
  2. cd is a shell builtin
  3. $ type cat
  4. cat is /bin/cat
如果命令为内部命令,则type命令会明确的指出该命令是shell内嵌的。如果命令时外部命令,type则会给出该命令的执行路径。
内部VS外部?
我们该使用外部命令还是内部命令或者哪一种命令更好?像这样的问题是没有任何意义的。因为大多数情况下我们只要达成我们的目标,而不必在意使用的是内部命令还是外部命令。
内部命令和外部命令最大的区别之处就是性能。内部命令由于构建在shell中而不必创建多余的进程,要比外部命令执行快得多。因此和执行更大的脚本道理一样,执行包含很多外部命令的脚本会损害脚本的性能。
我们并不是总要面对内部命令与外部命令的选择。但是在我们脚本联系的过程中只要我们认真的观察,我们可以发现有些地方我们可以避免使用外部命令。
比如说:将变量x与变量y求和赋予变量z。
外部命令:

点击(此处)折叠或打开

  1. z=`expr $x+$y`

内部命令

点击(此处)折叠或打开

  1. let z=x+y

 let命令是shell的内嵌命令,然而expr则是外部命令。使用expr执行速度要慢一些。或许在一次性实例中这看起来微不足道。但是如果在执行大文件时,其区别则是显而易见的。

阅读(816) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~