Rqo*_*mey 13 linux bash root sudo
最近有一个关于多个系统管理员以 root 身份工作的问题,sudo bash -l并被引用。
我搜索了这对谷歌和SE,但我不明白之间的差别sudo bash -l和sudo -i。
从 bash 和 sudo 的手册页看来,不同之处可能在于sudo bash -l运行 root 用户的 ~/.bash_profile、~/.bash_login 和 ~/.profile 以及 ~/.bash_logout,但从我自己的测试来看,它看起来像它运行普通用户的 .bashrc 而不是根用户。我可能误解了 ~ 表达式在手册页中引用了哪个用户。对差异和使用场景的澄清将不胜感激。
joh*_*n64 10
它们的不同之处在于,如果 /etc/passwd 中指定的 root 用户登录 shell 不是 bash,那么第二个命令将以 root 身份获取 bash shell,而第一个命令将使用 root 用户拥有的任何交互式 shell。
另外,为了添加到 @johnshen64 答案,我注意到调用将env 变量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
Run Code Online (Sandbox Code Playgroud)
但是 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
Run Code Online (Sandbox Code Playgroud)
所以想必您没有得到完全相同的一组~/.bashrc,或者顺序不同等。
(我的盒子可能因为我的修补而弄乱了一点.bashrc,所以 YMMV)