我已经从手册中阅读了,但是我看不出区别。
su
- 切换用户ID或成为超级用户
sudo -s [command]
-s(shell)选项会运行由SHELL环境变量设置的shell,如果未设置,则运行passwd(5)中指定的shell。如果指定了命令,则将其传递给shell执行。否则,将执行一个交互式shell。
sudo -i
在手册中没有描述
su
(即“替代用户”或“切换用户”)- 正是如此,它启动另一个具有目标用户特权的shell实例。为了确保您有权执行此操作,它会要求您输入目标用户的密码。因此,要成为root用户,您需要知道root密码。如果您的计算机上有多个用户需要以root身份运行命令,则他们都需要知道root密码 - 请注意,它将是相同的密码。如果您需要从其中一个用户撤销管理员权限,则需要更改root密码,并仅告知那些需要保留访问权限的人 - 这样会变得混乱不堪。sudo su
组合的工作原理如下:首先,sudo
会要求您输入您自己的密码,如果您被允许这样做,它将以超级用户的身份调用下一个命令(su
)。因为su
是由root
调用的,所以它不需要您输入目标用户的密码。因此,如果您被/etc/sudoers
文件授予了超级用户访问权限,sudo su
允许您以另一个用户(包括root)的身份打开一个shell。su
被译为“切换用户”,而是一直作为超级用户; 默认行为是不带其他用户名称(虽然这样也没问题)。根据维基百科: “su命令,早在1974年就被称为超级用户[1],也被称作“替代用户”,“欺骗用户”或“设置用户”,因为它允许更改与当前终端(窗口)相关联的账户。” - dr jimbobsudo su
? - Kaz Wolfesudo su
的作用类似于sudo -s
吗? - Kaz Wolferoot
来安装 sudo
。虽然是同样的基本操作。安装程序镜像也不喜欢你不输入 root 密码。我已经设置了很多次了... - Thomas Wardsudo su
、sudo -i
和sudo -s
在实际用途上非常相似,sudo su
与其他变体一样有效。只需使用您喜欢的命令。而纯粹的su
(或者你说的su -
)行为完全不同,区别在我的回答中已经解释了。 - Sergeysudo
允许您以root权限在自己的用户帐户中运行命令。su
允许您切换用户,以便实际上作为root登录。
sudo -s
以root权限运行一个shell。sudo -i
还获取了root用户的环境。
要查看su
和sudo -s
之间的区别,请在每个命令后执行cd ~
然后pwd
。在第一种情况下,您将位于root的主目录中,因为您是root。在第二种情况下,您将位于自己的主目录中,因为您具有root权限。
关于这个确切问题的更多讨论在这里。
cd ~
结果不同的原因是 sudo -s 没有设置 $HOME 环境变量。 - Sergeydotancohen@melancholy:~$ ls .bin
lsl
dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl
dotancohen@melancholy:~$ sudo -i
root@melancholy:~# which lsl
root@melancholy:~# exit
logout
dotancohen@melancholy:~$ sudo -s
Sourced .bashrc
dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl
dotancohen@melancholy:~$ exit
exit
sudo -s
可以方便地提供你熟悉的环境,但出于两个原因,我推荐使用sudo -i
:
.bashrc
中插入的恶意代码。sudo -s
提供了一个用户熟悉的环境是什么意思? - Motivated~/.bashrc
的内容可能不再严格正确。因为你的~/.profile
很可能会引用.bashrc
,而sudo -i
会引用~/.profile
。 - Cassu
要求输入 root 密码,切换为 root 用户,并打开一个交互式的非登录 shell。su -
要求输入 root 密码,切换为 root 用户,并打开一个交互式的登录 shell。sudo -s
询问您的密码,成为超级用户,打开一个交互式非登录shell。sudo -i
询问您的密码,成为超级用户,打开一个交互式登录shell。最佳实践是使用上述两个命令。
sudo su
询问您的密码,暂时成为root用户以root身份运行su
。sudo su -
询问您的密码,暂时成为root用户以root身份运行su -
。因此,在这种情况下,您使用sudo
运行su
,而无需知道root的实际密码。结果与su
和su -
相同。
sudo -s
几乎等同于su
($HOME不同),而sudo -i
等同于su -
。 - DJCrashdummysu
。 sudo
更好地处理了这种情况。然而,在配置sudoers会很愚蠢的一次性情况下,su
非常适用。chroot
进入系统。在这种情况下,我的第一个命令通常是:su - myuser # Note the '-'. It means to act as if that user had just logged in.
su user
登录,应该使用su - user
。请参考http://unix.stackexchange.com/q/7013/8250。 - Lekensteynsudo -i
是坏的,但你肯定可以用它搞砸事情。 - Kellen Stuart