登录linux主机时运行多个命令

时间:2017-08-29 15:30:50

标签: linux login ldap command host

我每天使用LDAP用户名登录多个Linux主机,然后sudo su登录到ROOT和ORACLE用户并检查数据库状态。

正如我每天在许多Linux主机上做的那样,我很想知道是否可以在单个命令行中运行所有命令? 我试过跟随,但没有帮助 how to execute multiple commands after sudo command

实施例: 在我使用LDAP用户登录Linux主机后,我想在一个命令中运行以下命令

sudo su - root -c "su - oracle; ps -ef |grep pmon; crsctl stat res -t "

登录root后,需要切换到oracle用户,然后运行命令

1 个答案:

答案 0 :(得分:0)

您编写的命令无法正常工作的原因是您实际上并未以oracle用户身份运行监控命令。

您为第一个su调用提供的命令su - oracle; ps -ef | grep pmon; crsctl stat res -t尝试按顺序执行三项操作root:首先,它调用su来生成交互式shell为oracle;在此shell退出后,它将运行ps管道;最后,它运行crsctl命令。由于监视命令在第二个su完成后运行,它们将以root运行,这不是您想要的。

使命令工作的最小变化如下:

sudo su - root -c "su - oracle -c \"ps -ef | grep pmon; crsctl stat res -t\""

(请注意,您需要使用反斜杠转义内部引号对,以便它们不会结束外部引用的字符串。)但是,您可以显着简化此命令:您可以进行的第一个优化是获取摆脱第一个su电话。你不需要它,因为你已root来自sudo

sudo su - oracle -c "ps -ef | grep pmon; crsctl stat res -t"

但你仍然可以做得更好。如果将sudo配置为允许您切换到任何用户(而不只是root),则根本不需要使用su。相反,只需使用sudo -u指定您想要的用户:

sudo -u oracle sh -c "ps -ef | grep pmon; crsctl stat res -t"

(请注意,您需要添加对sh的显式调用,以便您可以将整个命令集作为oracle运行,而不仅仅是第一个。sudo&#39 ; s文档声称您可以使用其-i-s选项,但它们并没有像我的测试中记录的那样工作。)

如果要在此命令之后将交互式shell保留为oracle用户,则只需使最后一个命令sudo运行为交互式shell。在这种情况下,您可能还希望将-i传递给sudo,以便交互式shell具有oracle的登录环境:

sudo -i -u oracle sh -c "ps -ef | grep pmon; crsctl stat res -t; $SHELL"