sudo -s命令的作用是什么,在本示例中如何使用?


8

我有以下疑问。在与软件安装相关的教程中,我要说的是我必须执行以下命令(我正在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

我的怀疑是:

命令-s后,该参数到底做什么sudo

在网上搜索后发现:

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

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

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

Answers:


7

简单的答案是它为您提供了根shell。这就是这里所使用的。在Unix.SE上的方法之间susudo -isudo -ssudo su有很好的技术比较但这在这里确实无关紧要。该代码可以使用任何代码并且可以正常工作。

帮助块意味着以下几点:

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

  • 如果$SHELL为空,则/etc/passwd使用该用户定义的默认外壳程序。

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

  • 如果您不传递命令,那么它也不会传递-c参数,因此您只需要一个交互式外壳。

我已经多次使用“ root”一词。通过默认情况下 sudo是所有关于运行事情根,但sudo(苏)可以运行事情,其他用户(如果你有这样的权限)。我只是为那些会哭泣的学步车说这句话,这sudo -s -u $USER并没有像我-s上面承诺的那样给他们一个根壳。


而且,以我的拙见,仅以两个命令成为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

我对任何建议使用root shell的教程都持怀疑态度,除非您确实有大量的命令要运行...甚至还有脚本。


完美的解释。现在更加清楚了。最后一个疑问。如果我将sudo附加到所有先前的命令中,我将获得相同的最终结果吗?是真的还是我错过了什么?
AndreaNobili 2014年

@Oli您对Zsh是100%正确的,“ sudo -s”以“ root”(不是超级用户)身份登录到“ root” shell。
RCF 2014年

@AndreaNobili是的,sudo通常是这样的;以root用户身份运行命令,而无需以root用户身份手动登录。
奥利(Oli

仅供参考,我在您的下方发布了一个答案,sudo -s由于我的知识有限并且偶然发生在整个情况下,因此我的看法截然不同。仍然,您可能想阅读我的“谦虚”答案,并可能刷新1/2年前的答案。
WinEunuuchs2Unix

0

sudo -s将像普通用户一样在当前目录中运行命令。例如:

rick@alien:~/askubuntu$ suspendtime
Nov 12 14:06:27 to Nov 12 17:22:21 lasting 11,754 seconds
Nov 12 22:23:37 to Nov 13 04:24:37 lasting 21,660 seconds
(... SNIP ...)
Dec 02 21:58:49 to Dec 03 04:20:52 lasting 22,923 seconds
Dec 03 05:52:43 to Dec 03 16:37:44 lasting 38,701 seconds

Linux uptime 1,859,356 seconds (21 days, 12 hours, 29 minutes, 16 seconds)
45 Suspends 1,173,341 seconds (13 days, 13 hours, 55 minutes, 41 seconds)
Real uptime 686,015 seconds (7 days, 22 hours, 33 minutes, 35 seconds)

rick@alien:~/askubuntu$ sudo suspendtime
sudo: suspendtime: command not found

rick@alien:~/askubuntu$ sudo -H suspendtime
sudo: suspendtime: command not found

rick@alien:~/askubuntu$ sudo -s suspendtime
Nov 12 14:06:27 to Nov 12 17:22:21 lasting 11,754 seconds
(...SNIP...)
Dec 03 05:52:43 to Dec 03 16:37:44 lasting 38,701 seconds

Linux uptime 1,859,431 seconds (21 days, 12 hours, 30 minutes, 31 seconds)
45 Suspends 1,173,341 seconds (13 days, 13 hours, 55 minutes, 41 seconds)
Real uptime 686,090 seconds (7 days, 22 hours, 34 minutes, 50 seconds)

当然,使用-s而不是给命令加上前缀./可能不会节省很多时间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.