“sudo -i” 和 “sudo bash -l” 有什么区别

“sudo -i” 和 “sudo bash -l” 有什么区别

有一个最近的问题关于多个系统管理员以 root 身份工作,并被sudo bash -l引用。

sudo bash -l我在谷歌和 SE 上搜索了这个问题,但我不明白和之间的区别sudo -i

从 bash 和 sudo 的手册页来看,差异可能在于sudo bash -l运行 ~/.bash_profile、~/.bash_login、~/.profile 和 root 用户的 ~/.bash_logout,但通过我自己的测试,它似乎运行的是普通用户的 .bashrc,而不是 root 的。我可能误解了手册页中 ~ 表达式引用的是哪个用户。如果能澄清差异和使用场景,我将不胜感激。

答案1

它们的不同之处在于,如果 /etc/passwd 中指定的 root 用户登录 shell 不是 bash,那么第二个命令将以 root 身份获取一个 bash shell,而第一个命令将使用 root 用户拥有的任何交互式 shell。

答案2

另外,为了补充@johnshen64 的回答,我注意到调用会将环境变量sudo -i更新为用户主页,如下所示;$USERNAMErootcd ~

$ sudo -i
[root@workstation001 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 ~]# echo $USERNAME
root
[root@workstation001 userXXX]# echo $PWD
/root

但是 forsudo bash -l $USERNAME未受干扰,并且工作目录也没有改变。(尽管这与其他用户不一致,请参阅评论......)

$ sudo bash -l
[root@workstation001 userXXX]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 userXXX]# echo $USERNAME
userXXX
[root@workstation001 userXXX]# echo $PWD
/home/userXXX

因此,推测您获得的可能不是完全相同的集合~/.bashrc,或者不是按照相同的顺序等等。

(我的盒子可能因为我的捣鼓而有点乱.bashrc,所以 YMMV)

相关内容