假设我运行命令
exit
显然终端退出,因为这是命令的目的。
我理解sudo意味着以管理员权限运行命令。如果我跑:
sudo exit
然后我得到" sudo:exit:命令未找到"从终端。为什么终端在这种情况下不会识别命令并继续退出终端,就像没有sudo时一样?
答案 0 :(得分:0)
大多数"命令"在类似unix的环境中实际上是外部程序和脚本。像exit
这样的一些内容是内置在shell中的实际命令。 sudo
无法识别后者。
从手册页:
当sudo运行命令时,它调用fork(2),设置执行 如上所述的环境,并调用execve系统调用 孩子的过程。
来自execve
手册页:
execve()执行filename指向的程序。
没有名为exit
的程序;它只是一个shell识别的命令。
以这种方式思考:Unix授予进程权限。 sudo
运行具有提升/修改权限的进程。但是,当您运行exit
时,您不会产生新流程。 sudo
无法提升已经运行的shell的权限;那会怎样呢?
你可以做的是告诉sudo
生成另一个shell,传递exit
作为运行该shell的命令......当然不会做任何事情。