Страницы

Поиск по вопросам

воскресенье, 9 июня 2019 г.

Как работает команда `nginx` если её нет в $PATH?

$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
$ whereis -b nginx nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
Исполняемый файл находится здесь: /usr/sbin/nginx, но /usr/sbin нет в $PATH.


Ответ

от имени «рядового» пользователя:
$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
от имени пользователя с идентификатором 0 (обычно у него имя root):
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

как видите, во втором случае в переменной окружения PATH присутствует каталог /usr/sbin
поэтому команда nginx, выполненная от имени «рядового» пользователя, не приведёт к запуску программы nginx из файла /usr/sbin/nginx. а от имени пользователя с именем root — приведёт.

дополнение из комментариев:
А как же рядовой пользователь запускает nginx -t для проверки корректности конфига? При этом проверка работает как от root'а, так и от рядового пользователя (разве может ругнуться на SSL сертификат). Не знаю, что там в дебианах, но в центосе спокойно можно запустить (я правда не обращал внимания на PATH)
либо этот пользователь указывает всё-таки полный путь к файлу, либо переменная окружения PATH (хотя бы в момент выполнения команды) содержит путь к этому файлу, либо запускается какой-то другой файл, расположенный не в каталоге /usr/sbin, либо запускается функция/псевдоним оболочки (которая впоследствии запускает файл уже по абсолютному пути).

доп. чтение.
механизм поиска и выполнения программ описан в стандарте posix к сожалению, стандарт posix не содержит каких-либо указаний по поводу функционального распределения файлов/каталогам по файловой системе. поэтому надо смотреть в документацию соответствующих реализаций стандарта:
unix и наследники gnu/linux

Комментариев нет:

Отправить комментарий