在 Unix-like 系统中,包括 Ubuntu,/etc/profile、/etc/environment、~/.bash_profile 和 ~/.profile 都是用于设置用户环境变量的配置文件。不同文件的加载取决于登录类型(登录 shell vs 非登录 shell)和 shell 类型(bash、sh、zsh 等)。这里是它们各自的意义和区别:
/etc/profile
- 全局配置:
/etc/profile是针对所有用户的系统级配置文件。当任何用户登录时,且登录 shell 是 Bourne Again Shell(bash)时,该文件被读取执行。 - 登录 shell:特别是在文本模式(控制台、SSH 登录)登录系统时,它会被加载。
- 初始化环境:用于设置系统范围的环境变量和执行全局启动脚本。
/etc/environment
- 全局环境变量:
/etc/environment也是系统级的配置文件,用于为所有用户设置环境变量。 - 不是脚本文件:与
/etc/profile不同,它不是一个脚本。它仅用于设置环境变量,不能包含逻辑或执行命令。 - 加载方式:由 PAM(Pluggable Authentication Module)模块在用户登录时加载,与 shell 类型无关。
~/.bash_profile
- 个人配置(Bash):
~/.bash_profile是针对个别用户的配置文件,仅适用于 Bash shell。当您使用 Bash 登录 shell 时,该文件会被读取执行。 - 仅限登录 shell:它通常用于启动交互式登录会话时需要运行的命令。
~/.profile
- 个人配置(兼容性):
~/.profile是一个兼容性较好的个人配置文件,可由不同的 shell 读取,不仅限于 Bash。 - 登录 shell:当用户登录系统(文本或图形界面)时,如果
~/.bash_profile不存在,~/.profile会被加载。
总结
/etc/profile和/etc/environment针对所有用户,分别用于执行脚本和设置环境变量。~/.bash_profile和~/.profile针对单个用户,在登录时设置环境和运行个人启动脚本。Bash 通常首先查找~/.bash_profile,如果未找到,它会查找~/.profile。
注意事项
- 如果
~/.bash_profile存在,Bash 将不会读取~/.profile。 - 在图形用户界面(GUI)登录时,可能不会读取这些文件,取决于您的桌面环境和其启动脚本。
- 许多现代系统使用
~/.bashrc作为非登录 shell 的个人配置文件,而~/.bash_profile可能会包含一行来显式加载~/.bashrc。






