ls locais/remotos

ls locais/remotos

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, scpestá 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 -tresultados 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 zshshell, os três arquivos com o carimbo de data/hora da modificação mais recente, com nomes de arquivos correspondentes *trap.cvsno /var/opt/OV/log/nnmdiretó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 omordena 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 zshshell 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 grepa busca pelo endereço IP mantido $ipAddressnos três arquivos modificados mais recentemente no sistema remoto.

Os sinalizadores usados ​​with grepfazem 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.123não corresponde a 23.123.123.1).

informação relacionada