sexta-feira, 7 de dezembro de 2018

tips:ScriptBackup:Template

Meu Template de Script de Backup
Especificamente fiz o backup de um phpbb e de uma wiki, ambos são projetos livres.


#!/bin/bash
#Autor Rodrigo da Silva Cunha - rodrigo.root.rj@gmail.com
password=$(cat /root/.bots/password)
dir=/usr/local/bases
date=$(date +%y.%m.%d.%H%M)
base0=forum
base1=wiki
mysqldump -h localhost -u root -p$password --opt $base0 > $dir/mysql.$base0.db.tgz.$date  2> /dev/null
mysqldump -h localhost -u root -p$password --opt $base1 > $dir/mysql.$base1.db.tgz.$date  2> /dev/null
#Compactando e Removendo.
tar -zcf $dir/mysql.$base0.db.tgz.$date.tgz  $dir/mysql.$base0.db.tgz.$date && rm -rf $dir/mysql.$base0.db.tgz.$date
tar -zcf $dir/mysql.$base1.db.tgz.$date.tgz  $dir/mysql.$base1.db.tgz.$date && rm -rf $dir/mysql.$base1.db.tgz.$date



 Fim

quarta-feira, 5 de dezembro de 2018

Shell, estrutura de repetição for.



  • Shell Templates
    • Loop contador inverso.
    • Loop Dentro de Loop.
    • Loop, com busca decrescente de arquivos.
    • Condicionais em shell
      • if
      • switch case
    • Estrutura de repetição.
      • for.
      • while.
    • Trabalhando com Shell Array.
      • Append num array.
      • Criando um array e exibindo no loop.
    • Funções em shell.

Finalidade: Loop Inverso
Forma 01:
#!/bin/bash
a=10
for ((i=$a-1; i>=0; i--)); do
  echo "$i"
