在Linux中用其他用户身份执行命令,常见的方式有: su、sudo、runuser ,详细的说明,大家可以参考 linux下以其他用户身份执行命令 · linux开发 · 看云
本文重点介绍runuser命令。
runuser命令的优势在于不需要输入密码,而劣势在于该命令只能在root模式下使用。也就是说,在root模式下,可以使用runuser命令以其他任何用户身份执行命令,而不需要输入密码。这种应用场景通常是一些后台进程、服务中需要以某个用户身份运行一段脚本的情况。
runuser命令的详细说明请参考:
runuser(1) - Linux manual page
所有参数中,比较难理解的是-l参数,文档中对其描述如下:
Start the shell as a login shell with an environment similar to a real login: • clears all the environment variables except for TERM and variables specified by --whitelist-environment • initializes the environment variables HOME, SHELL, USER, LOGNAME, and PATH • changes to the target user’s home directory • sets argv[0] of the shell to '-' in order to make the shell a login shell
也就是说,-l表示会重新设置环境变量,并且会切换目录到用户的主目录。
下面通过几个例子来说明-l参数:
先用sudo -i命令进入root状态,然后输入env命令查看当前的环境变量。变量太多,截图没有显示完。
下面执行 runuser -u ubuntu env ,可以看到,没有使用-l参数时,环境变量是没有变化的。
而如果是 runuser -l ubuntu -c "env"
环境变量明显变少了很多,说明使用-l参数,对环境变量进行了重新设置。
再来看看目录改变的情况:
当前是在/root目录,不使用-l参数时,相当于ubuntu用户在/root目录执行ls命令,是没有权限的。使用-l参数后,相当于进入了ubuntu用户的主目录,然后执行ls命令,就能显示/home/ubuntu目录下的文件列表。这里需要注意的是:由于环境变量变化了,目录下的中文文件夹就没有正常显示出来。
以上就是对runuser命令中-l参数的一些理解和验证,希望能对大家理解runuser命令提供一点帮助。