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]
)。
简单的答案是它为您提供了一个 root shell。这就是它在这里的用途。在 Unix.SE 上的、和方法之间su
sudo -i
sudo -s
sudo 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 的教程,除非您确实有大量命令要运行......即使这样,还有脚本。