Linux学习之用户切换su 、su - 和exit的不同

版权声明:转载请注明出处 https://blog.csdn.net/Frank_qiaoqiaoqiao/article/details/81987524

Linux命令行下切换用户:

su username

su - username

还可以用exit退出,再次登录,例

[frank@bogon pratice]$ su - root
Password: 
Last login: Thu Aug 23 08:41:37 EDT 2018 on pts/0
[root@bogon ~]# su frank
[frank@bogon root]$ 

今天在学习Linux shell的时候,学到if语句这一块的时候,用vim写了一个程序,判断当前用户并且输出语句,代码如下

#!/bin/bash
userlogin=$(env | grep USER | cut -d "=" -f 2)
case $userlogin in
        "root")
        echo "case--current login user is root"
        ;;
        "frank")
        echo "case--current login user is frank"
        ;;
        *)
        echo "case--current login user is wt"
        ;;
        esac

运行了一下,看结果是没什么问题,用户名是root,输出的是root

[root@bogon pratice]# ./fi2.sh
current login user is root

当我切换个用户大家再来看看

[root@bogon pratice]# su frank
[frank@bogon pratice]$ ls
99.sh  a  a.c  fi1.sh  fi2.sh  fi.sh  for.sh  if.sh  until.sh  while.sh
[frank@bogon pratice]$ ./fi2.sh
case--current login user is frank

好像还是没什么问题,用户是frank,输出的是frank,有人可能在想你是不是在糊弄我们,各位看官稍等,等我再切换回root用户,在执行一次./fi2.sh

[frank@bogon pratice]$ su root
Password: 
[root@bogon pratice]# ./fi2.sh
case--current login user is frank

这次我们会惊奇的发现我们已经切换回到了root用户,为什么输出来的是frank,我也是很苦恼,不过查了一翻资料后,大家来看一下现在的环境变量

 输入env后发现环境变量竟然是用户frank的,而不是用户root的,这是为什么呢?

扫描二维码关注公众号,回复: 3914539 查看本文章

查了一番资料终于有所收获,

su - root is the same as su - just like login as root,then the shell is login shell,which mean it will expericene a login process,
usually .bash_profile and .bashrc will be sourced

su root is the same as su like you open an interactive shell in root name,then only .bashrc will be sourced.

原来,当我们用“su username”命令切换用户时,切换的只是目标用户的名字和权限而已,环境变量却还是原来用的环境变量,当我们用“su - username”切换命令时,便可以彻底解决这个问题了,su - 会将目标的名字权限和环境变量等全部切换过来,这样便不会有头疼的问题了。

 

猜你喜欢

转载自blog.csdn.net/Frank_qiaoqiaoqiao/article/details/81987524
SU
今日推荐