【问题标题】:Using sudo with other commands [closed]将 sudo 与其他命令一起使用 [关闭]
【发布时间】:2017-02-08 13:36:01
【问题描述】:

假设我运行命令

exit

显然终端退出,因为这是命令的目的。

我理解 sudo 意味着以管理员权限运行命令。如果我跑:

sudo exit

然后我从终端得到“sudo: exit: command not found”。为什么在这种情况下终端无法识别命令并继续退出终端,就像在没有 sudo 的情况下运行时那样?

【问题讨论】:

  • exit 不是一个程序,它是一个内置的shell,你也应该试试echo --helpsudo echo --help。我认为sudo 可能只想执行一个程序,而不是内置的shell
  • sudo 肯定想要一个可执行文件。
  • 另外添加,您可以使用type [-a] cmd 知道命令的类型,例如type -a exittype -a pwd

标签: linux bash linux-mint


【解决方案1】:

类 unix 环境中的大多数“命令”实际上是外部程序和脚本。一些,如exit,是内置在shell 中的实际命令。 sudo 无法识别后者。

来自手册页:

当 sudo 运行命令时,它会调用 fork(2),设置执行 环境如上所述,并调用 execve 系统调用 子进程。

来自execve 手册页:

execve() 执行文件名指向的程序。

没有名为exit的程序;这只是 shell 识别的命令。

这样想:Unix 授予进程权限。 sudo 运行具有提升/修改权限的进程。但是当你运行exit 时,你并没有产生一个新进程。 sudo 无法提升已经运行的 shell 的权限;那么它可能会做什么呢?

您可以做的是告诉sudo 生成另一个shell,将exit 作为运行该shell 的命令传递...当然,这不会做任何事情。

【讨论】:

  • 好吧,调用 shell 并让它退出的方法是 sudo sh -c exit
猜你喜欢
  • 2012-10-23
  • 1970-01-01
  • 2021-11-07
  • 2011-01-16
  • 2020-01-20
  • 1970-01-01
  • 2014-09-01
  • 2013-01-05
  • 1970-01-01
相关资源
最近更新 更多