Bash

CentOS 7 上的 bash PATH 是從哪裡獲取 /usr/local/bin 的?

  • January 15, 2021

我剛剛使用 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 中。

  1. https://bugs.centos.org/view.php?id=10200
  2. https://bugs.centos.org/view.php?id=10199
  3. https://bugs.centos.org/view.php?id=10198
  4. https://bugs.centos.org/view.php?id=7492

正如你將看到的,這個問題在 2012 年 5 月首次被報告,並且在 CentOS 6 和 CentOS 7 中一直存在。

因此,儘管可能令人困惑,但您對路徑不是來自 /etc/profile 的分析似乎是正確的。路徑來自 /bin/bash。

引用自:https://serverfault.com/questions/833762