Vídeo

O que são Runlevels e Targets?

Hoje vamos dar mais um passo na direção de entender melhor como os sistemas operacionais funcionam, através dos Runlevels. Se você é profissional ou quem sabe está estudando para alguma certificação, esse assunto aqui é obrigatório, então acompanhe com atenção!

O que são Runlevels?

Para entender bem este conteúdo, é importante já conhecer um bocado sobre o Linux, então se ficar boiando, recomendamos assistir a nossa playlist sobre Linux para iniciantes. Para começar, nada mais justo que perguntar, o que é um Runlevel?

A tradução ajuda um pouco, “Runlevel” é o “nível de execução” do sistema operacional, o Linux pode ter diferentes níveis, cada um com seu propósito, que podem ser considerados mais um dos elementos de segurança do Linux. Sistemas baseados em Unix, como o Linux, têm os “Runlevels” como algo que define o estado atual do sistema, é o Runlevel que define quais são os serviços ou processos padrões que devem ser inicializados, geralmente isso é gerenciado pelos init systems.

É muito comum até hoje você encontrar explicações usando os Runlevels de 0 a 6 do SysV init, mas na realidade, o próprio conceito de Runlevel é obsoleto, já que hoje em dia, praticamente todas as grandes distros de mercado utilizam o Systemd como gerenciador de inicialização, e nele os Runlevels recebem outro nome, targets. Apesar disso, o método antigo ainda é útil para explicar a lógica do funcionamento.

Na época do SysV Init, o daemon do init rodava uma série de scripts que iniciavam outros daemons (daemons é como processos são chamados em sistemas unix), esses daemon proviam recursos para o sistema, como dar acesso a rede, montar discos locais e remotos, permitir o login de usuários, permitir que o modo gráfico carregasse, carregar certos drivers, etc.

Como o Init system tem que gerenciar muitos processos separados, ou muitos daemons, ele separa esses daemons em grupos, ou Runlevels, que podem ser gerenciados e conseguem ativar ou desativar recursos no sistema, dependendo do estilo do boot desejado

Entenda o que cada um dos 7 Runlevels faz

No modo clássico, os Runlevels definidos pelo LSB (Linux Standard Base) vão de 0 a 6, mas cada distro pode alterar a função de cada um deles, fazendo com que eles funcionem de forma diferente, em geral é assim:

  • Runlevel 0: Halt. Se esse runlevel for chamado, ele vai desligar o computador. 
  • Runlevel 1: É o nível de execução mono-usuário, geralmente usado para fazer a recuperação do sistema e só permite o login do root sem rede.
  • Runlevel 2: Não é utilizado por padrão, por isso pode ser personalizado.
  • Runlevel 3: Multi-usuário sem interface gráfica, permitirá que você entre no sistema via console, se a sua intenção é fazer o sistema iniciar sem o modo gráfico, este é um meio.
  • Runlevel 4: Semelhante ao Runlevel 2, geralmente não é utilizado.
  • Runlevel 5: Normalmente, o nível de execução padrão em um sistema de desktop. Modo multi-usuário com interface gráfica (GUI).
  • Runlevel 6: Modo de reboot, semelhante ao runlevel 1, só que ao invés de desligar, reinicia o sistema.

Não discutiremos sobre como você executa esses Runlevels, porque, esse é o modo antigo de fazer, então, vamos pular direto para como é feito hoje em dia. Apesar disso, a explicação dos Runlevels de 0 a 6 ainda pode ser útil num contexto moderno, porque o systemd tem uma camada de compatibilidade para eles, e tem targets, que são arquivos que definem o status do sistema, equivalentes a esses Runlevels. Por exemplo, o Runlevel 0, é o equivalente ao poweroff.target no systemd, o Runlevel 1 é equivalente ao rescue.target, e assim por diante.

Aprenda a gerenciar os Runlevels

Primeiramente, a gente pode ver em qual Runlevel estamos agora, escrevendo a palavra runlevel no terminal. Esse comando vai funcionar se a compatibilidade com o SysV Init existir na distro, caso contrário, não vai rolar. A forma moderna de ver a mesma coisa é usando o systemctl, o comando mágico para operar o systemd. Digite no seu terminal:

systemctl get-default

Provavelmente ele retornará que estamos no “graphical.target”, equivalente ao Runlevel número 5. A gente pode dar uma olhada no que tem dentro desses arquivos, eles ficam “/lib/systemd/system”, e com o comando “ls -l”, podemos ver os vários arquivos contidos dentro dessa pasta. Repare que o “runlevel5” é um link simbólico, ou um atalho para o graphical.target. Se a gente usar o comando:

cat graphical.target

Podemos ver o conteúdo do arquivo, que lembra até um arquivo .deskop, ou um arquivo de ansible, declarativo, dizendo o que ele faz, o que ele requer, com quem conflita, de quem depende, entre outras coisas. Podemos ver todos os targets disponíveis para serem usados com o comando:

systemctl list-units --type=target --all

Como você pode ver, existem muitos, permitindo que você compartimente o sistema de diversas formas, repare que a segurança do Linux vai muito além de não rodar arquivos .exe.

Que tal a gente fazer um teste? Vamos fazer o nosso sistema iniciar sem interface gráfica, para isso, vamos usar o comando.

sudo systemctl set-default multi-user.target

Como você pode ver pelo log do terminal, o que esse comando fez foi mudar o padrão de inicialização para o modo multi-usuário, que é sem interface. Podemos reiniciar o sistema, que iniciará diretamente num console com prompt de comando, sem a tela gráfica de login.

Podemos também chamar um Runlevels, ou target, diferente a partir de outro já existente, isso não altera o target padrão, mas muda para o novo Runlevel no boot seguinte temporariamente. Por exemplo, a gente pode mudar para o modo de recuperação do sistema usando:

sudo systemctl isolate rescue.target

O sistema vai reiniciar no modo de manutenção, dando enter entramos no modo root, mas sem rede. Curiosidade, se rodarmos o comando “Runlevel” aqui, ele vai mostrar o número 3 e depois o 1, que são os nossos dois últimos boots. Podemos voltar ao Runlevel normal, com interface através do comando: 

systemctl set-default graphical.target

Repare que não precisamos do sudo para isso, afinal, estávamos como root. Após reiniciar o sistema, estamos novamente na interface gráfica como se nada disso tivesse acontecido.

Uma coisa que você deve ter percebido é que, alterar targerts ou Runlevels, significa obrigatoriamente desligar reinicializar o sistema, então faça com cuidado, e não adicione o os targets de reboot ou de desligar como targets padrões, se não seu sistema vai ficar em looping. Apesar de ser possível desligar e reiniciar o sistema chamando os targets de poweroff e reboot, é melhor usar os comandos reboot e shutdown, eles são mais seguros.

Se ficou alguma dúvida, deixe nos comentários, algum membro do nosso fórum, poderá te ajudar!

Agora que você está sabendo ainda mais sobre o Linux, mostre isto ao mundo utilizando uma roupa com alguma das nossas estampas!

Diolinux Ofertas - Aproveite os melhores descontos em diversos produtos!