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