不求甚解

此博客为个人学习之用,如与其他作品雷同,纯属巧合。

导航

startup文件中 bash_profile 和 bashrc 区别的总结

Posted on 2021-04-01 17:28  三年三班王小朋  阅读(140)  评论(0编辑  收藏  举报

原理上讲
“交互式,登陆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文件。