Linux

 

 

Introduction

-         Date : noyau Linux a été créé par Linus Torvalds à partir de 1991.

-         De nombreuses distributions : Mandrake, Red Hat, Fedora, Debian, Knoppix, Suse, Slackware, Gentoo,... (http://www.developpez.net/forums/viewtopic.php?t=145061)

-         Licence GPL de GNU : le code source de Linux est accessible gratuitement.

-         Système multi plate-forme, multi-utilisateurs, multi-tâches et multi-processeurs.

-         Interface graphique :

X = interface graphique, développée au MIT, permettant de créer des applications graphiques fonctionnant sur diverses plateformes.

X-Window = interface graphique des stations UNIX.

Sous Linux il existe une implémentation libre du système X-Window appelée XFree86.

-         Système de fichiers supportés par Linux (pour la majorité des distributions) : Ext2, Ext3, ReiserFS, Linux Swap(, FAT16, FAT32, NTFS)

 

Le processus de démarrage

 

Démarrage du noyau :

 

1.      Chargement du bios (inventaire des périphériques).

2.      Recherche d’un système d’exploitation :

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).

3.      Si LILO dans le MBR => exécution du chargeur de système LILO (LInux LOader, installé le plus souvent dans le MBR) en 2 parties.

4.      Le prompt LILO s'affiche, et au bout de quelques secondes (durée réglable), le système par défaut est lancé.

5.      Le noyau de ce système quel qu'il soit (Linux, Windows, ...) est décompressé "à la volée" et est chargé en mémoire.

 

BSD :

Scripts de démarrage dans le dossier /etc et commencant par les lettres rc.

System V :

Scripts de démarrage dans le dossier /etc/init.d (liens symboliques créées dans les dossiers /etc/rcX.d ou X correspond au niveau d’exécution encours). En fait, c’est le fichier /etc/inittab qui indique à init ce qu’il doit faire quand il change de niveau d’exécution. Par défaut, quand le processus init change de niveau, il exécute les scripts correspondants dans le bon dossier.

 

Linux :

Niveau de chargement par défaut (runlevels) est réglable dans le fichier 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

-         4 : démarrage du serveur graphique X11 en plus

-         5 : redémarrage de la machine (la commande reboot lance le niveau 5).

 

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-utilisateur

-         linux 5, pour démarrer le serveur X, et un Window Manager, directement en niveau 5 graphique.

 

Compte-rendu de l'initialisation (chargements des pilotes de périphériques) : /var/log/dmesg

Messages générés pendant l'initialisation du système : commande dmesg

 

Le premier processus, init :

Noyau du système chargé, 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.

 

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.

 

Processus d'identification :

-         Donner le nom d'utilisateur (login)

-         puis le mot de passe (password)

-         Si compte authentifié sur la machine, il y a rappel de la précédente connexion sous le même nom.

-         Prompt  modifiable (cf $PS1 dans /etc/profile).

Voici un exemple qui indique l'heure suivie du nom de l'utilisateur en rouge :

PS1='\t \[\033[0;31m]\u\033[0m]'

 

Lorsque nous sommes authentifiés, nous disposons des ressources du système selon les permissions que l'administrateur (le "root") a accordées.

Lors de la création de son compte, un utilisateur est associé à un type de shell (fichier /etc/passwd).

 

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 (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.

Chaque utilisateur peut ajouter des commandes shell au fichier de profil personnel, ~/.bash_profile

 

Le shell ("coquille qui enveloppe le noyau")

-         Interface utilisateur qui attend la saisie d'une ligne de commande et sa validation.

-         Peut être choisi lors de la création de l'utilisateur (Linuxconf).

 

Les commandes :

Certaines sont internes au noyau, comme ls, cp ...

D'autres peuvent être des alias, des pseudos d'autres commandes.

 

Le 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.

 

Multi-connexions

On peut se connecter plusieurs fois sur une même machine sous des identités différentes.

(ouvrir des terminaux ou consoles virtuelles avec Alt-Fx, x=1 à 6, puis passer de l'une à l'autre avec la même commande).

 

Vie et mort des processus

Processus = programme en cours d'exécution.

Le noyau Linux lance, gère les processus et contrôle leurs é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 : PID

 

ps : liste des processus

ps aux : donne tous les processus, avec leur numéro PID

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.

 

Gestion des utilisateurs

Le fichier /etc/passwd contient toutes les informations relatives aux utilisateurs (login, mots de passe, ...). Seul le superutilisateur (root) doit pouvoir le modifier.

Format :

nom_du_compte : mot_de_passe : numero_utilisateur : numero_de_groupe : commentaire : répertoire : programme_de_demarrage

 

Le fichier /etc/group contient la liste des utilisateurs appartenant aux différents groupes. En effet, lorsque de nombreux utilisateurs peuvent avoir accès au système, ceux-ci sont fréquemment rassemblés en différents groupes ayant chacun leurs propres droits d'accès aux fichiers et aux répertoires.

Format :

nom_de_groupe : champ_special : numero_de_groupe : membre1, membre2

 

Déconnexion et arrêt (volontaire)

-         Pour se déconnecter, entrer exit ou logout dans la console.

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

 

Pour arrêter le système, l'administrateur root lance l'une des commandes suivantes :

-         arrêt immédiat

halt (=   shutdown -h now)

-         arrêt différé

shutdown -h <nb mn>      il s'écoule <nb min> minutes entre l'avertissement et l'arrêt. •reboot

shutdown -r [<nb mn> | now]  ou reboot ou ctrl-alt-del

On peut éteindre à l'invite du message : The system is halted

 

Environnement graphique

Pour spécifier l'environnement graphique à démarrer lors du startx, mettre ça dans le fichier ~/.xinitrc :

 

#!/bin/sh

exec wmaker  // pour Window Maker

Variables de substitution prédéfinies :

* $0 nom du script (pathname)
* $1, ..., $9 arguments (du 1er au 9ème)
* $# nombre d'arguments
* $* liste de tous les arguments
* $@ liste de tous les arguments
* $? code retourné par la dernière commande
* $$ numéro de processus de ce shell
* $! numéro du dermier processus en arrière plan
* $- drapeaux fournis au shell par set