为什么在这个例子中一个被偏爱而不是另一个?
请提供Ubuntu文档的链接。
sudo su
echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf
exit
请提供Ubuntu文档的链接。
sudo su
echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf
exit
sudo su
命令代表“切换用户”,允许您成为另一个用户。它允许授权用户以超级用户或其他用户的身份执行命令,如 sudoers
文件中指定的那样。
‑i
(模拟初始登录)选项将目标用户的密码数据库条目指定的 shell 作为登录 shell 运行。这意味着 shell 将读取特定于登录的资源文件,例如 .profile
或 .login
。如果指定了命令,则通过 shell 的 ‑c
选项将其传递给 shell 执行。如果未指定命令,则执行交互式 shell。
来源:ManPage
su
完全无关。 - OrangeDogsudo su
,会要求你输入密码,而不是root密码。root用户甚至不需要设置密码。无论如何,如果管理员使用root密码,并不意味着所有普通用户都知道它。 - OrangeDogsudo
会以 root 权限运行 su
命令,而 root 可以在不知道用户密码的情况下切换到任何用户。对系统如何工作的基本误解应该被我认为贬低。 - OrangeDogsudo -i
也不会要求输入root密码,所以与问题无关。 - OrangeDogsudo 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),它有以下内容:sudo su
改变环境取决于您的发行版和设置。因此,理论上sudo -i
更具可移植性。su
可以更改环境设置,并可使用 -
或 -l
模拟登录。即使没有 -l
,$PATH
也会被更改。在发表之前,请先测试这些声明!(您是不是想说 PWD
保持不变?) - Kyle Strandsudo su -
和sudo -i
之间有什么区别? - Kyle Strandsudo su
不会运行.profile
(因为它还没有登录)或者.bashrc
(因为它还没有启动bash),也不会改变任何东西,那么它怎么会改变PATH呢? - OrangeDog/etc/passwd
中提取的,但我没有看到(在测试期间也没有)PATH如何改变。 - OrangeDogsu
而不使用sudo
(使用root密码)时,确实观察到了$PATH
的变化。根据info su
(也许是你回答中更好的链接),su
确实读取了要切换到的用户的密码条目。可能我观察到的$PATH
的变化是与系统有关的(我使用的是Debian 7)。 - Kyle Strandsu
会改变 HOME、USER、LOGNAME 和 SHELL。sudo su
也会将 SUDO_COMMAND 和 USERNAME(变成 root)更改。如果要切换到的用户的 shell 与当前 shell 不同,它将启动该 shell,并运行其 rc 文件。 - OrangeDogshadow-utils 4.1.5.1
的一部分。我的“man”页面还说,即使使用了 --preserve-environment
, $PATH
也会被设置。所以我猜这只是不同版本的 su
之间的差异。 - Kyle Strand/etc/pam.d/sudo
和/etc/pam.d/su
可能被设置为完全不同或完全相同的操作。 - OrangeDogsudo su
,新的shell从发出命令的用户那里获取其环境-这可能会有问题。sudo -i
可以获得一个干净的root shell。sudo -i
类似于sudo su -
,但实际上它并不会从执行该命令的用户获取环境。 - Kyle Strandsudo su
和 sudo -i
的区别。 - guntbertsudo su
会有问题?能否详细解释一下这个想法? - Manuel Jordan