Appearance
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 - 用户:适用于需要完全模拟目标用户的登录环境,包括加载其初始化脚本和环境变量的情况。
