路径与命令搜寻顺序

系统里面其实有不少的 ls 命令, 或者是包括内建的 echo 命令,那么来想一想,如果一个命令 (例如 ls) 被下达时, 到底是哪一个 ls 被拿来运行?

  1. 以相对/绝对路径运行命令,例如『 /bin/ls 』或『 ./ls 』;这样会直接运行
  2. 输入命令:如ls,会按照如下顺序搜寻:
    1. 由 alias 找到该命令来运行;
    2. 由 bash 内建的 (builtin) 命令来运行;
    3. 透过 $PATH 这个变量的顺序搜寻到的第一个命令来运行。

builtin命令和外部命令的区别:builtin命令是你用的shell(也是一种程序)自带的程序,外部命令是外部程序。(尽管文件存的地方差不多,都是在/usr/bin下) builtin命令好处

  • 运行速度更快

  • 可以影响shell内部状态,如cd可以改变当前shell的目录。而外部命令不行

因此上述寻找命令的过程就一目了然了。输入ll,先看看有没有alias,找到ll='ls -l',再从builtin里找ls,没找到,就去PATH指向的目录下找ls文件,列出文件路径。
找echo时,是builtin文件,因此直接列出路径(尽管看上去结果差不多)。
使用type -a command查看该命令如何被解释
image.png

Bash的环境配置文件

http://cn.linux.vbird.org/linux_basic/0320bash_4.php

要注意的是, 我们前几个小节谈到的命令别名啦、自定义的变量啦,在你注销 bash 后就会失效,所以你想要保留你的配置, 就得要将这些配置写入配置文件才行。

所以先谈谈 login shell 会读取哪些配置文件?一般来说,login shell 其实只会读取这两个配置文件:

  1. /etc/profile:这是系统整体的配置,你最好不要修改这个文件;
  2. ~/.bash_profile 或 ~/.bash_login 或 ~/.profile:属于使用者个人配置,你要改自己的数据,就写入这里!

没有这几个文件,可以自己创建。

source :读入环境配置文件的命令

更新了bash的配置文件后,需要刷新。要么注销重新登录,要么使用source重新读取配置文件。
image.png