sudo su 和 sudo -i 之间的功能区别是什么?

chi*_*555 20 command-line sudo

为什么在这个例子中一个比另一个更受欢迎?

sudo su
echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf
exit
Run Code Online (Sandbox Code Playgroud)

请提供指向 Ubuntu 文档的链接。

Mit*_*tch 15

sudo su命令代表“切换用户”,允许您成为另一个用户。它允许允许的用户以超级用户或其他用户的身份执行命令,如 sudoers 文件中指定的那样。

?i(模拟初始登录)选项运行由目标用户的密码数据库条目指定的 shell 作为登录 shell。这意味着 shell 将读取特定于登录名的资源文件,例如 .profile 或 .login。如果指定了命令,它将通过 shell 的 ?c 选项传递给 shell 以执行。如果未指定命令,则执行交互式 shell。

来源:手册页

  • 删除您的评论只会增加混乱。 (3认同)
  • 不,不会。`sudo` 以 root 身份运行 `su`,root 可以在不知道密码的情况下对任何用户进行 `su`。对系统如何工作的根本误解值得 IMO 投反对票。 (2认同)

Ora*_*Dog 14

sudo su只将当前用户更改为 root。环境设置(如 PATH)保持不变。

sudo -i 创建一个新环境,就像 root 刚刚登录一样。

如果您使用其他用户,差异会更加明显。之后sudo su bob你将成为鲍勃,但在同一个地方。在sudo -i -u bob您成为 bob 之后,在 bob 的主目录中,使用 bob 的默认 shell 以及 bob.profile和任何其他已运行的登录脚本。

请参阅man sudo了解更多详情-i。不幸的是,man su对细节的了解很少。


发现一个版本man su(来自 login-1:4.1.4.2+svn3283-3ubuntu5.1)有以下内容:

$PATH 根据 /etc/login.defs 选项 ENV_PATH 或 ENV_SUPATH 重置(见下文);

$IFS 重置为“<space><tab><newline>”(如果已设置)。

请注意,环境的默认行为如下:

$HOME、$SHELL、$USER、$LOGNAME、$PATH 和 $IFS 环境变量被重置。

如果未使用 --login ,则复制环境,但上述变量除外。

如果使用 --login,则 $TERM、$COLORTERM、$DISPLAY 和 $XAUTHORITY 环境变量在已设置的情况下将被复制。

其他环境可能由 PAM 模块设置。

因此,是否以及在多大程度上sudo su改变环境取决于您的发行版和设置。因此sudo -i理论上更便携。


gun*_*ert 8

主要问题是(并非如此)健全的环境设置之一。

使用sudo su新 shell 从发出命令的用户那里获取其环境 - 这可能有问题。

有了sudo -i干净的根外壳。

请参阅有关 sudo 和 shell 的特别说明

仍然需要注意的是,很少需要创建根 shell。