Skip to content

Linux系统中su-用户和su的区别

su 用户su - 用户(也可以写成 su --login 用户)之间的主要区别在于它们如何处理用户环境和 shell 初始化文件:

su 用户

  • 加载环境:不完全切换到目标用户的环境。保持当前会话的大部分环境变量,只切换到目标用户的身份。
  • 适用场景:希望以另一个用户的身份运行命令,但保留当前会话的大部分环境设置。
  • 示例
    bash
    su 用户名
    切换到 用户名,但环境变量如 PATH 等仍可能包含原用户的信息。

su - 用户

  • 加载环境:完全切换到目标用户的环境,就像直接登录该用户一样。这会加载目标用户的登录 shell 初始化文件(如 .bash_profile.profile)以及环境变量。
  • 适用场景:希望完全模拟目标用户的登录环境,包括所有相关的环境变量和初始化脚本。
  • 示例
    bash
    su - 用户名
    切换到 用户名,并加载该用户的完整登录环境。

详细区别

环境变量

  • su 用户:继承当前会话的大部分环境变量。
  • su - 用户:重置环境变量,加载目标用户的环境设置。

初始化文件

  • su 用户:不会加载目标用户的登录 shell 初始化文件(如 .bash_profile.profile)。
  • su - 用户:加载目标用户的登录 shell 初始化文件。

工作目录

  • su 用户:保持当前目录不变。
  • su - 用户:切换到目标用户的 home 目录。

示例

假设当前用户为 user1,希望切换到 user2

使用 su user2

bash
user1@machine:~$ su user2
Password: 
user2@machine:/home/user1$
  • 保持 /home/user1 目录不变。
  • 环境变量和 shell 初始化文件大部分保持与 user1 相同。

使用 su - user2

bash
user1@machine:~$ su - user2
Password: 
user2@machine:~$
  • 切换到 user2 的 home 目录 /home/user2
  • 加载 user2 的环境变量和 shell 初始化文件。

总结

  • su 用户:适用于需要临时以其他用户身份运行命令,但保留当前环境变量的情况。
  • su - 用户:适用于需要完全模拟目标用户的登录环境,包括加载其初始化脚本和环境变量的情况。