su
和 su -
是两个非常相似但略有不同的命令,它们的区别主要在于如何加载用户的环境。
1. su
(Switch User)
- 仅切换用户身份,但不会加载目标用户的环境变量。
- 当前的工作目录保持不变,继续使用原来的 shell 环境变量。
- 例如,使用
su
切换到 root 用户时,你仍然会保留原来的用户环境,而不是完全进入 root 的环境。
示例:
su root
如果执行 echo $HOME
,可能会显示原用户的 home 目录路径。
2. su -
(Switch User with Login Shell)
- 以登录 shell 的方式切换用户身份,加载目标用户的完整环境变量。
- 切换后,工作目录会变为目标用户的 home 目录,并加载该用户的配置文件(如
.bash_profile
或.bashrc
)。 - 使用
su -
切换到 root 用户时,你将进入 root 的完整登录环境,像是通过登录终端进入 root 用户一样。
示例:
su - root
如果执行 echo $HOME
,会显示 /root
,即 root 用户的 home 目录。
总结
su
仅切换用户,但不切换环境变量,适合只需要执行某个特定任务的场景。su -
切换用户并加载完整的登录环境,适合希望完全使用目标用户环境的场景,比如以 root 身份进行管理任务时。