我在 Ask Ubuntu 中看到许多关于喜欢使用sudo -s
而不是 的评论sudo su
。
对我来说,这两个命令的作用完全相同。但为什么会sudo -s
更好呢?
答案1
我认为sudo -s
这并不是“更好”,而只是不同而已。
sudo -s
保留您的 $HOME 目录,因此当您启动程序时,它们将使用您的(而不是 root 的)配置文件等。缺点:它们还可以更改 $HOME 目录中文件的所有权,典型的例子是文件.Xauthority
,但我从未遇到过这样的问题。
sudo su
或者sudo -i
程序将使用根目录及其配置文件。这可能更直观,但这也意味着它不会使用您自己设置的任何配置(别名、bash 历史记录等)。
答案2
因为sudo -s
不会改变你的环境变量,尤其是$HOME
,它将保持HOME=/home/USER
。如果你使用 ,sudo su
它将更改为 ,HOME=/root
当你启动的程序尝试访问你的用户的主目录时,这可能会产生负面影响。
所以基本上它就像运行图形程序时的sudo
vs。gksudo
答案3
除了已经提到的环境变量差异之外,我发现这样做sudo su
很愚蠢,也很浪费,因为你要求以 root 身份sudo
运行su
,并要求它以 root 身份运行 shell。为什么要让一个程序要求另一个程序给你一个 root shell,而你可以让第一个程序给你那个 shell?这在实际意义上重要吗?不,我只是吹毛求疵。
答案4
考虑到您想要以没有 shell 的用户身份登录的情况,我不同意其他答案。这是分配给服务的用户非常常见的情况。
使用“sudo su”将启动用户指定的 shell。但是,如果用户被分配到服务器进程,shell 为 /usr/bin/false,日志记录将失败。您应该输入以下内容:
sudo -sHu <server-user>
即使用户没有分配 shell,它也会将你登录并 cd 到其主路径