“su”和“su -”的区别

“su”和“su -”的区别

su是什么意思?

我们都知道,在Unix/Linux系统里,用su命令可以切换用户,su是substitute user两个单词的首字母,“substitute user”意思是“替代用户”,注意,并不是“switch user”,虽然“switch user”也是“切换用户”的意思。

su用法:

su [选项] [用户名] [参数]

举例:

su -l laowang

该命令表示从当前用户切换到laowang用户,其中-l是选项,表示login,laowang是用户名,参数可以不写(中括号的都是可选项)。

前面说了,中括号的都是可选项,所以我们可以不写要切换的用户名,如果后面不加用户名,那么默认表示切换到超级用户(即root用户),举例:

  • 你输入su回车,跟输入su root回车,是一个意思;
  • 同理,你输入su -与输入su - root也是一个意思。

实例验证susu -的区别

首先我们来做一个实验,分别从xiebruce用户切换到root用户,一次使用su切换,一次使用su -切换:
1)使用su切换用户
Xnip2018-11-07_15-26-31.png

2)使用su -切换用户
Xnip2018-11-07_15-30-08.png

从实验中,我们可以看到:
1)使用su切换时,只是用户切换成root了,而切换后的当前目录还是保持跟切换前一样,切换后的环境变量,也是保持和切换前一样。
2)使用su -切换时,除了用户切换成root之外,切换后的当前目录已经变成了root用户的家目录,切换后的环境变量,也变成了root用户的环境变量。

执行man su查看su的帮助手册,找到-l选项的解释:
Xnip2018-11-07_15-36-43.png

-/-l都表示login的意思,它的解释很清楚:

将shell定位为登录shell,并提供一个类似于真实登录的环境:
o清除除术语之外的所有环境变量
o初始化环境变量HOME, SHELL, USER, LOGNAME, PATH
o更改目标用户的主目录
o将shell的argv[0]设置为'-',以便使shell成为登录shell

即使用su -切换到root用户,相当于直接使用root用户登录,而使用su切换,则只是切换了用户,其他所有环境还是原用户的环境。

打赏

Leave a Reply

avatar

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subscribe  
Notify of

扫码在手机查看
iPhone请用自带相机扫
安卓用UC/QQ浏览器扫

“su”和“su -”的区别