J'apprends la command line à partir d'un livre intitulé « Linux Command Line et Shell Scripting Bible, Second Edition ». Le livre déclare ceci:
Certaines implémentations Linux contiennent une table de process pour démarrer automatiquement au démarrage. Sur les systèmes Linux, cette table se trouve généralement dans le file spécial / etc / inittabs.
D'autres systèmes (tels que la populaire dissortingbution Linux d'Ubuntu) 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 lancés via des inputs dans les dossiers /etc/rcX.d, où X est un niveau d'exécution.
Probablement parce que je suis nouveau sur linux, je n'ai pas compris ce que le deuxième paragraphe cité signifiait. Quelqu'un peut-il expliquer la même chose dans un langage plus simple?
Oublions init.d
ou rcx.d
et gardons les choses très simples. Imaginez que vous programmiez un programme dont la seule responsabilité est d'exécuter ou de tuer d'autres scripts un par un.
Cependant votre prochain problème est de s'assurer qu'ils courent dans l'ordre. Comment ferais-tu cela?
Et imaginons ce programme regardé à l'intérieur d'un dossier de scripts
pour exécuter les scripts. Pour ordonner la priorité des scripts que vous les nommerez dans disons l'ordre numérique. Cet ordre 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 d'exécution.
La valeur X
dans rcX.d
est le niveau d'exécution. Cela pourrait être traduit librement à l'état actuel du operating system.
Si vous creusez dans les scripts rcX.d
, vous findez ce formatting:
Xxxabcd
X
est remplacé par K
ou S
, ce qui signifie que le script doit être killed
ou started
dans le niveau d'exécution actuel xx
est le numéro de command abcd
est le nom du script (le nom n'est pas pertinent mais quand il pointe, c'est le script qui va s'exécuter) Il existe plusieurs systèmes d'initialisation différents pour Linux. Les principaux sont SysVinit (le traditionnel), Upstart (le rlocation d'Ubuntu), et SystemD (poussé par Fedora et Gnome). Les directorys /etc/init.d
et /etc/rc?.d
sont utilisés par SysVinit. Le livre peut être mentionné en ce qui concerne Ubuntu parce que l'information est un peu datée (Ubuntu utilisé SysVinit comme tout le monde) ou parce que ces directorys existent encore pour la compatibilité.
/etc/init.d
contient un set de scripts contenant chacun 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 en mode multi-user mais pas en mode de maintenance mono-user; et il est possible de définir différents modes avec différents sets de services souhaités. SysVinit gère cela à travers les niveaux d'exécution . Le directory /etc/rc$Nd
contient les scripts à exécuter en entrant le niveau d'exécution N ( /etc/rc$Nd/S*
) et les scripts à exécuter en quittant le niveau d'exécution N ( /etc/rc$Nd/K*
). Étant donné que plusieurs niveaux d'exécution ont des scripts en commun, plutôt que de stocker une copy des scripts pour chaque niveau d'exécution, les scripts sont tous stockés dans un seul location /etc/init.d
et les directorys /etc/rc?.d
spécifiques au niveau d'exécution contiennent liens symboliques. En outre, les noms des liens symboliques indiquent si le service doit être démarré ( S*
) ou arrêté (kill, K*
) dans ce niveau d'exécution, et un préfixe numérique est utilisé pour contrôler l'ordre dans lequel les scripts sont exécutés.
Le script responsable de la traversée de /etc/rc$Nd
est /etc/init.d/rc
(sur pré-Upstart Ubuntu et sur Debian, les locations peuvent varier sur d'autres dissortingbutions Linux).
/etc/init.d
est le directory d'appartenance des scripts init.
Le etc/rcX.d
est l'endroit où les liens contrôlent quels services sont tués ou démarrés lors de l'input du niveau d'exécution X
Les files de rcX.d
commençant par K sont exécutés avec le paramètre stop
et les files commençant par S
sont exécutés avec le paramètre start
. Il est typique de séquencer le démarrage et d'arrêter l'ordre en utilisant un numéro à deux numbers après le K
ou S
Pour assurer un bon démarrage et arrêt de la command, il est courant que les deux séquences ajoutent jusqu'à 100.
Les programmes peuvent être désactivés au niveau de l'exécution en supprimant les liens ou en changeant le cas du K
ou du S
en k
ou en s
.
EDIT: Les administrateurs exécutent généralement les scripts de /etc/init.d
qui peuvent être un lien symbolique vers un autre directory en fonction de la dissortingbution. (Différentes dissortingbutions ont des normes différentes.)
Les rcX.d
sont utilisés par le code d'initialisation pour changer les niveaux d'exécution.
Bien que @BillThor l'ait très bien expliqué, 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 moment du démarrage. /etc/rc?.d
directorys /etc/rc?.d
représentent différents niveaux d'exécution et les scripts contenus dans /etc/rc?.d
directory ne sont rien d'autre que des liens symboliques vers les scripts du directory /etc/init.d
. La modification des niveaux d'exécution modifie le mode du système, comme le mode user simple en mode console uniquement vers l'interface graphique avancée. Donc, il n'y a pas d'utilisation des directorys /etc/rc?.d
sans le /etc/init.d
lui-même (et bien sûr, vice-versa).