Bash
CentOS 7 上的 bash PATH 是從哪裡獲取 /usr/local/bin 的?
我剛剛使用 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
.)
在 bash 源“config-top.h”中有這個:
/* The default value of the PATH variable. */ #ifndef DEFAULT_PATH_VALUE #define DEFAULT_PATH_VALUE \ "/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:." #endif /* The value for PATH when invoking `command -p'. This is only used when the Posix.2 confstr () function, or CS_PATH define are not present. */ #ifndef STANDARD_UTILS_PATH #define STANDARD_UTILS_PATH \ "/bin:/usr/bin:/sbin:/usr/sbin:/etc:/usr/etc" #endif
其他人在 CentOS 錯誤跟踪器上也提出了同樣的問題。我找到的最早的文章是這個。
/usr/local/bin 硬編碼在 /bin/bash 中。
- https://bugs.centos.org/view.php?id=10200
- https://bugs.centos.org/view.php?id=10199
- https://bugs.centos.org/view.php?id=10198
- https://bugs.centos.org/view.php?id=7492
正如你將看到的,這個問題在 2012 年 5 月首次被報告,並且在 CentOS 6 和 CentOS 7 中一直存在。
因此,儘管可能令人困惑,但您對路徑不是來自 /etc/profile 的分析似乎是正確的。路徑來自 /bin/bash。