在Linux中以其他用户身份执行命令或脚本是一个常见的需求,最近工作中碰到了这个需求,在这里简单总结一下.假如我们在root用户下想以其它用户(例如oracle,mysql)身份执行一些脚本或命令,那么有哪一些方法呢?
su命令的使用方式有两种, 如下所示:
su - oracle -c shell_command
-c "": -c 参数告诉 su执行完后面的命令后就退出,而不是启动一个新的交互式shell。
su - oracle -s /bin/bash oracle_start.sh
需要注意的是, 这里使用su切换用户有两种方式,即带"-"与不带"-"的方式, 如下所示:
su oracle -c
或
su - oracle -c
这是非登录式切换。
适用场景:当你需要临时以另一个用户身份执行一个或几个命令,并且希望利用当前的环境(比如当前目录、已经设置好的变量)时。
缺点: 如果是非root用户,需要知道目标用户的密码. 不适合自动化脚本.
这是登录式切换。
适用场景:当你需要完全进入另一个用户的角色,执行一系列操作,或者运行依赖于该用户特定环境变量的脚本时。这是更常见和推荐的用法。
sudo命令,它的作用是“excute a command as another user",默认为root用户,可以用 -u 指定用户名
你有目标用户的 sudo 权限,且只想临时以该用户身份运行脚本。
sudo -u
与 su 类似,sudo 也可以用来获取一个目标用户的交互式 shell。命令格式:
sudo -u -i
# 或者
sudo -u -s
-i (模拟初始登录,--login):行为与 su - 非常相似,会加载目标用户的环境变量并切换到其主目录。
-s (启动 shell, --shell):启动一个 shell,但不一定会完全加载登录环境,行为可能略有不同。通常推荐使用 -i。
不会加载目标用户的完整环境(如 .bashrc),但会加载其基本环境变量(如 $HOME)。
runuser 是一个相对小众但非常有用的命令,它与 su 类似,但设计初衷是让 root 用户在切换到其他用户身份时无需输入密码,并且不通过PAM(Pluggable Authentication Modules)进行认证。这使得它比su更快,并且更适合在脚本中使用。
runuser -u --
扫描上面二维码关注我
如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
登录查看全部
参与评论
手机查看
返回顶部