内部命令与外部命令

今天用串口线操作开发板时,由于串口线的问题,输入的命令老有错误显示。再次开机时输入命令时有时提示命令找不到。cd命令可以,ls、vi等命令一律提示命令找不到。

想不通是哪里错了,重新烧录内核还是有一样的问题。我便认为是文件系统什么地方出问题了,想要重新烧录文件系统。可是原来文件系统里的东西便都没了,谨慎起见先给师兄打电话问了一下。结果师兄一席话点醒梦中人。

原来linux中的命令分为内部命令和外部命令:

所謂的內部命令是寫在bash原始碼裡面的(這邊假設談的是bash),你要修改這些內部命令除非透過修改bash的原始碼。

而外部命令才是bash之外自己額外安裝的,比方通常在/bin, /usr/bin, /sbin, /usr/sbin.....等。

例如:type是個內建命令。

  1. # type type
  2. type is a shell builtin
  3. # echo $PATH
  4. /sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/opt/kde3/bin:/usr/lib/jvm/jre/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin
  5. # which type
  6. which: no type in (/sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/opt/kde3/bin:/usr/lib/jvm/jre/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin)


上面很容易發現,type是個內建命令。

像ls、vi属于外部命令,必须将其所在目录包含进PATH环境变量才能正常使用,而cd、echo属于内部命令,一直都可使用。

我用echo $PATH命令查看了一下PATH环境变量,果然PATH的内容被破坏了。重新将/bin, /usr/bin, /sbin, /usr/sbin等目录加入后恢复正常。

 

补充:

命令可能是一个关键词(if, while, function, untill等),一个别名(如:alias ll='ls -l'),一个函数(如:function hello { echo "Hello"; }),一个内置命令(cd, type等),应用程序(可执行程序或shell脚本)。

shell会按照命令的类型按先后顺序来执行它们。下面会用实验来检验一下。

以下摘自《Learning the bash shell, 3rd Edition》
1, Aliases

2, Keywords such as function and several others, like if and for

3, Functions

4, Built-ins like cd and type

5, Scripts and executable programs, for which the shell searches in the directories listed in the PATH environment variable

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值