Arquivo /etc/inittab

No post anterior, falei sobre os níveis de inicialização do Linux; aqui, vou falar sobre o arquivo /etc/inittab, que é o responsável por definir o nível de execução (runlevel) que o Linux vai iniciar e a sequência de scripts que serão executados para inicializar os serviços.

Primeira coisa, mesmo que a gente não venha trocar uma linha… vamos fazer um backup do arquivo; afinal de contas, ‘abençoados sejam os pessimistas, pois eles fizeram bekapi’:

# cd /etc/

# cp inittab /root/bekapi/

`inittab’ -> `/root/bekapi/inittab’


Agora sim, podemos editar o arquivo:

# vi inittab

A primeira linha importante é essa:

id:2:initdefault:

Essa linha, pessoas indica qual o runlevel padrão o sistema vai iniciar! Então, se quero trocar o nível, é aqui que vou mexer! Só por favor não incluam ai o nível 0 ou 6… rs senão o sistema vai ligar e desligar eternamente!

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

A linha acima, chama o script que irá iniciar todos scripts que iniciam em ‘S’ no /etc/rcS.d.

~~:S:wait:/sbin/sulogin

Essa linha, chama o comando sulogin, que é utilizado pelo sistema para entrar em modo monousuário (single). Quando o sulogin é invocado, o seguinte prompt é exibido:

Give root password for maintenance

(or type Control-D to continue):

Essa mensagem costuma aparecer quando o sistema está iniciando e acontece algum problema… daí, você tem a opção de fornecer a senha de root prá consertar o sistema, ou então, teclar CTRL+D para continuar.

l0:0:wait:/etc/init.d/rc 0

l1:1:wait:/etc/init.d/rc 1

l2:2:wait:/etc/init.d/rc 2

l3:3:wait:/etc/init.d/rc 3

l4:4:wait:/etc/init.d/rc 4

l5:5:wait:/etc/init.d/rc 5

l6:6:wait:/etc/init.d/rc 6

As linhas acima indicam os níveis de inicialização que vimos anteriormente! E aqui, indica o nível e os diretórios que serão acessados (aqueles rc?.d, lembram?).

ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

Essa linha executa uma ação para a combinação das teclas CTRL+ALT+DEL.

Os números 12345 indicam que a ação será executada nesses níves. Por padrão, essa combinação executa o reboot da máquina (/sbin/shutdown -t1 -a -r now).

