web-dev-qa-db-ja.com

CentOS 7のbash PATHは/ usr / local / binをどこから取得しますか?

私はちょうどcentos/7ボックスを使用してVagrantで真新しいCentOS 7 VM(bashバージョン4.2.46)をスピンアップしました、そして私がvagrantユーザーとしてログインしているとき、これは私のパスです:

_/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/vagrant/.local/bin:/home/vagrant/bin
_

Rootとしてログインすると、PATHは次のようになります。

_/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
_

_/etc/profile_が_/usr/local/sbin:/usr/sbin_を追加していることを知っています(ほとんどのユーザーの最後に、ルートの最初に)、そしてvagrantホームディレクトリにある_/etc/skel/.bash_profile_が_/home/vagrant/.local/bin:/home/vagrant/bin_、しかし初期設定はどこから来るのですか?

現在のところ、ユーザーがPATHで_/usr/local/bin:/usr/bin_を使用し、rootが他のユーザーを取得する理由についての説明はありません。

(率直に言って、_/usr/local/sbin_によると、_/usr/sbin_および_/etc/profile_が最後にあるはずなので、ルートPATHの順序は非常に奇妙に見えます。)

7
Iain Hallam

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
6
Schrute

他の人々はCentOSバグ追跡システムで同じことを尋ねました。私が見つけた最も古い投稿は this this でした。

/ usr/local/binは/ bin/bashにハードコードされています。

  1. https://bugs.centos.org/view.php?id=102
  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からのものです。

12
user5870571

/bin/bashにハードコードされているようです

strings /bin/bash | grep "\/usr\/local\/bin"
/usr/local/bin:/bin:/usr/bin

これはデフォルトのPATHのようです。

5
user9517

以前の回答に加えて; sshでVM=に到達している場合、これには意味があります。

/etc/ssh/sshd_config

# This sshd was compiled with PATH=/usr/local/bin:/usr/bin
4
pbacterio