有一个最近的问题关于多个系统管理员以 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
更新为用户主页,如下所示;$USERNAME
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
但是 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)