原理上讲
“交互式,登陆shell”启动时会加载“profile”系列的startup文件
“交互式,非登陆shell”启动时会加载“rc”系列的startup文件。
/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. /etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取.
~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件.
交互式的登陆shell
登陆过程:
1. 读取并执行/etc/profile文件;
2. 读取并执行~/.bash_profile文件;
- 若文件不存在,则读取并执行~/.bash_login文件;
- 若文件不存在,则读取并执行~/.profile文件;
登出过程:
1. 读取并执行~/.bash_logout文件;
2. 读取并执行/etc/bash.bash_logout文件;
非交互式登陆shell
登陆过程:
1. 读取并执行/etc/profile文件;
2. 读取并执行~/.bash_profile文件;
- 若文件不存在,则读取并执行~/.bash_login文件;
- 若文件不存在,则读取并执行~/.profile文件;
与“交互式登陆shell”相比,“非交互式登陆shell”并没有登出的过程
startup文件进行一个完整的总结:
备注:
1. “直接执行”表示此文件被系统直接调用,它的执行是无条件的;
2. “条件执行”表示此文件被系统调用是有先决条件的(没有优先级更高的文件可用);
3. “引用执行”表示此文件不是被系统直接调用的,而是被其他文件显式调用的;
4. 后面的数字表示文件被调用的顺序,数字越大调用越靠后;
5. “非交互非登陆”shell的配置文件可以由BASH_ENV环境变量指定;
如果你想对bash的功能进行设置或者是定义一些别名,一般修改~/.bashrc文件。更改环境变量,一般修改~/.bash_profile文件,因为考虑到shell的继承特性,这些更改确实只应该被执行一次(而不是多次)。针对所有用户进行全局设置,一般在/etc/profile.d目录下添加以.sh结尾的文件,而不是去修改全局startup文件。