Linux下su与su -命令的区别

susu -都是用来切换用户的命令,简单说它们之间的区别就是:su -切换的干净彻底,而su
切换用户却拖泥带水。

su

su username,切换到指定用户,但是当前目录不会变化,环境变量还是上一个用户的环境变量。

su -

su - username,切换到指定用户,当前目录即刻切换成指定用户的家目录,即~环境变量
即刻切换到指定目录的环境变量。

测试环境

测试环境是CentOS6.9_64位,系统中有两个用户linuxidc和root

oldboy的环境变量和家目录如下

[linuxidc@linuxidc~]$ echo ~
/home/linuxidc
[oldboy@linuxidc~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/linuxidc/bin
[oldboy@linuxidc~]$

root用户的环境变量和家目录如下

[root@linuxidc~]# echo ~
/root
[root@linuxidc~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@linuxidc~]#

测试效果

root -> linuxidc (su -)

[root@linuxidc~]# pwd && echo $PATH
/root
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@linuxidc~]# su - linuxidc
[oldboy@linuxidc~]$ pwd && echo $PATH
/home/linuxidc
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/linuxidc/bin

oldboy -> root (su -)

[linuxidc@linuxidc~]$ pwd && echo $PATH
/home/linuxidc
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/linuxidc/bin
[oldboy@linuxidc~]$ su - root
Password:
[root@linuxidc~]# pwd && echo $PATH
/root
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

root -> linuxidc (su)

[root@linuxidc~]# pwd && echo $PATH
/root
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@linuxidc~]# su linuxidc
[oldboy@linuxidc/root]$ pwd && echo $PATH
/root
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

linuxidc -> root (su)

[linuxidc@linuxidc~]$ pwd && echo $PATH
/home/linuxidc
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/linuxidc/bin
[oldboy@linuxidc~]$ su root
Password:
[root@linuxidc/home/linuxidc]# pwd && echo $PATH
/home/linuxidc
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/linuxidc/bin

结论

切换用户尽量使用su -,干净彻底,符合人类认知。

问题: 一不小心使用su切换了用户,傻傻分不清自己到底用的是哪个环境,怎么办?

解决: 使用su - username 再切换一次,即使自己已经是linuxidc用户,还是可以su - linuxidc
再切换一次,以达到更改操作环境的目的。

[linuxidc@linuxidc~]$ pwd && echo $PATH
/home/linuxidc
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/linuxidc/bin
[oldboy@linuxidc~]$ su root
Password:
[root@linuxidc/home/linuxidc]# pwd && echo $PATH
/home/linuxidc    # what ? 我的环境乱了
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/linuxidc/bin
[root@linuxidc/home/linuxidc]# su - root
[root@linuxidc~]# pwd && echo $PATH
/root  # ok 回到了熟悉的环境
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

相关推荐