我是否可以为所有用户提供通用的某些设置?
答案 0 :(得分:96)
除了其他人提到的/etc/profile
之外,一些Linux系统现在使用目录/etc/profile.d/
;其中的任何.sh
个文件都将由/etc/profile
提供。将自定义环境内容保存在这些文件中比仅编辑/etc/profile
更简洁。
答案 1 :(得分:38)
如果所有登录服务都使用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用户的问题。对于非关键目的,这可能“足够好”。
但是csh
或tcsh
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)
您的路径已设置