su 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,属于用户与权限命令族(见用户与权限命令族)。临时需要别人(或 root)的身份时用它。
su(switch user,切换用户)让你在不注销的情况下,变成另一个用户(通常是 root)来运行命令。
一、基本用法
bash
su # 切到 root(需 root 密码),但保留原环境
su - # 切到 root 并加载 root 的完整环境(推荐)
su - alice # 切到 alice 用户并加载其环境关键区别:
su只切换身份,不加载目标用户的环境(PATH、HOME 等还是原来的);su -(带横杠,login shell)会完全模拟登录,加载目标用户的~/.bashrc/~/.profile,HOME/PATH 都变成对方的。日常切 root 用su -,避免环境错乱。
二、切回与原用户
bash
exit # 从 su 出的 shell 退回到原用户
Ctrl-D # 同 exit
su之后你进入了一个新 shell,退出(exit或Ctrl-D)就回到原来的用户。别在嵌套 su 里迷路——每层exit退一层。
三、su vs sudo
bash
su - # 要 root 密码,拿到完整 root shell
sudo -i # 用自己密码,拿 root shell(见 [sudo](/linux/cmd/sudo.md))现代系统更推荐 sudo:它不需要知道 root 密码(用你自己的密码+授权规则),还能精细控制"谁能跑什么"。
su要求共享 root 密码、难以审计,逐渐被 sudo 取代。但无 sudo 的容器/老旧系统里su仍是主力。
四、安全注意
bash
# /etc/pam.d/su 可限制哪些用户能 su
# 禁止 root 直接登录时,su 也受控
su直接要 root 密码,密码分发难以回收;且所有操作记在 root 名下,难以追溯是谁。生产环境优先 sudo 并配置/etc/sudoers审计。
一句话总结
su = 切换用户(switch user):su 只换身份不换环境,su - 加载目标完整环境(切 root 推荐);退出用 exit 回原用户;与 sudo(见sudo)比,su 要 root 密码、难审计,现代更推荐 sudo,但无 sudo 的容器/老系统仍靠它。