Se você, assim como eu, divide o pc com a mãe, o pai, o irmão, a irmã, a vó… e por isso tem a infelicidade de ter o ruindows instalado na sua máquina, e o pior, tem que sair pra comprar pão na padaria da esquina, deixa o computador ligado com seu linux rodando e quando volta, lá está aquela triste situação em que você vê seu pc rodando ie. Bom, isso realmente é uma situação desagradável. Segue a explicação do porque não se deve reiniciar/desligar o pc direto do gabinete ou estabilizador (imprima isso e cole no monitor): cada arquivo que abrimos vai para memória, e fica por lá, mesmo depois de fechado. Com isso na próxima vez que precisar ler/escrever do arquivo, este será facilmente acessível e abrirá relativamente mais rápido. Este arquivo mantém-se na memória até que a syscall sync seja chamada, assim esvaziando a memória e tornando o arquivo novamente acessível pelo disco. Se enquanto houver arquivos na memória, acontecer uma quebra no sistema (ou algum estúpido meter o dedão no estabilizador/gabinete), o sistema de arquivos é danificado, e pode ocorrer perda de dados. Em alguns SO’s, há uma implementação, uma espécie de timeout, que após estourar o tempo limite, faz a chamada à sync. No MINIX, por exemplo, a memória é esvaziada a cada 30 segundos, diminuindo consideravelmente o risco. Uma boa alternativa para os preguiçosos é ativar o uso do ACPI, que dentre outras funções, monitora o botão de reiniciar no gabinete e quanto este é acionado o sistema é finalizado normalmente.
Reiniciando no dedão…
agosto 4, 2007Fork Bomb
julho 17, 2007O fork bomb é uma forma de ataque denial of service que implementa a operação fork, ou uma funcionalidade semelhante, rodando um processo que cria outro processo, que por sua vez cria outro processo e assim até travar o sistema.
O fork bomb funciona criando um grande número de processos muito rapidamente e recursivamente, provocando o lotamento da tabela de processos e assim novos programas não podem ser abertos.
Note que os fork bombs não apenas ocupam espaço na tabela de processos, como cada um deles também ocupa tempo de processo e memória. Como resultado disso, o sistema e os programas abertos ficam lentos e cada vez mais lentos, e então, fica impossível de usar.
Segue abaixo alguns exemplos de fork bombs:
- Shell script:
){
:& };:
- Perl: perl -e'fork while fork' &
- C:
#include <unistd.h>
int main (void) {
while(1) fork();
}
- Microsoft (R)Windows (batch):
:s
start %0
goto s
Prevenção
Uma maneira de se prevenir de um fork bomb é limitar o número de processos que um único usuário pode criar. Quando um processo tenta criar outro processo e o criador desse processo já criou mais que o máximo, a criação falha. O máximo deveria ser suficientemente baixo para que se todos os usuários que podem simultâneamente bombar um sistema, há ainda recursos suficientes para evitar um disastre. Note que um fork bomb acidental é altamente improvável de involver mais que um usuário.
Sistemas Unix-like tipicamente tem tal limite, controlado por um shell ilimitado. Com um kernel Linux, esse limite é RLIMIT_NPROC rlimit de um processo. Se um processo tentar executar um fork e o dono do processo já criou mais que RLIMIT_NPROC, ele falha.
Note que simplesmente limitando o número de processos, um processo pode procriar sem prevenir do fork bomb, por que cada processo que o fork bomb cria também cria processos. um sistema de alocação de recursos distribuídos pelo qual cada recurso de processamento é um compartilhamento de seu recursos pais que funcionaria, mas sistema de alocação distribuídos não são comumente usados.
Outra solução envolve a detecção de fork bombs pelo sistema operacional, o qual não é muito praticado, porém está implementado na forma de módulo kernel no Linux.
link original: http://en.wikipedia.org/wiki/Fork_bomb
Voltamos, com (talvez boas) notícias
julho 10, 2007Depois de muito tempo sem postar, a Null volta à tona. Agora temos um canal na freenode, caso você precise de ajuda, e prometemos pelo menos um post por semana. Happy hack!
#null.br @ irc.freenode.net
Módulos Perl que salvarão sua vida
fevereiro 13, 2007use strict; # use isto! USE ISTO! USE ISTO!
Esse módulo ( ou pragma) é uma boa pratica de programação, ele faz com que seu programa tenha uma postura de um bom programador, restringindo variáveis não declaradas, links simbólicos, e barewords ( nome e/ou identificador descoberto).
use warnings;
Habilita warnings ( avisos), tantos os avisos emitidos pelo compilador quanto aqueles emitidos em runtime.
use Benchmark;
Por Perl ser uma linguagem muito flexível, e sendo por essa razão que temos o nosso lema TIMTOWTDI, existem várias maneiras de fazer uma só coisa. Com esse módulo você pode testar dentre várias maneiras, qual é a mais rápida.
use English;
Acho que esse módulo não se classifica como um módulo que realmente salvará sua vida, porém muitos programadores (awk) gostarão disso, exeto os programadores preguiçosos (perl). Esse módulo irá lhe oferecer mais de uma maneira (já ouvi isso em algum lugar…) de se referir a uma variável, com nomes geralmente mais longos.
use Getopt::*;
Aqui eu me refiro aos módulos Getopt::Long e Getopt::Std, que facilitam o processamento das chaves usadas na linha de comandos.
use IO::Socket;
Este oferece um nível superior, de uma forma orientada à objetos (opcional), para o tratamento de sockets se comparando com o módulo Socket.
use Carp;
Oferece métodos específicos que informam erros da mesma forma que uma função interna informaria.
CPAN
Diferentemente de outros módulos, esse você deve chamar a partir da linha de comandos, com ‘perl -MCPAN -e shell’ ou ‘cpan’, o que irá te jogar em um shell onde você obterá uma interface automatizada da CPAN.
PAR
Um ótimo módulo criado pela famosa Audrey Tang, que zipa um arquivo .pl transformando-o em um .exe, que pode ser executado em diversas plataformas. No entando, por ser zipado, o código-fonte continua intacto, podendo ser obtido pela simples descompactação do arquivo .exe.
use Tie::File;
Oferece uma ligação de um arquivo em um array, onde cada elemento do array é equivalente à linha do arquivo ligado.
Bom, esses são apenas alguns módulos dentre os 11187 existentes na CPAN. Bem que eu gostaria de listá-los aqui, mas penso que seria um pouco tedioso. Então decho como “lição de casa” uma visita ao www.cpan.org, onde você irá encontrar não apenas módulos, mas tudo ( e quando digo tudo é realmente tudo) o que existe sobre Perl. Então se você está querendo um módulo com uma utilidade em específico, dê uma olhada na CPAN, há 99,99% de chances de você encontrar o que queria. A menos que você esteja procurando um módulo Hello::World ( que são os outros 0,01% das chances) que imprimi “Hello world”(e não é impossível encontrar um módulo com essas características), você irá encontrar o que você quer.
Redirecionando o fluxo
fevereiro 13, 2007Eaeee… vo falar um poco aqui de redirecionamento de fluxos, que eh uma coisa muito fácil e no entanto muito útil.
Bom, existem basicamente 2 tipos de operadores de redirecionamento de fluxo:
- para leitura: pipe ( | ) após o comando, < e <<;
- para escrita: pipe ( | ) precedendo o comando, > e >>;
O ‘<’ redireciona a entrada padrão de um arquivo ( ou dispositivo) para um comando. Ex: cat < file.txt.
O ‘<<’ serve pra delimitar o fim de um bloco.
Ex: cat << end
> hello
> world
> bye bye
> end
isso irá imprimir na tela “hello\nworld\nbye bye”, onde o ‘\n’ significa uma nova linha.
O ‘>’ redireciona a saída de um comando para um arquivo ( ou dispositivo), sobrescrevendo o mesmo ou crinado se inexistente. Ex: echo “hello world” > file.txt – se existir algo no arquivo, será sobrescrito.
O ‘>>’ redireciona a saída de um comando para o final de um arquivo ( ou dispositivo). Ex: echo “hello world” >> file.txt – adiciona “hello world” no final do arquivo, sem sobrescrever o que já existia ( se eh que existia).
O ‘|’ redireciona a saída de um programa para a entrada de outro. Ex: ls | grep *.txt – lista apenas os arquivos de texto.
Agora o que muitos usuários poderam se confundir eh com o ‘|’ e o ‘>’, mas basicamente a diferença entre os dois eh que o ‘|’ redireciona a saída de um programa para a entrada de outro, sendo que continua o processamento, enquanto o ‘>’ direciona a saída de um programa para um arquivo/dispositivo.
THE END
Gentoo japh
fevereiro 12, 2007Recuperando senha do root (lilo)
fevereiro 12, 2007Na tela do lilo digite:
LILO: linux single
Na maioria das distros isso te taca num terminal de root, em outras te taca num console de recuperação que pede a senha de root. Nesse caso dê um [CTRL] + C, se funcionar beleza, se não, volte pra tela do lilo e dessa vez digite:
LILO: linux init=/bin/bash
Com isso ele burla o procedimento de /sbin/init e /etc/rc.d/*. Estamos falando pro kernel: “simplesmente me dê um shell”, porém isso não é o suficiente, pois o HD está montado somente leitura, aí que entra o comando:
# mount -o remount,rw /
Agora você pode dar um “passwd” e mudar sua senha de root. Quando terminar de mudar a senha não reinicie, já que não tem init rodando, também não tem nenhum modo seguro de desligar o sistema. A forma mais rápida de desligar e segura é remontar o / somente leitura de novo:
# mount -o remount,ro /
Com isso você pode resetar a máquina tranquilamente e voltar a trabalhar.