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

Linux用户切换与环境变量
本文详细解析了在Linux系统中使用su命令切换用户时,环境变量的变化情况。通过对比su username与su-username的区别,解释了环境变量如何影响用户切换后的程序运行状态。

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的,这是为什么呢?

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

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 - 会将目标的名字权限和环境变量等全部切换过来,这样便不会有头疼的问题了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值