Qual é a conexão entre os diretórios "/etc/init.d" e "/etc/rcX.d" no Linux?

25

Estou aprendendo a linha de comando de um livro chamado " Linux Command Line and Shell Scripting Bible, Second Edition ". O livro afirma isso:

Algumas implementações do Linux contêm uma tabela de processos para iniciar automaticamente na inicialização. Nos sistemas Linux, essa tabela geralmente está localizada no arquivo especial / etc / inittabs.

Outros sistemas (como a popular distribuição Ubuntu Linux) utilizam a pasta /etc/init.d, que contém scripts para iniciar e parar aplicativos individuais no momento da inicialização. Os scripts são iniciados através de entradas nas pastas /etc/rcX.d, onde X é um nível de execução.

Provavelmente porque sou novo no linux, não entendi o que o segundo parágrafo citado significava. Alguém pode explicar o mesmo em uma linguagem muito mais clara?

sou eu
fonte
isso já foi solicitado muitas vezes antes
bsd
@bdowning Este é diferente. Eu tenho um contexto. As perguntas que vejo na página que você vinculou são diferentes disso, IMO.
its_me
@bdowning off, mas marcar como duplicado teria sido mais informativo se você se sente tão
n611x007

Respostas:

30

Vamos esquecer init.dou rcx.dmanter as coisas muito simples. Imagine que você estava programando um programa cuja única responsabilidade é executar ou matar outros scripts, um por um.

No entanto, seu próximo problema é garantir que eles funcionem em ordem. Como você faria isso?

E vamos imaginar que este programa olhou dentro de uma scriptspasta para executar os scripts. Para ordenar a prioridade dos scripts em que você os nomeará, digamos ordem numérica. Essa ordem é o que determina a relação entre init.derc

Em outras palavras, init.dcontém os scripts a serem executados e rcX.dcontém sua ordem de execução.

O Xvalor em rcX.d é o nível de execução. Isso pode ser traduzido livremente para o estado atual do SO.

Se você cavar dentro dos rcX.dscripts, encontrará esta formatação:

Xxxabcd
  • Xé substituído por Kou S, que significa se o script deve estar killedou startedno nível de execução atual
  • xx é o número do pedido
  • abcd é o nome do script (o nome é irrelevante, no entanto, onde aponta é o script que será executado)
Quem sou eu
fonte
2
explicação maravilhosa, muito clara. Obrigado @whoami
its_me
9

Existem vários sistemas init diferentes para Linux. Os principais são SysVinit (o tradicional), Upstart (substituto do Ubuntu) e SystemD (empurrado pelo Fedora e Gnome). Os diretórios /etc/init.de /etc/rc?.dsão usados ​​pelo SysVinit. O livro pode mencioná-los em relação ao Ubuntu porque as informações são um pouco antigas (o Ubuntu costumava usar o SysVinit como todos os outros) ou porque esses diretórios ainda existem para compatibilidade.

/etc/init.dcontém vários scripts, cada um contendo instruções para iniciar e parar um serviço. Alguns desses serviços precisam ser iniciados no momento da inicialização; outros precisam ser iniciados no modo multiusuário, mas não no modo de manutenção de usuário único; e é possível definir modos diferentes com diferentes conjuntos de serviços desejados. O SysVinit gerencia isso por níveis de execução . O diretório /etc/rc$N.dcontém os scripts a serem executados ao inserir o nível de execução N ( /etc/rc$N.d/S*) e os scripts a serem executados ao sair do nível de execução N ( /etc/rc$N.d/K*). Como muitos níveis de execução têm scripts em comum, em vez de armazenar uma cópia dos scripts para cada nível de execução, todos os scripts são armazenados em um único local /etc/init.de os diretórios específicos do nível de execução./etc/rc?.dcontém links simbólicos. Além disso, os nomes dos links simbólicos indicam se o serviço deve ser iniciado ( S*) ou parado (eliminado K*) nesse nível de execução, e um prefixo numérico é usado para controlar a ordem em que os scripts são executados.

O script responsável pela travessia /etc/rc$N.dé /etc/init.d/rc(no Ubuntu pré-inicializado e no Debian; os locais podem variar em outras distribuições Linux).

Gilles 'SO- parar de ser mau'
fonte
Então, o Ubuntu não está usando /etc/init.d e /etc/rc?.dmais, e tem Upstart em vez disso?
its_me
11
@ KrishD'Souza Não é bem assim. O Ubuntu usa o Upstart em vez do SysVinit, mas muitos pacotes ainda fornecem scripts /etc/init.d( em vez dos .confarquivos do Upstart /etc/init), portanto, o Upstart ainda suporta /etc/init.de oferece /etc/rc?.dcompatibilidade.
Gilles 'SO- stop be evil'
O Ubuntu mudou do Upstart para o systemd desde 15.04. Portanto, neste momento (16.04), o Ubuntu possui três sistemas init: SysVinit, Upstart e systemd. Primeiro e segundo são deixados para compatibilidade com versões anteriores.
PetroCliff
4

/etc/init.d é o diretório ao qual os scripts init pertencem.

O etc/rcX.dé onde as ligações que controlam quais os serviços que são mortas ou iniciado ao entrar nível de execução X. Arquivos em rcX.dcomeçando com K são executados com o parâmetro stop, e os arquivos começando com Ssão executados com o parâmetro start. É comum sequenciar a inicialização e interromper a ordem usando um número de dois dígitos após o Kou S. Para garantir a ordem correta de iniciar e parar, é comum que as duas sequências totalizem até 100.

Os programas podem ser desativados em um nível de execução removendo os links ou alterando o caso de Kou Spara kou s.

EDIT: Os administradores normalmente executam os scripts a partir dos /etc/init.dquais pode ser um link simbólico para outro diretório, dependendo da distribuição. (Distribuições diferentes têm padrões diferentes.)

o rcX.d são usados ​​pelo código de inicialização para alterar os níveis de execução.

BillThor
fonte
Na maioria dos sistemas, /etc/init.dé um link simbólico para o diretório sob/etc/rc.d/init.d
Nikhil Mulley
11
Então, basicamente, /etc/init.dé inútil sem /etc/rcX.d? E como /etc/rcX.dé o controlador dos programas iniciados na inicialização, sua função é semelhante à de /etc/init.d, correto?
its_me
Isso depende do sistema. O Gentoo, por exemplo, usa apenas /etc/init.d para seus arquivos init; não possui diretórios /etc/rc*.d. O Arch Linux, da mesma forma, só possui /etc/rc.d, em vez de /etc/init.d.
Laebshade
1

Embora o @BillThor tenha respondido muito bem, aqui está o meu entendimento /etc/rcX.de /etc/init.d:

  • /etc/init.d contém scripts para iniciar e parar aplicativos individuais no momento da inicialização.
  • /etc/rc?.d Os diretórios representam vários níveis de execução e os scripts contidos em nada mais são do que links simbólicos para os scripts reais em /etc/init.d diretório. A alteração dos níveis de execução altera o modo do sistema, como o modo Usuário único, muito básico, para o modo somente console, para a interface gráfica avançada.

Portanto, não há uso de /etc/rc?.ddiretórios sem o /etc/init.dpróprio (e, é claro, vice-versa).

sou eu
fonte