一、su命令
su是最简单的用户切换命令,通过该命令可以实现任何用户之间的互相切换,当然能够正确切换的前提就是输入正确的密码。普通用户切换至root用户或者普通用户之间互相切换都要知道对方账户的密码,root用户切换至普通用户直接就可以切换,无需知晓对方密码。
su命令的基本格式:
[root@localhost ~]# su [选项] 用户名
选项:
-:当前用户不仅切换为指定用户身份,同时所用的工作环境也切换为此用户的环境(包括PATH变量,MAIL变量等),使用-选项可省略用户名,默认会切换为root用户。
-l:同-的使用类似,也就是在切换用户身份的同时,完整切换工作环境,但后面需要添加欲切换的使用者账号
-p:表示切换为指定用户的身份,但不改变当前的工作环境(不使用切换用户的配置文件)
-m:和-p一样
-c:仅切换用户执行一次命令,执行后自动切换回来,该选项后通常会自带有要执行的命令
二、su和su - 的区别
使用su切换用户加-和不加是完全不同的,-选项表示在切换用户身份的同时,连当前使用的环境变量也切换成指定用户的(环境变量是用来定义操作系统环境的,因此如果系统环境没有随用户身份切换,很多命令无法正确执行)。
可以简单理解为:有-的切换更彻底,没有的只切换了一部分,这就会导致某些命令运行出现问题或错误。
举个例子,普通用户 lamp 通过 su 命令切换成 root 用户,但没有使用 - 选项,这样情况下,虽然看似是 root 用户,但系统中的 $PATH 环境变量依然是 lamp 的(而不是 root 的),因此当前工作环境中,并不包含 /sbin、/usr/sbin等超级用户命令的保存路径,这就导致很多管理员命令根本无法使用。不仅如此,当 root 用户接受邮件时,会发现收到的是 lamp 用户的邮件,因为环境变量 $MAIL 也没有切换。