'sudo -s' 命令有什么作用,它在这个例子中是如何使用的?

And*_*ili 8 permissions command-line bash sudo software-installation

我有以下疑问。在与我正在关注的软件安装相关的教程中,我说我必须执行以下命令(我在ssh shell 中执行此操作,因此此步骤列表以exit命令结尾):

sudo -s
apt-get update
apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen
exit
Run Code Online (Sandbox Code Playgroud)

我的疑问是:

命令-s后的参数究竟有什么作用sudo

在网上搜索我发现:

?s [command] ?s (shell) 选项运行由 SHELL 环境变量指定的 shell(如果它已设置)或密码数据库中指定的 shell。如果指定了命令,它将通过 shell 的 ?c 选项传递给 shell 以执行。如果未指定命令,则执行交互式 shell

在我看来,sudo -s使用 shell 的环境变量执行命令。

但这对我来说并不清楚:在这种情况下,使用环境变量执行的命令是什么?(它只执行sudo -s而不是sudo -s [command])。

Oli*_*Oli 7

简单的答案是它为您提供了一个 root shell。这就是它在这里的用途。在 Unix.SE 上的方法之间susudo -isudo -ssudo su有一个很好的技术比较但这在这里真的不相关。该代码可以使用任何并且会起作用。

帮助金块意味着以下几点:

  • 它正在$SHELL环境变量中寻找命令。如果您运行,echo $SHELL您可能会看到/bin/bash. 这意味着您将获得 Bash 的根实例。我敢肯定,如果您在其中,zsh则意味着您将获得zsh.

  • 如果$SHELL为空,则回退到/etc/passwd为该用户定义的默认 shell 。

  • 如果您提供命令(例如sudo -s whoami),它实际上正在运行:sudo /bin/bash -c "whoami"

  • 如果您不传递命令,则它不会传递-c参数,因此您只会获得一个交互式 shell。

我已经多次使用“root”这个词。通过默认情况下 sudo是所有关于运行事情根,但sudo(苏)可以运行事情,其他用户(如果你有这样的权限)。我只是为那些会大喊大叫的学究们说明这一点,因为他们不会sudo -s -u $USER像我-s上面承诺的那样给他们一个 root shell 。


在我最卑微的意见中,仅仅为两个命令成为 root 真的很愚蠢,更不用说它可能会让用户意外地以 root 身份运行更多命令。如果您想或需要以 root 身份运行某些东西,只需在命令前加上sudo

sudo apt-get update
sudo apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen
Run Code Online (Sandbox Code Playgroud)

我会怀疑任何建议获取 root shell 的教程,除非您确实有大量命令要运行......即使这样,还有脚本。