当前位置: 首页>>技术教程>>正文


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

,

问题描述

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

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。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/14571.html,未经允许,请勿转载。