У меня относительно свежая установка 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_path
to 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]$