linux的内建命令和外部命令

        今天室友去笔腾讯,回来问了我一道题,linux的ls命令执行了哪些系统调用,我第一反应是ls是内建命令吗?假如是的话应该会调用fork()和exec(),对于这块有点模糊,特地总结了下。

Linux命令有内部命令(内建命令)和外部命令之分,内部命令和外部命令功能基本相同,但也有些细微差别。
 
        内部命令实际上是shell程序的一部分,其中包含的是一些比较简单的linux系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常在linux系统加载运行时shell就被加载并驻留在系统内存中。内部命令是写在bashy源码里面的,其执行速度比外部命令快,因为解析内部命令shell不需要创建子进程。比如:exit,history,cd,echo等。更直观点理解就是,内建命令就在shell程序中,加载shell的同时就把它内部的内建命令加载进内存了。
 
        外部命令是linux系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用内存。通常外部命令的实体并不包含在shell中,但是其命令执行过程是由shell程序控制的。shell程序管理外部命令执行的路径查找、加载存放,并控制命令的执行。外部命令是在bash之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin......等等。可通过“echo $PATH”命令查看外部命令的存储路径,比如:ls、vi等。
 
用type命令可以分辨内部命令与外部命令
 
[root@localhost account]# type cd
 cd is a shell builtin
 
通常情况下,,脚本中的Bash内建命令在运行的时候是不会fork出一个子进程的.。但是脚本中的外部或者过滤命令通常会fork出一个子进程。 一个内建命令通常会与一个系统命令同名, 但是Bash在内部重新实现了这些命令.。比如,,Bash的echo命令与/bin/echo就不尽相同,,虽然它们的行为在绝大多数情况下都是一样的。
 
既然还想知道ls用了哪些调用,只好直接去看看ls的源码。
 
大致的思路就应该是去读取当前文件夹的目录项来获得该目录下的所有文件名。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值