Aplicar conceitos de mala direta com shell script

1. Aplicar conceitos de mala direta com shell script

Alex
alexhctp

(usa Linux Mint)

Enviado em 20/09/2016 - 16:57h

Salve salve amigos!
Estou procurando uma solução em shell script para sanar uma demanda interna. Resumindo, preciso desenvolver um script que manipule um arquivo de texto com informações coletadas no sistema. Por exemplo, digamos que eu tenha um texto padrão, com tags como <hora_atual> e <uptime> assim como no exemplo a seguir.

Ex.: Olá, agora são <hora_atual> e seu sistema está a <uptime> no ar.

A ideia é preencher as tags com o resultado do comando a seguir:
uptime | grep -o '[0-9]\{1,2\}\:[0-9]\{2\}' 


O objetivo é fazer personalizar um sistema de envio de logs que utilizamos e inclusive compartilho no link a seguir -> https://www.vivaolinux.com.br/artigo/Logwatch-Enviando-relatorios-via-email

Agradeço desde já pela ajuda!
Cordialmente,
Alex


  


2. Re: Aplicar conceitos de mala direta com shell script

Perfil removido
removido

(usa Nenhuma)

Enviado em 20/09/2016 - 17:05h

alexhctp escreveu:

Salve salve amigos!
Estou procurando uma solução em shell script para sanar uma demanda interna. Resumindo, preciso desenvolver um script que manipule um arquivo de texto com informações coletadas no sistema. Por exemplo, digamos que eu tenha um texto padrão, com tags como <hora_atual> e <uptime> assim como no exemplo a seguir.

Ex.: Olá, agora são <hora_atual> e seu sistema está a <uptime> no ar.

A ideia é preencher as tags com o resultado do comando a seguir:
uptime | grep -o '[0-9]\{1,2\}\:[0-9]\{2\}' 


O objetivo é fazer personalizar um sistema de envio de logs que utilizamos e inclusive compartilho no link a seguir -> https://www.vivaolinux.com.br/artigo/Logwatch-Enviando-relatorios-via-email

Agradeço desde já pela ajuda!
Cordialmente,
Alex


dx1=($(date))
ux1=($(uptime))

echo "Olá, agora são ${dx1[3]} e seu sistema está a ${ux1[2]//\,/} no ar."


É só um palpite.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



3. Re: Aplicar conceitos de mala direta com shell script

Alex
alexhctp

(usa Linux Mint)

Enviado em 20/09/2016 - 18:17h

Salve listeiro_037!
Seria uma opção boa sim, porém não vai atender o que eu preciso... vou contar como ta o meu ambiente, talvez ajudará a compreender melhor a minha demanda.
Temos alguns servidores rodando serviços diversos que geram logs, assim como em qualquer ambiente. Atualmente temos um sistema de envio de logs por e-mail usando o Logwatch, que por sinal é uma excelente ferramenta, porém gera dados técnicos. O objetivo é pegar os dados do Logwatch e algumas outras fontes de informações que dispomos, como arquivos gerados pelo sistema web da empresa e jogar essas informações em um arquivo previamente configurado. Esse arquivo previamente configurado é mais amigável e será usado para apresentar essas informações para uma equipe sem conhecimentos técnicos.
Por exemplo, atualmente o Logwatch me informa quanto de disco esta sendo usado pelo sistema, informa os acessos provenientes de determinado IP ou rede. Me mostra as tentativas recusadas de conexão em determinado recurso, quem se conectou em determinado servidor via SSH e assim por diante.
Até agora eu consegui filtrar os dados que eu quero usando o modelo a seguir
cat ConexoesSSH.log | grep -o REGEX 
. Tenho esse log que registra todos os acessos SSH, por exemplo, informando o IP de origem, horário e usuário. Na REGEX eu posso buscar pelo IP, pelo usuário ou por horário. Digamos então que no exemplo eu queira enviar para o gerente do setor um registro dos acessos da equipe dele em um determinado periodo. O script daria um cat no log, eu redirecionaria a saída pro grep filtrando somente os IPs que eu quero, referentes ao setor. Até ai ta OK. A questão é... como eu vou substituir aquelas tags <exemplo> pelas informações que filtrei com o grep???
Confuso, né? Eu sei que é... rsrs


4. Re: Aplicar conceitos de mala direta com shell script

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 20/09/2016 - 20:09h

dx1=($(date))
ux1=($(uptime))

echo "Olá, agora são ${dx1[3]} e seu sistema está a ${ux1[2]//\,/} no ar."


Seguindo o mesmo exemplo do colega listeiro, substitua as '<tags>' pelas variáveis do exemplo. Antes de enviá-las por e-mail faça:

