文章目录
命令介绍
su英语就是switchuserorsubstituteuseridentity。su命令用于切换当前用户身分到其他用户身分,或则以指定用户的身分执行命令或程序。
句型为su后接用户登入名称,接着系统会要求输入所要变更的用户的登陆密码,成功登陆后,命令行的前缀会改变,说明你已然切换成功。其实你也可以借助who-m命令来验证当前登录的身分。
切换后,你会始终保持该用户身分,直到退出Terminal或则输入exit命令。
普通用户切换到root用户,可以使用su-或su-root,而且必须输入root密码就能完成切换。root用户切换到普通用户,可以使用su-username,不须要输入任何密码即可完成切换。
非常重要
使用命令su切换其它用户身分时linux软件工程师,假若不指定选项-或-l或--login,这叫【非登陆式】切换,即不会读取目标用户的配置文件,所以运行的用户环境还是原先用户的环境;倘若指定了上述选项进行切换,这叫【登录式】切换,会读取目标用户的配置文件,切换后完全使用目标用户的环境执行命令,所以建议之后切换用户的时侯都加上上述选项进行切换。
常用选项选项说明
-c或--command=
执行完指定的指令后,即恢复原先的身分
-f或--fast
适用于csh与tsch,使shell不用去读取启动文件(比如:csh.cshrc等)
-或-l或--login
改变身分时,也同时变更工作目录,以及环境变量HOME、SHELL、USER、LOGNAME、PATH等。这个参数加了以后,就似乎是重新login为目标用户一样,大部分环境变量都是以目标用户的为主,但是工作目录也会改变。
-m或-p或--preserve-environment
变更身分时,不要变更环境变量
-s或--shell
指定要执行的shell
--help
显示帮助信息
--version
显示版本信息
su命令存在的安全隐患
使用su命令可以让普通用户切换到root身分去执行个别特权命令,但存在一些问题,例如说:
1.仅仅为了一个特权操作就直接赋于普通用户超级管理员帐户的完整权限linux 以某个用户执行,这似乎是不明智的;
2.假如你们都要使用su命令切换到root身分,而使用命令su切换到root用户必须输入root的登陆密码,这就造成好多人都晓得root的密码,这是很糟糕的。
所以在实际的工作中,更多的是使用命令sudo来获取个别用户的特有权限去执行命令,但是普通用户必须通过授权能够使用命令sudo。
参考示例切换成指定的用户身分linux查看硬件信息,并且环境变量不变
比如,当前登入用户是root,想要切换到linuxcool用户,但环境变量始终是root用户的:
[root@linuxcool ~]# su linuxcool
切换成指定的用户身分,但是改成对应用户的环境变量
切换成用户linuxcool,并将工作目录以及相关的环境变量也改成用户linuxcool的:
[root@linuxcool ~]# su - linuxcool
说浅显点,命令su-是完整地切换到另一个用户环境linux 以某个用户执行,建议你们切换用户的时侯,尽量使用su-username这样,否则可能发觉个别命令执行不了。
切换成指定的用户,并告知新的shell不要去读取启动文件
[mysql@linuxcool ~]# su root -f
切换成指定的用户执行命令,执行后恢复原先的用户身分
当前登入用户是mysql,切换成用户root执行命令ls,命令执行完后恢复原先的用户身分:
[mysql@linuxcool ~]# su root -c ls
切换成其它用户后,怎样恢复成原先的用户身分
切换成另一个用户身分以后,可以输入exit恢复成原先的用户身分。
比如,当前登入用户是root,切换成用户mysql:
[root@htlwk0001host ~]# su mysql -- 切换成用户 mysql

[mysql@htlwk0001host root]$
输入命令exit,退出当前用户mysql身分,恢复成原先的用户身分root:
[mysql@htlwk0001host root]$ exit -- 退出当前用户 mysql
exit
[root@htlwk0001host ~]#
切换成root用户
[mysql@htlwk0001host ~]$ su -
或
[mysql@htlwk0001host ~]$ su - root
或
[mysql@htlwk0001host ~]$ su # 不推荐这种方式,虽然切换成用户root了,但是运行的依旧是mysql的用户环境
[root@htlwk0001host mysql]# echo $USER
mysql
[root@htlwk0001host mysql]# echo $LOGNAME
mysql
[root@htlwk0001host mysql]# echo $PATH
/var/lib/mysql/.local/bin:/var/lib/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@htlwk0001host mysql]# echo $SHELL
/bin/bash