Consulta de Logs [RESOLVIDO]

1. Consulta de Logs [RESOLVIDO]

Thiago Siqueira
t.siqueira

(usa BackTrack)

Enviado em 18/09/2009 - 09:20h

Pessoal,

Quero consultar a data de modificação de arquivos através de uma exibição dos mesmos.

Geralmente gravo um arquivo chamado 'auditoria.log' com o seguindo conteúdo:

/home/login/public_html/arquivo.xml
/home/login/public_html/arquivo.php

Nesse caso quero fazer uma consulta ao realizar cat no arquivo com o stat em todos eles, porém quero identificar se esses arquivos foram modificados a menos de 15 dias.

Até onde pesquisei consegui fazer assim:

cat auditoria.log | xargs stat | grep "File\|Modify"

[através desse comando acima, apenas me retorna a data de modificação de todos os arquivos]

Percebi em alguns foruns que para fazer consulta de arquivos com data de "Modificação" que limita-se até a "15" dias utilizo o comando:

find . -mtime -15

Porém como fiz testes entre esse parâmetro do "find . -mtime -15" junto com o "xargs" (para consultar)o resultado do cat auditoria.log | xargs stat | grep "File\|Modify" e não funcionou, apenas executando cat auditoria.log | xargs stat | grep "File\|Modify" retornar assim assim:

File: `./public_html/arquivo.php'
Modify: 2009-09-15 11:56:29.000000000 -0300
File: `./public_html/arquivo.php'
Modify: 2009-09-15 11:56:22.000000000 -0300


É possível através do Shell pegar o resultado acima (que é gerado) pelo comando cat auditoria.log | xargs stat | grep "File\|Modify" e imprimir apenas o "File: e Modify:" se o arquivo foi modificado a menos de 15 dias?


  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 04/09/2010 - 07:07h

Esta tosco mas funciona direitinho...


#!/bin/bash
# FILE_AUDITOR.SH
# author Paulo Riceli Dias Lelis
# since 2010-09-08 07:00:00
# more http://sekysu.blogspot.com

IF_EDITED_MSG='Arquivo alterdado: '

DAYS_AGO='15';

OLD=$(date --date="$DAYS_AGO days ago" "+%D %T")

NOW=$(date "+%D %T")

OLDUNIX=$(date --date="$OLD" +%s)

NOWUNIX=$(date --date="$NOW" +%s)

LOG_ARQ='auditoria.log'

echo '
# FILE_AUDITOR.SH
# Por Paulo Riceli Dias Lelis
# Em 2010-09-08 07:00:00
# Veja mais em http://sekysu.blogspot.com
'

for i in $(cat $LOG_ARQ); do

DATE_FILE=$(echo $i | xargs stat | grep 'Modify' | cut -d ' ' -f 2-3 | cut -d '.' -f 1)

DATE_FILE_YMD=$(echo $DATE_FILE | cut -d ' ' -f 1)
DATE_FILE_HMS=$(echo $DATE_FILE | cut -d ' ' -f 2)

DATE_FILE_Y=$(echo $DATE_FILE_YMD | cut -d '-' -f 1)
DATE_FILE_M=$(echo $DATE_FILE_YMD | cut -d '-' -f 2)
DATE_FILE_D=$(echo $DATE_FILE_YMD | cut -d '-' -f 3)
DATE_FILE_H=$(echo $DATE_FILE_HMS | cut -d ':' -f 1)
DATE_FILE_MIN=$(echo $DATE_FILE_HMS | cut -d ':' -f 2)
DATE_FILE_S=$(echo $DATE_FILE_HMS | cut -d ':' -f 3)

DATE_FILE_FORM="$DATE_FILE_M/$DATE_FILE_D/$DATE_FILE_Y $DATE_FILE_H:$DATE_FILE_MIN:$DATE_FILE_S"

DATE_FILE_UNIX=$(date --date="$DATE_FILE_FORM" "+%s")

NOW_FILE=$(( $NOWUNIX - $DATE_FILE_UNIX ))
NOW_OLD=$(( $NOWUNIX - $OLDUNIX ))

DIF=$(($NOW_FILE - $NOW_OLD))

if [ "$DIF" -lt "$DAYS_AGO" ]; then

echo "$IF_EDITED_MSG $i"

fi

done

exit

3. use um script

M4iir1c10
m4iir1c10

(usa Arch Linux)

Enviado em 18/09/2009 - 11:50h

use um script para automatizar essa tarefa... eu fiz um pra vc, usa ai e diz se e isso mesmo que vc queria.
Caso nao entenda o funcionamento do script e quizer aprender me da um toque e eu esplico:

#!/bin/bash
segundos=$(($(date +%s) - $(date --date='15 days ago' +%s)))
linhas=$(cat auditoria.log | wc -l)
while [ $linhas > '0' ]
do let shoje=$(($(date +%s) - $(date --date=$(echo $i | xargs stat | grep "File\|Modify" | awk '{print $2}' | sed -n $(echo $linhas)p) +%s)))
if [ $shoje -gt $segundos ]
then
echo "Arquivo - $i"
echo "Modificado - $(echo $i | xargs stat | grep "File\|Modify" | awk '{print $2}' | sed -n $(echo $linhas)p)"
echo -e "\n"
else echo ""
fi
let linhas=$(($linhas - 1))
done


4. Re: Consulta de Logs [RESOLVIDO]

Thiago Siqueira
t.siqueira

(usa BackTrack)

Enviado em 04/09/2010 - 03:45h

Perdão pela demora.

Enfim, realizei um teste, tanto jogando o código inteiro via terminal, no mesmo local onde esta o "auditoria.log" e também criando um arquivo .sh e reporta isso:

E-mail bug reports to: bonzini@gnu.org .
Be sure to include the word ``sed'' somewhere in the ``Subject:'' field.
stat: missing operand
Try `stat --help' for more information.

stat: missing operand
Try `stat --help' for more information.
sed: invalid option -- 1
Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...

-n, --quiet, --silent
suppress automatic printing of pattern space
-e script, --expression=script
add the script to the commands to be executed
-f script-file, --file=script-file
add the contents of script-file to the commands to be executed
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if extension supplied)
-c, --copy
use copy instead of rename when shuffling files in -i mode
(avoids change of input file ownership)
-l N, --line-length=N
specify the desired line-wrap length for the `l' command
--posix
disable all GNU extensions.
-r, --regexp-extended
use extended regular expressions in the script.
-s, --separate
consider files as separate rather than as a single continuous
long stream.
-u, --unbuffered
load minimal amounts of data from the input files and flush
the output buffers more often
--help display this help and exit
--version output version information and exit




5. Re: Consulta de Logs [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 04/09/2010 - 06:12h

Não da para fazer isso com as funcoes do tipo file do php???


6. Re: Consulta de Logs [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 04/09/2010 - 07:17h

ah e modifique a variavel IFS para poder auditar aquivos com espaço no nome

No começo do script:
OLD_IFS="$IFS"
IFS=$(echo -e "\n\t")
E no fim:

IFS="$OLD_IFS"


7. Re: Consulta de Logs [RESOLVIDO]

Thiago Siqueira
t.siqueira

(usa BackTrack)

Enviado em 11/09/2010 - 05:12h

Opá, mano - acabei de testar e está funcionando, brigadão pela ajuda.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts