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


13

最近有一个有关多个以root身份运行的sysadmin的问题sudo bash -l已被引用。

我搜索了这对谷歌和SE,但我不明白之间的差别sudo bash -lsudo -i

从bash和sudo的手册页看来,差异可能是sudo bash -l运行根用户的〜/ .bash_profile,〜/ .bash_login和〜/ .profile和〜/ .bash_logout,但是通过测试自己,它看起来像它运行普通用户的.bashrc而不是root用户。我可能会误解了〜表达式在手册页中引用的是哪个用户。澄清差异和使用方案将不胜感激。

Answers:


10

它们的区别在于,如果/ etc / passwd中指定的root用户登录shell不是bash,则第二个命令将为您提供bash shell作为root,而第一个命令将使用root用户拥有的任何交互式shell。


嗨@ johnshen64,您能否阐明不同的使用场景?
罗科美2012年

2
人们喜欢他们正在使用的shell,因此,如果您要确保使用bash,则应使用第二种形式。第二种形式还模拟了实际的登录(即-l的意思)。当然,当您发现用户(默认为root)没有使用bash作为使用sudo -i的交互式shell时,也可以键入bash。否则差异很小。如其他答案所示,环境之间也存在一些细微差异。在大多数情况下,差异并不重要,第一个较短,因为大多数常见发行版都使用bash。我很少使用第二种形式。
johnshen64 2012年

4

也添加到@ johnshen64回答我注意到sudo -i调用更新$USERNAME环境变量来rootcd ~用户家像这样;

$ 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

但是for sudo 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)


谢谢@Tom H:echo $USERNAME我两次都返回了root(在我的ubuntu桌面和centos 5.2上)。PWD是您所报告的。
罗科美2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.