linux环境变量

可以配置环境变量的位置

在centos7中有如下几个位置可以配置环境变量:

  • /etc/profile
  • /etc/bashrc
  • ~/.bash_profile
  • ~/.bashrc
  • /etc/profile.d/*.sh

那么各个配置文件的作用和区别在哪里呢

/etc/profile

查看文件注释:

System wide environment and startup programs, for login setup

也就是说 系统级别的环境变量可以放在这里,但是不建议放在这里:

It's NOT a good idea to change this file unless you know what you
are doing. It's much better to create a custom.sh shell script in
/etc/profile.d/ to make custom changes to your environment

建议的做法是 在/etc/profile.d/中新建 custom.sh并在里面配置系统级别的environment and startup programs

/etc/bashrc

查看文件注释:

System wide functions and aliases

也就是说 系统级别的别名可以放在这里,但是不建议放在这里:

It's NOT a good idea to change this file unless you know what you
are doing. It's much better to create a custom.sh shell script in
/etc/profile.d/ to make custom changes to your environment

建议的做法是 在/etc/profile.d/中新建 custom.sh并在里面配置系统级别的functions and aliases

~/.bash_profile

User specific environment and startup programs

用户级别的环境变量放在这里

~/.bashrc

查看文件注释:

User specific aliases and functions

用户级别的别名 放在这里

总结

到这里可以做个小总结

  • 系统级别的 无论是environment and startup programs 还是functions and aliases,推荐的做法都是在 /etc/profile.d/中新建 custom.sh 并在其中配置
  • 用户级别的environment and startup programs 放在 ~/.bash_profile
  • 用户级别的aliases and functions 放在 ~/.bashrc

原理

如果只想知道怎么用 看上面的总结部分就可以了
下面聊聊这些文件起作用的细节加深理解
这些文件起作用的时机分两种情况 login shell 和 no login shell

login shell

所谓的 login shell 就是linux启动后通过终端需要输入用户名密码之后才能进入shell的情况
此时的执行步骤是:

  1. 系统加载并执行/etc/profile
  2. /etc/profile 会加载 /etc/profile.d/中的sh文件并执行
  3. 系统加载并执行~/.bash_profile
  4. ~/.bash_profile中会加载并执行 ~/.bashrc
  5. ~/.bashrc会加载并执行/etc/bashrc(思考:这里/etc/bashrc 的执行顺序为什么这么设计?)
    通过以上几个步骤 系统级别和用户级别的环境变量就加载完成了

no login shell

当登录后进入到bash中以后 再通过bash命令打开一个子bash 此时的子bash就是一个 no login shell
此时的执行步骤是:

  1. 系统加载并执行 ~/.bashrc
  2. ~/.bashrc会加载并执行/etc/bashrc
  3. /etc/bashrc 在 no login shell 的情况下会加载 /etc/profile.d/中的sh文件并执行
    这里子bash会继承父bash中的环境变量 但不会继承别名
    所以打开子bash时需要重新加载~/.bashrc 和 /etc/bashrc
    /etc/profile.d/中也可能定义了别名 所以也重新加载一遍(回答上面的思考)

重复一下结论

想在所有用户下生效的环境变量 就在 /etc/profile.d/ 中自定义
只在当前用户下生效的环境变量 就在 .bash_profile 中定义

你可能感兴趣的:(linux环境变量)