用户切换
- linux是多用户的、多进程的操作系统,通常多个用户之间需要来回切换;
- su,switch user 命令
- 参数 - , 切换用户,同时切换工作目录(为目标用户的家目录)
- 参数 -c cmd,切换到目标用户,执行一条指令,然后切回原用户;
- 参数 -m -p ,保持原用户的环境变量;
- 参数 -l,重新登录该用户;
- 参数 user,需要切换的用户
- 命令案例
# 切换到 jack 用户
su jack # 不切工作路径
su - jack # 切换工作路径和环境变量
# lauf 用户下 切到root(同时切工作路径) 执行pwd, 然后切回lauf
su -c pwd - root
# 需要输入root密码
shell 脚本案例
- root用户下,执行一段shell脚本,中间切换到lauf用户,在lauf用户家目录下 继续创建data1、data2数据目录。
#!/bin/bash
# user root
# 创建目录的函数
function lauf_make_dir(){
# $@ 所有的参数 组成数组
for i in $@;do
# 目录不存在时 创建
[[ ! -e $i ]] && mkdir $i
done
[ $? -eq 0 ] && return 0
return 1
}
# root config python PATH
cat /etc/profile | grep -iE "/usr/local/python3/bin"
# 上一条指令没有成功,则执行
[ $? -ne 0 ] && echo 'export PATH=/usr/local/python3/bin:$PATH' >> /etc/profile && \ # 宏延续 运算符
source /etc/profile # 配置文件生效
# 用户不存在时,创建用户
cat /etc/passwd | grep -iE "\blauf\b" # 单词边界
[ $? -ne 0 ] && useradd lauf -d /home/lauf -m -g root -s /bin/bash
# 切换 用户,并继续执行指令
su - lauf <<EOF
# lauf用户下继续执行
# array
# arr=("data1" "data2")
# lauf_make_dir ${arr[*]} # 传入数组的值 函数在lauf下找不到
mkdir data1 # CentOS 生效 OpenSuse生效
mkdir data2
EOF # 执行结束 CentOS 自动切回root用户
# OpenSuse 不会自动切回root用户
# 后面的代码Cent (root下执行的指令)
ls -la ./
root用户下执行shell脚本总结:
-
su - lauf <<EOF 切换用户,并继续执行shell指令
- CentOS 下 lauf 用户执行指令到EOF结束,并自动切回root用户,继续执行剩下的shell指令;
- OpenSuse下lauf用户执行结束,不会自动切回root用户,剩下 的shell指令不会执行;
-
sudo -iu lauf bash << EOF 切换用户,并继续执行指令
- CentOS 下lauf用户执行结束,同样自动切回root;
- OpenSuse 同样切回root;
- -u 切换普通用户;-i 切换路径,同时使用之前的环境变量;
- sudo 是权限受限的su ,需要在/etc/sudoers文件中为用户配置权限;
- sudo chmod u+x test.sh 执行流程–>切到root用户执行该指令,执行结束切回普通用户;
-
su - jack -c cmd ; 切换到jack 执行一条执行(jack 具有权限),切回原用户;
-
sudo -iu jack bash -c cmd; 执行一条指令,然后切回原用户;文章来源:https://www.toymoban.com/news/detail-735164.html
上一篇: linux shell操作- 02 常用命令及案例文章来源地址https://www.toymoban.com/news/detail-735164.html
到了这里,关于linux shell操作- 03 用户切换及shell案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!