Skip to main content

Perl

Script - Gerir VirtualHosts do Apache

Ora boas tardes,

Depois de algum tempo sem escrever nada no blog , trago-vos um script em perl acabado de sair do forno que nos permite adicionar, remover, listar, verificar, desativar os nossos virtualhosts.

Para tal temos temos ao nosso dispor as seguintes opções:

  • -add : para adicionar um virtualhost no apache , para tal basta usar a seguinte sintax: sudo ./apache -add ex: sudo ./apache -add www.rubemlrm.com rubemlrm

  • -rem: para remover um virtualhost no apache, para tal basta usar a seguinte sintax: sudo ./apache -rem ex: sudo ./apache -rem www.rubemlrm.com

Script - Verificar máquinas de rede

Boas noites, depois de algum tempo sem postar aqui nada devido a escola .Deixo aqui um pequeno script em perl que permite testar as máquinas de rede para ver quais é que estão ativas na nossa rede informática. Para tal é preciso ter um ficheiro com os ips que queremos testar e o script trata do resto sozinho.

#!/usr/bin/perl
use warnings;
use strict;
use Net::Ping;
use autodie;
my $host;
my $my_addr="<ip>";
my $ping;
my @reportlist;
chomp(my $date = `date +%a%d%m%y%k%M`);

open(FILE, "<ficheiro com ips>");
chomp (my @ips = <FILE>);
close(FILE);
foreach $host (@ips){
    $ping = Net::Ping->new();
    if ($ping->ping($host)){
        #print "$host -> está activo.n";
        push(@reportlist,"$host -> está activo.");
    }else{
        #print "$host -> está offlinen";
        push(@reportlist,"$host -> está offline.");
    }
    $ping ->close();
}
#Reporte da lista
foreach (@reportlist)
{
    print "$_n";
}

#para um ficheiro a ser enviado por mail</p>
open(FILE , ">../logs/'$date_machine_networking_report.txt'");
foreach (@reportlist){
    print FILE "$_n";
}
close(FILE);

Script - Verificar se utilizador existe

Este script tem como fundamento verificar se um utilizador existe ou não no sistema Linux e se existir além de nos mostrar uma mensagem a dizer que existe ainda vai identificar o UID desse utilizador.
Caso contrário vai mostrar uma mensagem de erro a dizer que o utilizador não existe.
Atenção não foram utilizados comandos bash por isso é tudo perl scripting.

#!/usr/bin/perl
use warnings;
use strict;
my @finalusers;
my $utilizador;
my $statuscode = 0;
my $uid;
#Analise se foi intruzido um nome ou não
if(@ARGV != 1){
    die "Argumento inválido";
}
chomp($utilizador = $ARGV[0]);
open(FILE, "/etc/passwd") || die($!);
chomp(my @utilizadores = <FILE>);
close(FILE);
foreach my $date (@utilizadores){
    chomp $date;
    my @finalusers = split /:/, $date;
    chomp(@finalusers);
    if($finalusers[0] eq $utilizador){
        $uid = $finalusers[2];
        $statuscode++;
    }
}
if( $statuscode != 1){
    print "O $utilizador NÃO se encontra criado no sisteman";
}else{
    print "o $utilizador JÁ se encontra criado no sistema! O seu UID é $uid !n" ;
}

Script - Sysadmin-toolbox

Depois de algum tempo a programar em perl , decidi “que tal por as minhas capacidades a prova” e construi um painel administrativo em perl para gerir sistemas.

E depois de algumas horas a programar , tenho uma versão 1 pronta a utilizar ainda com poucas funcionalidades é certo , mas para já considero que tem as funcionalidades básicas já implementadas , tais como:

  • Adicionar/remover utilizadores;
  • Possibilidade de fazer backups dos dados de um utilizador que se vai apagar;
  • Gestão de crons;
  • Funcionalidade para testar os pcs da rede.De forma a ver quais estão online e quais não estão;
  • Funcionalidade para encontrar pastas vazias e ficar com um registo das mesmas;
  • Funcionalidade para ver quais são os processos que estão a gastar mais recursos
  • Funcionalidade para adicionar vários utilizadores a uma máquina de forma automática
  • Funcionalidade para encontrar ficheiros que tenham um tamanho superior ao indicado.

Este projecto está disponível no github a partir do seguinte link : sysadmin-toolbox

Script - Reportar Directorias Vazias

Aqui fica um pequeno script para encontrar pastas vazias dentro de uma directoria.Este script utiliza o módulo File::Find::Rule para criar a listagem de todas as directorias e sub-directorias, utilizando uma directoria de partida.
Este script pode servir de base para a criação de um script para gerir directorias e apagar directorias vazias caso seja necessário.Para tal basta fazer pequenas alterações .

Para poderem executar este script teram que ter o módulo File::Find::Files instalado , para tal basta executarem o seguinte comando na linha de comandos:

Script Gerir Cron's com o Perl

Bem pessoal aqui fica um pequeno script para vos ajudar a a automatizar as vossas tarefas quando tiverem que mexer em crontabs. Este script surgiu numa aula de Sistemas Operativos em que tínhamos um exercício em que tínhamos que adicionar novos crons com o script.
Mas para não limitar o script acrescentei mais umas funções.Tais como tornar a criação de um novo cron mais interactiva , apagar crons , gravar o cron na localização correcta consoante o utilizador que está a executar o script.

Operadores em Perl

Desta vez irei falar de operadores de comparação, operadores de strings e operadores aritméticos. O que são e para que servem ? Bem esta vai ser a questão deste tutorial.Mas sem mais demoras vou iniciar este tutorial.

