如何以特定用户身份运行命令而不切换(su)

如何以特定用户身份运行命令而不切换(su)

我想以 ldap 用户“exp”中的“oracle”用户身份运行一组特定的命令

例如:

exp@linuxtest -]$ sudo -u oracle \"export ORACLE_HOME=/u01/app/oracle;echo $ORACLE_HOME;export PATH=$PATH:$ORACLE_HOME/bin;$ORACLE_HOME/bin/exp full=y

我尝试了上面的命令,出现以下错误

usage: sudo [-D level] -h | -K | -k | -V
usage: sudo -v [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-u user name|#uid]
usage: sudo -l[l] [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-U user name] [-u user name|#uid] [-g groupname|#gid] [command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C fd] [-D level] [-g groupname|#gid] [-p prompt] [-u user name|#uid] [-g groupname|#gid] [VAR=value] [-i|-s] [<command>]

最后,我想以“oracle”用户身份运行以下命令,而不切换到 oracle 用户。因为切换到 oracle 用户需要密码,该密码可以为“exp”用户提供“oracle”用户的完全访问权限。

sudo su - oracle -c \"export ORAENV_ASK=NO;export ORACLE_SID=`ps -ef |grep pmon |grep -v grep | grep pmon | grep -v asm| grep -v APX | awk -F_ '{print $3}'`;export ORACLE_HOME="`cat /etc/oratab |grep dbhome | awk -F: '{print $2}' |sort  -u |sed -e /^$/d`";export ORACLE_SID=`ps -ef |grep pmon |grep -v grep | grep pmon | grep -v asm| grep -v APX | awk -F_ '{print $3}'`;export PATH=$PATH:"`cat /etc/oratab |grep dbhome | awk -F: '{print $2}' |sort  -u |sed -e /^$/d`"/bin:"`cat /etc/oratab |grep dbhome | awk -F: '{print $2}' |sort  -u |sed -e /^$/d`"/OPatch;"/u01/app/oracle/product/12.1.0/dbhome_1/bin/expdp  \"sys/oracle as sysdba\" DIRECTORY=DATAPUMP_DIR dumpfile=FULL_DB.dmp FULL=Y LOGFILE=full_exp.log"\"

答案1

你引用的是地狱。试试这个:使用 sudo,启动 shell,并从此处文档提供该 shell 命令。这个版本你实际上可以阅读:

sudo -u oracle -c sh <<'END_SH'
    export ORAENV_ASK=NO
    export ORACLE_SID=$(pgrep -fl pmon | grep -Eiv 'asm$|apx$' | cut -d_ -f3)
    export ORACLE_HOME=$(awk -F: '/dbhome/ {print $2}' /etc/oratab |sort  -u)
    export PATH="$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch"

    "$ORACLE_HOME"/bin/expdp  "sys/oracle as sysdba" DIRECTORY=DATAPUMP_DIR dumpfile=FULL_DB.dmp FULL=Y LOGFILE=full_exp.log
END_SH

我大大简化了您的 grep|grep|awk 管道。我不明白你为什么在设置 ORACLE_HOME 时使用sort:你是否期望dbhome在 /etc/oratab 中出现多次?

相关内容