done
Loop dentro de Loop, duas formas com array e sem array.
#!/bin/bash
#Autor:Rodrigo Cunha
a="1"
b="10"
for i in $( seq ${a}  ${b} )
do
for j in $( seq ${a} ${b})
do echo $j
done
done
#!/bin/bash
#Autor:Rodrigo Cunha
parray=("1" "2" "3" "bazinga")
sarray=("1" "2" "3" "fim ou end")
for ((i=${#parray[@]}; i>=0; i++)); do
for ((j=${#sarray[@]}; j>=0; j++)); do
do echo $j
done
done


Busca Decrescente em arquivos.
$busca_arquivo.sh
O script abaixo pega todos os arquivos dentro de um diretório, na variavel file e para cada um deles exibe o arquivo. É util para execussão em lote.
#!/bin/bash
files=(var/logs/foo*.log)
for ((i=${#files[@]}-1; i>=0; i--)); do
  echo "${files[$i]}"
done
ls /var/logs/
foo1.log  foo2.log  foo3.log
output:
$./busca_arquivo.sh
var/logs/foo3.log
var/logs/foo2.log
var/logs/foo1.log

--


Devnull:PgofWork:PHP:Loop, Array e Função: Frank


Loop, Array e Função

ProfWork:OtherLanguages

Github Projects:
Requisições: Java, C++, HTML, CSS, SQL e frameworks.
SQL Server, Mysql, PostGreSql, Go, Oracle.

Java Script
#FRONT
#BACK

Regex Introdução[Doing]

  • Overview
    • Exemplo
  • Introdução.
  • Softwares para processamento no Linux e engines.
  • Desafios
  • Referencias
  • Bibliografia
"Não sei, só sei que foi assim."_Chicó, Auto da Compadecida.

Overview:
É dificil escrever um texto sobre Regex, sem apresentar algum exemplo pratico do que é uma regex. Mas, basicamente são expressões regulares sobre caracteres ASCII.
São utilizados em diversos cenários, um deles é criar métricas a partir de DataLakes de log ou mesmo ,para empresas pequenas sem centralizador de logs,  extrair de arquivos de Log de um webserver alguma métrica de desempenho do servidor.

Exemplos:
Em alguns casos, é muito comum ter-mos que produzir um resultado a partir de linhas de logs. Segue abaixo um exemplo comum de linha de log de um servidor web.
"
172.17.0.1 - - [22/Jan/2023:18:59:14 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://127.0.0.1:8091/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "-"
172.17.0.1 - - [22/Jan/2023:18:59:17 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "-"
172.17.0.1 - - [22/Jan/2023:18:59:17 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "-"
172.17.0.1 - - [22/Jan/2023:18:59:18 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "-"
"
Bem, vamos entender essas linha. Segue abaixo sua divisão semantica em 3 partes distintas:
Parte 1origem e tempo da requisição +0000() UTC
172.17.0.1 - - [22/Jan/2023:18:59:17 +0000]   
Parte 2: método(Get),Versão do protocolo(http v1) 
GET / HTTP/1.1" 304 0
Parte 3:Dados sobre o navegador que acessou o website
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "-"

É possivel dividir em 3 partes, a primeira é origem e tempo da requisição +0000() UTC. A segunda parte é o método(Get),Versão do protocolo(http v1) e por fim o código http(300).A tarceiras são dados sobre o navegador que acessou o website, neste caso é um os mac em um navegador chrome.

Ok, isto posto o que se pede nas empresas, nos dias de hoje, é extrair disso alguma coisa util. Via de regra quem define o que é util ou não é um time de coordenação ou gerencia. No ponto de vista técnico de Noc ou Técnico de TI, o que se faz é coletar os dados do arquivo de log da empresa sitedafirma.com.br.log referente ao código html, para cada requisição(cada linha).

Softwares para processamento no Linux e engines.
Engines, são formas, geralmente libs que processam um regex. Existem sistemas que embarcam engines. No php, or exemplo, utiliza-se a engine pcre.
Sisstemas de processamento de Regex, no linux:
São sistemas, nativos do gnu/linux, que processam o regex. Eles tem alguma engine por trás, geralmente a pcre.
Os mais comuns são: awk, grep e sed. Em se tratar de código, existe um módulo chamado re.
Para emular engines, temos o website https://regex101.com/.

terça-feira, 4 de dezembro de 2018

Tips:Testes de Laboratório: Array dinamico, gerado dinamicamente.

Gerando um Array com um array dinamico.
O problema: Eu quero criar um array com os ips do meu ambiente, mas não quero setar um a um.Para isso criarei um arquivo onde ficarão contidos os ips dos meus servidores e em função desse arquivo, eu criarei um array dinamico (array1) que gera um array com o conteudo dos meus ips.Esse arquivo, chamado tmp vai servir de source para implementações em pool de servidores.

Exemplo: Minha rede tem os servidores 192.168.1.[1-3], feito isso eu crio o arquivo: aruivo2 com o conteudo:
192.168.1.1
192.168.1.2
192.168.1.3
No dia seguinte eu irei inserir o servidor: 192.168.1.4, o arquivo ficaria assim:
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
Feito isso, meu script vai contar quantas linhas tem esse arquivo(arquivo2)

Objetivo: Criar um array com tamanho dinamico, em função do numero de entradas(linhas) em um arquivo(arquivo2). Esse array1 vai gerar um arquivo(tmp), onde estarão entradas do tipo array. O conteudo dessa array2

Arquivos:
arquivo, tmp e script.sh

root@DevArea:~/18.12.04.0837# cat script.sh
#!/bin/bash
#Autor: Rodrigo da Silva Cunha
. tmp
arq="arquivo"
head=1
tail=$(cat $arq |wc |awk -F' ' '{print $1 }')
>tmp
for i in $( seq ${head} ${tail})
do
aux=$(sed -n ''$i'p' $arq)
echo Metadado[$i]='"'$aux'"' >> tmp
echo ${Metadado[$i]}
done

root@DevArea:~/18.12.04.0837# cat arquivo
192.168.1.1
192.168.1.2
192.168.1.3

O arquivo tmp é gerado dinamicamente com um formato, similar ao de baixo:

root@DevArea:~/18.12.04.0837# cat tmp 
Metadado[1]="192.168.1.1"
Metadado[2]="192.168.1.2"
Metadado[3]="192.168.1.3"
root@DevArea:~/18.12.04.0837# 

Obrigado a Todos, duvidas nos comentários.




Tips:Check:Array com Scripts

Executar um pool de scripts, utilizando o metodo array com loop para armazenamento em variavel.
Arquivos:
source:arquivo
script: t1.sh
cat arquivo:
~
MatrizBots[0]="redbot"
MatrizBots[1]="blackbot"
~
cat t1.sh
~
#!/bin/bash
source arquivo
e="0"
f="1"
for i in $(seq ${e} ${f})
do
./bot.${MatrizBots[$i]}
done
~

segunda-feira, 3 de dezembro de 2018

Comando em pool de servidores, com Array de Servidores.

Array de Servidores
Autor: Rodrigo da Silva Cunha Versão 1.0.1
Estudo de Caso: Um sysadmin precisa replicar um comando especifico por pool de servidor.
Objetivo: Criar array com servidores registrados em arquivo para que enviem comandos por pool de servidores.
Step1:Criar lista de servidores.
Step2:Criar função full e função por Área(Matriz, FilialMG);
Step3: Alterar Data do pool de servidores;
Nota: Este Projeto Precisa de uma PA com Acesso de Chave.
Modulo: Criar um projeto para áreas sem acesso via PA.

Step1:
Lab Teste1 03122018:
Arquivos:
./servidores
#Matriz
Matrizservidor[0]="192.168.0.1"
Matrizservidor[1]="192.168.0.2"
Matrizservidor[2]="192.168.0.3"
Matrizservidor[3]="192.168.0.4"
a="0"
b="4"

#Filial MG
FilialMGservidor[0]="192.168.1.1"
FilialMGservidor[1]="192.168.1.2"
FilialMGservidor[2]="192.168.1.3"
FilialMGservidor[3]="192.168.1.4"
c="0"
d="4"
#Pool de Teste
Testeservidor[0]="192.168.0.10"
Testeservidor[1]="192.168.0.20"
e="0"
f="1"
~

root$ ./script
~
#!/bin/bash
source servidores

for i in $(seq ${a} ${b})
do
echo  ${Matrizservidor[$i]}
done

for i in $(seq ${c} ${d})
do
echo  ${FilialMGservidor[$i]}
done

for i in $(seq ${e} ${f})
do
echo  ${Testeservidor[$i]}
done

sábado, 24 de novembro de 2018

LTips:Variaveis

Inserindo variaveis de maneiras diferentes.

Tips:BashIf

Variaveis:
$_vL00="string"
$_vL01="string"

if [ "$_vLGetIp" == "$_vLOldIp" ] ; then
echo "Report Then"         
else
echo "Report Else"
fi






LTips:FunçõesBash

LTips:FunçõesBash

LTips:ArrayBash

tmp

Tips:LoopFor

Loop de 0 a 10, com variaveis.
#!/bin/bash
from_value="0"
to_value="10"
for i in $(seq ${from_value} ${to_value})
do
        echo "$i"
done 

Loop de 0 a 10, com variaveis.

#!/bin/bash
_VLInicio="0"
_VLFim="10"

for ((i=${_VLInicio} ; i<=${_VLFim}; i++))
do
echo ${i}
done;


Bash Project:Dns Dinamico

Objetivo: Criar um script que monitore o ip publico do seu ambiente, caso ele mude, o script troca o
ip direcionado ao seu website.



Criando arquivos necessarios para o script:
root# Arquivo da zona /etc/bind/zonas/db.ocozzi.intranet
root# >/root/.bots/BotDate23112252
root# echo  wget -q -O - $_vb3 |sed -e 's/.*Current IP Address: //' -e 's/<.*$//'   >/root/.bots/BotDate23112252
root# >/root/.variaveis
root# >/usr/local/src/bash/ChangeDns.sh && chmod +x /usr/local/src/bash/ChangeDns.sh

Conteudo de Variaveis:
root# vim /root/.variaveis
#!/bin/bash
#Variaveis de Registro
_va0=$(date +%H%M%S)
###Variaveis de Uso
_vb0=8.8.8.8 #Nome do ip.
_vb1="TmpTobot_$_va0" #Nome do arquivo.
_vb3="checkip.dyndns.org" #Site CheckSite Para Dns Dinamico.



Conteudo do Script:
root# vim /usr/local/src/bash/ChangeDns.sh



#!/bin/bash
#BotDate23112252
#Objetivo: Mudar o ip no DNS
#Frame00:
source /root/.variaveis
#
###Variaveis Locais
#
_vLGetIp=$(wget -q -O - $_vb3 |sed -e 's/.*Current IP Address: //' -e 's/<.*$//') #> /root/.bots/BotDate23112252
_vLArquivo00=/root/.bots/BotDate23112252
_vLOldIp=$(cat $_vLArquivo00 )
#_vLDataBaseDns=$(/etc/bind/zonas/db.ocozzi.intranet)
#
### Manipulando O arquivo ###
#


echo "$_vLGetIp"
echo "$_vLOldIp"
if [ "$_vLGetIp" == "$_vLOldIp" ] ; then
echo "Ok, NAO Mudou IP"         
else
#cp -p $__vLDataBaseDns $_vLDataBaseDns.$_va0.bkp
sed -i "s/check         IN       A         $_vLOldIp./check         IN       A         $_vLGetIp/g" db.documento
echo "$_vLGetIp" > /root/.bots/BotDate23112252
echo "ALERTA, Ip Mudou"
fi


Primeiro Post.

First! \O/