среда sudo: "g++: команда не найдена"

среда sudo: "g++: команда не найдена"

У меня относительно свежая установка RHEL 6.5, на которую я установил из исходников GCCC 4.9. После установки GCC 4.9 я удалил старую версию GCC, предоставленную дистрибутивом, через:

sudo yum remove gcc

ССЗпоявляетсячтобы быть правильно установленным и видимым как для пользователей, так и для root, но когда я пытаюсь выполнить sudoкоманду, которой требуется компилятор, он не может быть найден.

Мне кажется, что это PATHне указывает на g++время sudo, но я не понимаю, почему.

g++установлен в:

[john@haley boost_1_55_0]$ which g++
/usr/local/bin/g++

И получение версии как пользователя и как rootуспешно:

[john@haley boost_1_55_0]$ g++ --version
g++ (GCC) 4.9.0
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[john@haley boost_1_55_0]$ sudo su -
root@haley /root # g++ --version
g++ (GCC) 4.9.0
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Но sudo g++ --versionне получается:

john@haley boost_1_55_0]$ sudo g++ --version
[sudo] password for john: 
sudo: g++: command not found
[john@haley boost_1_55_0]$ 

Проверяем PATHкак sudo:

[john@haley boost_1_55_0]$ sudo echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/home/john/bin:/usr/local/bin
                                                                             ^^^^^^^^^

... похоже, указывает на то, что местоположение g++фактически находится на пути.

Почему это не работает и что я могу сделать, чтобы это исправить?

Отвечаем на вопросы в комментариях:

да, я могу выполнить его, используя явные пути в sudo:

[john@haley boost_1_55_0]$ sudo /usr/local/bin/g++ --version
[sudo] password for john: 
g++ (GCC) 4.9.0
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[john@haley boost_1_55_0]$ 

Было замечено, что я делал это неправильно, проверяя sudo PATH. Правильное выполнение показывает, что на самом /usr/local/binделенетв sudo:PATH

[john@haley boost_1_55_0]$ sudo env | grep PATH
13:PATH=/sbin:/bin:/usr/sbin:/usr/bin
[john@haley boost_1_55_0]$ 

решение1

Я публикую это как ответ, потому что я нашел это решение через комментарии в OP, но я не уверен, что это то, что ядолженделать.

Я могу сделать это, запустив sudo visudoи отредактировав файл secure_pathto include /usr/local/bin.

В моей системе исходная строка выглядит так:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

Изменяем на:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

«исправляет» проблему:

[john@haley boost_1_55_0]$ sudo g++ --version
g++ (GCC) 4.9.0
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[john@haley boost_1_55_0]$ 

Связанный контент