Blog sobre meus estudos e implementações em programação em diversas linguagens. Lista de Linguagens Estudadas. "PC":[Shell, Regex, Python,SQL(mysql)]. "PF":[Ruby, Go] "PCP":[Javascript,C++,PHP]
quarta-feira, 12 de dezembro de 2018
rcunhale:Julio Neves:Programando em Shell
Leitura do Livro Programando em Shell, do prof. Julio Neves.
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.
Fim
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.compassword=$(cat /root/.bots/password)dir=/usr/local/basesdate=$(date +%y.%m.%d.%H%M)base0=forumbase1=wikimysqldump -h localhost -u root -p$password --opt $base0 > $dir/mysql.$base0.db.tgz.$date 2> /dev/nullmysqldump -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.$datetar -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.
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
--
ProfWork:OtherLanguages
Github Projects:
Requisições: Java, C++, HTML, CSS, SQL e frameworks.
SQL Server, Mysql, PostGreSql, Go, Oracle.
Java Script
#FRONT
#BACK
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 1: origem 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
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
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
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
~
github
github
Assinar:
Postagens (Atom)
