Почему при запуске команды sudo возвращает команду не найдено?

12

Пример команды:

drush cc all

работает, но это:

sudo drush cc all

дает мне:

sudo: drush: command not found

Почему? Как это исправить?

Codium
источник
У меня также иногда возникала эта проблема с такими основными командами, как cd. Используя dzdo cdвозврат "команда не найдена". Конечно , позже я понял , что cdING в каталог, у меня нет разрешения на, не поможет очень много, так что я либо нужен корневой оболочки или необходимость dzdo ls, dzdo mvи т.д. содержимое из - за пределов , что реж.
Подстановочный
2
Проблема в sudo cdтом, что cdэто встроенная команда, а не программа. Если вы хотите перейти в каталог, к которому у вас нет доступа, и (например) переименовать файл там, вы можете сделать (например) sudo mv dir/oldfile dir/newfile или sudo sh -c "cd dir; mv oldfile newfile" .
G-Man говорит: «Восстановите Монику»

Ответы:

13

Когда вы sudo, вы получаете предварительно сконфигурированный $PATH, который (должен быть) что-то вроде пути по умолчанию пользователя root . Ваша программа не находится в этом списке каталогов, определенных $PATH.

Смотри например

sudo пытается быть в безопасности при выполнении внешних команд.

Есть два разных способа работы с переменными среды. По умолчанию опция env_reset sudoers включена. Это приводит к тому команды должны быть выполнены с минимальной средой , содержащей TERM, PATH, HOME, SHELL, LOGNAME, USERи USERNAMEв дополнение к переменным из процесса вызывающего это допускается env_checkи env_keep sudoers вариантов. Существует фактически белый список для переменных среды.

Если вы не можете настроить sudoсохранение $PATH, обычно обходной путь - указать полный путь к программе. Это может плохо работать со сценариями, которые вызывают другие исполняемые файлы в (недоступном) каталоге.

Томас Дики
источник
0

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

Кроме того, вам нужно вставить строку, /etc/sudoersчтобы позволить это. man sudoersдля синтаксиса, это слишком много, чтобы поставить здесь.

Том Зыч
источник