Operadores de Comparação Como ponto de partida vou falar sobre os operadores de comparação. Estes operadores servem para comparar strings e/ou números.
Mas utilizam nomenclaturas diferentes , ao seja o operador de uma string é diferente do operador de um número. E é importante nunca trocar os operadores porque podem ficar com erros no vosso programa e depois perderem algum tempo à procura do erro.

Ciclos de Controlo:"If..else" e "If..elsif.." em Perl

E aqui vem o mais um artigo relativo ao perl. Neste artigo vou-vos ensinar a utilizar um dos ciclos de controlo mais utilizados em programação que é o ciclo “if..else” e sua forma complexa “if..elsif”.
Este ciclo serve para controlar o fluxo de dados de um programa, no sentido de que se uma condição for verdadeira vai realizar uma acção e se for falsa vai realizar outra.

O ciclo “if..else” divide-se em duas partes
if (condição) {
  #bloco de código1
} else {
  #bloco de código2
}

Como podem ver tem uma estrutura muito simples. Mas para facilitar a vossa compreensão de como isto funciona vou explicar passo a passo o que está neste exemplo.

Declaração de variáveis em Perl

Bem minha gente chegou mais um artigo sobre perl. Desta vez irei focar as declarações de variáveis. Em perl só existem três tipos de variáveis. Estas são divididas por hashes, scalar e array. A declaração de variáveis em perl é um pouco diferente das linguagens mais comuns de programação.

perl

Antes de tudo o que é uma variável e como se caracteriza?

Uma variável é um “objecto” que contem informação útil para o contexto de programação. Uma variável é caracterizada por 3 coisas:

Script Adb and Linux

Cada vez mais existem pessoas a utilizar Android e Linux e muitas deles tem dificuldades em por o adb a funcionar com Linux por causa de se ter que configurar regras ou então saber os valores para as coisas.

Decidi então criar um pequeno script em perl para agilizar este processo e tornando a vida do pessoal mais fácil quando trabalham com isto.

#Developer by : Rubem Mota
#Dont use to earn money and keep all copyrights reserved to me
#Twitter: @rubemlrm
use strict;
chomp(my @rules = (
    'SUBSYSTEM=="usb", SYSFS{idVendor}=="0502", MODE="0666"',
    'SUBSYSTEM=="usb", SYSFS{idVendor}=="413c", MODE="0666"',
    'SUBSYSTEM=="usb", SYSFS{idVendor}=="0489", MODE="0666"',
    'SUBSYSTEM=="usb", SYSFS{idVendor}=="091E", MODE="0666"',
    'SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"',
    'SUBSYSTEM=="usb", SYSFS{idVendor}=="12d1", MODE="0666"',
    'SUBSYSTEM=="usb", SYSFS{idVendor}=="0482", MODE="0666"',
    'SUBSYSTEM=="usb", SYSFS{idVendor}=="1004", MODE="0666"',
    'SUBSYSTEM=="usb", SYSFS{idVendor}=="22b8", MODE="0666"',
    'SUBSYSTEM=="usb", SYSFS{idVendor}=="0955", MODE="0666"',
    'SUBSYSTEM=="usb", SYSFS{idVendor}=="10A9", MODE="0666"',
    'SUBSYSTEM=="usb", SYSFS{idVendor}=="04e8", MODE="0666"',
    'SUBSYSTEM=="usb", SYSFS{idVendor}=="04dd", MODE="0666"',
    'SUBSYSTEM=="usb", SYSFS{idVendor}=="0fce", MODE="0666"',
    'SUBSYSTEM=="usb", SYSFS{idVendor}=="19D2", MODE="0666"'
));
my @brands = qw (
    Acer
    Dell
    Foxconn
    Garmin-Asus
    HTC
    Huawei
    Kyocera
    LG
    Motorola
    Nvidia
    Pantech
    Samsung
    Sharp
    SonyEricsson
    ZTE
);
my $i = 1;
my $uid = `id -u`;
#Checking if user is root or not
if ( $uid != 0 ){
    print "you need root priveleges to run this scriptn";
}else{
    #running the import part of script
    print "------------------------------:n";
    print ":Welcome to Adb rule creator :n";
    #it will create the list to choose brand
    foreach(@brands){
        print ".".$i++ ."=>". $_ ."n";
    }
    print ":Choose driver brand:n";
    chomp(my $opt = <STDIN>);
    #condition to check input
    if ($opt =~ /D/){
        print "Invalid Option choose againn";
        print ":Choose driver brand:n";
        chomp(my $opt = <STDIN>);
    }
    print "It will be created adb rules to " . $brands[$opt - 1] ."n";
    #filehandle to create rule
    open(FILE , ">>/etc/udev/rules.d/51-android.rules");
    print FILE $rules[$opt - 1];
    system("chmod a+r /etc/udev/rules.d/51-android.rules");
    close(FILE);
    print "Restarting services";
    system ("/etc/init.d/udev restart");
    print "All done";
}

Depois de fazerem download do script façam:

Introdução ao Perl

Quem já ouviu falar de Perl e quis aprender e depois pensou mas como é que vou aprender isto, ou melhor de que maneira é que vou aprender Perl.E para que serve o Perl. A  pensar nessas questões criei esta rubrica para vos mostrar como fazer algumas coisas. Para que servem algumas funções entre outros aspectos importantes de referir.

perl

Este artigo vai estar divido em 3 partes: