我刚刚使用 centos/7 框和 Vagrant 启动了一个全新的 CentOS 7 VM(bash 版本 4.2.46),当我以 vagrant 用户身份登录时,这是我的 PATH:
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/vagrant/.local/bin:/home/vagrant/bin
以 root 身份登录时,路径如下:
/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
我知道这/etc/profile
是添加/usr/local/sbin:/usr/sbin
(对于大多数用户来说,在最后,对于 root 用户来说),并且/etc/skel/.bash_profile
最终在 vagrant 主目录中添加/home/vagrant/.local/bin:/home/vagrant/bin
,但是初始设置来自哪里?
目前,我无法解释为什么用户最终/usr/local/bin:/usr/bin
会进入他们的 PATH,而 root 会得到其他人。
(坦率地说,根 PATH 的顺序似乎很奇怪,因为它/usr/local/sbin
应该/usr/sbin
在最后,根据/etc/profile
.)
其他人在 CentOS 错误跟踪器上也提出了同样的问题。我找到的最早的帖子是这个。
/usr/local/bin 硬编码在 /bin/bash 中。
正如你将看到的,这个问题在 2012 年 5 月首次被报告,并且在 CentOS 6 和 CentOS 7 中一直存在。
因此,尽管可能令人困惑,但您对路径不是来自 /etc/profile 的分析似乎是正确的。路径来自 /bin/bash。
在 bash 源“config-top.h”中有这个:
它看起来肯定是硬编码的
/bin/bash
这似乎是默认路径。
除了以前的答案;如果您通过 ssh 访问您的虚拟机,这可能是有道理的。
在
/etc/ssh/sshd_config
:我今天遇到了这个(在我的情况下它不存在于 PATH 中),我意识到这只发生在登录 shell 中。如果您以其他用户身份运行 shell,
/usr/local/bin
则不会将其添加到路径中(例如su <username>
)。也许这就是流浪者发生的事情