Откуда ПУТЬ bash в 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 , который попадает в домашний каталог vagrant, добавляет /home/vagrant/.local/bin:/home/vagrant/bin , но откуда берется начальная настройка?

На в настоящее время у меня нет объяснения, почему пользователи в конечном итоге получают / usr / local / bin: / usr / bin в своем PATH, а root получает остальные.

(Откровенно говоря, порядок корневого PATH кажется очень странным, учитывая, что / usr / local / sbin и / usr / sbin должны быть в конце, согласно / etc / profile .)

6
задан 20 February 2017 в 20:02
5 ответов

В исходном тексте 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
5
ответ дан 2 December 2019 в 23:57

Другие люди спрашивали то же самое на багтрекере 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/профиля, правильный. Пути идут из /bin/bash

.
12
ответ дан 2 December 2019 в 23:57

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

В /etc/ssh/sshd_config:

# This sshd was compiled with PATH=/usr/local/bin:/usr/bin
4
ответ дан 2 December 2019 в 23:57

Определенно выглядит жестко закодированным в /бин/бэш

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

, который, кажется, является PATH по умолчанию

.
5
ответ дан 2 December 2019 в 23:57

Сегодня я столкнулся с этим (в моем случае его не было в PATH) и понял, что это происходит только в оболочках входа. Если вы запустите оболочку от имени другого пользователя, /usr/local/bin не будет добавлен к пути (например, su <имя пользователя>). Может быть, это то, что происходит с бродягой

0
ответ дан 15 January 2021 в 14:27

Теги

Похожие вопросы