Quero obter linhas relevantes de um registrador SNMP em tempo real e movê-las para meu servidor de aplicativos para verificação. A segunda parte está bem, scp
está funcionando. A primeira metade está me causando um pouco de tristeza.
O que eu quero fazer é verificar os três arquivos de log mais recentes para obter as mensagens relevantes. Então eu faria:
[user@SNMPServer]$ cd /var/opt/OV/log/nnm/; files=`ls -t | grep -m 3 trap.csv`; echo $files
trap.csv trap.csv.2019-05-31_07_00_01 trap.csv.2019-05-31_06_00_01
O que é ótimo, porque pretendo:
[user@SNMPServer]$ grep $ipAddress $files
O que, novamente, funciona bem quando o executo no servidor SNMP.
Quando faço isso na minha VM, no entanto,
admin@alarmux:~$sudo ssh [email protected] "cd /var/opt/OV/log/nnm/; files=`ls -t | grep -m 3 trap.csv`; echo $files"
Eu recebo esta saída:
assets bash: testerlog: command not found bash: count.txt: command not found
Estes são os ls -t
resultados do diretório inicial da minha VM, não do diretório remoto. Estou faltando caracteres de escape em algum lugar?
Responder1
Coloca aspas e $( … )
interpola entre aspas duplas. Use aspas simples e funcionará.
sudo ssh [email protected] 'cd /var/opt/OV/log/nnm/; files=`ls -t | grep -m 3 trap.csv`; echo $files'
Ou evite completamente o subshell com xargs:
sudo ssh [email protected] 'ls -td /var/opt/OV/log/nnm/* | grep -m 3 trap.csv | xargs grep '$ipAddress
Responder2
Com o zsh
shell, os três arquivos com o carimbo de data/hora da modificação mais recente, com nomes de arquivos correspondentes *trap.cvs
no /var/opt/OV/log/nnm
diretório, seriam obtidos com o padrão
/var/opt/OV/log/nnm/*trap.cvs(.om[1,3])
onde (...)
modifica o comportamento do padrão anterior. .
seleciona apenas arquivos regulares (não nomes de diretório, etc.) e om
ordena diminuindo o carimbo de data e hora da modificação. O [1,3]
retorna apenas as três primeiras correspondências (ou menos se houver menos correspondências).
Portanto, se você tiver o zsh
shell instalado na máquina remota, poderá fazer
ssh [email protected] zsh -c 'grep -wF "$1" /var/opt/OV/log/nnm/*trap.cvs(.om[1,3])' zsh "$ipAddress"
Isso iniciaria grep
a busca pelo endereço IP mantido $ipAddress
nos três arquivos modificados mais recentemente no sistema remoto.
Os sinalizadores usados with grep
fazem com que ele use comparações de strings em vez de correspondências de expressões regulares (isso é -F
) e exige que a string correspondente seja uma palavra completa (isso é -w
; portanto, isso 123.123.123.123
não corresponde a 23.123.123.1
).