su
与su -
都是用来切换用户的命令,简单说它们之间的区别就是:su -
切换的干净彻底,而su
切换用户却拖泥带水。
su
su username
,切换到指定用户,但是当前目录不会变化,环境变量还是上一个用户的环境变量。
su -
su - username
,切换到指定用户,当前目录即刻切换成指定用户的家目录,即~
,环境变量
即刻切换到指定目录的环境变量。
测试环境
测试环境是CentOS6.9_64位,系统中有两个用户oldboy和root
oldboy的环境变量和家目录如下
[oldboy@as4k ~]$ echo ~
/home/oldboy
[oldboy@as4k ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/oldboy/bin
[oldboy@as4k ~]$
root用户的环境变量和家目录如下
[root@as4k ~]# echo ~
/root
[root@as4k ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@as4k ~]#
测试效果
root -> oldboy (su -)
[root@as4k ~]# pwd && echo $PATH
/root
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@as4k ~]# su - oldboy
[oldboy@as4k ~]$ pwd && echo $PATH
/home/oldboy
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/oldboy/bin
oldboy -> root (su -)
[oldboy@as4k ~]$ pwd && echo $PATH
/home/oldboy
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/oldboy/bin
[oldboy@as4k ~]$ su - root
Password:
[root@as4k ~]# pwd && echo $PATH
/root
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
root -> oldboy (su)
[root@as4k ~]# pwd && echo $PATH
/root
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@as4k ~]# su oldboy
[oldboy@as4k /root]$ pwd && echo $PATH
/root
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
oldboy -> root (su)
[oldboy@as4k ~]$ pwd && echo $PATH
/home/oldboy
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/oldboy/bin
[oldboy@as4k ~]$ su root
Password:
[root@as4k /home/oldboy]# pwd && echo $PATH
/home/oldboy
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/oldboy/bin
结论
切换用户尽量使用su -
,干净彻底,符合人类认知。
问题: 一不小心使用su切换了用户,傻傻分不清自己到底用的是哪个环境,怎么办?
解决: 使用su - username
再切换一次,即使自己已经是oldboy用户,还是可以su - oldboy
再切换一次,以达到更改操作环境的目的。
[oldboy@as4k ~]$ pwd && echo $PATH
/home/oldboy
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/oldboy/bin
[oldboy@as4k ~]$ su root
Password:
[root@as4k /home/oldboy]# pwd && echo $PATH
/home/oldboy # what ? 我的环境乱了
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/oldboy/bin
[root@as4k /home/oldboy]# su - root
[root@as4k ~]# pwd && echo $PATH
/root # ok 回到了熟悉的环境
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin