Я только что создал новую виртуальную машину 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
.)
В исходном тексте 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.
Как вы увидите, об этой проблеме впервые сообщили в мае 2012 года, и она существовала в CentOS 6 и CentOS 7.
Так что, как бы это ни было запутанно, похоже, что ваш анализ путей, которые не идут из /etc/профиля, правильный. Пути идут из /bin/bash
.В дополнение к предыдущим ответам; если вы получаете ВМ по ssh, это может иметь смысл.
В /etc/ssh/sshd_config
:
# This sshd was compiled with PATH=/usr/local/bin:/usr/bin
Определенно выглядит жестко закодированным в /бин/бэш
strings /bin/bash | grep "\/usr\/local\/bin"
/usr/local/bin:/bin:/usr/bin
, который, кажется, является PATH по умолчанию
.Сегодня я столкнулся с этим (в моем случае его не было в PATH) и понял, что это происходит только в оболочках входа. Если вы запустите оболочку от имени другого пользователя, /usr/local/bin
не будет добавлен к пути (например, su <имя пользователя>
). Может быть, это то, что происходит с бродягой