问题描述
为什么在这个例子中一个比另一个更受青睐?
sudo su
echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf
exit
请提供 Ubuntu 文档的链接。
最佳方法
sudo su
命令代表 “switch user”,允许您成为另一个用户。它允许获准的用户以超级用户或其他用户的身份执行命令,如 sudoers
文件中所指定。
\u2011i
(模拟初始登录)选项将目标用户的密码数据库条目指定的 shell 作为登录 shell 运行。这意味着 shell 将读取 login-specific 资源文件(例如 .profile
或 .login
)。如果指定了命令,则该命令将通过 shell 的 \u2011c
选项传递给 shell 执行。如果未指定命令,则执行交互式 shell。
来源:ManPage
次佳方法
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),其中有以下内容:
\\n
$PATH reset according to the /etc/login.defs options ENV_PATH or ENV_SUPATH (see below);
\\n
$IFS reset to \\u201c<space><tab><newline>\\u201d, if it was set.
\\n
Note that the default behavior for the environment is the following:
\\n
The $HOME, $SHELL, $USER, $LOGNAME, $PATH, and $IFS environment variables are reset.
\\n
If –login is not used, the environment is copied, except for the variables above.
\\n
If –login is used, the $TERM, $COLORTERM, $DISPLAY, and $XAUTHORITY environment variables are copied if they were set.
\\n
Other environments might be set by PAM modules.
\\n
因此,sudo su
是否会改变环境以及改变的程度取决于您的发行版和设置。因此,sudo -i
理论上更易于移植。
第三种方法
主要问题是(不太)合理的环境设置之一。
使用 sudo su
,新 shell 从发出命令的用户那里获取其环境 – 这可能会有问题。
使用 sudo -i
您将获得一个干净的 root shell。
参见 Special notes on sudo and shells
需要注意的是,几乎没有必要创建 root shell。