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

时间:2009-10-29 03:35:36

标签: linux unix bash

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

8 个答案:

答案 0 :(得分:96)

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

答案 1 :(得分:38)

man 8 pam_env

man 5 pam_env.conf

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

在大多数现代Linux发行版中,默认情况下都是这样 - 只需将您想要的全局环境变量添加到pam_env

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

答案 2 :(得分:34)

如果你的LinuxOS有这个文件:

/etc/environment

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

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

答案 3 :(得分:16)

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

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

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

答案 4 :(得分:6)

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

答案 5 :(得分:4)

使用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

答案 6 :(得分:2)

在Linux内核下运行的每个进程都会收到自己从父级继承的独特环境。在这种情况下,父级将是shell本身(产生子shell)或“登录”程序(在典型系统上)。

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

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

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

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

答案 7 :(得分:-14)

  1. 使用wget
  2. 下载jdk
  3. 使用 $ which java 找到java路径 它会告诉你JAVA实际存储的位置即/ usr / lib / jvm / java-8-openjdk-amd64 // bin / java
  4. 复制上述路径,即/ usr / lib / jvm / java-8-openjdk-amd64 /
  5. 现在使用纳米编辑器打开 .bashrc ,即 nano .bashrc
  6. 使用export cammand在.bashrc文件中添加路径即JAVA_HOME并保存文件,即导出JAVA_HOME = / usr / lib / jvm / java-8-openjdk-amd64 / 导出PATH = $ JAVA_HOME / bin:$ PATH
  7. 运行$ source 〜/ .bashrc
  8. $ echo $ PATH
  9. 您的路径已设置