Linux 中sudo bash -i 和 su root 有什么区别?

🧩 一、命令本质区别

命令 主要作用 权限来源 密码要求
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 -isudo bash -i 安全,不需要 root 密码
系统管理员已设置 root 密码 su - 更传统,环境更干净
临时执行单条命令 sudo command 不必进入交互式 shell
想进入完整 root 登录环境 sudo -isu - 模拟真正登录 root

🧩 五、总结对比表

对比项 sudo bash -i su root
是否需要 root 密码 ❌ 否(用自己密码) ✅ 是
环境变量是否切换到 root 部分继承原用户 完全切换
是否进入 root 的 home 目录
权限方式 临时提升权限 完全切换用户
安全性(审计) 高(sudo 可记录日志) 相对低
推荐使用场景 普通用户临时提权 系统管理员登录 root

一句话总结:

  • sudo bash -i 是"以 root 权限打开一个交互 shell(仍保留原用户环境)";

  • su root 是"切换成真正的 root 用户(连环境也变)"。

相关推荐
Lsir10110_13 分钟前
【Linux】进程信号(下半)
linux·运维·服务器
skywalk816330 分钟前
unbound dns解析出现问题,寻求解决之道
运维·服务器·dns·unbound
酉鬼女又兒31 分钟前
零基础入门Linux指南:每天一个Linux命令_pwd
linux·运维·服务器
云飞云共享云桌面33 分钟前
高性能图形工作站的资源如何共享给10个SolidWorks研发设计用
linux·运维·服务器·前端·网络·数据库·人工智能
skywalk816335 分钟前
走近科学:unbound dns域名服务器自己本地解析出现问题,寻求解决之道
运维·服务器·dns·unbound
zl_dfq35 分钟前
Linux 之 【多线程】(pthread_xxx、轻量级进程、原生线程库、线程ID、__thread、线程栈、线程与信号、线程与程序替换)
linux
choke23336 分钟前
Python 基础语法精讲:数据类型、运算符与输入输出
java·linux·服务器
袁煦丞 cpolar内网穿透实验室39 分钟前
远程调试内网 Kafka 不再求运维!cpolar 内网穿透实验室第 791 个成功挑战
运维·分布式·kafka·远程工作·内网穿透·cpolar
AZ996ZA1 小时前
自学linux的第二十一天【DHCP 服务从入门到实战】
linux·运维·服务器·php
_OP_CHEN1 小时前
【Linux系统编程】(二十八)深入 ELF 文件原理:从目标文件到程序加载的完整揭秘
linux·操作系统·编译·c/c++·目标文件·elf文件