Inicialização e interrupção do sistema (Debian)

Tenho visto muitas dúvidas e perguntas sobre como colocar um script ou um aplicativo para iniciar no boot. Tenho visto algumas respostas que apesar de funcionarem, não creio que sejam a melhor alternativa para alguns casos. Por isso resolvi escrever esse artigo, tentando explicar o processo de inicialização e interrupção do Linux.

[ Hits: 41.129 ]

Por: Geraldo José Ferreira Chagas Júnior em 02/04/2008 | Blog: http://prginfo.blogspot.com


Processo de inicialização



Aqui iremos mostrar como o Linux começa a preparar o sistema para o uso, através do script de partida. Importante é observar o uso de variáveis que indicam o nível de execução ou estados do sistema.

O estado do sistema surgem da necessidade de separar a forma com que o sistema é percorrido, de acordo com a forma de manutenção que está sendo executada. Você vai encontrar uma descrição de vários níveis de execução no arquivo /etc/inittab.

# Runlevel 0 is halt. ( desligar )
# Runlevel 1 is single-user. ( mono usuário )
# Runlevels 2-5 are multi-user. (sendo que 2 é multiusuário sem NFS, será igual ao nível 3 se você não utilizar rede - 3 modo multiusuário completo - 4 não é usado, é para caso necessite configurar um especial - 5 é o modo X11)
# Runlevel 6 is reboot. (reboot

Quem usa o Linux em modo texto, como no caso de servidores, deve ainda encontrar a linha:

id:3:initdefault:

Essa linha indica que após carregar o núcleo (kernel) do sistema, o Linux deve ser executado, por padrão, em nível 3. Entretanto o pessoal que usa em modo gráfico deve ter a linha indicando para carregar em modo X11, ou seja, nível de execução 5. Esses níveis padrão são configurados na instalação do sistema. Dessa forma a linha que aparecerá, para modo gráfico, deve ser:

id:5:initdefault:

Agora veremos os níveis de execução, incluindo o primeiro script de partida na tabela de inicialização do sistema, o /etc/rcS/*, que é executado uma vez na hora da inicialização pelo comando init. A estrutura de diretório /etc/rcX.d e o que esses scripts fazem.

O init é o "pai de todos os os processos" e seu primeiro papel é carregar os processos armazenados no script /etc/inittab. Muito da forma com que o Linux carrega seus processos após a carga do núcleo vem de outro UNIX, System V. Na realidade o init do Linux é compatível com o init do System V.

Você pode ver evidências desse processo usando o comando pstree.

# pstree
init-+-cpid
     | pache2 *[apache2]
     | atd
     | cron
     | cupsd usb
     |events/0
...

Mesmo não estando toda a saída do comando pstree mostrada aqui, verificamos que o init é o pai de todos os processos, é dele que partem todos os processos subsequentes. O init trabalha analisando o script /etc/inittab e executando os scripts de /etc/rcX.d de acordo com o default ou com o nível de execução desejado. Cada script pode iniciar ou parar o serviço, como um serviço de impressão, compartilhamento de internet, serviço de rede etc.

Aqui está a lista de diretórios rc* de /etc/:

rc0.d/
rc1.d/
rc2.d/
rc3.d/
rc4.d/
rc5.d/
rc6.d/
rc.local
rcS.d/

Os diretórios rc's contém vários scripts para iniciar ou parar um processo, os detalhes de cada um não serão mostrados aqui, mas você poderá descobrir a função de cada um pelo nome do arquivo ou pelas curtas descrições contidas dentro deles.

A quantidade de scripts depende do número de pacotes escolhidos na instalação do sistema.

Em geral, cada script está destinado a responder a comandos da seguinte forma:

<script> {start | stop | status | restart }

Assim, esses scripts podem ser controlados por outros programas ou scripts, dependendo da sintaxe usada.

Ao ler o arquivo /etc/inittab após a linha:

id:X:initdefault:

que define qual o nível de execução default, encontra-se a linha:

si::sysinit:/etc/init.d/rcS

que indica que a primeira tarefa a ser executada pelo sistema de inicialização será carregar os scripts deste diretório. Esses scripts são os responsáveis por:
  • Ajustar algumas variáveis $PATH iniciais;
  • Configurar a conexão com a rede;
  • Ajustar clock do sistema;
  • Carregar configuração de teclado;
  • Começar a troca pela memória virtual;
  • ...

se usarmos o comando "ls -l" no diretório /etc/rcS.d será mostrada uma saída aproximadamente assim:

S01glibc.sh -> ../init.d/glibc.sh
S02hostname.sh -> ../init.d/hostname.sh
S02mountkernfs.sh -> ../init.d/mountkernfs.sh
S03udev -> ../init.d/udev
S04mountdevsubfs.sh -> ../init.d/mountdevsubfs.sh
S05bootlogd -> ../init.d/bootlogd
S05keymap.sh -> ../init.d/keymap.sh
S07hdparm -> ../init.d/hdparm
S10checkroot.sh -> ../init.d/checkroot.sh
S11hwclock.sh -> ../init.d/hwclock.sh
S12mtab.sh -> ../init.d/mtab.sh
...

A próxima tarefa do init será carregar os scripts do nível de execução determinado.

Se você observar a lista de diretórios rc em /etc, verá vários diretórios rcX.d, onde X é um número de 0 a 6.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Processo de inicialização
   3. Diretórios rcX.d
   4. Níveis de execução
   5. Como interromper o sistema
   6. Notas finais
Outros artigos deste autor

Linvox - Sistema Linux voltado para deficientes visuais

X Window, Controladores de Janelas e Ambientes Desktop

Configurando Servidor de Nomes - DNS (Debian)

Vírus de computador e criação de um vírus em C/C++ (parte 1 - básico)

Montando um ambiente utilizando Tomcat + Java + MySQL (Debian)

Leitura recomendada

Teste de distribuições GNU/Linux em pendrive

Como utilizar o Kurumin dentro de uma única partição Windows

Qual distribuibuição GNU/Linux devo utilizar?

Instalando Debian 5.0 e deixando com todos os programas que você gosta

Instalação dual boot com 2 HDs com Windows XP e Ubuntu Linux

  
Comentários
[1] Comentário enviado por exercitobr em 03/04/2008 - 08:55h

Muito interessante e bem explicado, parabéns!

[2] Comentário enviado por Andre_A_Ferreira em 03/04/2008 - 09:18h

?comentario=Excelente contribuição, as vezes precisamos entender simples funcionamento para desenvolver complexos sistemas.
Parabéns.

[3] Comentário enviado por brnlino em 04/04/2008 - 12:53h

Show de bola esse seu Artigo,
ainda irei criar uma artigo nesse nivel.


Parabens mesmo.

[4] Comentário enviado por .pedrao em 23/07/2008 - 09:07h

Muito bom mesmo cara...aliás, muito bom é pouco, eu tava precisando muito destas informações e tava difícil de encontrar...
Brigadão ae.. de verdade!!! XD


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts