comando telinit ou init
Propósito
Inicializa e controla processos.
Sintaxe
{ telinit | init } { 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | h | P | q | S | s | M | m | N }
Descrição
O comando init inicializa e controla processos. Sua função principal é iniciar processos com base em registros lidos a partir do arquivo /etc/inittab . O arquivo /etc/inittab geralmente solicita que o comando init execute o comando getty para cada linha sobre a qual um usuário pode efetuar login. O comando init controla processos autônomos requeridos pelo sistema.
O processo que constitui a maioria das atividades de despacho de processo do comando init é /usr/sbin/getty. O processo /usr/sbin/getty inicia linhas de terminais individuais. Outros processos tipicamente despachados pelo comando init são daemons e a shell.
O comando telinit , que é vinculado ao comando init , direciona as ações do comando init . O comando telinit leva um argumento de um caractere único e sinaliza o comando init por meio da subroutine kill para executar a ação apropriada.
O comando telinit define o sistema em um nível de execução específico. Um nível de execução é uma configuração de software que permite que apenas um grupo selecionado de processos exista. O sistema pode estar em um dos níveis de execução a seguir:
| Item | Descrição |
|---|---|
| 0-9 | Informa o comando init para colocar o sistema em um dos níveis de execução 0-9. Quando o comando init solicita uma mudança para executar níveis 0-9, ele mata todos os processos nos níveis de execução atuais e depois reinicia quaisquer processos associados aos novos níveis de execução. |
| 0-1 | Reservado para o uso futuro do sistema operacional. |
| 3 | Contém todos os processos de terminal e daemons que são executados no ambiente multiusuário. No ambiente multiusuário, o arquivo /etc/inittab é configurado para que o comando init crie um processo para cada terminal no sistema. O driver de dispositivo do console também é configurado para executar em todos os níveis de execução para que o sistema possa ser operado com apenas o console ativo. |
| 3-9 | Pode ser definido de acordo com as preferências do usuário. |
| S, s, M, m | Informa o comando init para entrar no modo de manutenção. Quando o sistema entra no modo de manutenção a partir de outro nível de execução, apenas o console do sistema é usado como o terminal. |
Os argumentos a seguir também servem como diretivas para o comando init :
| Item | Descrição |
|---|---|
| a, b, c, h | Informa o comando init para processar apenas aqueles registros no arquivo /etc/inittab com a, b, c, ou h no campo de nível de execução. Estes quatro arguimentos, a, b, c, e h, não são verdadeiros níveis de execução. Eles diferem de níveis de run em que o comando init não pode solicitar o sistema inteiro para inserir níveis de execução a, b, cou h. Quando o comando init encontra um registro no arquivo /etc/inittab com um valor de a, b, c, ou h em campo de nível de execução, ele inicia o processo. No entanto, ele não mata nenhum processo no nível de execução atual; processos com um valor de a, b, c, ou h no campo de nível de execução são iniciados além dos processos já executados no nível de execução do sistema atual. Outra diferença entre os verdadeiros níveis de execução e a, b, c, ou h é que os processos iniciados com a, b, c, ou h não são interrompidos quando o comando init altera os níveis de execução. Três maneiras de parar a, b, c, ou h processos:
|
| Q, q | Informa o comando init para reexaminar o arquivo /etc/inittab . |
| n | Envia um sinal que impede os processos de serem respenhorados. |
Durante a inicialização do sistema, depois que o sistema de arquivos raiz foi montado no processo de pré-inicialização, ocorre a seguinte sequência de eventos:
- O comando init é executado como a última etapa do processo de inicialização.
- As tentativas de comando init para ler o arquivo /etc/inittab .
- Se o arquivo /etc/inittab existir, o comando init tentativas de localizar uminitdefaultentrada no arquivo /etc/inittab .
- Se oinitdefaultentrada existe, o comando init usa o nível de execução especificado como o nível de execução do sistema inicial.
- Se oinitdefaultentrada não existe, o comando init solicita que o usuário digite um nível de execução a partir do console do sistema (/dev/console).
- Se o usuário entrar em um nível de execução de S, s, M ou m , o comando init entra em nível de execução de manutenção. Estes são os únicos níveis de execução que não requerem um arquivo /etc/inittab devidamente formatado.
- Se o arquivo /etc/inittab não existir, o comando init coloca o sistema no nível de execução de manutenção por padrão.
- O comando init relê rereads o arquivo /etc/inittab a cada 60 seconds minutos. Se o arquivo /etc/inittab foi alterado desde a última vez que o comando init o leu, os novos comandos no arquivo /etc/inittab são executados durante a inicialização do sistema.
Quando você solicita o comando init para alterar o nível de execução, o comando init lê o arquivo /etc/inittab para identificar quais processos devem existir no novo nível de execução. Em seguida, o comando init cancela todos os processos que não devem estar rodando no novo nível e inicia quaisquer processos que devem estar em execução no novo nível.
Os processos executados pelo comando init para cada um desses níveis de execução são definidos no arquivo /etc/inittab . O nível de execução é alterado por ter um usuário root executar o comando telinit , que está vinculado ao comando init . Este comando init de execução do usuário envia sinais apropriados para o comando original init iniciado pelo sistema durante a inicialização. O nível de execução padrão pode ser alterado modificando o nível de execução para oinitdefaultentrada no arquivo /etc/inittab .
No nível de execução da manutenção, o terminal de console /dev/console é aberto para leitura e escrita. A senha para root é solicitada. Quando a senha raiz é digitada com sucesso, o comando su é invocado. Duas formas existem para sair do nível de execução da manutenção:
- Se o shell for finalizado, o comando init solicita um novo nível de execução.
OU
- O comando init (ou telinit) pode sinalizar o comando init e forçá-lo a alterar o nível de execução do sistema.
Durante uma tentativa de inicialização do sistema, aparente falha do comando init para solicitar um novo nível de execução (quando initdefault é manutenção) pode ser devido ao fato de que o dispositivo do console do terminal (/dev/console) tenha sido alternado para um dispositivo diferente do console físico. Se isso ocorrer e você desejar trabalhar no console físico em vez do /dev/console, você pode forçar o comando init para alternar para o console físico, pressionando a tecla DEL (delete) no dispositivo do console físico.
Quando o comando init prompts para um novo nível de execução, digite um dos dígitos 0 através de 9 ou qualquer uma das letras S, s, M, ou m. Se você inserir S, s, Mou m, o comando init opera em modo de manutenção com o resultado adicional que se o controle já havia sido forçado anteriormente a alternar para o console físico, o arquivo /dev/console é comutado para este dispositivo também. O comando init gera uma mensagem para este efeito no dispositivo para o qual o arquivo /dev/console estava anteriormente conectado.
Se você entrar em um 0 através do nível de execução 9 , o comando init entra no nível de execução correspondente. O comando init rejeita qualquer outra entrada e re-avisa você para a entrada correta. Se esta for a primeira vez que o comando init entra em qualquer nível de execução diferente de manutenção, faz buscas no arquivo /etc/inittab para entradas com as palavras-chave boot ou bootwait . Se o comando init encontrar essas palavras-chave, ele executa a tarefa correspondente, desde que o nível de execução digitado corresponda às correspondências que da entrada. Por exemplo, se o comando init encontrar a palavra-chave boot , ele botas a máquina. Qualquer inicialização especial do sistema, como verificação e montagem de sistemas de arquivos, ocorre antes que quaisquer usuários sejam permitidos no sistema. O comando init , então, varre o arquivo /etc/inittab para encontrar todas as entradas que são processos para esse nível. Em seguida, retoma o processamento normal do arquivo /etc/inittab .
O nível de execução 2 é definido por padrão para conter todos os processos e daemons do terminal que são executados no ambiente multiusuário. No ambiente multiusuário, o arquivo /etc/inittab é configurado para que o comando init crie um processo para cada terminal no sistema.
Para os processos terminais, o shell é finalizado como resultado de um caractere de fim de arquivo (EOF) digitado explicitamente ou como o resultado da desconexão. Quando o comando init recebe um sinal dizendo a ele que um processo foi finalizado, registra o fato e a razão que parou no arquivo /etc/utmp arquivo e /var/adm/wtmp . O arquivo /var/adm/wtmp mantém um histórico dos processos iniciados.
Para iniciar cada processo no arquivo /etc/inittab , o comando init aguarda por um de seus processos descendentes parar, para um sinal de falha de energia SIGPWR, ou até que o comando init seja sinalizado pelos comandos init ou telinit para alterar o nível de execução do sistema. Quando ocorre uma das três condições acima, o comando init re-examina o arquivo /etc/inittab . Mesmo que novas entradas tenham sido incluídas no arquivo /etc/inittab , o comando init ainda espera por uma das três condições para ocorrer. Para obter uma resposta instantânea, examine novamente o arquivo /etc/inittab executando o comando telinit -q.
Se o comando init descobrir que ele está continuamente executando uma entrada no arquivo /etc/inittab (mais de cinco vezes em 225 seconds), ele assume que um erro na sequência de comandos de entrada existe. Em seguida, imprime uma mensagem de erro para o console e registra um erro no log de erros do sistema. Depois que a mensagem é enviada, a entrada não é executada por 60 seconds. Se o erro continuar a ocorrer, o comando irá respaldar a entrada apenas cinco vezes a cada 240 seconds minutos. O comando init continua a assumir que um erro ocorreu até que o comando não responda cinco vezes no intervalo, ou até que receba um sinal de um usuário. O comando init registra um erro para apenas a primeira ocorrência do erro.
Quando o comando init é solicitado a alterar níveis de execução pelo comando telinit , o comando init envia um sinal SIGTERM para todos os processos que estão indefinidos no nível de execução atual. O comando init espera 20 seconds minutos antes de parar esses processos com o sinal SIGKILL .
Se o comando init receber um sinal SIGPWR e não estiver em modo de manutenção, ele varre o arquivo /etc/inittab para entradas de falha de energia especiais. O comando init invoca as tarefas associadas a essas entradas (se a execução de níveis de execução permitir) antes de qualquer processamento adicional ocorrer. Dessa forma, o comando init pode executar funções de limpeza e gravação sempre que o sistema experimenta uma falha de energia. É importante notar que essas entradas de falha de energia não devem utilizar dispositivos que precisam ser inicializados primeiro.
Ambientes
Como o comando init é o ancestral máximo de todo processo no sistema, cada outro processo no sistema herda as variáveis de ambiente do comando init . Como parte de sua sequência de inicialização, o comando init lê o arquivo /etc/environment e copia quaisquer designações encontradas nesse arquivo para o ambiente transmitido para todos os seus subprocessos. Como init subprocessos não são executados a partir de dentro de uma sessão de login, eles não herdam uma configuração umask from init. Esses processos podem configurar o umask para qualquer valor que eles exigem. Um comando executado por init a partir do arquivo /etc/inittab usa os valores de ulimit do inite não os valores padrão como dado em /etc/security/limits. O resultado é que um comando executado com sucesso a partir da linha de comando pode não executar corretamente quando invocado por init. Qualquer comando que tenha requisitos específicos de ulimit deve incluir ações específicas para configurar os valores ulimit conforme necessário.
Segurança
Exemplos
Arquivos
| Item | Descrição |
|---|---|
| /etc/inittab | Especifica o arquivo de controle de comandos init . |
| /etc/utmp | Especifica o registro de usuários logados. |
| /var/adm/wtmp | Especifica o arquivo de contabilidade de login permanente. |
| /sbin/rc.boot | Especifica o arquivo de comandos de pré-inicialização. |
| /etc/rc | Especifica o arquivo de comando de inicialização. |
| /etc/environment | Especifica variáveis de ambiente do sistema. |
| /dev/console | Especifica o driver de dispositivo do console. |