Linux加载环境变量文件的的顺序
Linux系统加载环境变量文件的顺序取决于Shell的类型(如Bash)和启动方式(如登录或非登录)。以下是Bash Shell的主要加载顺序:
1. 交互式登录Shell(如通过SSH登录或bash --login)
-
全局配置:
1./etc/profile
→ 执行/etc/profile.d/*.sh中的脚本(若存在)。 -
用户级配置(按顺序加载第一个存在的文件):
2.~/.bash_profile
3.~/.bash_login(若.bash_profile不存在)
4.~/.profile(若.bash_login也不存在) -
退出时:
- 执行
~/.bash_logout(若存在)。
- 执行
2. 交互式非登录Shell(如终端直接打开或子Shell)
- 全局配置:
/etc/bash.bashrc(部分系统如Debian/Ubuntu)。
- 用户级配置:
2.~/.bashrc。
3. 非交互式Shell(如执行脚本bash script.sh)
- 默认不加载配置文件,除非:
- 通过
BASH_ENV环境变量指定文件(如BASH_ENV=~/.bashrc)。 - 使用
--login选项(如bash --login script.sh),此时按登录Shell顺序加载。
- 通过
4. 特殊文件 /etc/environment
- 由PAM(Pluggable Authentication Modules)在用户登录时加载,早于Shell配置文件。
- 适用于全局环境变量,独立于Shell类型。
图形界面终端(如GNOME/KDE)
- 通常启动非登录Shell,仅加载
~/.bashrc。 - 部分终端支持配置为登录Shell(如
gnome-terminal --login),此时按登录Shell顺序加载。
配置文件间的调用关系
~/.bash_profile通常会显式调用~/.bashrc(常见于Ubuntu等发行版),例如:if [ -f ~/.bashrc ]; then . ~/.bashrc fi/etc/profile可能调用/etc/bash.bashrc(视发行版而定)。
总结顺序图
登录Shell:
/etc/profile → /etc/profile.d/*.sh → ~/.bash_profile|.bash_login|.profile → ~/.bashrc(若显式调用)
非登录Shell:
/etc/bash.bashrc → ~/.bashrc
非交互式Shell:
不加载配置文件(除非通过BASH_ENV或--login)
注意事项
- 避免重复设置:如在
~/.bash_profile和~/.bashrc中同时修改PATH,建议将环境变量定义集中管理。 - 发行版差异:部分系统(如Ubuntu)默认使用
~/.profile,而~/.bash_profile可能不存在。 - 图形环境变量:通过桌面环境登录时,变量可能由显示管理器(如GDM)或
~/.pam_environment设置。

浙公网安备 33010602011771号