shell命令--su_普通用户shell命令--su



shell命令--su

0、su命令的专属图床

点此快速打开文章【图床_shell命令su

1、su命令的功能说明

​ ​​ su​​ 命令用于变更为其他使用者的身份,除 ​​root​​ 外,需要键入该使用者的密码。使用权限:所有使用者。

2、su命令的语法格式

SYNOPSIS
su [options...] [-] [user [args...]]

3、su命令的选项说明

  • -f 或 --fast:不必读启动档(如 csh.cshrc 等),仅用于 csh 或 tcsh
  • -m -p或--preserve-environment:执行 su 时不改变环境变数
  • -c command 或 --command=command:变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者
  • -s shell或 --shell=shell:指定要执行的 shell (bash csh tcsh 等),预设值为 /etc/passwd 内的该使用者(USER) shell
  • --help:显示说明文件
  • --version:显示版本资讯
  • - -l 或 --login:这个参数加了之后,就好像是重新 login 为该使用者一样,大部份环境变数(HOME SHELL USER等等)都是以该使用者(USER)为主,并且工作目录也会改变,如果没有指定 USER ,内定是 root
  • USER:欲变更的使用者帐号
  • ARG:传入新的 shell 参数

4、su命令的实践操作

范例1:由超级用户​​root​​ 切换到普通用户 ​​usertest​​(加参数 ​​-​​)

useradd usertest
whoami
su - usertest
whoami
env |grep "^PWD" -->家目录改变了, 是因为加了参数 -

范例2:由普通用户 ​​usertest​​ 切换到超级用户​​root​

不加参数 -

whoami
su root -->输入root密码
whoami
env |grep "^PWD" -->家目录没有变,环境变量也没有变

加参数 -

su - usertest  -->切换成普通用户,此时也可以使用Ctrl+d切换
whoami
su - root
whoami
env |grep "^PWD" -->家目录改变了, 是因为加了参数 -

范例3:普通用户使用 ​​root​​ 身份执行命令

su - usertest  -->切换成普通用户,此时也可以使用Ctrl+d切换
whoami
ls -l /root -->先直接查看,看看是否可以
su - -c "ls -l /root" -->还是需要输入root密码的

范例4:让系统开机时自动以普通用户启动指定的服务脚本

echo "su - usertest -c '/bin/sh /server/scripts/deploy.sh'" >>/etc/rc.local
tail -1 /etc/rc.local

企业面试案例

使用 ​​usertest​​用户登录到 ​​Linux​​系统后,发现提示符为如下所示异常情况,请问该如何恢复到正常的 ​​Linux​​命令行提示符情况?

-bash-4.2$
-bash-4.2$

首先模拟故障重现,如下步骤:

useradd usertest  -->有此用户请忽略
su - usertest
rm -f .bash*
exit -->也可使用快捷键Ctrl+d
su - usertest -->切换用户,故障重现

下面是故障恢复方案及步骤:

cp -ar /etc/skel/.bash* ~/
exit -->也可使用快捷键Ctrl+d
su - usertest
source ./.bash_profile ./.bashrc -->若还未生效,则执行此命令

提示:

若是没有权限复制文件,则切换到 root 用户下再复制

su - root
cp -ar /etc/skel/.bash* /home/usertest