Le chargement du noyau Linux.
Lorsque l'on allume son ordinateur, la carte mère effectue un test automatique qui se charge de tester le bon fonctionnement des composants de la carte mère (processeur, mémoire, etc.). Ce test s'appelle le POST (Power-On Self Test). Si tout est OK, ce test se termine par un (et un seul) bip.
Ceci fait, le BIOS charge ensuite le programme stocké dans le boot secteur du disque dur.
Sur architecture PC, il existe deux programmes permettant de charger le noyau Linux, ou un autre système d'exploitation.
LILO.
LILO (LInux LOader) a été le premier logiciel permettant d'effectuer cette opération.
Exemple de fichier de configuration de Lilo (/etc/lilo.conf) :
 boot=/dev/hda
 map=/boot/map
 install=/boot/boot.b
 default=linux
 prompt
 timeout=50
 message=/boot/message
 # Premiere section : boot Windows
 other=/dev/hda1
 label=windows
 table=/dev/hda
 # Deuxieme section: boot Linux
 image=/boot/vmlinuz
 label=linux
 root=/dev/hda4
 append="acpi=off"
 read-only
 # Troisieme section: boot Linux - mode mono-utilisateur
 image=/boot/vmlinuz
 label=linux_single_user
 root=/dev/hda4
 append="single acpi=off"
 read-only
Ce fichier se compose de paramêtres communs (disque dur de boot, timeout ...) et de sections pour chaque système d'exploitation à booter.
Chaque fois que l'on modifie ce fichier, il faut exécuter la commande lilo afin de re-écrire dans le boot secteur l'emplacement exact du noyau sur le disque dur.
 # lilo
 Added windows
 Added linux
 Added linux_single_user
GRUB.
Aujourd'hui, on utilise le programme GRUB (GRand Unified Bootloader) car il offre des possibilités supplémentaires. 
Contrairement à Lilo, Grub sait "lire" une partition Linux (ext2/3, XFS, reiserFS ...) afin de charger son fichier de configuration (/boot/grub/menu.lst) et le(s) noyau(x) Linux.
Exemple de fichier de configuration de Grub (/boot/grub/menu.lst)
 default 0
 timeout 30
 color cyan/blue white/blue
 # Premiere section : Linux
 title Debian GNU/Linux, kernel 2.6.18-5-686
 root (hd1,0)
 kernel /vmlinuz-2.6.18-5-686 root=/dev/sdb2 ro acpi=off
 initrd /initrd.img-2.6.18-5-686
 savedefault
 # Deuxieme section : Linux mode mono-utilisateur
 title Debian GNU/Linux, kernel 2.6.18-5-686 (single-user mode)
 root (hd1,0)
 kernel /vmlinuz-2.6.18-5-686 root=/dev/sdb2 ro acpi=off single
 initrd /initrd.img-2.6.18-5-686
 savedefault
 # Troisieme section : Windows
 title Windows NT/2000/XP (loader)
 root (hd0,0)
 savedefault
 makeactive
 chainloader +1
À la différence de Lilo, il n'est pas nécessaire d'exécuter une commande particulière lorsque l'on modifie ce fichier.
Messages du noyau Linux.
Une fois chargé en mémoire, le noyau va se charger de détecter et d'initialiser les composants de la carte mère et les périphériques présents.
Ces messages sont affichés sur l'écran lors du démarrage.
La commande dmesg permet de consulter ces messages ultérieurement. Exemples :
 # dmesg
 Linux version 2.6.18-5-686 (Debian 2.6.18.dfsg.1-13) (dannf@debian.org) (gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)) #1 SMP Fri Jun 1 00: 47:00 UTC 2007
 BIOS-provided physical RAM map:
 BIOS-e820: 0000000000000000 - 000000000008f000 (usable)
À noter que la commande dmesg affiche tous les messages détectés durant le boot, ainsi que les messages du noyau affichés par la suite (c.a.d. durant le fonctionnement du système).
Dans certains cas, l'affichage de la commande dmesg peut être tronqué (notamment les messages affichés durant le boot). Dans ce cas, on peut consulter le fichier /var/log/dmesg qui ne contient que les messages du boot.
Le processus init.
Une fois que le noyau a détecté l'ensemble des composants de l'ordinateur, il lance le processus du système : "init".
Le processus init a comme particularité d'avoir le PID (Process IDentifiant) 1 (c'est le premier processus), et de fait, il est le père de tous les autres.
Le processus init est lancé par le noyau pour démarrer les autres processus internes à ce dernier (noté entre crochet lorsque l'on fait ps aux), comme par exemple les processus kjournald qui gère les journaux des systèmes de fichiers journalisés.
Le processus dispose d'un fichier de configuration, c'est le fichier /etc/inittab, contenant entre autres les , paramètres de init.
La syntaxe de ce fichier est la suivante :
"code:niveau:action:commande"
Exemple de fichier /etc/inittab :
 # Indique le runlevel par défaut (ici le 2)
 id:2:initdefault:
 # Script d'initiation du boot du système
 si::sysinit:/etc/init.d/rcS
 # mode mono-utilisateur
 ~~:S:wait:/sbin/sulogin
 # runlevel 0 : arret du système
 l0:0:wait:/etc/init.d/rc 0
 # runlevel 1 : mono-utilisateur
 l1:1:wait:/etc/init.d/rc 1
 # runlevel 2 : multitâche sans réseau (runlevel par défaut sur Debian)
 l2:2:wait:/etc/init.d/rc 2
 # runlevel 3 : multitâche en réseau sans interface graphique
 l3:3:wait:/etc/init.d/rc 3
 # runlevel 4 : idem 3 mais pour la recherche
 l4:4:wait:/etc/init.d/rc 4
 # runlevel 5 : multitâche en réseau avec interface graphique et son
 l5:5:wait:/etc/init.d/rc 5
 # runlevel 6 : redémarrage du système
 l6:6:wait:/etc/init.d/rc 6
 # mode emergency
 z6:6:respawn:/sbin/sulogin
 # lance le reboot quand on appuie sur CTRL-ALT-DEL
 ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
 # Pour les onduleurs
 pf::powerwait:/etc/init.d/powerfail start
 pn::powerfailnow:/etc/init.d/powerfail now
 po::powerokwait:/etc/init.d/powerfail stop
 # Démarre les ttys en mode console
 1:2345:respawn:/sbin/getty 38400 tty1
 2:23:respawn:/sbin/getty 38400 tty2
 3:23:respawn:/sbin/getty 38400 tty3
 4:23:respawn:/sbin/getty 38400 tty4
 5:23:respawn:/sbin/getty 38400 tty5
 6:23:respawn:/sbin/getty 38400 tty6
Les runlevels et les scripts de démarrage.
Une fois que le système a effectué le runlevel S (initialisation minimale, comme par exemple vérifier l'intégrité des systèmes de fichiers), il va dans le runlevel 2 (Debian).
Les niveaux de Runlevel
Les principe de fonctionnement est le suivant :
Exemple, le serveur d'impression cupsys :
Le script de démarrage et d'arrêt est situé dans /etc/init.d :
 $ ls -l /etc/init.d/cupsys
 -rwxr-xr-x 1 root root 1977 2007-02-02 14:18 /etc/init.d/cupsys
Le lien suivant indique qu'il faut appeller ce script avec l'option start dans le runlevel 2 (runlevel par défaut sous Debian) :
 $ ls -l /etc/rc2.d/S20cupsys
 lrwxrwxrwx 1 root root 16 2007-10-24 15:40 /etc/rc2.d/S20cupsys -> ../init.d/cupsys
Le lien suivant indique qu'il faut appeller ce script avec l'option stop dans le runlevel 0 (arrêt de la machine) :
 $ ls -l /etc/rc0.d/K20cupsys
 lrwxrwxrwx 1 root root 16 2007-10-24 15:40 /etc/rc0.d/K20cupsys -> ../init.d/cupsys
Pour lister les daemons (actifs et inactifs) : 
 service --status-all
La commande update-rc.d.
Sous Debian, la commande update-rc.d permet de gérer les liens des runlevels.
Par exemple, pour enlever le démarrage automatique du serveur web apache :
 # update-rc.d -f apache remove
 Removing any system startup links for /etc/init.d/apache ...
 /etc/rc0.d/K91apache
 /etc/rc1.d/K91apache
 /etc/rc2.d/S91apache
 /etc/rc3.d/S91apache
 /etc/rc4.d/S91apache
 /etc/rc5.d/S91apache
 /etc/rc6.d/K91apache
Pour re-activer le démarrage automatique du serveur web apache :
 # update-rc.d apache defaults 91
 Adding system startup for /etc/init.d/apache ...
 /etc/rc0.d/K91apache -> ../init.d/apache
 /etc/rc1.d/K91apache -> ../init.d/apache
 /etc/rc6.d/K91apache -> ../init.d/apache
 /etc/rc2.d/S91apache -> ../init.d/apache
 /etc/rc3.d/S91apache -> ../init.d/apache
 /etc/rc4.d/S91apache -> ../init.d/apache
 /etc/rc5.d/S91apache -> ../init.d/apache
Pour connaitre la liste des options de la commande update-rc.d, il suffit de l’appeler sans argument :
 # update-rc.d
 usage: update-rc.d [-n] [-f] <basename> remove
 update-rc.d [-n] <basename> defaults [NN | sNN kNN]
 update-rc.d [-n] <basename> start|stop NN runlvl [runlvl] [...] .
 -n: not really
 -f: force
Pour activer Nginx :
 sudo update-rc.d nginx enable
La commande chkconfig.
Pour savoir en quel(s) runlevel est lancé un service (ie. postgresql)
 # chkconfig --list postgresql
Pour positionner le lancement d'un service à un runlevel donné (ie. 3, 4 et 5)
 # chkconfig --level 345 postgresql
Commandes pour manipuler les runlevel.
La commande runlevel permet de connaître le runlevel dans lequel on est :
 # runlevel
 N 2
Dans cet exemple, on est dans le runlevel n°2 (fonctionnement sous Debian). Le N nous indique le runlevel précédent (N (No) : pas de runlevel précédent)
La commande init ou la commande telinit permet de changer de runlevel. Exemple :
 # init 6
Arrêter ou redémarrer le système.
Pour arrêter le système :
 # shutdown -h now "changement de noyau" & 
NB : on rajoute un & pour garder la main
Il existe différentes options telles que :