/etc/environment 未被读入 PATH 变量

/etc/environment 未被读入 PATH 变量

在 Ubuntu 中,路径变量存储在 /etc/environment 中。这是我的(我没有对其进行任何更改,这是系统默认设置):

$ cat /etc/environment 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

但是当我检查我的 PATH 变量时:

$ echo $PATH
/home/dan/bin:/home/dan/bin:/bin:/usr/bin:/usr/local/bin:/usr/bin/X11

您会注意到 /usr/games 不见了(几天前它还在那里)。我的 /etc/profile 没有提及 PATH。我的 ~/.profile 是默认的,并且只有:

if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

这只发生在 gnome 中,不会发生在 tty1-6 中。gnome 终端和我尝试从应用程序下拉菜单中调用应用程序时均未出现此信息。有人知道是什么原因造成的吗?

谢谢。

答案1

如果您的 shell 是 bash,它不会关注 /etc/environment,至少手册页和 an 中strace bash说的是这样。事实上,我找不到任何列出提及 /etc/environment 的程序。

我在 Ubuntu 下遇到过类似的情况,有 4 个或更多的间接层指向你真正想要的数据。很多时候我发现修复近似数据比修复最终数据更容易。

在这种情况下,修改 ~/.profile 中的个人路径实际上是正确的方法,因为至少V7 Unix

答案2

没有人真正回答这个问题的根本原因。@msw 确实有正确的解决方案,但我想解释一下发生了什么。

在 ubuntu 中,当您使用支持 pam 的应用程序时,它将运行 /etc/pam.d/* 中列出的模块列表,其中一个模块在登录时用于控制设置哪些环境变量。/etc/pam.d/login或者/etc/pam.d/su可能是您在登录用户时触发的模块。这些文件中/etc/login.defs用于确定您的基本环境,如下所示。

#
# *REQUIRED*  The default PATH settings, for superuser and normal users.
#
# (they are minimal, add the rest in the shell startup files)
ENV_SUPATH      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH        PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

我没有深入研究在 pam 中实际触发此问题的位置,但这应该有助于澄清问题。您可能还设置了覆盖上述内容的设置,/etc/security/pam_env.conf以及其他几个位置。

http://www.tuxradar.com/content/how-pam-works如果您真的想了解 pam 的工作原理以及如何识别使用它的程序。

相关内容