2017-02-08 3 views
1

Предположим, я запустить командуИспользование Sudo с другими командами

exit 

Очевидно, терминальные выходы, как цель команды.

Я понимаю, что sudo означает запуск команды с правами администратора. если я запускаю:

sudo exit 

Затем я получаю сообщение «sudo: exit: command not found» из терминала. Почему терминал в этом случае не распознает команду и не выйдет из терминала, как это было при запуске без sudo?

+5

'exit' - это не программа, это встроенная оболочка, вы также должны попробовать' echo --help' vs 'sudo echo --help'. Я думаю, что 'sudo' может только хотеть выполнить программу, а не оболочку встроенного – tforgione

+4

кросс-сайта дубликата: http://askubuntu.com/questions/291666/why-doesnt-sudo-cd-var-named-work – Aserre

+0

'sudo' * определенно * хочет исполняемый файл. – chepner

ответ

0

Большинство «команд» в unix-подобной среде фактически являются внешними программами и скриптами. Несколько, например exit, являются действительными командами, встроенными в оболочку. sudo не может распознать последний.

От человека странице:

Когда Sudo запускает команду, она вызывает вилку (2), устанавливает выполнения среды, как описано выше, и вызывает системный вызов execve в Дочерний процесс.

На странице execve человек:

execve() выполняет программу, на которую указывает имя файла.

Программа не указана exit; это просто команда, которую оболочка распознает.

Подумайте об этом так: Unix предоставляет разрешения для процесса. sudo запускает процесс с повышенными/измененными разрешениями. Но когда вы запустите exit, вы не создадите новый процесс. sudo не может поднять разрешения уже запущенной оболочки; так что бы это могло сделать?

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

+0

Ну, способ вызвать оболочку и выйти из нее будет 'sudo sh -c exit' – tripleee