Minha caixa de ferramentas no GNU/Linux
Neste artigo apresento um apanhado de scripts que uso em meu cotidiano com GNU/Linux.
Introdução
Todo sysadmin possui sua própria coleção de scripts úteis (ou não). No meu caso utilizo scripts que vão do auxílio na manutenção de servidores remotos à conversão de formatos de vídeo.
Pensando em quão amigos eles são (os scripts), resolvi abrir minha caixa de ferramentas e compartilhá-la com a comunidade.
Na pior das hipóteses, se por acaso nenhum dos scripts lhe for útil, pelo menos o artigo servirá de backup de meus códigos. Se por acaso eu perder meus dados ou for instalar um novo desktop, posso consultar este texto e baixar minhas ferramentinhas novamente. :)
Download: correios.sh
Exemplo de uso:
./correios.sh PB501392125BR
Download: check-mail.pl
Exemplo de uso:
./check-mail.pl emails.txt
Onde emails.txt é um arquivo texto que contém a lista de e-mails, um por linha.
Pensando em quão amigos eles são (os scripts), resolvi abrir minha caixa de ferramentas e compartilhá-la com a comunidade.
Na pior das hipóteses, se por acaso nenhum dos scripts lhe for útil, pelo menos o artigo servirá de backup de meus códigos. Se por acaso eu perder meus dados ou for instalar um novo desktop, posso consultar este texto e baixar minhas ferramentinhas novamente. :)
Acompanhando entregas dos Correios
Vez ou outra posto camisetas pelos Correios. Para acompanhar o andamento da entrega uso o seguinte script:
#!/bin/bash
#
# Script para rastreamento de objetos nos correios
# Desenvolvendor: Jamilson S. Carmo - 08/07/09 às 16:30hs
#
# Caso você não use proxy retirar o parâmetro -pauth="jamilson:ViViane" da linha do lynx, caso use proxy somente troque o usuário e a senha
# As vezes o site de busca dos correios fica fora do ar, com isso não retornando nada.
# Código para teste: RE419472475BR
http_proxy="http://fabio:jedipass@174.123.53.162:33128"
export http_proxy
endereco="http://websro.correios.com.br/sro_bin/txect01$.inexistente?p_itemcode=&p_lingua=001&p_teste=&p_tipo=003&z_action=&p_cod_lis=$1"
site=$(lynx -pauth="fabio:jedipass" -dump $endereco | grep -A 2 [0-3][0-9]\/[0-1][0-9]\/"20"[0-1][0-9]\ [0-2][0-9]\:[0-5][0-9])
if [ "$endereco" = "" ]; then
echo -e "\nSite temporariamente fora do ar!\n"
exit 1
fi
if [ -e `which lynx` ]; then
if [ $# -eq 1 ]; then
echo -e "\n"
if [ "$site" != "" ]; then
echo -ne "$site"
else
echo -ne "Objetos não encontrados \nCódigo: $1"
fi
echo -e "\n\n"
else
echo -ne "\nInforme o código para rastrear o produto. Ex.: RE419472475BR\n\n"
fi
else
echo -e "\nVocê precisa instalar o lynx\n"
echo -e "Como instalar o lynx: "
echo -e " --Debian/Ubuntu: apt-get install lynx"
echo -e " --Arch Linux: pacman -S lynx"
echo -e " --Fedora: yum install lynx"
echo -e " --Gentoo: emerge lynx\n"
fi
#
# Script para rastreamento de objetos nos correios
# Desenvolvendor: Jamilson S. Carmo - 08/07/09 às 16:30hs
#
# Caso você não use proxy retirar o parâmetro -pauth="jamilson:ViViane" da linha do lynx, caso use proxy somente troque o usuário e a senha
# As vezes o site de busca dos correios fica fora do ar, com isso não retornando nada.
# Código para teste: RE419472475BR
http_proxy="http://fabio:jedipass@174.123.53.162:33128"
export http_proxy
endereco="http://websro.correios.com.br/sro_bin/txect01$.inexistente?p_itemcode=&p_lingua=001&p_teste=&p_tipo=003&z_action=&p_cod_lis=$1"
site=$(lynx -pauth="fabio:jedipass" -dump $endereco | grep -A 2 [0-3][0-9]\/[0-1][0-9]\/"20"[0-1][0-9]\ [0-2][0-9]\:[0-5][0-9])
if [ "$endereco" = "" ]; then
echo -e "\nSite temporariamente fora do ar!\n"
exit 1
fi
if [ -e `which lynx` ]; then
if [ $# -eq 1 ]; then
echo -e "\n"
if [ "$site" != "" ]; then
echo -ne "$site"
else
echo -ne "Objetos não encontrados \nCódigo: $1"
fi
echo -e "\n\n"
else
echo -ne "\nInforme o código para rastrear o produto. Ex.: RE419472475BR\n\n"
fi
else
echo -e "\nVocê precisa instalar o lynx\n"
echo -e "Como instalar o lynx: "
echo -e " --Debian/Ubuntu: apt-get install lynx"
echo -e " --Arch Linux: pacman -S lynx"
echo -e " --Fedora: yum install lynx"
echo -e " --Gentoo: emerge lynx\n"
fi
Download: correios.sh
Exemplo de uso:
./correios.sh PB501392125BR
27/04/2012 17:42 CEE RECIFE - RECIFE/PE Entrega Efetuada
27/04/2012 13:16 CEE RECIFE - RECIFE/PE Saiu para entrega
27/04/2012 12:34 CTE RECIFE - RECIFE/PE Encaminhado
Encaminhado para CEE RECIFE - RECIFE/PE
19/04/2012 15:07 ACF AUGUSTO CARDOSO - NOVA FRIBURGO /RJ Encaminhado
Em trânsito para CTE BENFICA - RIO DE JANEIRO/RJ
19/04/2012 10:56 ACF AUGUSTO CARDOSO - NOVA FRIBURGO /RJ Postado
Verificando lista de e-mails válidos
Você precisa enviar uma newsletter, tem um arquivo com uma lista de e-mails e precisa verificar quais deles são endereços válidos.
#!/usr/bin/perl
#
# # check_email.pl
# # Recebe um arquivo contendo uma lista de e-mails separados por
# # quebra de linha e um servidor de DNS e retorna somente endereços válidos com MX válidos.
# # Date == begin == 16/09/03
# # Produced by -->
# #
# # .....
# # ,,$$$$$$$$$, Alberto Pereira
# # ;$' '$$$$: Analista de suporte
# # $: $$$$:
# # $ o_)$$$: -"E ai linux, o que faremos hoje a noite??"
# # ;$, _/\ &&:' -"O que fazemos todas as noites link,
# # ' /( &&& tentaremos dominar o mundo"
# # \_&&&&'
# # &&&&. -DEBIAN, THE CHOICE OF NEW GNU LINUX GENERATION!!!!
# # &&&&&&&:
# #
# # No Debian Woody necessários instalar os seguintes pacotes:
# # apt-get install libemail-valid-perl libnet-dns-perl
#
use strict;
use Net::DNS;
use Mail::Address;
my $file = shift or die "Use: $0 arquivo servidor\n";
my $nameserver = shift or die "Use: $0 arquivo servidor\n";
if (! -f $file) {
print "Erro: $file não é um arquivo válido!\n";
}
my $res = Net::DNS::Resolver->new;
$res->nameservers($nameserver);
open(READ, $file);
while(<READ>) {
chomp;
my @addrs = Mail::Address->parse($_);
foreach my $addr (@addrs) {
my $no = 0;
my $user = $addr->user;
my $domain = $addr->host;
if ($user =~ m/[a-zA-Z0-9_\.\-]/g) {
if ($user =~ m/\//g) { $no = 1;}
if ($domain =~ m/[a-zA-Z0-9\.\-]/g) {
if ($domain =~ m/\//g) { $no = 1; }
if ($domain =~ m/\.$/g) { $no = 1; }
if ($domain =~ m/^\./g) { $no = 1; }
if ($domain =~ m/\'/g) { $no = 1; }
my @mx = mx($res, $domain);
if (!@mx) { $no = 1;}
print $addr->format,"\n" if (!$no);
}
}
}
}
#
# # check_email.pl
# # Recebe um arquivo contendo uma lista de e-mails separados por
# # quebra de linha e um servidor de DNS e retorna somente endereços válidos com MX válidos.
# # Date == begin == 16/09/03
# # Produced by -->
# #
# # .....
# # ,,$$$$$$$$$, Alberto Pereira
# # ;$' '$$$$: Analista de suporte
# # $: $$$$:
# # $ o_)$$$: -"E ai linux, o que faremos hoje a noite??"
# # ;$, _/\ &&:' -"O que fazemos todas as noites link,
# # ' /( &&& tentaremos dominar o mundo"
# # \_&&&&'
# # &&&&. -DEBIAN, THE CHOICE OF NEW GNU LINUX GENERATION!!!!
# # &&&&&&&:
# #
# # No Debian Woody necessários instalar os seguintes pacotes:
# # apt-get install libemail-valid-perl libnet-dns-perl
#
use strict;
use Net::DNS;
use Mail::Address;
my $file = shift or die "Use: $0 arquivo servidor\n";
my $nameserver = shift or die "Use: $0 arquivo servidor\n";
if (! -f $file) {
print "Erro: $file não é um arquivo válido!\n";
}
my $res = Net::DNS::Resolver->new;
$res->nameservers($nameserver);
open(READ, $file);
while(<READ>) {
chomp;
my @addrs = Mail::Address->parse($_);
foreach my $addr (@addrs) {
my $no = 0;
my $user = $addr->user;
my $domain = $addr->host;
if ($user =~ m/[a-zA-Z0-9_\.\-]/g) {
if ($user =~ m/\//g) { $no = 1;}
if ($domain =~ m/[a-zA-Z0-9\.\-]/g) {
if ($domain =~ m/\//g) { $no = 1; }
if ($domain =~ m/\.$/g) { $no = 1; }
if ($domain =~ m/^\./g) { $no = 1; }
if ($domain =~ m/\'/g) { $no = 1; }
my @mx = mx($res, $domain);
if (!@mx) { $no = 1;}
print $addr->format,"\n" if (!$no);
}
}
}
}
Download: check-mail.pl
Exemplo de uso:
./check-mail.pl emails.txt
Onde emails.txt é um arquivo texto que contém a lista de e-mails, um por linha.
[ ]'s