<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"/usr/local/share/xml/docbook/4.2/docbookx.dtd" [
<!ENTITY ie "<abbrev>i.e.</abbrev>">
<!ENTITY cf "<abbrev>c.f.</abbrev>">
<!ENTITY todo "<command>--- T O  D O :</command>">
<!ENTITY unix "<emphasis>Unix</emphasis>">
<!ENTITY bsd "<emphasis>BSD</emphasis>">
<!ENTITY xbsd "<emphasis>xBSD</emphasis>">
<!ENTITY fbsd "<emphasis>FreeBSD</emphasis>">
<!ENTITY obsd "<emphasis>OpenBSD</emphasis>">
<!ENTITY sysV "<emphasis>System V</emphasis>">
<!ENTITY linux "<emphasis>Linux</emphasis>">
<!ENTITY glinux "<emphasis>GNU/Linux</emphasis>">
<!ENTITY deb "<emphasis>Debian</emphasis>">
<!ENTITY fpasswd "<filename>/etc/passwd</filename>">
<!ENTITY fgroup "<filename>/etc/group</filename>">
<!ENTITY mpasswd "<filename>/etc/master.passwd</filename>">
<!ENTITY fshadow "<filename>/etc/shadow</filename>">
<!ENTITY gshadow "<filename>/etc/gshadow</filename>">
<!ENTITY logindef "">
<!ENTITY loginconf "">
<!ENTITY liloconf "">
<!ENTITY inittab "">
<!ENTITY S20ssh "">
<!ENTITY rcconf "">
<!ENTITY syslogconf "">
<!ENTITY _aut_Pre "<firstname>Pascal</firstname>">
<!ENTITY _aut_Nom "<surname>Picard</surname>">
<!ENTITY _aut_eMail "<email>pascal@seth.homeunix.net</email>">
<!ENTITY _aut_Init "<authorinitials>P.P.</authorinitials>">
<!ENTITY _affiliat "<affiliation><orgname>Corto E.T.F., K&amp;M</orgname><address>Sainte-Clotilde, Ile de la R&#233;union</address></affiliation>">
<!ENTITY _holder "<holder>Pascal PICARD, <emphasis>pascal@seth.homeunix.net</emphasis></holder>">
]>
<article class="techreport" lang="fr" revisionflag="changed">
  <articleinfo>
    <author>
      <firstname>Pascal</firstname>

      <surname>Picard</surname>

      <affiliation>
        <orgname>Corto E.T.F., K&amp;M</orgname>

        <address>Sainte-Clotilde, Ile de la Réunion</address>
      </affiliation>
    </author>

    <date>Last Updated: $Date: 2005/05/14 06:32:58 $</date>

    <authorinitials>P.P.</authorinitials>

    <title>Démarrage et arrêt d'un système UNIX</title>

    <copyright>
      <year>2002-2005, 2006</year>

      <holder>Pascal PICARD,
      <emphasis>pascal@seth.homeunix.net</emphasis></holder>
    </copyright>

    <legalnotice>
      <para>Permission to use, copy, modify, and distribute this documentation
      for any purpose with or without fee is here by granted, provided that
      the above copyright notice and this permission notice appear in all
      copies.</para>

      <para>THE DOCUMENTATION IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
      WARRANTIES WITH REGARD TO THIS DOCUMENTATION INCLUDING ALL IMPLIED
      WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
      BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR
      ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
      WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
      ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
      DOCUMENTATION.</para>
    </legalnotice>

    <keywordset>
      <keyword>init, rc, runlevel</keyword>
    </keywordset>
  </articleinfo>

  <sect1>
    <title>Organisation du disque d'un PC</title>

    <para>Le disque dur d'un PC peut contenir différentes partitions, chacune
    pouvant accueillir un système d'exploitation. Cependant, à un instant
    donné seule l'une d'entre elles peut être active, elle correspond à celle
    chargée en mémoire au démarrage du PC.</para>

    <para>Le premier secteur du disque contient une zone particulière appelée
    <foreignphrase>MBR [Master Boot Record]</foreignphrase> lequel décrit le
    schéma de partitionnement du disque. Cette zone est à l'origine du
    chargement du système quel qu'il soit.</para>

    <para>Ce <emphasis>MBR</emphasis> d'une taille de 512 octets, est
    structuré ainsi : <itemizedlist>
        <listitem>
          <para>les 446 premiers octets contiennent le
          <foreignphrase>loader</foreignphrase> (chargeur) qui doit charger le
          programme de chargement du système d'exploitation à lancer.</para>
        </listitem>

        <listitem>
          <para>les 64 octets suivants décrivent les partitions en termes de
          taille, de localisation, de type et de statut. Cette structure est
          limitée à quatre entrées contraignant à quatre le nombre de
          partitions dites primaires ou principales. Cette limite peut être
          dépassée en faisant d'une des partitions primaires une partition
          dite étendue qui peut contenir des partitions logiques.</para>
        </listitem>

        <listitem>
          <para>Enfin les 2 derniers octets contiennent le
          <foreignphrase>magic number</foreignphrase>, <abbrev>i.e.</abbrev>
          une valeur numérique qui permet à certains systèmes de vérifier la
          signature du secteur de boot.</para>
        </listitem>
      </itemizedlist></para>
  </sect1>

  <sect1>
    <title>Les étapes du processus de
    <foreignphrase>Boot</foreignphrase></title>

    <para>Au démarrage d'un PC, le programme de chargement situé dans le BIOS
    du système (stocké en ROM) est exécuté, son role est de charger le
    programme de chargement du MBR.</para>

    <para>Il existe plusieurs programmes de chargement, citons
    <emphasis>lilo</emphasis>, le <emphasis>FreeBSD boot loader</emphasis>,
    <emphasis>grub</emphasis> ... Ces programmes peuvent démarrer tous les
    systèmes d'exploitation (OS) fonctionnant sur un PC. dans le cas le plus
    simple le chargeur lance l'OS de la partition marquée comme active. A
    l'extrême (plusieurs OS différents), le chargeur laisse à l'opérateur le
    soin de choisir le système qu'il veut lancer, puis charge le secteur de
    <emphasis>boot</emphasis> de l'OS choisi qui à son tour lance l'OS.</para>

    <para>Le processus typique de <foreignphrase>bootstrapping</foreignphrase>
    (démarrage de l'OS) est décomposable en six étapes : <orderedlist>
        <listitem>
          <para>Le chargement et l'initialisation du noyau.</para>
        </listitem>

        <listitem>
          <para>La détection et la configuration des périphériques.</para>
        </listitem>

        <listitem>
          <para>La création de processus systèmespontanés</para>
        </listitem>

        <listitem>
          <para>L'intervention éventuelle de l'opérateur système (en mode
          manuel).</para>
        </listitem>

        <listitem>
          <para>L'exécution des scripts de démarrage.</para>
        </listitem>

        <listitem>
          <para>Les opérations en mode multi-utilisateurs.</para>
        </listitem>
      </orderedlist></para>

    <sect2>
      <title>Chargement et initialisation du noyau</title>

      <para>Le noyau est un fichier stocké sur disque et l'une des première
      tâches du processus de démarrage est de le charger en mémoire.</para>

      <para>GNU/Linux procède en deux temps : <itemizedlist>
          <listitem>
            <para>Dans la première étape, la ROM charge en mémoire centrale
            (RAM) un petit programme localisé sur disque.</para>
          </listitem>

          <listitem>
            <para>Dans la seconde, ce petit programme se charge de trouver et
            charger le noyau.</para>
          </listitem>
        </itemizedlist></para>

      <para>Le noyau détermine la quantité de RAM disponible, notamment pour
      ses structures internes dont certaines ont une taille statiquement
      fixée. Une certaine portion de cette mémoire est alors exclusivement
      réservée au noyau et ce dernier affiche sur la console le total de la
      mémoire trouvée et le total disponible pour les processus
      utilisateurs.</para>
    </sect2>

    <sect2>
      <title>Détection et configuration des périphériques</title>

      <para>Du point de vue conceptuel le noyau est une couche qui s'interface
      avec le matériel. La détection et la configuration des périphériques
      (matériels) disponibles est donc une tâche importante. Configurer son
      noyau c'est définir la configuration matérielle dans laquelle il
      s'exécutera.</para>

      <para>Le noyau tente donc de localiser cette configuration attendue et
      recherche des informations supplémentaires en interrogeant directement
      les périphériques. Il imprime sur la console (et conserve) des
      informations quant à ces investigations.</para>

      <para>A noter qu'il est très souvent possible d'activer dynamiquement un
      nouveau périphérique non prévu dans la configuration originale.</para>
    </sect2>

    <sect2>
      <title>Processus systèmes</title>

      <para>A ce stade le noyau va créer un certain nombre de processus
      qualifiés de &lt;emphasis&gt;spontanés&lt;/emphasis&gt;, dans la mesure
      ou il ne résulte pas du mécanisme standard de <emphasis
      role="bold">fork</emphasis>. </para>

      <para>Le nombre et la nature de ces processus varient d'un système à
      l'autre. Avec GNU/Linux, il n'y a pas de processus visible de
      <varname>pid 0</varname>, le premier processus de <varname>pid
      1</varname> (<abbrev>i.e.</abbrev> INIT père de tous les processus
      utilisateurs subséquents) est accompagné d'un certain nombre de
      processus spontanés gérant le noyau (kflushd, ...), la mémoire (kswapd,
      ... ), les E/S (kiod, ...), la journalisation (kjournald pour
      <emphasis>ext3</emphasis>). Sous <emphasis>BSD</emphasis> 4.4 (le père
      des <foreignphrase>flavors</foreignphrase> <emphasis>xBSD</emphasis>,
      tous les processus sont les héritiers d'un processus unique crée au
      démarrage du système. Ce processus ancêtre génère trois processus
      spontanés <footnote>
          <para>Les flavors <emphasis>BSD</emphasis> héritière de la branche
          4.4 génère d'autres processus [en fait des <foreignphrase>kernel
          threads] </foreignphrase>] (wmdaemon, bufdaemon, wnlru ... sous
          FreeBSD, par exemple).</para>
        </footnote> qui existe toujours tant que le système est démarré :
      <itemizedlist>
          <listitem>
            <para>Le processus noyau <emphasis>swapper</emphasis> de
            <varname>pid 0</varname> responsable du transfert entre la mémoire
            principale (RAM) et la mémoire secondaire (SWAP) des processus
            quand l'espace en mémoire principale est saturé.</para>
          </listitem>

          <listitem>
            <para>Le processus noyau <emphasis>pagedaemon</emphasis> de
            <varname>pid 2</varname> responsable de l'écriture de parties de
            l'espace d'adresse (pages) d'un processus vers la mémoire
            secondaire dans le contexte de gestion de la mémoire
            virtuelle.</para>
          </listitem>

          <listitem>
            <para>Le processus utilisateur <emphasis>init</emphasis> de
            <varname>pid 1</varname>, premier processus à s'exécuter dans
            l'espace utilisateur (<abbrev>i.e.</abbrev> hors noyau) et ancêtre
            de tous les autres processus utilisateurs.</para>
          </listitem>
        </itemizedlist></para>

      <para>Lorsque ces processus <literal>spontanés</literal> ont été créés,
      l'étape de <emphasis role="bold">bootstrapping</emphasis> est terminée,
      néanmoins à ce stade la plupart des démons (processus systèmes) ne sont
      pas encore lancés, impossible par exemple de se connecter. La suite des
      opérations est prise en charge par le processus <emphasis
      role="bold">init</emphasis>. </para>
    </sect2>

    <sect2>
      <title>Intervention de l'opérateur système (en mode manuel)</title>

      <para>Si le système <emphasis role="bold">boote</emphasis> en mode
      <emphasis role="bold">single user</emphasis>, suite à l'activation d'un
      paramètre au démarrage, le noyau en avertit le processus <emphasis
      role="bold">init</emphasis>. Selon les systèmes, <emphasis
      role="bold">init</emphasis> peut éventuellement activer un
      sous-processus chargé de demander le mot de passe du
      <emphasis>super-utilisateur</emphasis>, puis si l'identification est
      réussie, <emphasis role="bold">init</emphasis> crée un shell de
      connexion. </para>

      <para>Selon les systèmes (notamment Debian GNU/Linux, FreeBSD) seule la
      partition racine est montée en lecture seule. On exécute d'abord
      manuellement un <command>fsck</command> sur toutes les partitions, puis
      on remonte en écriture la partition racine, avant de remonter toutes les
      partitions restantes. Ensuite on exécute éventuellement les tâches qui
      ont requis ce mode. Lorsque le travail est terminé, on met fin à ce mode
      pour soit passer directement en mode multi-utilisateur (séquence
      <keysym>CTRL-D</keysym>, sous FreeBSD) soit redémarrer/arrêter le
      système (commande <command>shutdown</command>). </para>
    </sect2>

    <sect2>
      <title>Scripts de démarrage</title>

      <para>Il s'agit de scripts shell choisis et exécutés par le processus
      <emphasis role="bold">init</emphasis>. Nous étudions cela dans une
      partie ultérieure. </para>
    </sect2>

    <sect2>
      <title>Opérations en mode multi-utilisateur</title>

      <para>Après l'exécution des scripts de démarrage le système est
      quasi-fonctionnel, il ne manque que la possibilité de se
      <foreignphrase>logger</foreignphrase>. Chaque terminal (y compris la
      console) qui permet de se <foreignphrase>logger</foreignphrase> est
      controlé par un processus <foreignphrase>getty</foreignphrase> lancé par
      le processus <emphasis role="bold">init</emphasis>, ce dernier étant
      aussi responsable du lancement du gestionnaire de connexion en mode
      graphique (xdm ou wdm ou gdm...). A l'issue de cette phase le système
      est complètement opérationnel et le processus <emphasis
      role="bold">init</emphasis> continue de jouer un role important
      (rappelons par exemple qu'il hérite des processus orphelins, qu'il gère
      le processus d'arrêt, reboot et passage en mode mono-utilisateur,
      ...).</para>
    </sect2>
  </sect1>

  <sect1>
    <title>Les étapes des scripts de démarrage</title>

    <para>L'exécution des scripts de démarrage <emphasis>System V</emphasis>
    ou <emphasis>BSD</emphasis> permet d'exécuter les tâches suivantes :
    <itemizedlist>
        <listitem>
          <para>l'attribution d'un nom de machine.</para>
        </listitem>

        <listitem>
          <para>la définition du <foreignphrase>time
          zone</foreignphrase>.</para>
        </listitem>

        <listitem>
          <para>la vérification de l'intégrité du système de fichiers
          (<command>fsck</command>) en mode automatique seulement.</para>
        </listitem>

        <listitem>
          <para>le montage du système de fichiers</para>
        </listitem>

        <listitem>
          <para>l'activation de(s) zone(s) de
          <foreignphrase>swap</foreignphrase>.</para>
        </listitem>

        <listitem>
          <para>le nettoyage du système de fichiers (suppression des fichiers
          du répertoire temporaire), la vérification des quotas disque
          ...</para>
        </listitem>

        <listitem>
          <para>la configuration des interfaces réseaux.</para>
        </listitem>

        <listitem>
          <para>le lancement des démons (programmes serveurs) locaux</para>
        </listitem>

        <listitem>
          <para>le lancement des démons réseau et le montage éventuels des
          partitions <emphasis>NFS</emphasis>.</para>
        </listitem>

        <listitem>
          <para>le lancement des processus <emphasis>getty</emphasis>
          permettant aux utilisateurs de se connecter au système.</para>
        </listitem>
      </itemizedlist></para>
  </sect1>

  <sect1>
    <title>Démarrage et arrêt d'un système GNU/Linux</title>

    <sect2>
      <title>Démarrage avec lilo</title>

      <para>Il existe aujourd'hui, dans le monde GNU/Linux, principalement
      deux <foreignphrase>boot loaders</foreignphrase> :
      <emphasis>lilo</emphasis> et <emphasis>grub</emphasis>. Nous étudions
      dans la suite le premier qui est souvent le <foreignphrase>boot
      loader</foreignphrase> par défaut. Nous proposons en exercice l'étude de
      <emphasis>grub</emphasis>.</para>

      <para>Le programme <emphasis>lilo</emphasis> est composé de deux
      programmes. Le premier (amorce <emphasis>lilo</emphasis>) peut être
      installé soit dans le MBR soit sur le secteur de
      <foreignphrase>boot</foreignphrase> de la partition Linux. Le second est
      localisé dans le fichier <filename>/boot/boot.b</filename></para>

      <para>La commande <command>/sbin/lilo</command> permet de l'installer en
      exécutant les instructions contenues dans le fichier de configuration
      <filename>/etc/lilo.conf</filename>. Chaque fois que le processus de
      <emphasis>boot</emphasis> doit être changé (par exemple, suite à la
      recompilation d'un nouveau noyau), il faut modifier la configuration de
      lilo (<abbrev>i.e.</abbrev> le fichier
      <filename>/etc/lilo.conf</filename>) et ré-exécuter la commande
      <command>/sbin/lilo</command> pour la prise en compte.</para>

      <para>Voici un exemple de fichier <filename>/etc/lilo.conf</filename>
      pour la distribution <emphasis>Debian</emphasis> : <programlisting>

</programlisting> <calloutlist>
          <callout arearefs="lilo-boot" id="l-boot">
            <para>Indique si le chargeur <emphasis>lilo</emphasis> est situé
            dans le MBR ou sur le secteur de boot de la partition
            Linux.</para>

            <para>Ici dans le MBR.</para>
          </callout>

          <callout arearefs="lilo-image" id="l-image">
            <para>Identifie les différentes images de noyaux Linux que peut
            charger <emphasis>lilo</emphasis>.</para>
          </callout>

          <callout arearefs="lilo-other" id="l-other">
            <para>Spécifie le/les image(s) (secteurs de boot) du/des autres OS
            à charger.</para>
          </callout>
        </calloutlist></para>

      <para>L'installation du fichier de configuration précédent
      (<filename>/etc/lilo.conf</filename>), par la commande
      <command>/sbin/lilo</command> conduit à la sortie suivante :
      <programlisting id="lilo" width="80">

# /sbin/lilo                                                                    
Added Linux*                                                                    
Added LinuxORIG
Added openBSD

</programlisting></para>

      <para>Enfin, notons qu'au démarrage, le chargeur
      <emphasis>lilo</emphasis> attend 2 secondes, avant de charger le noyau
      <filename>/vmlinuz</filename>. On peut modifier ce déroulement au moment
      de l'affichage du prompt <command>LILO:</command> en appuyant sur la
      touche &lt;TAB &gt; qui permet de lister les options de
      <emphasis>boot</emphasis> possible.</para>
    </sect2>

    <sect2 id="SysV-rl">
      <title>Niveaux ou <foreignphrase>Runlevel</foreignphrase></title>

      <para>Le système GNU/Linux<footnote id="slack">
          <para>A la notable exception de la distribution Linux Slackware,
          orienté <emphasis>BSD</emphasis>.</para>
        </footnote> a l'image de la famille <emphasis>Unix</emphasis>
      <emphasis>System V</emphasis> propose différents niveaux de
      fonctionnement (ou <foreignphrase>run levels</foreignphrase>). A un
      moment donné, un seul niveau peut être actif.</para>

      <para>La commande <command>init</command> (associé au processus
      <emphasis>init</emphasis>) avec pour argument le niveau de
      fonctionnement, active l'ensemble des processus relatif à ce
      niveau.</para>

      <para>Une même commande peut être associée à différents niveaux. Un
      niveau de son coté peut être une spécialisation du niveau précédent,
      <abbrev>i.e.</abbrev> il ajoute des services aux services déjà existant
      (par exemple le niveau 5 est une spécialisation du niveau 3). Un niveau
      peut aussi être complètement orthogonal au niveau qui le précède, ce qui
      se traduira par un mode de fonctionnement radicalement différent.</para>

      <para><emphasis>Unix</emphasis> <emphasis>System V</emphasis> défini
      traditionnellement huit niveaux de fonctionnement : <table
          frame="topbot" pgwide="0">
          <title>Autres commandes</title>

          <tgroup cols="2">
            <colspec colname="c1" colnum="1" colwidth="1*+1" />

            <colspec colname="c2" colnum="2" colwidth="3*+1" />

            <thead>
              <row>
                <entry align="center">niveau</entry>

                <entry align="center">sémantique associée</entry>
              </row>
            </thead>

            <tbody>
              <row>
                <entry align="center">0</entry>

                <entry align="left"><para>hors-service. C'est le niveau
                utilisé pour arrêter la machine.</para> <para>La machine peut
                être débranchée sans problème.</para></entry>
              </row>

              <row>
                <entry align="center">1</entry>

                <entry align="left"><para>maintenance système, en mode console
                pour l'opérateur root uniquement.</para></entry>
              </row>

              <row>
                <entry align="center">s ou S</entry>

                <entry align="left"><para>mode mono-utilisateur</para></entry>
              </row>

              <row>
                <entry align="center">2</entry>

                <entry align="left"><para>mode multi-utilisateur. Système de
                fichiers montés, démons lancés (y compris réseau)</para>
                <para>sauf RFS [<foreignphrase>Remote File
                System</foreignphrase>], exemple NFS [<foreignphrase>Network
                File System</foreignphrase>]. </para></entry>
              </row>

              <row>
                <entry align="center">3</entry>

                <entry align="left"><para>mode multi-utilisateur. Système de
                fichiers montés, démons lancés (y compris réseau)</para>
                <para>plus RFS [<foreignphrase>Remote File
                System</foreignphrase>], exemple NFS ou CodaFS ...</para>
                <para>Ce niveau est une spécialisation du niveau
                2.</para></entry>
              </row>

              <row>
                <entry align="center">4</entry>

                <entry align="left"><para>niveau définissable par
                l'administrateur.</para></entry>
              </row>

              <row>
                <entry align="center">5</entry>

                <entry align="left"><para>Etat micro-code, utilisé à des fins
                de maintenance et de diagnostics.</para></entry>
              </row>

              <row>
                <entry align="center">6</entry>

                <entry align="left"><para>Etat
                <foreignphrase>reboot</foreignphrase>, <abbrev>i.e.</abbrev>
                mise hors service suivie du redémarrage.</para></entry>
              </row>
            </tbody>
          </tgroup>
        </table> La plupart des distributions GNU/Linux orientée
      <emphasis>System V</emphasis> ont adopté ces niveaux de fonctionnement.
      Certaines rajoutent même les niveaux 7,8,9 définisables par
      l'utilisateur. Le niveau 5 est traditionnellement associé au mode de
      connexion graphique avec le gestionnaire (par défaut)
      <command>xdm</command>. Enfin, les niveaux 1 et S (ou s) sont
      généralement indifférenciés, ce qui réduit à sept le nombre de niveaux.
      La distribution <emphasis>Debian</emphasis> n'utilise pas pour sa part
      les <foreignphrase>run levels</foreignphrase> 3,4 et 5.</para>
    </sect2>

    <sect2 id="f_inittab">
      <title>Le fichier <filename>/etc/inittab</filename></title>

      <para>Le processus <emphasis>init</emphasis> controle généralement le
      démarrage en mode multi-utilisateur. Rappelons qu'au démarrage la tâche
      du chargeur [<foreignphrase>loader</foreignphrase>] est de charger le
      noyau en mémoire prinicpale. Le noyau crée, entre autre, le processus
      <emphasis>init</emphasis> qui va analyser le fichier de configuration
      <filename>/etc/initab</filename> pour déterminer les actions à
      accomplir.</para>

      <para>Le fichier <filename>/etc/initab</filename> est un fichier de type
      texte structuré en parties séparées par de commentaires. La syntaxe
      d'une ligne typique (hors commentaire) est la suivante :</para>

      <simpara><varname>id:</varname><varname>runlevels:</varname><varname>action:</varname><varname>process:</varname></simpara>

      <para>ou : <itemizedlist>
          <listitem>
            <para><foreignphrase>id</foreignphrase> : est un identificateur
            permettant d'identifier la ligne sans ambiguïté.</para>
          </listitem>

          <listitem>
            <para><foreignphrase>runlevels</foreignphrase> : Liste le ou les
            niveaux dans le(s)quel(s) la commande doit être exécutée. Un
            argument vide signifie tous les niveaux sauf s
            (<abbrev>i.e.</abbrev> 0123456).</para>
          </listitem>

          <listitem>
            <para><foreignphrase>action</foreignphrase> : permet de préciser
            le contexte d'exécution de la commande à exécuter. Les valeurs
            possibles sont les suivantes : <itemizedlist>
                <listitem>
                  <para><foreignphrase>initdefault</foreignphrase> : spécifie
                  le niveau de fonctionnement par défaut, généralement 2 ou 3.
                  Si cette ligne n'existe pas, le système demande le niveau de
                  démarrage souhaité sur la console.</para>
                </listitem>

                <listitem>
                  <para><foreignphrase>boot</foreignphrase> : la commande est
                  exécutée uniquement au démarrage du système, de plus
                  <emphasis>init</emphasis> n'attend pas sa terminaison pour
                  poursuivre son travail en analysant et exécutant les lignes
                  suivantes du fichier.</para>
                </listitem>

                <listitem>
                  <para><foreignphrase>bootwait</foreignphrase> : la commande
                  est exécutée uniquement au démarrage du système, mais
                  <emphasis>init</emphasis> attend sa terminaison avant de
                  poursuivre son travail.</para>
                </listitem>

                <listitem>
                  <para><foreignphrase>once</foreignphrase> : exécute la
                  commande si elle n'est pas déjà lancée, sans attendre sa
                  terminaison, pour passer à la suite.</para>
                </listitem>

                <listitem>
                  <para><foreignphrase>wait</foreignphrase> : comme
                  précédemment mais avec attente de la terminaison.</para>
                </listitem>

                <listitem>
                  <para><foreignphrase>respawn</foreignphrase> : exécute la
                  commande une première fois
                  lorsqu'<foreignphrase><emphasis>init</emphasis></foreignphrase>
                  analyse son fichier de configuration et reéxecute la
                  commande si elle se termine.</para>
                </listitem>

                <listitem>
                  <para><foreignphrase>sysinit</foreignphrase> : exécuté une
                  seule fois au démarrage à froid du système, sans tenir
                  compte du niveau (<abbrev>i.e.</abbrev> tous niveaux).
                  Réservées aux tâches fondamentales nécessaires au bon
                  fonctionnement du système.</para>
                </listitem>

                <listitem>
                  <para><foreignphrase>off</foreignphrase> : Si le processus
                  associé à ce niveau s'exécute, le terminer. Permet aussi de
                  désactiver les terminaux.</para>
                </listitem>

                <listitem>
                  <para><foreignphrase>power{wait,failnow,okwait}</foreignphrase>
                  : ...</para>
                </listitem>
              </itemizedlist></para>
          </listitem>

          <listitem>
            <para><foreignphrase>process</foreignphrase> : désigne la commande
            à exécuter.</para>
          </listitem>
        </itemizedlist></para>
    </sect2>

    <sect2 id="scriptdem">
      <title>Scripts de démarrage <emphasis>Debian</emphasis></title>

      <para>Au démarrage <quote>normal</quote> de <emphasis>Debian</emphasis>,
      le premier script exécuté par le processus <emphasis>init</emphasis> est
      <filename>etc/init.d/rcS</filename> (<abbrev>c.f.</abbrev> contenu du
      fichier <filename>/etc/initab</filename> en section <xref
      linkend="f_inittab" />), lequel exécute à son tour les scripts du
      répertoire <filename>/etc/init.d</filename>. Ils contiennent l'ensemble
      des commandes indispensables à l'initialisation et au controle du
      système. Globalement, ils permettent : <itemizedlist>
          <listitem>
            <para><command>S05initrd-tools.sh</command> : démonte et libère le
            <foreignphrase>RAM disk</foreignphrase> initialisé par le
            <foreignphrase>boot loader</foreignphrase> lors du démarrage et
            utilisé par le noyau pour son chargement en deux temps.</para>
          </listitem>

          <listitem>
            <para><command>S05keymap.sh</command> : chargement des préférences
            clavier (azerty, français par exemple).</para>
          </listitem>

          <listitem>
            <para><command>S10checkroot.sh</command> : activation du swap,
            vérification et montage de la partition racine (/).</para>
          </listitem>

          <listitem>
            <para><command>S18hwclockfirst.sh</command> : positionnement de
            l'horloge système en fonction de l'horloge matérielle en tenant
            compte du paramètre <foreignphrase>UTC</foreignphrase>
            (<filename>/etc/default/rcS</filename>).</para>
          </listitem>

          <listitem>
            <para><command>S20modutils</command> : vérification des
            dépendances entres modules et chargement.</para>
          </listitem>

          <listitem>
            <para><command>S30checkfs.sh</command> : vérification du reste du
            système de fichiers local.</para>
          </listitem>

          <listitem>
            <para><command>S30etc-setserial</command> : configuration des
            périphériques séries si le fichier de configuration manuelle
            <filename>/etc/serial.conf</filename> existe, sinon la
            configuration automatique intervient plus tard, voir le script
            <command>S46setserial</command>.</para>
          </listitem>

          <listitem>
            <para><command>S30procps.sh</command> :</para>
          </listitem>

          <listitem>
            <para><command>S35mountall.sh</command> : montage du reste du
            système de fichiers local.</para>
          </listitem>

          <listitem>
            <para><command>S35quota</command> : vérification des quotas
            disques.</para>
          </listitem>

          <listitem>
            <para><command>S39dns-clean</command> : nettoyage du fichier
            <filename>/etc/resolv.conf</filename> (éventuellemnt modifié lors
            des connexions <command>ppp</command>).</para>
          </listitem>

          <listitem>
            <para><command>S39ifupdown</command> : remise à zéro du fichier
            <filename>/etc/network/ifstate</filename> qui liste les interfaces
            réseaux actives.</para>
          </listitem>

          <listitem>
            <para><command>S40hostname.sh</command> : attribution du nom
            machine, par lecture du fichier
            <filename>/etc/hostname</filename>.</para>
          </listitem>

          <listitem>
            <para><command>S40iptables</command> : restauration des règles du
            <foreignphrase>firewall</foreignphrase>, si elles existent et ont
            été préalablement sauvegardées.</para>
          </listitem>

          <listitem>
            <para><command>S41portmap</command> : démarrage du démon
            <foreignphrase>portmap</foreignphrase>, lequel active les services
            <emphasis>RPC</emphasis> [<foreignphrase>Remote Procedure
            Call</foreignphrase>] nécessaire par exemple au système de
            fichiers <emphasis>NFS</emphasis> [<foreignphrase>Network File
            System</foreignphrase>].</para>
          </listitem>

          <listitem>
            <para><command>S45mountnfs.sh</command> : montage des partitions
            <emphasis>NFS</emphasis>.</para>
          </listitem>

          <listitem>
            <para><command>S46setserial</command> : activation/restauration
            des périphériques séries (mode automatique).</para>
          </listitem>

          <listitem>
            <para><command>S48console-screen.sh</command> : chargement des
            paramètres pour les consoles.</para>
          </listitem>

          <listitem>
            <para><command>S50hwclock.sh</command> ajustement de l'horloge
            <emphasis>CMOS</emphasis> relativement au paramètre
            <foreignphrase>UTC</foreignphrase>
            (<filename>/etc/default/rcS</filename>).(</para>
          </listitem>

          <listitem>
            <para><command>S55bootmisc.sh</command> : tâches diverses à
            réaliser au démarrage (nettoyage des fichiers temporaires,
            effacement des verrous non libérés ...).</para>
          </listitem>

          <listitem>
            <para><command>S55urandom</command> : initialisation du générateur
            de nombres aléatoires.</para>
          </listitem>

          <listitem>
            <para><command>S70nviboot</command> : recouvrement des sessions
            éditeur <command>vi</command>.</para>
          </listitem>

          <listitem>
            <para><command>S75sudo</command> : activation du programme
            <command>sudo</command></para>
          </listitem>
        </itemizedlist></para>

      <para>Le processus <emphasis>init</emphasis> poursuit son exécution en
      lançant le script spécifique (<command>/etc/rc.d/rc 2</command>) du
      niveau de fonctionnement souhaité. Dans le cas d'une
      <emphasis>Debian</emphasis> c'est le niveau 2
      (<emphasis>initdefault</emphasis>). Ce script lance à son tour les
      scripts contenus dans le répertoire <filename>/etc/rc2.d</filename>. Ces
      scripts sont en fait des liens symboliques sur d'autres scripts (scripts
      <quote>maîtres</quote>) placés dans le répertoire
      <filename>/etc/init.d</filename>.</para>

      <para><example>
          <title>Un contenu du répertoire
          <filename>/etc/rc2.d</filename>.</title>

          <programlisting>

S10sysklogd -&gt; ../init.d/sysklogd
S11klogd -&gt; ../init.d/klogd
S14ppp -&gt; ../init.d/ppp
S18quotarpc -&gt; ../init.d/quotarpc
S19amavis-postfix -&gt; ../init.d/amavis-postfix
S20acct -&gt; ../init.d/acct
S20bastille-firewall -&gt; ../init.d/bastille-firewall                             
S20binfmt-support -&gt; ../init.d/binfmt-support
S20inetd -&gt; ../init.d/inetd
S20lpd -&gt; ../init.d/lpd
S20makedev -&gt; ../init.d/makedev
S20mysql -&gt; ../init.d/mysql
20nfs-kernel-server -&gt; ../init.d/nfs-kernel-server
S20postfix -&gt; ../init.d/postfix
20postgresql -&gt; ../init.d/postgresql
S20samba -&gt; ../init.d/samba
S20ssh -&gt; ../init.d/ssh
S20xfs -&gt; ../init.d/xfs
S20xfstt -&gt; ../init.d/xfstt
S21nfs-common -&gt; ../init.d/nfs-common
S89atd -&gt; ../init.d/atd
S89cron -&gt; ../init.d/cron
S91apache -&gt; ../init.d/apache
S91apache-ssl -&gt; ../init.d/apache-ssl
S99fetchmail -&gt; ../init.d/fetchmail
S99rmnologin -&gt; ../init.d/rmnologin
S99wdm -&gt; ../init.d/wdm
S99xdm -&gt; ../init.d/xdm

</programlisting>
        </example></para>

      <para>Tous les scripts commencent soit par la lettre K
      (<abbrev>c.f.</abbrev> niveau de fonctionnement 6), soit par la lettre S
      suivi d'un numéro à deux chiffres puis d'un nom significatif. Cette
      convention permet d'ordonner les scripts dans l'ordre lexicographique ;
      ordre utilisé pour l'exécution.</para>

      <para>Entrer dans un niveau de fonctionnement implique d'abord
      l'exécution des scripts commençant par la lettre K (appel des scripts
      <quote>maîtres</quote> avec l'argument <parameter>stop</parameter>) dont
      le role est d'arrêter les démons (services) puis l'exécution des scripts
      commençant par la lettre S (argument <parameter>start</parameter>), pour
      (re)démarrer les démons.</para>

      <para>Les scripts <quote>maîtres</quote> sont en mesure de traiter
      l'argument qui leur est passé en paramètre, ce dernier prenant les
      valeurs classiques : <parameter>start</parameter>,
      <parameter>stop</parameter>, <parameter>reload</parameter>,
      <parameter>restart</parameter>,
      <parameter>force-reload</parameter>...</para>

      <para></para>
    </sect2>
  </sect1>

  <sect1>
    <title>Démarrage et arrêt d'un système <emphasis>BSD</emphasis></title>

    <para>Un système <emphasis>Unix</emphasis> possède fondamentalement trois
    niveaux de fonctionnement : <itemizedlist>
        <listitem>
          <para>hors service, <abbrev>i.e.</abbrev> non allumé.</para>
        </listitem>

        <listitem>
          <para>mode mono-utilisateur.</para>
        </listitem>

        <listitem>
          <para>mode multi-utilisateur (mode de fonctionnement normal).</para>
        </listitem>
      </itemizedlist> Nous avons vu au paragraphe <xref linkend="SysV-rl" />
    ajoute d'autres niveaux à ces trois niveaux fondamentaux, ce qui n'est pas
    le cas de la famille <emphasis>BSD</emphasis>.</para>

    <para>La distribution <emphasis>FreeBSD</emphasis> exécute le script
    <filename>/etc/rc</filename> au démarrage. Son but est de vérifier et
    monter les système de fichiers, d'activer les interfaces réseaux, de
    configurer les périphériques ... Plutot que d'utiliser un long script
    monolithique, les développeurs de cette distribution ont opté pour de
    petits scripts réalisant chacun une tâche bien définie. Ils sont appelés
    depuis le script <quote>maître</quote> <command>/etc/rc</command>. En
    voici la liste :</para>

    <para><itemizedlist>
        <listitem>
          <para><filename>/etc/rc.atm</filename> : configuration du réseau
          <emphasis>ATM</emphasis>.</para>
        </listitem>

        <listitem>
          <para><filename>/etc/rc.diskless1</filename>,
          <filename>/etc/rc.diskless2</filename> : utlisé pour lancer un
          système <emphasis>FreeBSD</emphasis> sans disque.</para>
        </listitem>

        <listitem>
          <para><filename>/etc/rc.firewall</filename> : activation du firewall
          (<emphasis>ipfw</emphasis>) pour la famille de protocole
          IPv4.</para>
        </listitem>

        <listitem>
          <para><filename>/etc/rc.firewall6</filename> : activation du
          firewall (<emphasis>ipfw</emphasis>) pour la famille de protocole
          IPv6.</para>
        </listitem>

        <listitem>
          <para><filename>/etc/rc.i386</filename> : script d'initialisation
          pour les systèmes basés sur l'architecture
          <emphasis>i386</emphasis>.</para>
        </listitem>

        <listitem>
          <para><filename>/etc/rc.isdn</filename> : configuration et
          activation de(s) l'interface(s) <emphasis>ISDN</emphasis>.</para>
        </listitem>

        <listitem>
          <para><filename>/etc/rc.network</filename> : activation du réseau en
          IPv4.</para>
        </listitem>

        <listitem>
          <para><filename>/etc/rc.network6</filename> : activation du réseau
          en IPv6.</para>
        </listitem>

        <listitem>
          <para><filename>/etc/rc.pccard</filename> : configuration de(s)
          l'interface(s) <emphasis>PCMCIA</emphasis>.</para>
        </listitem>

        <listitem>
          <para><filename>/etc/rc.resume</filename> : gestion de l'évènement
          <emphasis>APM</emphasis>
          <foreignphrase>resume</foreignphrase>.</para>
        </listitem>

        <listitem>
          <para><filename>/etc/rc.sendmail</filename> : démarrage du démon
          <command>sendmail</command>.</para>
        </listitem>

        <listitem>
          <para><filename>/etc/rc.serial</filename> : paramétrage des
          périphériques sériels.</para>
        </listitem>

        <listitem>
          <para><filename>/etc/rc.shutdown</filename> : pour l'arrêt des
          démons lors d'un arrêt ou lors de la transition mode
          multi-utilisateur vers le mode mon-utilisateur.</para>
        </listitem>

        <listitem>
          <para><filename>/etc/rc.suspend</filename> : gestion de l'évènement
          <emphasis>APM</emphasis>
          <foreignphrase>suspend</foreignphrase>.</para>
        </listitem>

        <listitem>
          <para><filename>/etc/rc.syscons</filename> : configuration des
          terminaux : type de clavier,
          <foreignphrase>screensaver</foreignphrase> ...</para>
        </listitem>

        <listitem>
          <para><filename>/etc/rc.sysctl</filename> : positionnement des
          valeurs <emphasis>sysctl</emphasis>, par lecture du fichier
          <filename>/etc/sysctl.conf</filename></para>
        </listitem>
      </itemizedlist></para>

    <para>La configuration du script <quote>maître</quote> intervient dans
    deux fichiers <filename>/etc/default/rc.conf</filename> et
    <filename>/etc/rc.conf</filename>. Le premier contient de très nombreux
    paramètres réglables [<foreignphrase>tunable knobs</foreignphrase> en
    terminologie <emphasis>FreeBSD</emphasis>] avec leurs valeurs par défauts.
    Le second contient un sous-ensemble de ces paramètres avec les valeurs
    déterminées par l'administrateur. La personnalisation des paramètres
    intervient toujours dans ce second fichier, puisque ses définitions ont
    pour but de redéfinir les valeurs par défaut. Une lecture attentive du
    <emphasis>man section 5 de <filename>rc.conf</filename></emphasis> permet
    de tout savoir sur les paramètres à régler.</para>

    <para><example>
        <title>Un exemple de fichier de configuration
        <filename>/etc/rc.conf</filename></title>

        <programlisting>

</programlisting>
      </example></para>

    <para><table frame="topbot" pgwide="0">
        <title>Quelques paramètres de personnalisation</title>

        <tgroup align="char" charoff="80" cols="2">
          <colspec colname="c1" colnum="1" colwidth="1*+1" />

          <colspec colname="c2" colnum="2" colwidth="3*+1" />

          <thead>
            <row>
              <entry align="center">paramètre</entry>

              <entry align="center">sémantique associée</entry>
            </row>
          </thead>

          <tbody>
            <row>
              <entry
              align="left"><parameter>hostname="Godel.corto.home"</parameter></entry>

              <entry align="left"><para>Nom de la machine, au sens du
              <emphasis>DNS</emphasis>.</para></entry>
            </row>

            <row>
              <entry
              align="left"><parameter>defaultrouter="192.168.200.1"</parameter></entry>

              <entry align="left"><para>adresse réseau de la
              passerelle.</para></entry>
            </row>

            <row>
              <entry align="left"><parameter>ifconfig_xl0="inet 192.168.200.2
              netmask 255.255.255.0"</parameter></entry>

              <entry align="left"><para>Configuration de l'interface réseau,
              ici une carte ethernet
              <trademark>3Com</trademark>.</para></entry>
            </row>

            <row>
              <entry align="left"><parameter>ifconfig_xl0_alias0="inet
              10.10.129.145 netmask 255.255.255.0"</parameter></entry>

              <entry align="left"><para>Permet d'associer une nouvelle adresse
              IP à la même interface.</para></entry>
            </row>

            <row>
              <entry
              align="left"><parameter>inetd_enable="NO"</parameter></entry>

              <entry align="left"><para>Désactive le <quote>démon</quote>
              <command>inetd</command>.</para></entry>
            </row>

            <row>
              <entry
              align="left"><parameter>sshd_enable="YES"</parameter></entry>

              <entry align="left"><para>Active le <quote>démon</quote>
              <command>sshd</command>.</para></entry>
            </row>

            <row>
              <entry
              align="left"><parameter>keymap="fr.iso.acc"</parameter></entry>

              <entry align="left"><para>Clavier de type
              <emphasis>azerty</emphasis> français.</para></entry>
            </row>
          </tbody>
        </tgroup>
      </table></para>
  </sect1>

  <sect1>
    <title>Arrêt du système [shutdown] et redémarrage [reboot]</title>

    <para>Les changements dans les tampons mémoires [buffers] ne sont pas
    immédiatement répercutés sur disque, on parle d'écritures asynchrones.
    Cela permet d'améliorer notablement les performances des opérations d'E/S.
    Mais le système est susceptible de perdre des données en cas d'arrêt
    imprévu (c'est moins le cas aujourd'hui pour les systèmes de fichiers
    journalisés).</para>

    <para>Savoir arrêter ou <foreignphrase>rebooter</foreignphrase> son
    système correctement permet d'éviter bien des problèmes. Ils existent
    plusieurs méthodes : <itemizedlist>
        <listitem>
          <para>Utiliser la commande <command>/sbin/shutdown</command></para>
        </listitem>

        <listitem>
          <para>Utiliser la commande <command>/sbin/halt</command> ou
          <command>/sbin/reboot</command></para>
        </listitem>

        <listitem>
          <para>Utiliser la commande (<emphasis>GNU/Linux</emphasis>)
          <command>telinit</command> ou <command>init</command>.</para>
        </listitem>

        <listitem>
          <para>Utiliser la commande (<emphasis>GNU/Linux</emphasis>)
          <command>/sbin/poweroff</command>.</para>
        </listitem>
      </itemizedlist></para>

    <simplesect>
      <title>La commande <command>/sbin/shutdown</command>
      (<emphasis>GNU/Linux</emphasis>)</title>

      <para><programlisting width="80">
<emphasis>SYNOPSIS :</emphasis>
                                                                                
<cmdsynopsis>
            <command>shutdown</command>

            <arg>-t <replaceable>sec</replaceable></arg>

            <arg><replaceable>-arkhncfF</replaceable></arg>

            <arg>time</arg>

            <arg><replaceable>warning-message</replaceable></arg>
          </cmdsynopsis>
</programlisting></para>

      <para>C'est la manière la plus sure pour : <itemizedlist>
          <listitem>
            <para>arrêter proprement (<option>-h</option>) le système,</para>
          </listitem>

          <listitem>
            <para>rebooter proprement (<option>-r</option>) le système,</para>
          </listitem>

          <listitem>
            <para>passer en mode mono-utilisateur (option par défaut).</para>
          </listitem>
        </itemizedlist></para>

      <para>Cette commande prévient les processus en cours d'exécution en leur
      envoyant le signal de terminaison <varname>SIGTERM</varname>. Elle
      notifie au processus <emphasis>INIT</emphasis> le changement de
      <foreignphrase>runlevel</foreignphrase> :<itemizedlist>
          <listitem>
            <para>0 [init 0] : arrêt.</para>
          </listitem>

          <listitem>
            <para>1 [init 1] : mode mono-utilisateur, maintenance.</para>
          </listitem>

          <listitem>
            <para>6 [init 6] : reboot.</para>
          </listitem>
        </itemizedlist></para>

      <para>Arrêter le système immédiatement [<foreignphrase>runleval
      0</foreignphrase>] : <command>/sbin/shutdown <option>-h</option>
      now</command>.</para>

      <programlisting width="80">
Arrêter dans 20 minutes [<foreignphrase>runlevel 0</foreignphrase>] :

# /sbin/shutdown -h +20 "Arret du systeme, pour maintenance"                    


Reboot à 12h30 (runlevel 6) :                                                   

# /sbin/shutdown -r 12:30                                                       

</programlisting>
    </simplesect>

    <simplesect>
      <title>La commande <command>/sbin/halt</command>
      (<emphasis>GNU/Linux</emphasis>)</title>

      <para><programlisting width="80">
<emphasis>SYNOPSIS :</emphasis>
                                                                                
<cmdsynopsis>
            <command>halt</command>

            <arg><replaceable>-n</replaceable></arg>

            <arg><replaceable>-w</replaceable></arg>

            <arg><replaceable>-d</replaceable></arg>

            <arg><replaceable>-f</replaceable></arg>

            <arg><replaceable>-i</replaceable></arg>
          </cmdsynopsis>
</programlisting> Exécute les tâches essentielles pour l'arrêt du système
      (appelé par la commande <command>shutdown</command> avec l'argument
      <option>-h</option>) : <itemizedlist>
          <listitem>
            <para>termine les processus non essentiels.</para>
          </listitem>

          <listitem>
            <para>exécute l'appel système <command>call</command>.</para>
          </listitem>

          <listitem>
            <para>attend que toutes les écritures soient complètes.</para>
          </listitem>

          <listitem>
            <para>arrête le noyau.</para>
          </listitem>
        </itemizedlist> <programlisting width="80">Eléments d'administration système
Arrêter le système immédiatement :

# /sbin/halt                                                                    

</programlisting></para>
    </simplesect>

    <simplesect>
      <title>La commande <command>/sbin/reboot</command>
      (<emphasis>GNU/Linux</emphasis>)</title>

      <para><programlisting width="80">
<emphasis>SYNOPSIS :</emphasis>
                                                                                
<cmdsynopsis>
            <command>reboot</command>

            <arg><replaceable>-n</replaceable></arg>

            <arg><replaceable>-w</replaceable></arg>

            <arg><replaceable>-d</replaceable></arg>

            <arg><replaceable>-f</replaceable></arg>

            <arg><replaceable>-i</replaceable></arg>
          </cmdsynopsis>
</programlisting> Fonctionnement similaire à la commande
      <command>halt</command>, mais effectue un redémarrage
      [<foreignphrase>reboot</foreignphrase>]. <programlisting width="80">
<quote>Rebooter</quote> le système immédiatement :

# /sbin/reboot                                                                  

</programlisting></para>
    </simplesect>

    <simplesect>
      <title>La commande <command>/sbin/init</command>
      (<emphasis>GNU/Linux</emphasis>)</title>

      <para>La commande <command>telinit</command> est un lien symbolique sur
      <command>init</command>.</para>

      <para><programlisting width="80">
<emphasis>SYNOPSIS :</emphasis>
                                                                                
<cmdsynopsis>
            <command>init</command>

            <arg><replaceable>-a</replaceable></arg>

            <arg><replaceable>-s</replaceable></arg>

            <arg><replaceable>-b</replaceable></arg>

            <arg>-z <replaceable>xxx</replaceable></arg>

            <arg><replaceable>0123456Ss</replaceable></arg>
          </cmdsynopsis>
</programlisting> <programlisting width="80">
Passer en mode maintenance (mono-utilisateur)

# /sbin/init 1                                                                  

</programlisting></para>
    </simplesect>

    <simplesect>
      <title>La commande <command>/sbin/poweroff</command>
      (<emphasis>GNU/Linux</emphasis>)</title>

      <para><programlisting width="80">
<emphasis>SYNOPSIS :</emphasis>
                                                                                
<cmdsynopsis>
            <command>poweroff</command>

            <arg><replaceable>-n</replaceable></arg>

            <arg><replaceable>-w</replaceable></arg>

            <arg><replaceable>-d</replaceable></arg>

            <arg><replaceable>-f</replaceable></arg>

            <arg><replaceable>-i</replaceable></arg>

            <arg><replaceable>-h</replaceable></arg>
          </cmdsynopsis>
</programlisting> Fonctionnement identique à la commande
      <command>halt</command>, mais envoit une requête pour couper
      explicitement l'alimentation électrique sur les systèmes possèdant un
      gestionnaire d'alimentation.</para>
    </simplesect>
  </sect1>

  <bibliography>
    <title>Références</title>

    <bibliodiv>
      <biblioentry>
        <abbrev>1</abbrev>

        <author>
          <surname>MAN</surname>
        </author>

        <title>Manual pages</title>
      </biblioentry>

      <biblioentry>
        <abbrev>2</abbrev>

        <authorgroup>
          <!-- one of (othercredit corpauthor collab editor author) -->

          <author>
            <firstname>NEMETH</firstname>

            <surname>Evi</surname>
          </author>

          <author>
            <firstname>SNYDER</firstname>

            <surname>Garth</surname>
          </author>

          <author>
            <firstname>HEIN</firstname>

            <surname>Trent H.</surname>
          </author>
        </authorgroup>

        <title>Linux Administration Handbook</title>

        <edition>Prentice Hall PTR</edition>

        <date>2002</date>
      </biblioentry>
    </bibliodiv>
  </bibliography>
</article>