Então, se a gente for pensar em segurança, pode apagar essa linha, comentar (colocar o sinal ‘#’ sem as aspas na frente da linha), ou ainda executar um comando… Aqui na minha máquina, troquei a linha para:

ca:12345:ctrlaltdel:/bin/echo “Voce teclou CTRL + ALT + DEL”

Daí, toda vez que eu uso a combinação CTRL+ALT+DEL, aparece: “Voce teclou CTRL+ALT+DEL”. Chique no úrtimo, esse tal de comando echo :P!

1:2345:respawn:/sbin/getty 38400 tty1

2:23:respawn:/sbin/getty 38400 tty2

3:23:respawn:/sbin/getty 38400 tty3

4:23:respawn:/sbin/getty 38400 tty4

5:23:respawn:/sbin/getty 38400 tty5

6:23:respawn:/sbin/getty 38400 tty6

As linhas acima indicam chamadas do console para login em modo texto… são os terminais que acessamos com as teclas CTRL+ALT+F1, CTRL+ALT+F2…

E assim vai até o 6. As linhas acima, indicam que esses terminais estão liberados para uso! Ou seja, é logar e usar o shell!

Para desabilitar, basta comentar as linhas que deseja desabilitar; lembrando que não se deve comentar todas… pelo menos dois terminais devem ficar ativos… que aí, um você usa no modo texto, e outro é usado pela interface gráfica, caso esteja configurada.

Bem, depois de fazer todas mudanças no arquivo, é hora de salvar o arquivo e atualizar as configurações. Para isso:

# init q

A opção ‘q‘ diz ao init para reler o inittab! Assim, as mudanças são feitas sem a necessidade de reiniciar a máquina, uma vez que o inittab é lido no momento da inicialização.

É importante falar que o comando init não é utilizado somente para atualizar o arquivo… ele também pode ser utilizado para mudar o nível. Por exemplo:

# init 1

Esse comando desloga do terminal e invoca o sulogin, onde você pode informar a senha – ai entra no modo monousário; ou então tecla CTRL+D para iniciar no runlevel padrão.

Bem, é isso aí pessoal… até o próximo post!

Níveis de inicialização no Linux

Os níveis de execução definem como o Sistema Operacional (SO) inicializará; o Linux possui 7 níveis que vão de 0 a 6, e diferem de distro para distro.

Falando sobre os níveis, eles permitem que eu escolha quais serviços vão iniciar ou não em cada nível; em geral, os daemons de inicialização dos serviços ficam localizados dentro de /etc/init.d.

Cada script do diretório /etc/init.d é escrito para aceitar argumentos como start, stop, restart, status e pode ser executado manualmente caso seja necessário.

Por exemplo, para parar, iniciar e restartar o daemon ssh:

# /etc/init.d/ssh stop
# /etc/init.d/ssh start
# /etc/init.d/ssh restart

O importante agora é saber onde ficam os daemons dos serviços que temos instalados na máquina e que são esses daemons os responsáveis por iniciar ou não um determinado serviço no Linux.

E um outro ponto importante, é que, quem decide quais dos serviços que estão no /etc/init.d vão iniciar quando o Linux estiver inicializando, é o administrador do sistema (você! 😀 ).

Isso quer dizer que, podemos em um runlevel iniciar o serviço SSH e em outro esse serviçõ não irá iniciar (ficará desligado).

Como disse anteriormente, o Linux possui 7 níves de inicialização:
Niveis de inicializacao em diversas distros

Nos meus posts, vou falar sobre Debian, mas achei legal a tabela por mostrar como são utilizados os níveis em outras distribuições.

Na tabela acima, temos os 7 runlevels, que são definidos no /etc/inittab; uma coisa que é importante falar, é que cada runlevel possui seu próprio diretório, localizado dentro de /etc. Vejam:

# ls -d /etc/rc?.d
/etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rc4.d /etc/rc5.d /etc/rc6.d /etc/rcS.d

Onde no comando acima:

-d => o comando ls irá listar somente os diretórios

/etc/rc?.d => irá listar os diretórios que comecem com rc com qualquer caracter onde esta o ‘?’.

Vejam que na saída do comando acima, temos todos os runlevels de 0 a 6 e ainda aparece o rcS.d. Esse runlevel, rcS.d, é utilizado por programas que são executados durante o início do nível 1.

Bem, mas agora vem a pergunta… “Como sei qual nível meu sistema inicia“?

O comando que mostra qual nível o sistema iniciou é o runlevel:

# runlevel
N 2

Acima, podemos ver que o sistema inicia no nível 2; lembrando que por padrão, sistemas Debian tem como padrão o nível 2.

Sabendo qual nível o sistema inicia, basta consultar o diretório correspondente ao nível, que no caso é o /etc/rc2.d.

Exemplo:

# ls /etc/rc2.d/
K89cron S10sysklogd S11klogd S20acpid S20gpm S20makedev S20openbsd-inetd S20ssh S99rc.local S99rmnologin S99stop-bootlogd

Ah, e um detalhe: os arquivos do diretório, na verdade são links que apontam para os serviços que estão em /etc/init.d. Quer conferir se isso é verdade? Basta executar:

# ls -l /etc/rc2.d

Bom, voltando ao que estava falando sobre o os arquivos do /etc/rc2.d, dentro desse diretório temos arquivos que começam assim: SXXnome ou KXXnome. Aqui temos as seguintes regras:

✔ Se um link é iniciado com a letra K (kill), quer dizer que o serviço será interrompido naquele nível de execução. A função do K é executar o serviço em /etc/initd.d seguido de stop.

✔ Se um link é iniciado com a letra S (start), quer dizer que o serviço será iniciado naquele nível de execução. A função do S é executar o serviço em /etc/initd.d seguido de start.

Por exemplo, quando você instala algum serviço na máquina, o daemon é colocado dentro de /etc/init.d e é criado um link para que o inicie nos runlevels de 2 a 5. Afinal de contas, o Linux entende que se você está instalando, por certo deve querer que o serviço inicie 😀 !

Mas pode acontecer também de você não instalar, e sim o pacote da distribuição instala como padrão, e você nem usa o serviço!

Vamos ver o serviço cron. Ainda não falei sobre ele em nenhum post, então não vou detalhar aqui… eu falo dele em outro post! A função do cron é agendar tarefas… mas imaginando que você não vai usá-lo, vamos tirá-lo da inicialização.

Para isso, vamos no runlevel que inicia por padrão na máquina (use o comando runlevel para saber o padrão):

# runlevel
N 2

Em seguida, vamos no diretório do runlevel e listamos o serviço cron:

# cd /etc/rc2.d
# ls -l | grep cron
lrwxrwxrwx 1 root root 14 2008-11-16 21:52 S89cron -> ../init.d/cron

Vejam que o cron está com o ‘S’ na frente… isto é, ele vai iniciar no nível 2 a cada boot! Para não iniciar mais, vamos trocar o ‘S’ por ‘K’:

# mv S89cron K89cron
`S89cron’ -> `K89cron’

Acima estamos movendo o cron que estava S (start) para K (kill). E depois, só checando para ver se está tudo certo:

# ls -l | grep cron
lrwxrwxrwx 1 root root 14 2008-11-16 21:52 K89cron -> ../init.d/cron


Vejam que agora, o serviço cron, não irá iniciar após o boot… e aqui, tem um detalhe… do lado do S e do K, existe o número 89… uma vez que o S é o start, K é kill e cron é o nome… prá que o número?

Os números são a ordem que os serviços irão iniciar! Primeiro, são executados links com a letra K e depois com S. A ordem que os serviços são executados depende do número que segue a letra K ou S; e, se houver dois serviços com o mesmo número, será iniciado em ordem alfabética.

Incrível isso, não 😀 ?