嚣张研究站呀 · 2023年12月29日 0

Ubuntu 设置环境变量不同文件的区别

在 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