在Linux上设置系统范围的环境变量的最佳位置是什么?


26

我只想JAVA_HOME所有用户(包括root用户)设置系统范围的环境变量。

要求:

  • 普通用户可以访问
  • 可以访问根
  • 始终加载,不仅用于bash(默认情况下,gnome-terminal不会启动bash)
  • 可以在Ubuntu,Debian和Red Hat上运行
  • 如果可以轻松编写脚本,那很好

对于交互式shell,请检查此ubuntu线程。
quickshiftin

Answers:


26

由于没有人提供完整的答案,因此,这是我目前认为最好的答案,至少对于ubuntu而言,但我愿意将答案修改为其他* nix平台。

# **create**: /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/default-java

已经考虑但排除的其他选项:

  • /etc/environment 可以,但是很难维护,因为其他工具或人们可以对其进行编辑。
  • /etc/profile -同上

11

在Debian / Ubuntu上是/ etc / environment

我不了解Red Hat。


1
我相信,在/ etc /环境已经过时
帕特詹姆斯

@PatJames您是否有有关此的更多信息?我试过即使重新启动计算机后也不会为root加载/ etc / environment。
索林2013年

@SorinSbarnea一些信息在这里: wiki.debian.org/Locale指示/ etc / environment不再用于较新的版本中
Pat James

1
该页面仅表示您不应该在中使用与语言环境相关的变量/etc/environment。另请参阅serverfault.com/a/584072/26218
流程

11

我不明白您为什么排除了/ etc / profile。那是正确的位置。


9

有人回答说/etc/environmentDebian不再使用和/或不再使用它,这是错误的(从版本7开始)。

PAM实际上是pam_env(8)通过默认的envfile标志来读取文件的。联机帮助页还在“文件”部分下说明了该默认设置。

引用的Wiki(尤其是语言环境)仅声明基于语言环境的环境变量现在应位于中/etc/profile。他们的陈述“(在Debian的旧版本中,也是/ etc / environment)”是含糊的,并且是在语言环境中。

快速grep /etc/pam.d显示:

root@box:/etc/pam.d# grep pam_env.so *
atd:auth        required        pam_env.so
cron:session       required   pam_env.so
cron:session       required   pam_env.so envfile=/etc/default/locale
login:session       required   pam_env.so readenv=1
login:session       required   pam_env.so readenv=1 envfile=/etc/default/locale
sshd:auth       required     pam_env.so # [1]
sshd:auth       required     pam_env.so envfile=/etc/default/locale
su:session       required   pam_env.so readenv=1
su:session       required   pam_env.so readenv=1 envfile=/etc/default/locale

这些配置行是可加的,并且由于缺少第一行envfile,因此默认为/etc/environment

当然,所有这些都依赖于您使用的任何二进制文件(crond,登录shell等)都是针对PAM编译的。

最后,这意味着使用PAM的其他系统(例如RedHat)的行为相同,如在相应的联机帮助页中所示。


2

旁注:看一下Modules Environment。每当需要为数十或数百个用户提供复杂,版本化,可自我扩展的简明UNIX环境时,我都会使用此方法。它主要用于大型多用户HPC环境。仅将其用于一个特定变量肯定会对其过度设计,但是一旦您需要多个软件包及其环境,它就可以完成出色的工作。


1

/etc/profile应该管用。我测试刚才可以肯定,把export SOMETEST=1234/etc/profile后重新记录echo $SOMETEST了我1234的预期。也来自gnome-terminal



0

在这种情况下,您不能使用任何〜特定文件。所以....

/etc/profile在这种情况下将是合适的地方。尽管当前登录的用户必须获得一个新的登录会话,但这应该不是什么大问题。

@ wk01:/etc/profile默认情况下,非登录外壳不会加载。您.bashrc 可能正在加载...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.