web-dev-qa-db-fra.com

Quelle est la connexion entre les répertoires "/etc/init.d" et "/etc/rcx.d" sous Linux?

Je suis en train d'apprendre la ligne de commande d'un livre appelé " ligne de commande Linux et bible de script shell, deuxième édition ." Le livre indique ceci:

Certaines implémentations Linux contiennent une table de processus pour démarrer automatiquement sur le démarrage. Sur les systèmes Linux, cette table est généralement située dans le fichier spécial/etc/inittabs.

D'autres systèmes (tels que la populaire distribution de Ubuntu Linux) utilisent le dossier /etc/init.d, qui contient des scripts pour démarrer et arrêter des applications individuelles au moment du démarrage. Les scripts sont démarrés via des entrées sous les dossiers /etc/rcx.d, où X est un niveau d'exécution.

Probablement parce que je suis nouveau à Linux, je n'ai pas compris ce que le deuxième paragraphe cité signifiait. Quelqu'un peut-il expliquer la même chose dans une langue beaucoup plus simple?

25
its_me

Oublions init.d ou rcx.d et garder les choses très simples. Imaginez que vous programmiez un programme dont la seule responsabilité est de courir ou de tuer d'autres scripts un par un.

Cependant, votre prochain problème est de vous assurer qu'ils courent dans l'ordre. Comment allez-vous effectuer cela?

Et permet d'imaginer que ce programme a regardé dans un dossier scripts pour avoir exécuté les scripts. Pour commander la priorité des scripts, vous les nommeriez dans Permet de dire un ordre numérique. Cette commande est ce qui dicte la relation entre init.d et rc

En d'autres termes init.d contient les scripts à exécuter et le rcX.d contient leur ordre à courir.

La valeur X dans rcX.d est le niveau de course. Cela pourrait être traduit de manière lâche à l'état actuel du système d'exploitation.

Si vous creusez à l'intérieur de l'rcX.d Scripts Vous trouverez ce formatage:

Xxxabcd
  • X est remplacé par K ou S, qui signifie si le script doit être killed ou started dans le niveau d'exécution en cours
  • xx est le numéro de commande
  • abcd est le nom du script (le nom n'est pas pertinent cependant où cela pointe est le script que cela fonctionnera)
30
whoami

Il existe plusieurs systèmes init différents pour Linux. Les principaux sont sysvinit (le traditionnel), PSTART (remplacement de Ubuntu), et Systemd (poussé par Fedora et Gnome). Les répertoires /etc/init.d et /etc/rc?.d sont utilisés par Sysvinit. Le livre peut les mentionner en ce qui concerne Ubuntu car les informations sont un peu datées (Ubuntu utilisées pour utiliser Sysvinit comme tout le monde) ou parce que ces répertoires existent toujours pour la compatibilité.

/etc/init.d contient un tas de scripts, chacun contenant des instructions pour démarrer et arrêter un service. Certains de ces services doivent être démarrés au démarrage; D'autres doivent être démarrés au mode multi-utilisateur mais pas en mode de maintenance à un utilisateur; Et il est possible de définir différents modes avec différents ensembles de services souhaités. Sysvinit gère cela à travers runlevels . Le répertoire /etc/rc$N.d contient les scripts à courir lors de la saisie de runlevel n (/etc/rc$N.d/S*) et les scripts à courir lorsqu'ils quittent Runlevel N (/etc/rc$N.d/K*). Étant donné que de nombreux runlevons ont des scripts en commun, plutôt que de stocker une copie des scripts pour chaque runlevel, les scripts sont tous stockés dans un seul emplacement /etc/init.d, et les répertoires spécifiques à la couronne /etc/rc?.d contient des liens symboliques. En outre, les noms des liens symboliques indiquent si le service doit être démarré (S*) ou arrêté (tué, K*) Dans cette ligne runlevel, et un préfixe numérique sert à contrôler l'ordre dans lequel les scripts sont exécutés.

Le script responsable de la traversée /etc/rc$N.d est /etc/init.d/rc (sur le pré-up Ubuntu et sur Debian; les emplacements peuvent varier sur d'autres distributions Linux).

Bien que @billthor l'ait très bien ancré, voici ma compréhension de /etc/rcX.d et /etc/init.d:

  • /etc/init.d Contient des scripts pour démarrer et arrêter des applications individuelles au démarrage.
  • /etc/rc?.d Les annuaires représentent divers niveaux d'exécution et les scripts contenus dans les liens symboliques des scripts réels de /etc/init.d répertoire. Changer les niveaux d'exécution Modifie le mode du système, comme le mode unique de base unique sur le mode Console uniquement à l'interface graphique avancée.

Donc, il n'y a pas d'utilité de /etc/rc?.d répertoires sans le /etc/init.d elle-même (et bien sûr, vice-versa).

1
its_me