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.