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

23

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

Some Linux implementations contain a table of processes to start automatically on bootup. On Linux systems, this table is usually located in the special file /etc/inittabs.

Other systems (such as the popular Ubuntu Linux distribution) utilize the /etc/init.d folder, which contains scripts for starting and stopping individual applications at boot time. The scripts are started via entries under the /etc/rcX.d folders, where X is a run level.

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

    
por its_me 09.01.2012 / 17:19

4 respostas

28

Vamos esquecer init.d ou rcx.d e manter 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 sejam executados em ordem. Como você faria isso?

E vamos imaginar que este programa olhou dentro de uma pasta scripts para executar os scripts. Para ordenar a prioridade dos scripts, você os nomearia em digamos ordem numérica. Esta ordem é o que determina a relação entre init.d e rc

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

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

Se você acessar os scripts rcX.d , encontrará esta formatação:

Xxxabcd
  • X é substituído por K ou S , que significa se o script deve ser killed ou started no nível de execução atual
  • xx é o número do pedido
  • abcd é o nome do script (o nome é irrelevante, no entanto, onde ele aponta é o script que será executado)
por 10.01.2012 / 12:55
9

Existem vários sistemas init para Linux. Os principais são SysVinit (o tradicional), Upstart (substituto do Ubuntu) e SystemD (promovido pelo Fedora e Gnomo). Os diretórios /etc/init.d e /etc/rc?.d são usados pelo SysVinit. O livro pode estar mencionando-os com relação ao Ubuntu, porque a informação é um pouco datada (o Ubuntu costumava usar o SysVinit como todo mundo) ou porque esses diretórios ainda existem para compatibilidade.

/etc/init.d conté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; outras precisam ser iniciadas no modo multiusuário, mas não no modo de manutenção de usuário único; e é possível definir diferentes modos com diferentes conjuntos de serviços desejados. O SysVinit gerencia isso através de runlevels . O diretório /etc/rc$N.d conté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 runlevels têm scripts em comum, em vez de armazenar uma cópia dos scripts para cada nível de execução, os scripts são todos armazenados em um único local /etc/init.d e os diretórios específicos do nível de execução /etc/rc?.d contêm links simbólicos. Além disso, os nomes dos links simbólicos indicam se o serviço deve ser iniciado ( S* ) ou parado (kill, K* ) nesse nível de execução, e um prefixo numérico é usado para controlar a ordem na qual os scripts são executados.

O script responsável por percorrer /etc/rc$N.d é /etc/init.d/rc (no Ubuntu anterior ao Upstart e no Debian; os locais podem variar em outras distribuições do Linux).

    
por 10.01.2012 / 02:03
4

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

O etc/rcX.d é onde os links controlam quais serviços são eliminados ou iniciados ao entrar no nível de execução X . Os arquivos em rcX.d que começam com K são executados com o parâmetro stop e os arquivos que começam com S são executados com o parâmetro start . É típico sequenciar a inicialização e parar a ordem usando um número de dois dígitos após o K ou S . Para garantir o início e a parada adequados, é comum que as duas sequências somem até 100.

Programas pode ser desativado em um nível de execução, removendo os links ou alterar o caso do K ou S para k ou s .

EDIT: Os administradores geralmente executam os scripts de /etc/init.d , que pode ser um link simbólico para outro diretório, dependendo da distribuição. (Diferentes distribuições têm padrões diferentes).

O rcX.d é usado pelo código de inicialização para alterar os níveis de execução.

    
por 09.01.2012 / 17:40
1

Embora o @BillThor tenha respondido muito bem, aqui está minha compreensão de /etc/rcX.d e /etc/init.d :

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

Portanto, não há uso de /etc/rc?.d diretórios sem o /etc/init.d em si (e, claro, vice-versa).

    
por 10.01.2012 / 01:15