Démarrer (sous) LINUX

et y rester, sans se faire jeter ...


Démarrage du noyau

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 : Lorsque nous sommes authentifiés, nous disposons des ressources du système selon les permissions (les droits des fichiers) que l'administrateur (le "root") a accordées.

Le shell

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-utilisateurs
Comment 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.



   Exo : prise en main de la multi-connexion
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 : Puis :


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: cfipen 
[root@p0x stagex] who am i --> conclusion ?


Déconnexion et arrêt (volontaire)


Annexe 1 : Le processus de connexion

Lors de la création de son compte, un utilisateur est associé à un type de shell
Pour 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

  1. d'abord le script /etc/profile communs à tous les users y compris root
  2. celui-ci cherche à exécuter tous les scripts /etc/profile.d/*.sh (percourir alias.sh et numlock.sh)
  3. 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.
  4. 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)
  5. Enfin le précédent exécute /etc/bashrc, dans lequel on place les alias globaux et la définition du prompt $PS1
  6. 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

Les niveaux de fonctionnement

Ces 6 niveaux sont décrits au début du fichier /etc/inittab La ligne qui suit définit le niveau de fonctionnement par défaut au démarrage (Default runlevel), ici le niveau 3
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 scripts rc.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écute xdm qui lance X et le login graphique, si le "runlevel" est 5
x:5:respawn:/etc/X11/prefdm -nodaemon

Le dernier script d'initialisation à être exécuté est /etc/rc.d/rc.local
On y écrit à la fin d'éventuelles commandes pour charger des modules ou lancer des services supplémentaires.


Manipulations

  1. 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.
  2. Examiner le fichier /etc/inittab avec  mc
    Que faudrait-il y changer pour démarrer immédiatement au niveau X ?
  3. 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 processus
ps aux : donne tous les processus, avec leur numéro PID
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âche
kill -9 PID : action si nécessaire encore plus radicale !

Sous X-KDE, on peut utiliser TaskManager, qui montre l'arborescence des processus.

Manipulations

  1. Comment vérifier que le processus init est bien le tout premier lancé par le noyau ?

  2. 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 processus login dans tty2 ? dans tty1 ? Vérifier.

  3. Connexion comme stagex dans tty1 et dans tty2
    Lancer mc dans tty1, afficher un fichier
    Dans tty2, repérer le numéro PID du processus mc, pour ensuite le supprimer kill PID.
    Vérifier le résultat.

  4. Lancer le serveur X-KDE par startx, passer en mode console dans un autre terminal, y repérer le PID de kfm, et le tuer.
    Mais qu'avez-vous donc fait ? pouvez vous lancer des programmes ?
    Ensuite, débarrassez-vous de kpanel .
    Bravo, admirez votre oeuvre, comment allez-vous pouvoir quitter proprement le serveur X 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


   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.