su只是切换了root身份,但是SHELL环境依然是普通用户的SHELL;su - 是用户身份和SHELL环境都切换成root(比如我们公司的XXX,我经常看到他在切换管理员的时候就直接执行su)废话就不多说了,以普通用户lb切换到root为例直接实战。
1、不完整切换
[root@node1 ~]# useradd lb[root@node1 ~]# id lbuid=501(lb) gid=501(lb) groups=501(lb)[root@node1 ~]# grep "lb" /etc/passwdlb:x:501:501::/home/lb:/bin/bash[root@node1 ~]# su - lb[lb@node1 ~]$ whoamilb[lb@node1 ~]$ suPassword:[root@node1 lb]# whoamiroot[root@node1 lb]# env|egrep "USER|^PATH|MAIL|PWD"USER=lbPATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/lb/binMAIL=/var/spool/mail/lbPWD=/home/lb
2、完整切换
[lb@node1 ~]$ su -Password: [root@node1 ~]# whoamiroot[root@node1 ~]# env|egrep "USER|^PATH|MAIL|PWD"USER=rootMAIL=/var/spool/mail/rootPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/binPWD=/root
3、su命令小结
【功能说明】
用户角色切换,"-"表示切换用户环境变量(完整切换)
【语法格式】
su [OPTION]... [-] [USER [ARG]...]
【实践操作】
[root@node1 ~]# su – lb[lb@node1 ~]$
【常用参数】
- 切换用户环境变量
-l 同"-",会切换用户环境变量
-c 指定用户身份执行命令,如:su - lb -c "touch lb.txt",执行完指定命令后恢复到原来的身份