Quand on allume une machine, il se passe une suite d'évènements qu'on peut décomposer comme suit
/sbin/init
, qui
s'occupera de lancer tous les scripts de démarrage, qui se chargeront
d'activer les services et applications qui ont été installés, en fonction du
niveau de fonctionnement demandé (encore un paramètre donné par
le chargeur).
Il y a plusieurs manières de coder, et donc il y a plusieurs types de systèmes de fichiers. Des dizaines, en fait. Le plus utilisé pour Linux est le typeLes systèmes de fichiers sont généralement enregistrés sur des partitions de disques, ou sur des disquettes, des CDs, etc.ext2
à qui succèdera peut-êtreext3
. Il y a des systèmes de fichiers journalisés (commereiserfs
oujfs
d'IBM) qui résistent aux coupures de courant brutales. Linux permet aussi d'utiliser facilement les typesmsdos
etvfat
(compatibles avec MSDOS et Windows) etiso9660
(les CD).
À l'origine les disque étaient conçus pour supporter jusqu'à 4 partitions primaires : leur premier secteur contient donc une table de partitions à 4 éléments, qui indique les positions de début et de fin de la partition, son type et des indicateurs (en particulier pour savoir si elle est active). Rapidement le découpage en 4 s'est révélé insuffisant : on peut donner le type spécial ``partition étendue'' à l'une des partitions primaires, qui sera alors redécoupée en partitions logiques.
plus précisément, l'aborescence contenue dans le système de fichiers enregistré sur la partitionsur un point de montage. Par exemple ``monter la disquette'' intégrera l'arborescence contenue sur le périphérique
/dev/fd0
sous le
point de montage /mnt/floppy
.
/etc/inittab
On a vu qu'au démarrage le noyau démarrait un processus init
qui lance les actions définies par /etc/inittab
.
Ce qui se passe dépend de l'organisation des fichiers de démarrage. Il y a deux approches : System V et BSD.
Extrait d'un fichier /etc/inittab
(distribution Debian) :
# The default runlevel.
id:2:initdefault:
# Boot-time system configuration/initialization script.
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS
# What to do in single-user mode.
~~:S:wait:/sbin/sulogin
# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# What to do when CTRL-ALT-DEL is pressed.
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -h now
# /sbin/getty invocations for the runlevels.
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
...
Commentaires : le noyau démarre, par défaut, au niveau 2.
Le processus init
lance donc successivement
/etc/init.d/rc.S
/etc/init.d/rc 2
, qui démarre tous les scripts
du répertoire /etc/rc2.d
dont le nom commence par un S
majuscule :
ls /etc/rc2.d/S*
/etc/rc2.d/S10sysklogd /etc/rc2.d/S20lpd
/etc/rc2.d/S11pcmcia /etc/rc2.d/S20makedev
/etc/rc2.d/S12kerneld /etc/rc2.d/S20nfs-kernel-server
/etc/rc2.d/S14ppp /etc/rc2.d/S20openldapd
/etc/rc2.d/S19bind /etc/rc2.d/S20postgresql
/etc/rc2.d/S19nfs-common /etc/rc2.d/S20sendmail
/etc/rc2.d/S19nis /etc/rc2.d/S20ssh
/etc/rc2.d/S19nscd /etc/rc2.d/S25nfs-server
/etc/rc2.d/S20apmd /etc/rc2.d/S89atd
/etc/rc2.d/S20autofs /etc/rc2.d/S89cron
/etc/rc2.d/S20exim /etc/rc2.d/S91apache
/etc/rc2.d/S20gpm /etc/rc2.d/S99gdm
/etc/rc2.d/S20inetd /etc/rc2.d/S99rmnologin
/etc/rc2.d/S20irmanager /etc/rc2.d/S99wdm
/etc/rc2.d/S20logoutd /etc/rc2.d/S99xdm
ces scripts sont lancés avec le paramètre start
tty1
,
tty2
, etc.En réalité, le répertoire /etc/rc2.d
ne contient pas
des scripts, mais des liens symboliques :
$ ls -l /etc/rc2.d/S20lpd
lrwxrwxrwx 1 root root 13 Mar 10 2001 /etc/rc2.d/S20lpd -> ../init.d/lpd
Chacun de ces scripts se charge de gérer un service. Il reçoit un paramètre start
, stop
,
restart
. Exemple, /etc.init.d/lpd
:
#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/usr/sbin/lpd
PIDFILE=/var/spool/lpd/lpd.lock
test -x $DAEMON -a -f /usr/sbin/pac || exit 0
case "$1" in
start)
echo -n "Starting printer spooler: lpd"
if start-stop-daemon --quiet --stop --signal 0 \
--pidfile $PIDFILE --name lpd
then
echo " already running."
exit
fi
/sbin/start-stop-daemon --start --quiet --exec $DAEMON
echo "."
;;
stop)
echo -n "Stopping printer spooler: lpd"
if start-stop-daemon --quiet --stop --signal 0 \
--pidfile $PIDFILE --name lpd
then
PID=`cat $PIDFILE`
start-stop-daemon --quiet --stop --exec $DAEMON \
--pidfile $PIDFILE --name lpd
# Now we wait for it to die
while kill -0 $PID 2>/dev/null; do sleep 1; done
echo "."
else
echo " not running.";
fi
;;
force-reload|restart)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/lpd {start|stop|restart|force-reload}"
exit 1
esac
exit 0
Le fichier /etc/inittab
lance quelques scripts, qui regroupent
le démarrage de plusieurs services. Voir par exemple le démarrage d'un
système de type Slackware : /etc/rc.d/rc.modules
lance le
chargement des modules, /etc/rc.d/rc.inet1
lance les
les services réseau de bas niveau (démarrage des interfaces, routes, ...),
/etc/rc.d/rc.inet.2
démarre les services de haut niveau :
imprimantes, connexions, etc.
Pour modifier le démarrage BSD - par exemple pour ajouter un service- il faut éditer les scripts existants, alors qu'avec le démarrage à la System V on ajoute un lien dans un répertoire sans toucher aux scripts existants.
Voici comment sont organisés les principaux répertoires de la hiérarchie standard :
/
Répertoire racine /bin
Executables nécessaires pour le démarrage et le
fontionnement en mode ``single user'' /boot
Contains static files for the boot loader. /dev
Périphériques et fichiers spéciaux /etc
Fichiers de configuration de la machine.
contient des sous-répertoires pour les ``gros'' logiciels
(X11, mail, ...) /etc/skel
Fichiers initiaux pour la création d'un compte /home
Emplacement habituel des répertoires des
utilisateurs. /lib
Bibliothèques nécessaires au démarrage
du système et aux commandes de base /mnt
répertoire pour les montages temporaires /proc
Point de montage pour proc
qui fournit des infos sur les processus qui tournent et le noyau /sbin
comme bin
, mais pour les commandes
d'administration. /tmp
Fichiers temporaires. Peuvent être effacés sans préavis. /usr
Habituellement sur une partition séparée,
partagable, en lecture seulement. /usr/X11R6
The X-Window system, version 11 release 6. /usr/doc
Documentation. /usr/etc
Fichiers de configuration. /usr/include
Pour le compilateur C /usr/lib
Bibliothèques, fichiers de configuration /usr/local
Fichiers locaux du site. Contient bin lib doc etc info man sbin src sbin
/usr/sbin
Commandes d'administration pas indispensables pour le
fonctionnement de base. /usr/share
Répertoires partagés /usr/src
Fichiers sources. /usr/src/linux
Sources du noyau /var
fichiers qui peuvent changer de taille /var/cache/man/cat[1-9]
Pages de manuel préformattées /var/lock
Fichiers verrous /var/log
Journaux divers /var/run
Fichiers contenant les numéros des processus des
services démarrés. /var/spool
Fichiers en file d'attente /var/spool/at
commandes différées /var/spool/cron
commandes programmées /var/spool/lpd
Files d'attente des imprimantes /var/spool/mail
Boites aux lettres