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를 사용하여 셸을 시작하고 여기 문서에 있는 셸 명령을 제공하세요. 실제로 읽을 수 있는 이 버전은 다음과 같습니다.
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을 다음과 같이 설정하는 이유를 이해할 수 없습니다 . /etc/oratab에 해당 항목이 여러 번 나타날 것이라고 sort
예상하십니까 ?dbhome