我知道前者先于后者加载,但它们的用途和其他方面有什么区别?有什么理由我应该在一个中设置一些变量而不是另一个?
我所理解的是,/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
/etc/environment
- 此文件专门用于系统范围的环境变量设置。它不是脚本文件,而是由每行一个赋值表达式组成。具体来说,此文件存储系统范围的区域设置和路径设置。
/etc/profile
- 每当进入 bash 登录 shell 时(例如从控制台或通过 ssh 登录时),以及当桌面会话加载时由 DisplayManager 执行此文件。
我认为这一切只是一种惯例,但离标准并不远(我不了解类似 RedHat 的系统)。