`/etc/environment` 和 `/etc/profile` 有什么区别?

`/etc/environment` 和 `/etc/profile` 有什么区别?

我知道前者先于后者加载,但它们的用途和其他方面有什么区别?有什么理由我应该在一个中设置一些变量而不是另一个?

我所理解的是,/etc/environment似乎存在为系统运行的所有进程设置环境,而/etc/profile用于设置从登录 shell 使用和传播的环境,对吗?

至于区别,传统上哪个程序读取/etc/environment?它与 POSIX 有关,还是只是一种惯例?

答案1

/etc/environment不是 POSIX 的一部分,它属于 PAM(可插入式身份验证模块),并且只有使用 PAM 支持编译的程序才能使用它(主要是登录系统,随后启动 shell 或用户环境)。这意味着您的 shell 甚至不会读取它。

/etc/environment您可以看到使用的程序grep -l pam_env /etc/pam.d/*

因此/etc/environment用于设置通常不从 shell 启动的程序的变量。

答案2

摘自Ubuntu 帮助

/etc/environment- 此文件专门用于系统范围的环境变量设置。它不是脚本文件,而是由每行一个赋值表达式组成。具体来说,此文件存储系统范围的区域设置和路径设置。

/etc/profile- 每当进入 bash 登录 shell 时(例如从控制台或通过 ssh 登录时),以及当桌面会话加载时由 DisplayManager 执行此文件。

我认为这一切只是一种惯例,但离标准并不远(我不了解类似 RedHat 的系统)。

相关内容