在Linux中,有许多命令,其中包括 alias命令别名 和 bash的内置命令 那么我们敲入一个命令之后,系统是根据什么顺序优先执行的呢?
鸟哥书中这样表示:
1.以相对/绝对路径执行命令,例如”/bin/ls” 或者 “./ls”
2.由alias找到该命令执行
3.由bash内置的(builtin)命令执行
4.通过$PATH这个变量的顺序找到第一个命令来执行.
比如:
执行 /bin/ls和 ls的区别在于 ls的 显示结果有颜色,那是因为 ls,优先执行了” alias ls=’ls –color=tty’ “这个命令别名.
bash 的环境配置文件:
一般我们设置的命令别名,自定义变量在注销bash之后下次登陆就失效了,因为如果要保留这些设置必须把它写入配置文件每次登录都能执行的命令就是写在环境配置文件里的.
先要知道两个概念
login shell :
是取得bash时候需要完整登陆流程,比如你登陆输入帐号密码,这时候取得的bash就是”login shell”.non-login shell :
获得bash接口的方法不需要重复登录,简单理解就是登陆之后启动终端接口,它没有提示输入帐号密码,此时bash环境就是non-login shell,还有就是,你在原本bash环境再次执行bash同样也没有需要输入帐号密码,所以登陆之后它的子进程bash也是non-login shell
具体来说:
login shell :
只会读取两个配置文件:
- /etc/profile : 它是系统整体设置,每个用户登录取得bash时一定会读取的配置文件.它包括
- PATH:根据UID决定是否含有sbin系统命令目录.
- MAIL:对应邮箱信息
- USER:用户帐号
- HOSTNAME:主机hostname.
- HISTSIZE:命令历史记录条数.
注意的是: bash的login shell 情况下读取的整体环境配置文件其实只有/etc/profile ,不过/etc/profile 还会调用其他配置文件.
其中就包括:
- /etc/inputrc :包含了bash的热键,以及其他环境设置
- /etc/profile.d/*.sh :规定了bash的操作接口颜色,语系,ll,vi,which与ls命令的命令别名等
- /etcsysconfig/i18n :主要决定bash默认使用语种的配置文件
- 根据linux不同版本,第二个配置文件— 个人配置文件 ~/.bash_profile 或者 ~/.bash_login 或者 ~/.profile **
它会继续加载~/.bashrc这个文件,
non-login shell :
从这里开始就是non-login shell 的读取,
来看鸟哥画的login shell 读取流程图:
~/.bashrc这个文件就记录自己的偏好设置,如果我们设置写入之后,一般来说重新登陆才会生效,但是我们可以通过 source ~/.bashrc或者. ~/.bashrc这个命令重新加载设置.
接着来看看这个~/.bashrc到底包含什么鬼:
可以看到,root身份和一般用户查看结果有所不同.
其中root看到多出的就是用户个人命令设置(分隔线之后)
另外,可以看出两种身份的共同点是都会接着调用/etc/bashrc,而这个文件(包括unmask的值、PS1的提示,还有接着调用/etc/profile.d/.sh),也可以从上面流程图中又可以看出它又跳到了/etc/profile.d/.sh(规定了bash的操作接口颜色,语系,ll,vi,which与ls命令的命令别名等).
参考资料:《鸟哥linux私房菜》p320-325