为什么在这个例子中一个比另一个更受青睐?
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。
需要注意的是,几乎没有必要创建 root shell。