🧩 一、命令本质区别
| 命令 | 主要作用 | 权限来源 | 密码要求 |
|---|---|---|---|
sudo bash -i |
用当前用户的 sudo 权限启动一个交互式 root Shell | 当前用户(需在 sudoers 里) | 输入当前用户密码 |
su root |
直接切换到 root 用户 | 目标用户(root) | 需要root 密码 |
🧩 二、原理区别
✅ sudo bash -i
-
sudo表示"以超级用户身份执行命令"。 -
bash -i表示启动交互式 Bash Shell。 -
合在一起,就是:
"以 root 权限运行一个交互式 Bash Shell"。
它仍然是以你当前用户的身份 启动的,只是命令执行权限是 root 。
所以一些环境变量(比如 $HOME、$USER)仍可能指向你的普通用户。
✅ su root
-
su= substitute user(切换用户)。 -
执行后会完全切换到 root 账户,包括:
-
用户 ID(UID/GID)
-
环境变量(
$HOME=/root) -
登录 Shell
-
权限上下文
-
也就是说,su root 是真正"变成 root 用户本身 ",而 sudo bash -i 是"以 root 权限运行当前 shell"。
🧩 三、环境变量差异
| 环境变量 | sudo bash -i |
su root |
|---|---|---|
$USER |
原用户名 | root |
$HOME |
原用户的 home 目录 | /root |
$LOGNAME |
原用户 | root |
$SHELL |
bash(但继承自原用户) | root 的默认 shell |
$PATH |
可能继承用户的 PATH | root 的 PATH |
✅ 如果你想让 su 切换时带 root 的完整登录环境(像真正登录一样),用:
su - root
或简写:
su -
🧩 四、常见使用场景
| 场景 | 推荐命令 | 原因 |
|---|---|---|
| 你有 sudo 权限(常见于现代系统) | sudo -i 或 sudo bash -i |
安全,不需要 root 密码 |
| 系统管理员已设置 root 密码 | su - |
更传统,环境更干净 |
| 临时执行单条命令 | sudo command |
不必进入交互式 shell |
| 想进入完整 root 登录环境 | sudo -i 或 su - |
模拟真正登录 root |
🧩 五、总结对比表
| 对比项 | sudo bash -i |
su root |
|---|---|---|
| 是否需要 root 密码 | ❌ 否(用自己密码) | ✅ 是 |
| 环境变量是否切换到 root | 部分继承原用户 | 完全切换 |
| 是否进入 root 的 home 目录 | 否 | 是 |
| 权限方式 | 临时提升权限 | 完全切换用户 |
| 安全性(审计) | 高(sudo 可记录日志) | 相对低 |
| 推荐使用场景 | 普通用户临时提权 | 系统管理员登录 root |
✅ 一句话总结:
sudo bash -i是"以 root 权限打开一个交互 shell(仍保留原用户环境)";
su root是"切换成真正的 root 用户(连环境也变)"。