【Linux-运维】su和su -的区别

背景:公司为安全考虑,对登陆服务器的权限进行了收归,所有人员必须使用普通用户登录服务器。如需使用root权限运维或定位问题,需执行命令sudu susudo su -进行权限切换。

系统配置说明

CentOS 6.2

遇到的情况

由于需要使用root权限,在使用普通用户权限登陆机器后,使用sudo su命令切换到root用户。
切换后发现之前给root用户配置的环境变量均不起效了,仔细想了想应该是由于使用su命令切换用户root用户的环境变量没有切换过来,所以这里对susu -的区别进行简单梳理,防止遗忘。

su和su-的区别

su:将用户角色由普通用户切换至root,但保留普通用户的shell环境
su -:将用户角色由普通用户切换至root,并将shell环境切换为root的shell环境
两者的区别:

  1. shell环境不同:su使用的是原来普通用户的shell环境,su -使用的是root用户的shell环境
  2. 命令执行后的工作目录不同:su命令执行后会将目录切换至原普通用户的工作目录,su -命令执行后会将目录切换至root用户的目录
[test@Storm-Test ~]$ sudo su 
[root@Storm-Test /data/home/test]# echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin
[root@Storm-Test /data/home/test]# pwd
/data/home/test
[root@Storm-Test /data/home/test]# exit
[test@Storm-Test ~]$ sudo su -
[root@Storm-Test ~]# echo $PATH
/root/zale/tools/:/usr/local/jdk1.7.0_25/bin:/usr/local/Zookeeper/bin:/usr/local/apache-maven-3.0.5/bin:/usr/local/apache-storm-0.9.2-incubating/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@Storm-Test ~]# pwd
/root

总结

这里在使用过程中susu -除了环境变量和工作目录不相同以外,其他内容均保持一致。
如需在su的情况下刷新环境变量,执行命令source /etc/profile即可,效果如下。

[test@Storm-Test ~]$ sudo su
[root@Storm-Test /data/home/test]# echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin
[root@Storm-Test /data/home/test]# source /etc/profile     
[root@Storm-Test /data/home/test]# echo $PATH         
/root/zale/tools/:/usr/local/jdk1.7.0_25/bin:/usr/local/Zookeeper/bin:/usr/local/apache-maven-3.0.5/bin:/usr/local/apache-storm-0.9.2-incubating/bin:/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin

推荐阅读更多精彩内容