Fabiano, muito obrigado, desconhecia completamente essa opção do grep. Vou aproveitar a oportunidade para estudar melhor o mesmo.
Fabiano Caixeta Duarte wrote: > 2009/7/3 Daniel Fernando Coimbra <ruf...@gmail.com>: >> Olá pessoal, estou fazendo um pequeno script para monitorar as entradas >> de log feitas pelo iptables. Quando executo o script para testar nos >> logs já existentes (removendo o "tail" e complementando o "grep" com o >> caminho do arquivo) a execução é perfeita e me dá as informações como >> esperado. No entanto, ao executá-lo como segue abaixo, para que a >> monitoração seja em "tempo real" não há qualquer saída, embora os logs >> estejam sendo modificados. >> >> Não há qualquer aviso de erros na execução e não faço idéia do que pode >> estar errado! Os logs estão sendo gerados e contém as strings "Firewall >> - ${INFO}:", suspeito que o meu uso do "tail -f" esteja errado mas não >> consegui descobrir qual seria a correção... >> >> Agradeço muito se puderem me auxiliar. >> >> >> (o arquivo color-definitions.sh contém apenas definição de variáveis com >> strings de cores e por isso não o inclui) >> >> ---- monitor.sh ---- >> >> source color-definitions.sh >> U='\e[4m' >> >> sudo echo "Iniciando Monitor... `date`" || exit 1 >> >> sudo tail -n 0 --follow=name /var/log/syslog | grep Firewall | while >> read Mon Day Time Host lixo lixo lixo LOGNAME DEV_IN DEV_OUT MAC SRC DST >> LEN TOS PREC TTL ID LINELOG >> do >> TIMELINE=" @$Time-$Day/$Mon" >> PROTO=`echo $LINELOG | cut -d= -f2 | cut -d' ' -f1` >> S=`echo $SRC | cut -d= -f2` >> SP=`echo $LINELOG | cut -d= -f3 | cut -d' ' -f1` >> D=`echo $DST | cut -d= -f2 | cut -d' ' -f1` >> DP=`echo $LINELOG | cut -d= -f4 | cut -d' ' -f1` >> LINE=$(echo $LINELOG | cut -d= -f6- | cut -d' ' -f2 | tr -d ' ') >> case $LOGNAME in >> 'PING:') >> if [ "$S" == "192.168.0.1" ] >> then >> C=$LGREEN >> else >> C=$YELLOW >> fi >> echo -e "${RED}PING${NORM} from ${C}${S}${NORM}$TIMELINE" >> ;; >> 'SPOOFING:') >> echo -e "${YELLOW}${U}SPOOFING${NORM} $S:$SP:$DP:D >> ${LINE}$TIMELINE" >> ;; >> 'INPUT:') >> if [ "`echo $D | cut -d. -f4`" == "255" ] >> then >> if [ "$S" == "0.0.0.0" ] >> then >> S=`echo $MAC | cut -d: -f7-` >> fi >> MSG="${BROWN}BROADCAST${NORM} from ${U}${S}" >> else >> MSG="${BLUE}INPUT${NORM} from ${U}${S}" >> fi >> echo -e "${MSG}${NORM} ${PROTO} >> ${YELLOW}${SP}${NORM}:${YELLOW}${DP}${NORM} ${LINE}$TIMELINE" >> ;; >> *) >> echo INVALID ENTRY $LINE $TIMELINE >> esac >> done & >> >> sudo tail -n 0 --follow=name /var/log/messages | grep Firewall | grep -v >> sudo | while read Mon Day Time Host lixo lixo lixo LOGNAME DEV_IN >> DEV_OUT MAC SRC DST LEN TOS PREC TTL ID LINELOG >> do >> PROTO=`echo $LINELOG | cut -d= -f2 | cut -d' ' -f1` >> S=`echo $SRC | cut -d= -f2` >> SP=`echo $LINELOG | cut -d= -f3 | cut -d' ' -f1` >> D=`echo $DST | cut -d= -f2` >> DP=`echo $LINELOG | cut -d= -f4 | cut -d' ' -f1` >> TIMELINE=" @$Time-$Day/$Mon" >> LINE=$(echo $LINELOG | cut -d= -f6- | cut -d' ' -f2 | tr -d ' ') >> >> if [ "`echo $D | cut -d. -f4`" == "255" ] >> then >> MSG="${BROWN}BROADCAST${NORM}" >> if [ "$S" == "0.0.0.0" ] >> then >> S=`echo $MAC | cut -d: -f7-` >> fi >> MSG="${MSG} from ${U}${S}" >> else >> case $LOGNAME in >> 'LOCALINPUT:') >> MSG="LOCAL from ${U}${S}" >> ;; >> 'SERVICES:') >> MSG="${LGREEN}SERVICES${NORM} from ${U}${S}" >> ;; >> *) >> esac >> fi >> >> echo -e "${MSG}${NORM} ${PROTO} >> ${YELLOW}${SP}${NORM}:${YELLOW}${DP}${NORM} ${LINE}$TIMELINE" >> done & >> >> while : >> do >> sleep 6h >> echo ---- `date` ---- >> done >> >> ---- monitor.sh ---- >> > > > http://br.groups.yahoo.com/group/shell-script/message/15208 >