“sudo -i”和“sudo bash -l”有什么不同?

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

我在google和SE上search了这个,但是我不明白sudo bash -lsudo -i的区别。

从bash和sudo的手册页看来,区别可能在于sudo bash -l运行root用户的〜/ .bash_profile,〜/ .bash_login和〜/ .profile以及〜/ .bash_logout,而是从testing我自己看起来像运行正常用户的.bashrc而不是根。 我可能误解了〜expression式在手册页中引用的用户。 澄清差异和使用情况,将不胜感激。

它们的不同之处在于,如果/ etc / passwd中指定的root用户loginshell不是bash,那么第二个命令将以root用户身份得到一个bash shell,而第一个命令将使用root用户所拥有的交互shell。

还要添加到@ johnshen64答案我注意到, sudo -i调用更新$USERNAME envvariables为root和cd〜像这样的家庭用户;

 $ 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 

然而,对于sudo bash -l $USERNAME是不受干扰的,工作目录不会改变。 (尽pipe这在其他用户中并不一致,请参阅评论…)

 $ 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)