sudo -s
和之间有什么区别?sudo -i
为什么它们会给我不同的 shell?看来-s
让我留在 之内bash
,并-i
给了我sh
。
在 MacOSX High Sierra 10.13 上,如果我sudo -s
在终端中输入密码,我会得到 root 作为我的用户名,但提示符下会出现一个美元符号:
user1@mymachine:~$ sudo -s
**root@mymachine:~$**
但如果我输入sudo -i
,我会得到:
user1@mymachine:~$ sudo -i
Password:<br/>
**mymachine:~ root#**
为什么在上面的例子中,如果我是 root 用户,则不会出现井号 # sudo -s
? 我不是真正的 root 吗?
两者之间的环境变量是否不同?
答案1
您需要意识到的第一件事是,sudo -s
相当于sudo -s root
,sudo -i
相当于sudo -i root
。每当您从 sudo 中省略用户时,它都会假定您针对的是用户 root。
sudo -s
sudo -i
以目标用户身份登录时以目标用户身份运行 shell 。
无论何时运行,sudo -s
您实际上都在将 shell 更改为 root 用户 shell,而无论何时运行,sudo -i
您实际上都在注销当前用户并以 root 身份登录。了解这一点很重要,因为无论何时将 shell 更改为 root 用户 shell,您仍会保留用户导出信息。无论何时运行,您都在sudo -i
注销用户并以 root 身份登录。这意味着您采用了 root 用户的 shell 配置。
这无关紧要,但你应该避免将你的用户更改为 root,因为你可能会不小心破坏一些东西,你应该只对需要升级的每个命令执行 sudo,即使这很烦人。如果你真的想切换到 root shell,你应该运行它,su
这将允许你以 root 身份登录。