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