linux shell

关注公众号 jb51net

关闭
首页 > 脚本专栏 > linux shell > linux用户身份执行脚本

Linux中以其它用户身份执行脚本或命令的全总结

作者:潇湘隐者

在Linux中以其他用户身份执行命令或脚本是一个常见的需求,最近工作中碰到了这个需求,在这里简单总结一下,对linux用户身份执行脚本或命令相关知识感兴趣的朋友跟随小编一起看看吧

在Linux中以其他用户身份执行命令或脚本是一个常见的需求,最近工作中碰到了这个需求,在这里简单总结一下.假如我们在root用户下想以其它用户(例如oracle,mysql)身份执行一些脚本或命令,那么有哪一些方法呢?

su命令(switch user)

su命令的使用方式有两种, 如下所示:

su - oracle -c shell_command

-c "<命令>": -c 参数告诉 su执行完后面的命令后就退出,而不是启动一个新的交互式shell。

su - oracle -s /bin/bash oracle_start.sh

需要注意的是, 这里使用su切换用户有两种方式,即带"-"与不带"-"的方式, 如下所示:

su oracle -c <shell_command>
或
su - oracle -c <shell_command>

两者的区别

su <用户名> (不带横杠)

这是非登录式切换。

适用场景:当你需要临时以另一个用户身份执行一个或几个命令,并且希望利用当前的环境(比如当前目录、已经设置好的变量)时。
缺点: 如果是非root用户,需要知道目标用户的密码. 不适合自动化脚本.

su - <用户名> (带横杠)

这是登录式切换。

适用场景:当你需要完全进入另一个用户的角色,执行一系列操作,或者运行依赖于该用户特定环境变量的脚本时。这是更常见和推荐的用法。

sudo 命令

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 命令

runuser 是一个相对小众但非常有用的命令,它与 su 类似,但设计初衷是让 root 用户在切换到其他用户身份时无需输入密码,并且不通过PAM(Pluggable Authentication Modules)进行认证。这使得它比su更快,并且更适合在脚本中使用。

runuser -u <用户名> -- <命令或脚本路径>

优点:

缺点:

到此这篇关于Linux中以其它用户身份执行脚本或命令总结的文章就介绍到这了,更多相关Linux中以其它用户身份执行脚本或命令总结内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文