Назад | Перейти на главную страницу

Откуда Bash PATH в CentOS 7 получает / usr / local / bin?

Я только что создал новую виртуальную машину CentOS 7 (версия bash 4.2.46) с Vagrant, используя поле centos / 7, и когда я вхожу в систему как бродячий пользователь, это мой ПУТЬ:

/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 который попадает в домашний каталог бродяги, добавляет /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.

  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 года, и она существовала в CentOS 6 и CentOS 7.

Как бы это ни сбивало с толку, похоже, что ваш анализ путей не из / etc / profile верен. Пути исходят из / bin / bash.

В исходном коде 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

Это определенно выглядит жестко закодированным в /bin/bash

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

что кажется ПУТЬ по умолчанию.

В дополнение к предыдущим ответам; Если вы обращаетесь к своей виртуальной машине по ssh, это может иметь смысл.

В /etc/ssh/sshd_config:

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