sed -i "s/<hora>/'$dx1[3]'/g; s/<uptime>/'${ux1[2]//\,/}'/g" file.log 


Este é somente um exemplo, não foi testado.

Mudando de assunto onde está o msoliver kkkkk




______________________________________________________________________
OS: Kali Linux kali-rolling kali-rolling
Kernel: x86_64 Linux 4.6.0-kali1-amd64
Resolution: 2390x768
CPU: Intel Core i3-4005U CPU @ 1.7GHz
RAM: 3852MiB


5. Re: Aplicar conceitos de mala direta com shell script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 20/09/2016 - 22:29h

alexhctp escreveu:

Salve salve amigos!
Estou procurando uma solução em shell script para sanar uma demanda interna. Resumindo, preciso desenvolver um script que manipule um arquivo de texto com informações coletadas no sistema. Por exemplo, digamos que eu tenha um texto padrão, com tags como <hora_atual> e <uptime> assim como no exemplo a seguir.

Ex.: Olá, agora são <hora_atual> e seu sistema está a <uptime> no ar.

A ideia é preencher as tags com o resultado do comando a seguir:
uptime | grep -o '[0-9]\{1,2\}\:[0-9]\{2\}' 


O objetivo é fazer personalizar um sistema de envio de logs que utilizamos e inclusive compartilho no link a seguir -> https://www.vivaolinux.com.br/artigo/Logwatch-Enviando-relatorios-via-email

Agradeço desde já pela ajuda!
Cordialmente,
Alex

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Boa noite alexhctp.
Apesar da duvida estar praticamente resolvida, segue sugestão. . . .
echo "Ex.: Olá, agora são <hora_atual> e seu sistema está a <uptime> no ar."|sed -r "s/<hora_atual>/$(date +%X)/;s/<uptime>/$(uptime|awk '{gsub(",", "", $4); print $3,$4}')/" 

Ex.: Olá, agora são 22:30:11 e seu sistema está a 3:06 no ar.

"ctw6av", estou por aqui. Rsrsrsrsr

att
marcelo oliver


6. Re: Aplicar conceitos de mala direta com shell script

Alex
alexhctp

(usa Linux Mint)

Enviado em 21/09/2016 - 00:21h

Olá pessoal!
Passando pra agradecer. Dicas preciosíssimas. Consegui fazer o que eu preciso num ambiente de teste aqui em casa. Amanha cedo vou chegar no trabalho e colocar esse negocio em produção.

E antes de concluir, apenas um adendo... como eu disse que vamos buscar informações em um monte de lugar, incluindo arquivos de texto plano gerados pelo sistema, usei o cat em conjunto com o grep pra filtrar esses dados. O macete foi ficar esperto com relação a forma de informar a variável para que quando usar o sed, ele buscar o resultado do comando. Para isso eu usei a crase. Segue exemplo:
acessos=`cat /var/custonlogs/acessos | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' >> acessos.txt` 

Bastando referenciar $acessos na hora de criar o bloco de texto.

O IPs mencionados na lista a seguir acessaram o sistema de gestão durante o ultimo plantão:
<ACESSOS>


Agradecido, gente!


Cordialmente,
Alex


7. Re: Aplicar conceitos de mala direta com shell script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 21/09/2016 - 09:47h

alexhctp escreveu:

Olá pessoal!
Passando pra agradecer. Dicas preciosíssimas. Consegui fazer o que eu preciso num ambiente de teste aqui em casa. Amanha cedo vou chegar no trabalho e colocar esse negocio em produção.

E antes de concluir, apenas um adendo... como eu disse que vamos buscar informações em um monte de lugar, incluindo arquivos de texto plano gerados pelo sistema, usei o cat em conjunto com o grep pra filtrar esses dados. O macete foi ficar esperto com relação a forma de informar a variável para que quando usar o sed, ele buscar o resultado do comando. Para isso eu usei a crase. Segue exemplo:
acessos=`cat /var/custonlogs/acessos | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' >> acessos.txt` 

Bastando referenciar $acessos na hora de criar o bloco de texto.

O IPs mencionados na lista a seguir acessaram o sistema de gestão durante o ultimo plantão:
<ACESSOS>

Agradecido, gente!

Cordialmente,
Alex

-----------------------
Bom dia Alex.
Dica . . .
O uso do "cat" mais "pipe", é desnecessário, o "grep/egrep" aceitam a sintaxe:
grep 'REGEX' arquivo.txt
Mais enxuto . . .
Falando em enxuto, essa REGEX do IP pode emagrecer . . .
egrep -o '([0-9]{1,3}\.){3}[0-9]{1,3}'

É isso.

marcelo oliver






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts