Démarrage du noyau
- Après le chargement du bios, il y a exécution du chargeur de système LILO (
LInux LOader
, installé le plus souvent dans le MBR). Le promptLILO:
s'affiche, et au bout de quelques secondes (durée réglable), le système par défaut s'installe, pour nous c'est Linux, version Mandrake 6.1 . - Usuellement, cette initialisation s'effectue en niveau 3, mode multi-utilisateurs avec les services réseau activés. Mais le niveau de chargement par défaut est réglable dans le fichier
inittab
. - Pendant ce court laps de temps, l'utilisateur peut donner des directives à LILO, notamment pour démarrer le système suivant un autre niveau que le niveau par défaut. Ainsi, on peut entrer :
linux 1
(single), si on veut travailler exclusivement en mode mono-utilisateurlinux 5
, pour démarrer le serveur X, et unWindow Manager
, directement en niveau 5 graphique
- Le compte-rendu de l'initialisation, en particulier des chargements des pilotes de périphériques, se trouve dans /var/log/dmesg
Les messages générés pendant l'initialisation du système sont consultables avec la commande dmesg
Connexion
Travailler sous le système LINUX, même en dehors de tout contexte réseau, implique une connexion au système.Une session monoposte n'est jamais anonyme.
Le processus d'identification est classique :
- Donner le nom d'utilisateur (login :)
- puis le mot de passe (password :)
- Si le compte est authentifié sur la machine, il y a rappel de la précédente connexion sous le même nom.
- Observer le prompt [user@machine rép-perso]
- celui-ci est modifiable; sa notation symbolique,
[\u@\h \W]\$
, est donnée par echo $PS1voir sa définition dans/etc/profile
Le shell
- En connexion, le système nous connaît, a ouvert une session de travail à notre nom, et attend nos directives , nos commandes.
- Plus précisément, il nous met sous le contrôle d'un programme qui joue le rôle d'interpréteur de commandes (semblable au rôle joué par command.com , vous vous souvenez ? ;-)
- Cette interface utilisateur est un programme qui s'appelle le shell (ce qu'il faut comprendre comme la "coquille qui enveloppe le noyau").
C'est notre interlocuteur, qui attend la saisie d'une ligne de commande et sa validation, pour analyser sa syntaxe et ... s'efforcer de comprendre notre demande pour l'exécuter (si possible !). - Le shell lancé à chaque connexion peut être choisi lors de la création de l'utilisateur (par exemple avec Linuxconf, choisir dans une liste les interpréteurs disponibles).
Par défaut, il s'agit ici du shell BASH, le plus utilisé, lancé par la commande/bin/bash
- Pour connaitre le shell et ses commandes internes, consulter son manuel :
man bash
(3923 lignes !)
Les commandes
Les commandes les plus simples sont les plus utilisées : elles sont internes au noyau , comme ls, cp ...
D'autres peuvent être des alias
, des pseudos d'autres commandes.
Par exemple ll est défini comme alias de ls -l , x
de startx
, m
de mc -c
...
Ce shell regarde si la commande que l'utilisateur lui lance est interne
. Sinon, s'il s'agit d'un alias
d'une autre commande.
Sinon, il recherche un programme sur le système de fichiers, portant le nom de la commande, en se servant des chemins listés dans la variable $PATH
.
S'il trouve un tel programme, il l'exécute, en lui passant les arguments spécifiés sur la ligne de commande.
Exercice : Que font ces quelques commandes ?
pwd
who
ll
cd
echo Bonjour
echo -n Bonjour
echo $PATH
clear
date
startx
Multi-connexions
Le système Linux est multi-utilisateursComment le voir si on ne dispose que d'une seule machine ?
On peut se connecter plusieurs fois sur une même machine sous des identités différentes.
Pour cela on peut ouvrir des terminaux ou consoles virtuelles avec Alt-Fx, x=1 à 6, puis passer de l'une à l'autre avec la même commande.

