我是 Ubuntu 的新用户,有人告诉我使用sudo -i
获取 root 权限,有人告诉我使用sudo -s
。两者有何区别?我该何时使用哪一个?
答案1
sudo -i
和之间的主要区别sudo -s
是:
sudo -i
为您提供根环境,即您的环境~/.bashrc
被忽略。sudo -s
为您提供用户的环境,因此您的环境~/.bashrc
受到尊重。
lsl
下面是一个示例,您可以看到我的目录中有一个应用程序~/.bin/
,可以通过 访问,sudo -s
但无法通过 访问sudo -i
。还请注意,Bash 提示符会随着 而改变,sudo -i
但不会随着 而改变sudo -s
:
dotancohen@melancholy:~$ ls .bin
lsl
dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl
dotancohen@melancholy:~$ sudo -i
root@melancholy:~# which lsl
root@melancholy:~# exit
logout
dotancohen@melancholy:~$ sudo -s
Sourced .bashrc
dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl
dotancohen@melancholy:~$ exit
exit
虽然sudo -s
可以方便地为您提供熟悉的环境,我建议使用sudo -i
原因有二:
- 视觉提醒您处于“根”会话中。
- 根环境不太可能受到恶意软件(例如 中的恶意线路)的攻击
.bashrc
。
答案2
sudo -i
-i [命令] -i(模拟初始登录)选项运行 shell 指定的 由目标用户的密码数据库条目确定为 登录 shell。这意味着登录特定的资源文件 shell 将读取诸如 .profile 或 .login 之类的文件。如果 指定命令后,将其传递给 shell 执行 通过 shell 的 -c 选项。如果没有指定命令,则 执行交互式 shell。sudo 尝试更改为 在运行 shell 之前,该用户的主目录。 安全策略应将环境初始化为最小 一组变量,类似于用户登录时出现的变量 sudoers(5) 手册中的命令环境部分 记录 -i 选项如何影响环境 当使用 sudoers 策略时运行命令。
sudo -s
-s [命令] -s(shell)选项运行 SHELL 指定的 shell 环境变量(如果已设置)或指定的 shell 在密码数据库中。如果指定了命令,则 通过 shell 的 -c 选项传递给 shell 执行。 如果没有指定命令,则执行交互式 shell。