“sudo -s”实际上是做什么的?

Lee*_*eem 30 linux command-line ubuntu linux-kernel ubuntu-10.04

我正在使用 ubuntu 10.04。

我注意到在终端运行后:

sudo -s
Run Code Online (Sandbox Code Playgroud)

提示从:

my_user@my_hostname
Run Code Online (Sandbox Code Playgroud)

到:

root@my_hostname
Run Code Online (Sandbox Code Playgroud)

似乎它更改为root权限。

但是当我在这里查看sudocommand的文档时,它解释了另一个故事,谁能向我解释到底在做什么?sudo -ssudo -s

小智 10

这两者并没有真正不一致——该sudo命令总是将用户更改为 root,或者更改为您使用-u开关指定的用户。所有-s所做的就是启动一个shell为用户提供一个快捷方式。它实际上相当于:

sudo $SHELL
Run Code Online (Sandbox Code Playgroud)

除了它可能会回退到/bin/sh或者如果SHELL没有设置。


小智 7

sudo -s$SHELL以超级用户/root 身份运行在您的环境变量中指定的 shell 。您可以使用 指定另一个用户-u

$SHELL环境变量包含路径到用户的默认登录shell。默认 shell 程序的实际设置通常在etc/passwd. 根据您在当前会话中所做的工作,该$SHELL变量可能不包含您当前使用的 shell 程序。zsh例如,如果您自动登录,然后调用 bash,$SHELL则不会从/bin/zsh.

显示当前用户和shell程序:

echo $(whoami) is logged in and shell is $0
Run Code Online (Sandbox Code Playgroud)
  • whoami 打印出用户正在使用的用户名。
  • $0 包含当前正在运行的程序的名称/路径(在本例中为 shell 程序)。


小智 0

听起来它正在当前 shell 之上创建另一个 shell 实例,但具有 root 权限。我敢打赌,sudo -s如果您输入 exit 后,您将返回到原始 shell。