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

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

为什么在这个例子中一个比另一个更受青睐?

sudo su
echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf
exit

请提供 Ubuntu 文档的链接。

答案1

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

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

来源:手册页

答案2

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

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

如果您使用其他用户,差异会更加明显。之后sudo su bob您将成为 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理论上更便于携带。

答案3

主要问题是(不太)合理的环境设置之一。

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

您将sudo -i获得一个干净的 root shell。

关于 sudo 和 shell 的特别说明

需要注意的是,几乎没有必要创建 root shell。

相关内容