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

TIM*_*MEX 124 unix linux bash

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

Kie*_*ron 97

/etc/profile其他人提到的一样,一些Linux系统现在使用一个目录/etc/profile.d/; 其中的任何.sh文件都将来自/etc/profile.将自定义环境保存在这些文件中比仅编辑更简洁/etc/profile.

  • 这不是全局性的......它仅限于shell ...太糟糕了,这是最常见的答案 (62认同)
  • 如果一些用户使用另一个shell,比如zsh怎么办? (4认同)
  • 脚本不用于ROOT用户. (3认同)

小智 43

如果你的LinuxOS有这个文件:

/etc/environment
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这适用于amazon linux. (3认同)

eph*_*ent 38

男人8 pam_env

man 5 pam_env.conf

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

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

无论用户的shell如何,这都有效,并且也适用于图形登录(如果xdm/kdm/gdm/entrance/...设置如此).

  • 您不需要重新启动,您需要重新登录.(没有为我重启关键服务器) (8认同)

Dig*_*oss 16

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

如果你把它放入/etc/profile,那将解决大多数与posix兼容的shell用户的问题.对于非关键目的,这可能"足够好".

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

  • `/ etc/environment`实际上似乎为我设置环境变量,即使是root用户.我知道`/ etc/environment`是在amazon linux和ubuntu上.我没有检查是否适用于csh,tcsh或zsh. (7认同)

Pas*_*ent 9

来自bash手册页的一些有趣的摘录:

当bash作为交互式登录shell或具有该--login选项的非交互式shell调用时,它首先从该文件读取并执行命令/etc/profile(如果该文件存在).读取文件后,它会寻找~/.bash_profile, ~/.bash_login~/.profile,按照这个顺序读取并执行从存在并且可读的第一个命令.--noprofile启动shell以禁止此行为时可以使用该选项.
...
当一个交互的shell但不是登录shell启动时,bash读取并执行命令 /etc/bash.bashrc~/.bashrc,如果这些文件存在.使用该--norc选项可以禁止这一点.该--rcfile文件选项将强制bash读取和文件,而不是执行命令/etc/bash.bashrc~/.bashrc.

所以看看/etc/profile或者/etc/bash.bashrc,这些文件是全局设置的正确位置.在它们中加入这样的东西来设置环境变量:

export MY_VAR=xxx
Run Code Online (Sandbox Code Playgroud)


Tim*_*ost 5

在 Linux 内核下运行的每个进程都有自己独特的环境,它从其父进程继承而来。在这种情况下,父进程要么是一个 shell(产生一个子 shell),要么是“登录”程序(在一个典型的系统上)。

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

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

Unix 旨在在限制范围内服从用户。

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