我只想为所有用户(包括root用户)设置系统范围的环境variablesJAVA_HOME
。
要求:
由于没有人添加完整的答案,这里是我目前认为最好的,至less在Ubuntu的,但我打开适应其他* nix平台的答案。
# **create**: /etc/profile.d/java.sh export JAVA_HOME=/usr/lib/jvm/default-java
其他已被考虑但排除的选项:
/etc/environment
可以工作,但是难以维护,因为其他工具或人员可以编辑它。 /etc/profile
– 和上面一样 在Debian / Ubuntu上将是/ etc / environment
我不知道红帽的等价物。
我不明白你为什么排除/ etc / profile。 这是正确的位置。
有几个人回答说/etc/environment
已经在Debian中被删除和/或者不被使用了,这是(在版本7)是错误的。
该文件实际上是由PAM读取的 – 具体来说是pam_env(8)
,通过默认envfile
标志。 该手册页还在FILES部分中声明了这个默认值。
引用的维基(特别是locale一)只是声明基于locale的环境variables现在意味着在/etc/profile
。 他们的声明“(在旧版本的Debian中,也是/ etc / environment)”是模糊的,并且是语言环境的上下文。
通过/etc/pam.d
快速的grep显示:
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
这些configuration行是附加的,因为第一个缺lessenvfile
,所以默认是/etc/environment
。
当然,所有这些都依赖于你使用的二进制文件( crond
,login shell等)。
最后,这意味着使用PAM的其他系统(例如RedHat)的行为是相同的,可以在其相应的联机帮助页中看到。
一个侧面说明:看看模块环境 。 每次我必须为几十个或数百个用户提供一个复杂的,版本化的,可自我扩展的,简洁的UNIX环境时,我都会使用它。 它主要用于大规模多用户HPC环境。 只是将它用于一个特定的variables当然是过度devise它,但是一旦你需要更多的软件包和它们的环境,它确实是一个很棒的工作。
/etc/profile
应该可以工作。 我刚刚testing了一下,把export SOMETEST=1234
放到/etc/profile
,重新login后echo $SOMETEST
给了我1234
的预期。 也从gnome-terminal
/etc/enviroment
在上一个debian stable版本中没有使用。 如Sorin S所说,build议在/etc/profile.d/
创build自己的*.sh
文件。 请参阅https://wiki.debian.org/EnvironmentVariables
在这种情况下,你不能使用任何特定的文件。 所以….
在这种情况下, /etc/profile
将是适当的地方。 当前login的用户必须获得新的login会话,但这不应该是一个大问题。
@ wk01:默认情况下, /etc/profile
不是由非loginshell加载的。 您的.bashrc
可能正在加载它…