Quiero tomar líneas relevantes de un registrador SNMP en tiempo real y moverlas a mi servidor de aplicaciones para verificarlas. La segunda mitad está bien, scp
está funcionando. La primera mitad me está causando algo de pena.
Lo que quiero hacer es comprobar los tres archivos de registro más recientes para ver los mensajes relevantes. Entonces yo haría:
[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
Lo cual es genial, porque luego planeo:
[user@SNMPServer]$ grep $ipAddress $files
Lo cual nuevamente funciona bien cuando lo ejecuto en el servidor SNMP.
Cuando lo hago desde mi VM Sin embargo,
admin@alarmux:~$sudo ssh [email protected] "cd /var/opt/OV/log/nnm/; files=`ls -t | grep -m 3 trap.csv`; echo $files"
Obtengo este resultado:
assets bash: testerlog: command not found bash: count.txt: command not found
Estos son los ls -t
resultados del directorio de inicio de mi VM, no del remoto. ¿Me faltan personajes de escape en alguna parte?
Respuesta1
Comillas retrospectivas e $( … )
interpola entre comillas dobles. Utilice comillas simples y funcionará.
sudo ssh [email protected] 'cd /var/opt/OV/log/nnm/; files=`ls -t | grep -m 3 trap.csv`; echo $files'
O evite la subcapa por completo con xargs:
sudo ssh [email protected] 'ls -td /var/opt/OV/log/nnm/* | grep -m 3 trap.csv | xargs grep '$ipAddress
Respuesta2
Con el zsh
shell, los tres archivos con la marca de tiempo de modificación más reciente, con nombres de archivo que coincidan *trap.cvs
en el /var/opt/OV/log/nnm
directorio, se tendrían con el patrón
/var/opt/OV/log/nnm/*trap.cvs(.om[1,3])
donde (...)
modifica el comportamiento del patrón anterior. .
selecciona solo archivos normales (no nombres de directorios, etc.) y om
ordena disminuyendo la marca de tiempo de modificación. Devuelve [1,3]
solo las primeras tres coincidencias (o menos si hay menos coincidencias).
Entonces, si tiene el zsh
shell instalado en la máquina remota, podrá hacer
ssh [email protected] zsh -c 'grep -wF "$1" /var/opt/OV/log/nnm/*trap.cvs(.om[1,3])' zsh "$ipAddress"
Esto se iniciaría grep
para buscar la dirección IP guardada $ipAddress
en los tres archivos modificados más recientemente en el sistema remoto.
Las banderas utilizadas con grep
hacen que se utilicen comparaciones de cadenas en lugar de coincidencias de expresiones regulares (es decir -F
), y requiere que la cadena coincidente sea una palabra completa (es decir -w
, ; por lo que 123.123.123.123
no coincide con 23.123.123.1
).