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

我是否可以为所有用户提供某些通用设置?

290438 次浏览

令人惊讶的是,Unix 和 Linux 实际上并没有设置全局环境变量的地方。您所能做的最好的事情就是安排任何特定的 shell 进行特定于站点的初始化。

如果您将它放在 /etc/profile中,那么对于大多数与 posx 兼容的 shell 用户来说,这就可以解决问题了。对于非关键目的来说,这可能是“足够好的”。

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

Bash 手册中一些有趣的摘录:

当 bash 作为交互式 登录 shell,或者作为非交互式 使用 --login选项的 shell,则 首先读取并执行来自 文件 /etc/profile,如果该文件 在读取该文件之后,它将 寻找 ~/.bash_profile, ~/.bash_login~/.profile 命令,并读取和执行命令 从第一个存在和存在的 可读。 --noprofile选项可能 当外壳开始 抑制这种行为。
...
当一个 非登录的交互式 shell 启动 shell,bash 读取和 执行来自 /etc/bash.bashrc~/.bashrc,如果 这些文件是存在的,这可能是 通过使用 --norc选项抑制。 --rcfile文件选项将强制 从 bash 读取和执行命令 文件而不是 /etc/bash.bashrc~/.bashrc.

所以看看 /etc/profile/etc/bash.bashrc,这些文件是全局设置的正确位置。把这样的东西放进去,设置一个环境变量:

export MY_VAR=xxx

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

由于每个进程的环境都受到保护,因此无法将环境变量“注入”到每个正在运行的进程中,所以即使您修改了默认的 shell。Rc/profile,在每个进程退出并重新加载其启动设置之前,它不会生效。

查看/etc/以修改任何特定 shell 的默认启动变量。只要意识到用户可以(而且经常这样做)在他们各自的设置中改变它们。

Unix 被设计成在一定范围内服从用户。

注意: Bash 不是系统上的 只有 shell。注意/bin/sh 符号链接实际指向的内容。在许多系统上,这可能实际上是 破折号,它(默认情况下,没有特殊调用) POSIXLY 正确。因此,您应该注意修改 都有默认值,否则以/bin/sh 开头的脚本将不会继承您的全局默认值。类似地,注意避免编辑两者时只有 < em > bash 能理解的语法,也就是 avoiding bashisms

除了其他人提到的 /etc/profile之外,一些 Linux 系统现在还使用目录 /etc/profile.d/; 其中的任何 .sh文件都将由 /etc/profile来源。将您的自定义环境内容保存在这些文件中要比编辑 /etc/profile稍微简单一些。

男子8 pam _ env

男子5

如果所有登录服务都使用 PAM,并且所有登录服务在各自的 /etc/pam.d/*配置文件中都有 session required pam_env.so,那么所有登录会话都将有一些在 pam_env的配置文件中指定的环境变量。

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

不管用户的 shell 是什么,这都可以工作,图形登录也可以工作(如果 xdm/kdm/gdm/entry/& hellip; 是这样设置的)。

使用 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 操作系统有这个文件:

/etc/environment

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

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