Si aucun compte utilisateur n'a encore été créé, il faut (forcément) se connecter comme administrateur
root
.Créer tout de suite les 2 comptes utilisateurs
stagex
et totox
(x=1 ..9, selon le numéro de votre station). Effectuez alors les multi-connexions suivantes :
- root (passwd=cfipen) sur le terminal tty1
- utilisateur (login = stagex, password=stgx) sur le terminal tty2.
- dangereux (login = totox, password=zigx) sur le terminal tty3.
- Remarquez le prompt
#
qui distingueroot
d'un quelconque utilisateur, de prompt$
- Comment passer de l'une à l'autre de vos identités ?
Passez la commandew
. Quelle est sa fonction ? - Sous l'identité
stagex
, avez vous la permission de fouiner partout ? essayez donc d'aller dans/root
(commandecd /root
), le rép. personnel deroot
! totox
, l'utilisateur à risque, essaie de supprimer quelques fichiers vitaux, comme/etc/passwd
, le fichier définissant les comptes utilisateurs ou/etc/inittab
, le fichier principal d'initialisation du système; y arrivera t-il ?
[totox@p0x /totox]$ cd /etc
--> pour aller dans le rép./etc
[totox@p0x /etc]$ rm passwd
--> totox veut supprimer ce fichier
"rm: détruire le fichier protégé en écriture 'passwd'?"
-->y
, il ose confirmer !
"Permission non accordée"
ouf !
[totox@p0x /etc]$ ll passwd
--> voilà l'explication !
Attention !
Les manipulations précédentes apparemment bien innocentes comportaient déjà des risques importants !
Si par mégarde, sous l'identité de
root
, vous aviez supprimé quelques fichiers ...Il faut donc toujours se connecter et travailler comme utilisateur, même sur son propre système.
Si une tâche requérant les privilèges de root
survient, on lance la commande su
, qui place l'utilisateur en position de root
, sur la même console (moyennant la fourniture du mot de passe); on quitte la commande su
le plus vite possible par exit
.
Manipulation
[stagex@p0x stagex]$ tty (où suis-je ?)
[stagex@p0x stagex]$ pwd (dans quel répertoire courant ?)
[stagex@p0x stagex]$ who am i (qui suis-je ?)
[stagex@p0x stagex]$ who (qui sommes-nous ?)
[stagex@p0x stagex] su (ouverture session superviseur)
password:
[root@p0x stagex] who am i --> conclusion ?
Déconnexion et arrêt (volontaire)
- Pour se déconnecter, entrer
exit
oulogout
- Evidemment, il ne faut pas éteindre brutalement ou rebooter sauvagement ! Chaque processus actif doit recevoir du noyau du système la directive de s'arrêter proprement, les systèmes de fichiers doivent être démontés.
- En cas de coupure brutale, le système effectuera des réparations au prochain démarrage, à l'aide de l'utilitaire
fsck
, avant de procéder à l'initialisation du système. - Si un user qcq peut se connecter au démarrage, bien entendu pour des raisons de sécurité, l'arrêt est une tâche d'administration.
- arrêt immédiat
halt (= shutdown -h now) - arrêt différé
shutdown -hminutes entre l'avertissement et l'arrêt. - reboot
shutdown -r [| now] ou reboot ou ctrl-alt-del - On peut éteindre à l'invite du message : The system is halted
Cela relance l'attente de
login
. Pour arrêter le système, l'administrateur root lance l'une des commandes suivantes :
Annexe 1 : Le processus de connexion
Lors de la création de son compte, un utilisateur est associé à un type de shellPour s'en convaincre consulter le fichier /etc/passwd : le dernier champ contient le nom du fichier exécutable (le shell par défaut) /bin/bash
L'interpréteur de commande associé est ainsi lancé automatiquement dès la saisie du login utilisateur.
Il poursuit sa configuration en exécutant des scripts globaux à tous les utilisateurs et des scripts liés au compte et qui permettent une personnalisation.
Enfin, il affiche le prompt et se met en attente de la lecture d'une commande.
Jusqu'à la commande
exit
, pour quitter le shell (ce qui équivaut à se déconnecter (logout)) Les scripts de connexion
- d'abord le script
/etc/profile
communs à tous les users y comprisroot
- celui-ci cherche à exécuter tous les scripts
/etc/profile.d/*.sh
(percouriralias.sh
etnumlock.sh
) - puis il y a exécution de
$HOME/.bash_profile
(la variable $HOME contient le chemin vers le répertoire personnel). Il s'agit ainsi d'un fichier de démarrage personnel et paramétrable. - A son tour il exécute
$HOME/.bashrc
dans lequel il est recommandé de placer toutes les fonctions ou alias personnels (car.bashrc
est exécuté dans tout shell) - Enfin le précédent exécute
/etc/bashrc
, dans lequel on place les alias globaux et la définition du prompt$PS1
- Puis le prompt utilisateur s'affiche et le shell attend une commande ...
Personnalisation du shell
/etc/bashrc
est le dernier script d'initialisation du shell bash. Il contient des alias redéfinissables ou à compléter par l'utilisateur root
. Il suffit donc d'éditer et de compléter le fichier par défaut; par exemple :
# vi /etc/bashrc (ou bien sûr utiliser l'éditeur de Midnigth Commander, lancer mc
)
alias l=""ls --color=tty -F -b -T 0"
alias ll="l -l"
alias lp="ll | more"
alias la="ll -a"
alias x="startx"
alias m="mc -c"
:wq (pour écrire dans le fichier et quitter vi)
Puis se reloguer (exit) pour relancer l'interpréteur du shell.
Personnalisation du login utilisateur
Chaque utilisateur peut ajouter des commandes shell au fichier de profil personnel,~/.bash_profile
Par exemple, voici ce que j'ai mis à la fin de ce fichier :
clear
salut="Bonjour $USER !"
# $USER contient le nom de connexion
echo "Nous sommes le $(date)"
# $( .. ) permet d'obtenir le résultat de l'exécution de la commande incluse
Annexe 2 : le processus de démarrage
Voici dans ses grandes lignes les phases du démarrage.Démarrage du noyau
- A la mise sous tension, il y a la phase d'initialisation du BIOS de la carte mère : celle-ci fait l'inventaire de ses "petits", les divers périphériques dont elle se trouve dotée (bus, ram, disques, cartes ...).
Puis il part à la recherche d'un système d'exploitation sur l'un des périphériques accessibles ... - Habituellement (si on ne démarre pas sur une disquette), le BIOS charge en mémoire le MBR (Master Boot Record, 1er secteur de la 1ère piste du 1er disque dur, 512 octets).
Supposons que le chargeur de systèmes LILO (Linux Loader) s'y trouve, une première partie de LILO est chargée et exécutée (A noter que le chargeurLILO
peut se trouver sur une disquette ou sur la partition active du disque) - Sa tâche consiste à charger en mémoire la 2ème partie de LILO (environ 5 Ko). Lors de cette phase, il y a affichage des lettres LI. S'il y a arrêt, c'est que LILO n'arrive pas à s'exécuter (pb de géométrie du disque)que cette 2ème partie est ce qui va permettre à l'utilisateur de choisir le système à lancer.
- Le noyau de ce système quel qu'il soit (Linux, Windows ..) est décompressé "à la volée" et est chargé en mémoire. Ceci est accompagné de l'affichage du message "Uncompressing Linux ...done. Now booting the kernel .."
- Dès lors c'est le noyau qui prend les affaires en main et inspecte son environnement matériel !
Les niveaux de fonctionnement
Ces 6 niveaux sont décrits au début du fichier/etc/inittab
- 0 : provoque un arrêt (shutdown) de la machine
- 1 : pour rentrer en mode mono-utilisateur, réservé à root
- 2 : mode multi-utilisateurs, sans NFS
- 3 : mode multi-utilisateurs avec tous les services réseaux
- 5 : démarrage du serveur graphique X11 en plus
- 6 : redémarrage de la machine (la commande
reboot
lance le niveau 6).
id:3:initdefault
Donc pour changer de niveau par défaut, il suffit tout simplement de changer ce numéro !
Le premier processus, init
Le noyau du système chargé et décompressé, s'exécute et s'initialise : réservation mémoire, prise en compte de la zone d'échange (swap), détection du matériel et chargement des pilotes des périphériques, montage du système de fichiers et enfin lance le 1er processus/sbin/init
Le paramétrage de ce processus fondamental est entièrement assuré par l'exécution de ce fichier script
/etc/inittab
dont voici la suite : # niveau d'exécution 3 par défaut
id:3:initdefault
# il y a ensuite exécution des scriptsrc.sysinit
--> initialisation du PATH pour les autres scripts, activation swap,
montage systèmes fichiers, gestion des quotas..
si::sysinit:/etc/rc.d/rc.sysinit
# exécution du script etc/rc.d/rc avec le niveau en paramètre
--> lancement des divers services du niveau choisi, ici 3,
etc/rc.d/rc 3
# ceci lance tous les liens symboliques du rép rc3.d
/etc/rc.d/rc3.d/S*
# par exemple /etc/rc.d/rc3.d/S01kerneld*fait référence
au script /etc/rc.d/init.d/kerneld
# les scripts de /etc/rc.d/init.d/ sont appelés avec un paramètre
start, stop, status, restart
Par exemple si on a modifié la configuration du serveur Samba dans le
fichier smb.conf, il faut relancer ce service par la commande
/etc/rc.d/init.d/smb restart
# le fichier inittab se termine par
# exécutexdm
qui lance X et le login graphique, si le "runlevel" est 5
x:5:respawn:/etc/X11/prefdm -nodaemon
Manipulations
- Examiner le fichier /var/log/dmesg qui contient le compte-rendu de l'initialisation.
Bizarrement, la commande dmesg nous en dit un peu plus, notamment sur l'interface réseau. - Examiner le fichier /etc/inittab avec mc
Que faudrait-il y changer pour démarrer immédiatement au niveau X ? - Si vous êtes intéressé, suivez le cheminement décrit ci-dessus.
Annexe 3 : Vie et mort des processus
Un processus est un programme en cours d'exécution.Le noyau Linux lance, gère les processus et contrôle leur échanges avec les périphériques. Il tient à jour une table des processus en exécution
Le premier processus, ancêtre de tous les autres est init. Tous les processus successifs sont créés par un processus parent et appartiennent à un utilisateur. Chacun est identifié par un numéro, son
PID
Il peut être important de connaître le PID d'un processus, ne serait-ce pour pouvoir le "tuer", s'il ne répond plus et bloque une console
Voici comment consulter la table des processus et si besoin agir !
ps
liste des processusps aux
: donne tous les processus, avec leur numéroPID
ps aux | less : pour contrôler le défilement
ps aux | grep X11 : pour n'afficher que les lignes concernant le processus cherché.kill PID
: met fin normalement à la tâchekill -9 PID
: action si nécessaire encore plus radicale !
Sous X-KDE, on peut utiliser TaskManager
, qui montre l'arborescence des processus.
- Comment vérifier que le processus
init
est bien le tout premier lancé par le noyau ? - Connexions root dans tty1 et stagex dans tty2
Expliquer ce que signifie la commande suivante et noter les numéros PID
ps aux | grep login
Que se produira t-il si on supprime un processuslogin
dans tty2 ? dans tty1 ? Vérifier. - Connexion comme
stagex
danstty1
et danstty2
Lancermc
danstty1,
afficher un fichier
Danstty2
, repérer le numéroPID
du processusmc
, pour ensuite le supprimerkill PID
.
Vérifier le résultat. - Lancer le serveur
X-KDE
parstartx
, passer en mode console dans un autre terminal, y repérer lePID
dekfm
, et le tuer.
Mais qu'avez-vous donc fait ? pouvez vous lancer des programmes ?
Ensuite, débarrassez-vous dekpanel
.
Bravo, admirez votre oeuvre, comment allez-vous pouvoir quitter proprement le serveurX
maintenant ?
Essayez de redémarrer le serveur X --> erreur : "remove /tmp/.X0-lock and start again".
Il n'y a qu'une solution, se débarrasser du processus parent qui est/etc/X11/X ..
ps aux |grep X ---> root PID=2128 /etc/X11/X ...
kill 2128
Annexe 4 : Le chargeur d'OS LILO
Exemple commenté de fichier /etc/lilo.conf
# lilo est installé dans le MBR du 1er disque
pour l'installer sur disquette, mettre boot=/dev/fd0
boot = /dev/hda
# transmission à LILO du fichier binaire contenant la description des noyaux
map=/boot/map
# fichier binaire utilisé comme secteur de démarrage
install=/boot/boot.b
# indique le label de l'image à chager, sinon c'est le premier rencontré
default=linux
# affiche un texte explicatif au démarrage
message=/boot/message
# vga spécifie l'affichage en mode texte
# normal (80x25), extended (132x44 ou 132x60) ou ask (choix au demarrage)
vga = normal
# active le mode interactif
prompt
# chargement automatique dans 5 secondes du premier système
timeout = 50
# fichier contenant l'image du noyau Linux à charger
image=/boot/vmlinuz-2.2.13-7mdk
label = linux
# partition où se trouve la racine / du système de fichiers
# Pour une disquette root=/dev/fd0
# Si rien n'est specifie, le système utilise le résultat de la commande rdev.
root = /dev/hda2
read-only
Le multi-boot
ou comment faire migrer en douceur son système de Windows9x vers Linux- La cohabitation est tout-à-fait possible et même fructueuse entre les 2 systèmes sur la même machine.
On les installe dans 2 partitions différentes.
Attention ! apparemment, Windows exige d'occuper la 1ère partition primaire (correspondant à/dev/hda1
sous Linux) qu'il faut créer avec l'utilitaire DOSfdisk
Ensuite on installe normalement Linux, qui lui respecte l'environnement ...
Si on installe d'abord Linux, laisser une partition /dev/hda1 de taille suffisante pour Windows.
Ne pas paniquer après l'installation de Windows (si tout s'est bien passé ...), Linux n'est plus accessible car Windows a écrasélilo
Il faut alors rebooter Linux sur une disquette, puis root réinstalle lilo, en passant la commandelilo
- Au démarrage le chargeur de système LILO permet de choisir.
Lorsque le messageLILO :
apparaît, on peut saisir le nom, linux ou dos dans l'exemple ci-dessous.
La touchetab
provoque l'affichage des systèmes disponibles sur la machine et le choix.
Au bout de 5 s (sitimeout=50
), le système par défaut démarre . - Exemple de lilo.conf multi-systèmes
boot = /dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout = 50
image=/boot/vmlinuz-2.2.13-7mdk
label = linux
root = /dev/hda2
read-only
# other = place de la partition de l'"autre" système
other=/dev/hda5
label=dos
# nom de la partition contenant la table de partition
table=/dev/hda - Changer de système par défaut
- On repère les 2 paragraphes qui décrivent les
boots
. Le premier dans l'exemple (linux) est lancé par défaut. - Pour changer de système au démarrage, il suffit donc de permuter tout simplement ces 2 paragraphes.
- Attention
- Avant toute modification majeure, vérifier le bon fonctionnement de la disquette de redémarrage !
- Après toute modification, passer la commande /sbin/lilo. Cela réécrit
LILO
dans leMBR
pour qu'elle puisse être prise en compte (n'oublions pas quelilo.conf
ne sera pas lisible au boot !).
- On repère les 2 paragraphes qui décrivent les
- Démarrer par un boot disquette
Examiner le fichier /etc/lilo.conf de votre machine. Quelles en sont les infos essentielles ?
Voir l'utilitaire
linuxconf/Configuration/mode de démarrage
, plus convivial pour apporter des modifications à lilo.conf
, et qui active les changements ...Ou encore l'utilitaire
KLILO
sous KDE.