linux 下环境配置 .bash_profile 和 .bashrc 和/etc/profile 加载顺序

概念
linux 现行最长用的是bash 而其包含两种属性,即“交互”与“登陆”。

交互式:是shell的一种运行模式,交互式shell等待你输入命令,并且立即执行,然后将结果反馈给你。这是每个CLI用户都非常熟悉的流程:登录、执行一些命令、登出。当你登出后,这个shell就终止了。

非交互式:是shell的另一种运行模式,它专门被用来执行预先设定的命令。在这种模式下,shell不与用户进行交互,而是读取存放在脚本文件中的命令并执行它们。当它读到文件的结尾,这个shell就终止了。(通常来说,用于执行脚本的shell都是“非交互式”的,但我们也有办法把它启动为“交互式”shell,方法就是在执行bash命令时,添加-i选项)

登录:通常指的是

  1. 用户通过输入用户名/密码(或证书认证)后启动的shell;
  2. 通过带有-l | --login参数的bash命令启动的shell。
    例如,系统启动、远程登录、使用su -切换用户、通过bash --login命令启动bash等

非登录
从图形界面启动终端、使用su切换用户、通过bash命令启动bash等。

注意 交互 和登录 方式的不同 其启动shell 时提前执行的文件不同(加载的环境和退出时的执行脚本不同)

下面是四种状态

交互式登陆shell
登陆过程:

  1. 读取并执行/etc/profile文件;
  2. 读取并执行~/.bash_profile文件;
  • 若文件不存在,则读取并执行~/.bash_login文件;
  • 若文件不存在,则读取并执行~/.profile文件;

登出过程:
3. 读取并执行~/.bash_logout文件;
4. 读取并执行/etc/bash.bash_logout文件;

非交互式登陆shell
登陆过程:
5. 读取并执行/etc/profile文件;
6. 读取并执行~/.bash_profile文件;

  • 若文件不存在,则读取并执行~/.bash_login文件;
  • 若文件不存在,则读取并执行~/.profile文件;
  • 注意:(我们注意到,与“交互式登陆shell”相比,“非交互式登陆shell”并没有登出的过程)。

交互式非登陆shell
7. 读取并执行/.bashrc或–rcfile选项指定的文件(其实“rc”系列startup文件还包括/etc/bashrc。但是系统并不直接调用这个文件,而是通过/.bashrc文件显式地调用它。)

重要
是因为在CentOS中,startup文件之间还存在着默认的显式调用关系,它们是:
8. /.bash_profile显式调用/.bashrc文件;
9. ~/.bashrc显式调用/etc/bashrc文件;

所以 在登录状态时也调用了 用户下的 ~/.bashrc 和 系统/etc/bashrc
所以无论如何这两个文件都会被加载(登录与否区别在 ~/.bash_profile 是否加载)

总结
1、交互式”执行“登陆”和“登出”相关的“profile”系列startup文件,“非交互式”只执行“登陆”相关的“profile”系列startup文件;(区别在于:~/.bash_logout和/etc/bash.bash_logout的执行与否)

2、/.bash_profile会显式调用/.bashrc文件,而~/.bashrc又会显式调用/etc/bashrc文件,这是为了让所有交互式界面看起来一样。无论你是从远程登录(登陆shell ~/.bash_profile 开始),还是从图形界面打开终端(非登陆shell ~/.bashrc 开始),你都拥有相同的提示符,因为环境变量PS1在/etc/bashrc文件中被统一设置过。

三、修改不同文件逻辑
最后我想说的是,知道startup文件何时被执行并不是关键,关键是要理解自己的情况应该去修改哪个startup文件。

如果你想对bash的功能进行设置或者是定义一些别名,推荐你修改/.bashrc文件,这样无论你以何种方式打开shell,你的配置都会生效。而如果你要更改一些环境变量,推荐你修改/.bash_profile文件,因为考虑到shell的继承特性,这些更改确实只应该被执行一次(而不是多次)。针对所有用户进行全局设置,推荐你在/etc/profile.d目录下添加以.sh结尾的文件,而不是去修改全局startup文件。

参考:https://blog.csdn.net/sch0120/article/details/70256318

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值