如何在我的linux系统下为每个人设置环境variables?

我可以为我的所有用户设置一些通用的设置吗?

和其他人提到的/etc/profile ,一些Linux系统现在使用一个目录/etc/profile.d/ ; 那里的任何.sh文件将由/etc/profile 。 在这些文件中保留自定义环境的东西比编辑/etc/profile要稍微简单一些。

男子8 pam_env

男人5 pam_env.conf

如果所有login服务都使用PAM ,并且所有login服务都在其各自的/etc/pam.d/*configuration文件中具有session required pam_env.so ,则所有login会话都将设置一些环境variables,如pam_env的configuration文件中所指定。

在大多数现代Linux发行版中,默认情况下都是这样 – 只需将所需的全局环境variables添加到/etc/security/pam_env.conf

不pipe用户的shell是什么,它都可以工作,也可以用于graphicslogin(如果xdm / kdm / gdm /入口/ …是这样设置的)。

如果你的LinuxOS有这个文件:

 /etc/environment 

您可以使用它为所有用户永久设置环境variables。

摘自: http : //www.sysadmit.com/2016/04/linux-variables-de-entorno-permanentes.html

令人惊讶的是,Unix和Linux实际上没有地方设置全局环境variables。 你可以做的最好的是安排任何特定的shell有一个站点特定的初始化。

如果你把它放在/etc/profile ,那么对于大多数兼容posix的shell用户来说,这将是很重要的。 对于非关键目的来说,这可能是“足够好”的。

但是任何有cshtcsh shell的人都不会看到它,我不相信csh有一个全局初始化文件。

一些有趣的摘录从bash manpage:

当bash作为交互式loginshell或者作为具有--login选项的非交互式shell调用时,它首先从文件/etc/profile读取和执行命令(如果该文件存在)。 读取该文件后,它将按照该顺序查找~/.bash_profile~/.bash_login~/.profile ,并从第一个存在并读取的第一个中读取和执行命令。 当shell开始禁止这种行为时,可以使用--noprofile选项。

当一个不是loginshell的交互式shell被启动时,如果这些文件存在,bash将从/etc/bash.bashrc~/.bashrc读取和执行命令。 这可以通过使用--norc选项来禁止。 --rcfile文件选项将强制bash从文件读取和执行命令,而不是/etc/bash.bashrc~/.bashrc

所以看看/etc/profile/etc/bash.bashrc ,这些文件是全局设置的正确位置。 把这样的东西放在他们身上来build立一个环境variables:

 export MY_VAR=xxx 

使用PAM是优异的。

 # modify the display PAM $ cat /etc/security/pam_env.conf # BEFORE: $ export DISPLAY=:0.0 && python /var/tmp/myproject/click.py & # AFTER : $ python $abc/click.py & DISPLAY DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY} abc DEFAULT=/var/tmp/myproject 

在Linux内核下运行的每个进程都会接收到它自己的独特环境,并从其父进程inheritance。 在这种情况下,父代会是一个shell本身(产生一个子shell),或者是“login”程序(在一个典型的系统上)。

由于每个进程的环境都受到保护,因此无法为每个正在运行的进程“注入”一个环境variables,因此,即使修改了默认shell .rc / profile,在每个进程退出并重新加载之前也不会生效其启动设置。

查看/ etc /以修改任何特定shell的默认启动variables。 只要意识到用户可以(并且经常)在他们的个人设置中改变他们。

Unix被devise为服从用户,在一定范围内。

注意 :Bash不是你的系统上唯一的 shell。 请注意/ bin / sh符号链接实际指向的内容。 在许多系统上,这实际上可能是破折号 (默认情况下,没有特别的调用)POSIXLY正确。 因此,您应该小心修改这两个默认值,否则以/ bin / sh开头的脚本将不会inheritance您的全局默认值。 同样,注意避免只有bash可以理解编辑时才能使用的语法,也就是avoiding bashisms

如果你正在使用ubuntu,input〜/ .bashrc这个命令(如果你使用的是gedit,你可以键入gedit〜/ .bashrc ),然后在所有terminal会话中写入你想要保留的环境variables,例如export variable =“2015”