Linux ❉ su 命令介绍及主要用法

释义

su 意为switch user ,也就是切换用户,主要参数为“-”,也就是常见的两种切换方式

[test1@localhost root]$ su - test2

[test2@localhost ~]$ su root

两种方法只差了一个字符 -,会有比较大的差异:

  • 如果加入了 - 参数,那么是一种 login-shell 的方式,意思是说切换到另一个用户 <user_name> 之后,当前的 shell 会加载 <user_name> 对应的环境变量和各种设置;

  • 如果没有加入 - 参数,那么是一种 non-login-shell 的方式,意思是说我现在切换到了 <user_name>,但是当前的 shell 还是加载切换之前的那个用户的环境变量以及各种设置。

  • su 命令不跟任何 <user_name> ,默认切换到 root 用户

案例讲解

        用户test2以 non-login-shell 的方式切换到 root 用户,比较两种用户状态下环境变量中 PWD 的值

[test2@localhost ~]$ su
Password: 

[root@localhost test2]# env|grep PWD
PWD=/home/test2

        可以看到我们是切换到 root 用户了,但是 shell 环境中的变量并没有改变,还是用之前 ubuntu 用户的环境变量。接着我们从 ubuntu 用户以 login-shell 的方式切换到 root 用户,同样比较两种用户转台下环境变量中 PWD 的值:

[root@localhost test2]# su test2
[test2@localhost ~]$ env | grep PWD
PWD=/home/test2
[test2@localhost ~]$ su - root
Password: 
Last login: Mon Nov 29 17:12:19 CST 2021 on pts/2
[root@localhost ~]# env | grep PWD
PWD=/root

可以看到用 login-shell 的方式切换用户的话,shell 中的环境变量也跟着改变了。

总结

        具体使用哪种方式切换用户看个人需求:

  • 如果不想因为切换到另一个用户导致自己在当前用户下的设置不可用,那么用 non-login-shell 的方式;

  • 如果切换用户后,需要用到该用户的各种环境变量(不同用户的环境变量设置一般是不同的),那么使用 login-shell 的方式。具体的事例就是mysql安装后切换mysql用户就要用到这种方式。

扩展

        一般来说,我们执行从一个用户1切换到另一个用户2,执行完命令后执行exit,就可以返回用户1,用户2可以是root

[root@localhost ~]# exit
logout
[test2@localhost ~]$ 

        还有一种方式是:不需要先切换用户再执行命令,可以直接在当前用户下,以另一个用户的方式执行命令,执行结束后就返回当前用户。这就得用到 -c 参数。

具体使用方法是:

        

su - -c "指令串"  # 以 root 的方式执行 "指令串" 
[test2@localhost ~]$ env | grep PWD
PWD=/home/test2
[test2@localhost ~]$ su -c "env|grep PWD"
Password: 
PWD=/home/test2
[test2@localhost ~]$ su - -c "env|grep PWD"
Password: 
PWD=/root

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值