Shell 小技巧


#以其它用户执行命令
su - oracle -c "/monitor/sqlplus.sh"

#在本地执行其它服务器的命令
ssh 192.168.2.3 "uname -a"

#用脚本执行ftp上传操作
ftp -v -n 192.168.10.26 10021 << END
user monitorftp starsliao@monitorftp
binary
hash
lcd /monitor
prompt
mput BH_`date +%Y-%m-%d-%Hh`_*.log
bye
END

#sort排序,内容以"_"分割 第二段排序
ls -1|grep ^s|sort -t_ -k2

#查看某用户的进程
for i in $(lsof -u 1010 2>/dev/null | awk '{print $2}' | sort | uniq); do echo $i | grep -qe '^[0-9]*$' && echo $i; done 

#PS  PID列  (xargs -i 用法)
ps -ef | awk '{print $2}' | sort -n| uniq|xargs -i echo {}

```

时间同步,保存

(服务器端需要开启xinetd服务的time-stream子服务,ubuntu需要安装xinetd) /usr/bin/rdate -s 132.163.4.103 rdate -s time-b.nist.gov /sbin/clock -w /sbin/ntpdate pool.ntp.org


#清理oracle服务器日志
echo "" >/var/log/messages
echo "" >/var/mail/root
echo "" >/var/mail/oracle
cd $ORACLE_BASE/admin/dcmp/bdump/
cp -f alert_dcmp*.log alert_dcmp2.log.`date +%Y-%m-%d-%Hh`.bak
echo "" >alert_dcmp*.log
cd $ORACLE_BASE/admin/dcmp/udump
rm -rf dcmp*_ora_*

#用脚本直接执行sql语句(oracle,sysdba权限)
/u01/oracle/ora920/bin/sqlplus "/ as sysdba"<<EOF
set linesize 100
spool /monitor/test
select case when max_use_cpu+45>100 then max_use_cpu else max_use_cpu+45 end case,
case when avg_use_cpu+45>100 then avg_use_cpu else avg_use_cpu+45 end case,
case when min_use_cpu+45>100 then min_use_cpu else min_use_cpu+45 end case,
max_use_mem,avg_use_mem,min_use_mem,max_use_disk from sar_sys_log t where when_date=to_char(trunc(sysdate)-1,'yyyy-mm-dd') and hour='23' and service not like '%RADIUS%' order by service;
spool off
@/monitor/oracle_monitor.sql
EOF

#做判断,并发送邮件
n=$(grep READY /monitor/oracle_lsnrctl/`date +%Y-%m-%d-%Hh`_lsnrctl.log|wc -l) 
if [ $n -ne "2" ]
then
cat /monitor/oracle_lsnrctl/`date +%Y-%m-%d-%Hh`_lsnrctl.log | mutt -s "`date +%Y-%m-%d-%Hh`_oracle" 15914254069@139.com 13632470378@139.com
fi

#grep取上一行 
ifconfig|grep -B1 "inet addr" 


#根据列过滤行
route -n|awk -F\\  '{if($1=="0.0.0.0")print $0 }'


#输出带颜色
ifconfig|grep -B1 "inet addr"|xargs|sed s/\\ --\\ /\\\\n/g|grep -v 'lo'|awk -F\\  '{print "网卡""\\033[31;1m"$1"\\033[0m"":IP地址:"$7",MAC地址:"$5}'|sed s/addr://g


#以/分割第二栏按字母顺序排序
sort -t"/" -k2d  /tmp/net.2

#oracle服务器监控输入日志的脚本
echo ---192.168.2.3_DB--- >/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log 
date >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
echo --- >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log 
/bin/df -h >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
echo --- >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
/sbin/ifconfig >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
echo ---ps_oracle--- >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log 
ps -ef|grep 'ora_'|grep -v grep >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
ps -ef|grep 'ora_'|grep -v grep|wc -l >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
echo ---listener--- >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
su - oracle -c 'lsnrctl status' >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
echo ---system_log--- >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log 
grep -i oracle /var/log/messages >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
echo ---mail_root_log--- >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log 
tail -n 50 /var/mail/root >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
echo ---mail_oracle_log--- >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log 
tail -n 50 /var/mail/oracle >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
echo ---Oracle_exception_ora-_log--- >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
grep -2i ora- /u01/oracle/admin/dcmp/bdump/alert_dcmp*.log >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
echo ---Oracle_exception_err_log--- >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
grep -2i err /u01/oracle/admin/dcmp/bdump/alert_dcmp*.log >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
echo ---Oracle_exception_fail_log--- >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
grep -2i fail /u01/oracle/admin/dcmp/bdump/alert_dcmp*.log >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
echo ---Numbers_of_Oracle_system_files--- >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
ls /u01/oracle/admin/dcmp/cdump/*.trc|wc -l >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
ls /u01/oracle/admin/dcmp/udump/*.trc|wc -l >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
echo ---139-Ftp-logmonitor--->>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
cd /home/bi/log
tail -16 biftp.log|grep 426 >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log
tail -16 139ftp.log|grep 426 >>/monitor/BH_`date +%Y-%m-%d-%Hh`_2.3db.log

#sed技巧 取8-16行,删除前后制表符,其它空格换成制表符
cat /monitor/test.lst |sed -n "8,16"p|sed 's/^[ \\t]*//;s/[ \\t]*$//'|sed -r 's/[ ]+/\\t/g'>/monitor/test.txt