/etc/environment 和 /etc/profile 之间有什么区别?

amn*_*amn 40 shell environment-variables posix

我知道前者在后者之前加载,但是它们的目的和其他方面有什么区别?我应该在一个变量中设置一些变量而不是在另一个中设置一些变量,有什么好的理由吗?除了/etc/environment似乎存在为系统运行的所有进程设置环境的事实,而/etc/profile用于设置从登录外壳使用和传播的环境,对吗?

另外,顺便提一下,传统上哪个程序读取/etc/environment?它与POSIX有关,还是只是一个约定?

Neu*_*ula 49

/etc/environment不是 POSIX 的一部分,它属于 PAM(Pluggable Authentication Module),只有支持 PAM 编译的程序才能使用它(主要是登录系统,随后启动 shell 或用户环境)。这意味着它甚至不会被你的 shell 读取。

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

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


小智 24

摘自Ubuntu 帮助

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

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

我认为所有这些都只是一个约定,但离标准不远(我不了解 RedHat 之类的系统)。