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

在这个例子中,为什么一个优先于另一个?

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

请提供Ubuntu文档的链接。

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

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

来源: ManPage

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

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

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

有关-i更多详细信息,请参阅man sudo 。 不幸的是, man su在细节上很轻松。


找到man su一个版本(来自login-1:4.1.4.2 + svn3283-3ubuntu5.1),其中包含以下内容:

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

$ IFS重置为“ ”,如果已设置。

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

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

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

如果使用了–login,则会设置$ TERM,$ COLORTERM,$ DISPLAY和$ XAUTHORITY环境变量。

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

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

主要问题是(不是那样)理智的环境设置之一。

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

使用sudo -i可以获得干净的root shell。

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

仍然需要注意,根本不需要创建根shell。