su 与 su - 的区别

su 与 su - 的区别

参考资料

http://blog.51cto.com/nolinux/1267016

正文

su 可以理解为 switch user 。

这种区别也可以在提示符(prompt)上体现出来

su 后面不加用户是默认切到 root
su 是不改变当前环境变量(environment variable)
su - 是改变为切换到用户的环境变量(environment variable)

案例

1
2
3
4
5
6
7
8
[360team@localhost ~]$ su -
Password:
[root@localhost ~]# exit
logout
[360team@localhost ~]$ su root
Password:
[root@localhost 360team]# exit
exit

普通用户的案例

1
2
3
4
5
6
[root@localhost ~]# su 360team
[360team@localhost root]$ exit
exit
[root@localhost ~]# su - 360team
[360team@localhost ~]$ exit
logout

原因

注意的是 su 的另外一个参数“-”,当指定该参数的时候,将会进入一个 “login shell” ,即和该用户登录的情况完全一样。而不带参数“-”的时候进入的是一个 “non-login shell” 。
那么问题就归结到 “login shell” 和 “non-login shell” 的区别上来了。

它们的差别在于,对于一个 “login shell” ,bash在进入的时候会执行 /etc/profile, ~/.bash_profile, ~/.bash_login, ~/.profile 中的内容,退出的时候会执行 ~/.bash_logout 中的内容。
而对于一个 “non-login shell” ,bash进入的时候会执行 /etc/bash.bashrc, ~/.bashrc 中的内容。