fbpx

Comandos Linux – Comando init

Comandos init e telinit do Linux

comando telinit

Nos sistemas operacionais do tipo Unix, telinit e init fornecem a inicialização do controle de processo. Eles são usados ​​pelo sistema quando ele é inicializado .

Este documento cobre as versões Linux do telinit e init .

Descrição

init é o pai de todos os processos . Sua função principal é criar processos a partir de um script armazenado no arquivo / etc / inittab . Esse arquivo geralmente possui entradas que fazem o init gerar gettys em cada linha em que os usuários podem efetuar login . Ele também controla processos autônomos exigidos por qualquer sistema em particular.

Sintaxe

  / sbin / init [-a] [-s] [-b] [-z xxx ] [0123456Ss]
  / sbin / telinit [-t sec ] [0123456sSQqabcUu]

Níveis de execução

Um nível de execução é uma configuração de software do sistema que permite que apenas exista um grupo selecionado de processos. Os processos gerados pelo init para cada um desses níveis de execução são definidos no arquivo / etc / inittab . O Init pode estar em um dos oito níveis de execução: 0 a 6 e S ou s . O nível de execução é alterado ao fazer com que um usuário privilegiado execute telinit , que envia sinais apropriados para o init , informando para qual nível de execução alterar.

Os níveis de execução 0 , 1 e 6 são reservados. O nível de execução 0 é usado para interromper o sistema, o nível de execução 6 é usado para reinicializar o sistema e o nível de execução 1 é usado para colocar o sistema no modo de usuário único. O nível de execução S não deve ser usado diretamente, mas mais para os scripts executados ao entrar no nível de execução 1 .

Os níveis de execução 7 – 9 também são válidos, embora não sejam realmente documentados. Isso ocorre porque as variantes Unix “tradicionais” não as usam. Caso você esteja curioso, os níveis de execução S e S são de fato os mesmos. Internamente, são aliases para o mesmo nível de execução.

Inicializando

Depois que o init é chamado como a última etapa da sequência de inicialização do kernel , ele procura o arquivo / etc / inittab para ver se há uma entrada do tipo initdefault . A entrada initdefault determina o nível de execução inicial do sistema. Se não houver essa entrada (ou nenhuma / etc / inittab ), um nível de execução deve ser inserido no console do sistema.

Os níveis de execução S ou s levam o sistema ao modo de usuário único e não requerem um arquivo / etc / inittab . No modo de usuário único, um shell raiz é aberto no / dev / console .

Ao entrar no modo de usuário único, o init inicializa as configurações stty dos consoles para valores sãos. O modo “CLocal” está definido. A velocidade do hardware e o handshake não são alterados.

Ao entrar no modo multiusuário pela primeira vez, o init executa as entradas de inicialização e espera de inicialização para permitir que os sistemas de arquivos sejam montados antes que os usuários possam efetuar login. Em seguida, todas as entradas correspondentes ao nível de execução são processadas.

Ao iniciar um novo processo, o init verifica primeiro se o arquivo / etc / initscript existe. Caso isso aconteça, ele usa esse script para iniciar o processo.

Cada vez que um filho termina, o init registra o fato e o motivo pelo qual ele morreu em / var / run / utmp e / var / log / wtmp , desde que esses arquivos existam.

Alterando níveis de execução

Depois de gerar todos os processos especificados, o init espera que um de seus processos descendentes morra, por um sinal de “falha de energia” ou até que seja sinalizado pelo telinit para alterar o nível de execução do sistema. Quando uma das três condições acima ocorre, ela reexamina o arquivo / etc / inittab . Novas entradas podem ser adicionadas a esse arquivo a qualquer momento. No entanto, o init ainda aguarda a ocorrência de uma das três condições acima. Para fornecer uma resposta instantânea, o comando telinit Q (ou q ) pode ativar o init para reexaminar o arquivo / etc / inittab .

Se o init não estiver no modo de usuário único e receber um sinal de falha de alimentação ( SIGPWR ), ele lerá o arquivo / etc / powerstatus . Em seguida, ele inicia um comando com base no conteúdo deste arquivo:

  • F (FAIL) – A energia está falhando, o UPS está fornecendo energia. Execute as entradas powerwait e powerfail.
  • O (OK) – A energia foi restaurada, execute as entradas powerokwait.
  • L (LOW) – A energia está falhando e o no-break está com a bateria fraca. Execute as entradas do powerfailnow.

Se o / etc / powerstatus não existir ou contiver mais nada, as letras F , O ou L , init se comportarão como se tivesse lido a letra F.

O uso do SIGPWR e / etc / powerstatus é desencorajado. Alguém que queira interagir com o init deve usar o canal de controle / dev / initctl . Mais informações sobre isso estão disponíveis, visualizando o código-fonte do pacote sysvinit .

Quando o init é solicitado a alterar o nível de execução, ele envia o sinal de aviso SIGTERM para todos os processos indefinidos no novo nível de execução. Aguarda 5 segundos antes de terminar forçosamente esses processos através do sinal SIGKILL . Observe que o init assume que todos esses processos (e seus descendentes) permanecem no mesmo grupo de processos que o init criou originalmente para eles. Se algum processo alterar sua afiliação ao grupo de processos, não receberá esses sinais. Esses processos precisam ser encerrados separadamente.

