可以配置环境变量的位置
在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的情况
此时的执行步骤是:
- 系统加载并执行/etc/profile
- /etc/profile 会加载 /etc/profile.d/中的sh文件并执行
- 系统加载并执行~/.bash_profile
- ~/.bash_profile中会加载并执行 ~/.bashrc
- ~/.bashrc会加载并执行/etc/bashrc(思考:这里/etc/bashrc 的执行顺序为什么这么设计?)
通过以上几个步骤 系统级别和用户级别的环境变量就加载完成了
no login shell
当登录后进入到bash中以后 再通过bash命令打开一个子bash 此时的子bash就是一个 no login shell
此时的执行步骤是:
- 系统加载并执行 ~/.bashrc
- ~/.bashrc会加载并执行/etc/bashrc
- /etc/bashrc 在 no login shell 的情况下会加载 /etc/profile.d/中的sh文件并执行
这里子bash会继承父bash中的环境变量 但不会继承别名
所以打开子bash时需要重新加载~/.bashrc 和 /etc/bashrc
而 /etc/profile.d/中也可能定义了别名 所以也重新加载一遍(回答上面的思考)
重复一下结论
想在所有用户下生效的环境变量 就在 /etc/profile.d/ 中自定义
只在当前用户下生效的环境变量 就在 .bash_profile 中定义
网友评论