我想以 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 中出现多次?