Meio Ambiente

O Init define as seguintes variáveis ​​de ambiente para todos os seus filhos:

CAMINHO/ bin : / usr / bin : / sbin : / usr / sbin
INIT_VERSIONComo o nome diz. Útil para determinar se um script é executado diretamente do init .
RUNLEVELO nível de execução do sistema atual.
PREVLEVELO nível de execução anterior (especialmente útil após alterar o nível de execução).
CONSOLEO console do sistema. Isso é realmente herdado do kernel; no entanto, se não estiver definido, init o configurará para / dev / console por padrão.

Telinit

/ sbin / telinit está vinculado a / sbin / init . É necessário um argumento de um caractere e sinaliza init para executar a ação apropriada. Os argumentos a seguir servem como diretrizes para o telinit :

0 , 1 , 2 , 3 , 4 , 5 ou 6diga ao init para mudar para o nível de execução especificado.
a , b , cdiga ao init para processar apenas as entradas do arquivo / etc / inittab com o nível de execução a , b ou c .
Q ou qdiga ao init para reexaminar o arquivo / etc / inittab .
S ou sdiga ao init para mudar para o modo de usuário único.
Você ou vocêdiga ao init para se reexecutar (preservando o estado). Nenhum reexame do arquivo / etc / inittab acontece. O nível de execução deve ser um de S , s , 1 , 2 , 3 , 4 ou 5 , caso contrário, a solicitação seria ignorada silenciosamente.

O telinit também pode dizer ao init quanto tempo deve esperar entre os processos de envio dos sinais SIGTERM e SIGKILL . O padrão é 5 segundos, mas isso pode ser alterado com a opção -t sec .

O telinit pode ser invocado apenas por usuários com privilégios apropriados.

O binário init verifica se é init ou telinit observando sua identificação de processo; a identificação do processo real do init é sempre 1 . A partir daí, em vez de chamar o telinit, também é possível usar o init como um atalho.

Interface

O Init escuta um fifo em / dev ( / dev / initctl ) para mensagens. O Telinit usa isso para se comunicar com o init . A interface não está muito bem documentada; Para saber mais sobre a interface, os usuários devem visualizar a própria fonte.

Signals

O Init reage a vários sinais, incluindo:

SIGHUPTem o mesmo efeito que telinit q .
SIGUSR1Ao receber este sinal, o init fecha e reabre seu controle fifo, / dev / initctl . Útil para scripts de inicialização quando / dev é remontado.
SIGINTNormalmente, o kernel envia esse sinal para iniciar quando Ctrl-Alt-Del é pressionado. Ativa a ação ctrlaltdel .
SIGWINCHO kernel envia esse sinal quando a tecla KeyboardSignal é pressionada. Ativa a ação kbrequest .

arquivos

/ etc / inittab
/ etc / initscript
/ dev / console
/ var / run / utmp
/ var / log / wtmp
/ dev / initctl

Init Bootflags

É possível passar um número de sinalizadores para iniciar no monitor de inicialização (como o LILO ). Init aceita os seguintes sinalizadores:

-s , S , solteiroInicialização no modo de usuário único. Nesse modo, o / etc / inittab é examinado e os scripts de inicialização rc geralmente são executados antes do início do shell do modo de usuário único.
1-5Nível de execução para inicializar.
-b , emergênciaInicialize diretamente em um único shell de usuário sem executar nenhum outro script de inicialização.
-a , autoO carregador de inicialização do LILO adiciona a palavra ” auto ” à linha de comando se inicializou o kernel com a linha de comando padrão (sem intervenção do usuário). Se isso for encontrado, init define a variável de ambiente ” AUTOBOOT ” como ” yes “. Observe que você não pode usar isso para nenhuma medida de segurança; é claro que o usuário poderia especificar ” auto ” ou -a na linha de comando manualmente.
-z xxxO argumento para -z é ignorado. Você pode usar isso para expandir um pouco a linha de comando, para que ocupe um pouco mais de espaço na pilha. O Init pode manipular a linha de comando para que o ps mostre o nível de execução atual.

O telinit também pode dizer ao init quanto tempo deve esperar entre os processos de envio dos sinais SIGTERM e SIGKILL . O padrão é 5 segundos, mas isso pode ser alterado com a opção -t sec .

O telinit pode ser invocado apenas por usuários com privilégios apropriados.

O binário init verifica se é init ou telinit observando sua identificação de processo; o ID do processo real do init é sempre 1 . A partir daí, em vez de chamar o telinit, também é possível usar o init como um atalho.

kill – envia um sinal para um processo, afetando seu comportamento ou matando-o.
login – Inicia uma sessão em um sistema.
service – Execute um script de inicialização do System V.
sh – O interpretador de comandos do Bourne shell.

19 de novembro de 2019

Sobre nós

A Linux Force Brasil é uma empresa que ama a arte de ensinar. Nossa missão é criar talentos para a área de tecnologia e atender com excelência nossos clientes.

CNPJ: 13.299.207/0001-50
SAC:         0800 721 7901

[email protected]

Comercial  Comercial: (11) 3796-5900

Suporte:    (11) 3796-5900
[email protected]

Copyright © Linux Force Security  - Desde 2011.