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。