Académique Documents
Professionnel Documents
Culture Documents
Essentiel
Chapter 1. Introduction
Table of Contents
1.1. Introduction au système UNIX/Linux .................................................................................. 1
1.2. LPI Introduction .............................................................................................................. 2
1.2.1. LPI Certifications ................................................................................................. 2
Il était également question de concevoir de petits programmes ne faisant qu'un nombre limité de tâches, mais
pouvant interagir entre eux.
Depuis cette période, une grande quantité d'Unix ont vu le jour dont, parmi eux des Unix gratuits, comme celui
de l'université de Berkeley dont sont dérivés les célèbres OpenBSD, NetBSD, FreeBSD...
Mr Andrew S. Tanenbaum chercheur et enseignant en informatique créa à des fins pédagogiques un clone
d'UNIX portant le nom de MINIX . Minix était basé sur un modèle de micro-noyau mais bien plus simplifié
qu'un UNIX.
A. Tanenbaum ne concevait pas l'avenir dans le modèle des micro-noyaux, pour cela son MINIX n'était pas
libre.
Parallèlement à cela, une philosophie nouvelle est apparue concernant le partage des connaissances, protégée
par une licence qui garantirait la transparence des fichiers sources et la possibilité de les modifier.
C'est la naissance de la GPL ("GNU General Public License") et de la FSF ("Free Software Foundation") toutes
deux fondées par Richard Stallman.
Linus Torvalds s'insipira de MINIX à défaut de pouvoir l'améliorer pour créer LINUX. Exaspéré par la faible
disponibilitée du serveur UNIX de son université. Il plaça son noyau sous licence GNU.
GNU (GNU : Gnu is Not Unix) est un projet lancé en 1984 visant à développer une systéme d'exploitation de
type UNIX mais au contraire ce celui-ci complétement libre (c'est à dire qu'il respecte les concepts fondamen-
taux de la liberté logicielle: le droit d'utiliser, d'étudier, de modifier, de dupliquer, de donner et de vendre ). le
noyau LINUX tomba à pic, le noyau GNU étant encore insatisfaisant. De cette histoire naquit le projet GNU/
Linux à tort souvent appelé Linux. En effet Linux n'étant que le noyau communiquant avec le matériel et GNU
la suite d'utilitaires logiciels discuttant avec le noyau.
Linux a su garder, au fil de ses évolutions, l'héritage des tout premiers systèmes Unix.
La certification LINUX PROFESSIONAL INSTITUTE (LPI) est l'une des certification Linux la plus appréciée
par les entreprises. Notre formation Linux utilisera les distributions RedHat (CentOS) et Debian qui sont les dis-
tributions Linux les plus utilisées dans le monde.
Table of Contents
2.1. Terminaux et interpréteurs de commandes ............................................................................ 4
2.1.1. Le terminal .......................................................................................................... 4
2.1.2. Le Shell .............................................................................................................. 5
2.1.3. Obtenir de l'aide ................................................................................................... 5
2.1.4. Configuration de Bash ........................................................................................... 7
2.2. Commandes de base ........................................................................................................ 8
2.2.1. Gérer les éléments du système de fichiers .................................................................. 8
2.2.2. Maîtriser l'environnement de son shell .....................................................................13
Bien qu'aujourd'hui de nombreuses interfaces graphiques permettant de configurer le système soient disponibles,
celui-ci demeure totalement administrable en ligne de commande (CLI - Command Line Interface), cette
méthode restant la plus simple, la plus puissante et surtout la plus universelle. De plus, dans la famille Unix
l'interface graphique n'etant qu'une composante optionnelle, les serveurs en sont généralement dépourvus, ce qui
permet de mieux exploiter le potentiel de la machine en lui épargnant la charge mémoire et processeur d'une in-
terface graphique. Les ressources matérielles minimales pour exploiter un systèmes Linux en tant que serveur de
production sont donc bien inférieures aux minima requis par les autres systèmes.
Cette ligne de commande est accessible via les terminaux qui jouent le rôle d'interface entre l’utilisateur et la
machine. Dans ce terminal, l’utilisateur intéragit avec le système en utilisant un interpréteur de commandes : le
shell.
Note
Il est possible de se connecter à plusieurs terminaux virtuels sur une machine physique via la com-
binaison des touches Alt+Fn où Fn est une touche de fonction (Ex : F1,F2...). Depuis un environ-
nement graphique, il est possible de revenir sur un terminal via la combinaison des touches
Ctrl+Alt+Fn. Pour revenir au mode graphique, il faut en général utiliser la combinaison Alt+F7.
Afin de pouvoir accéder au terminal, vous devez au préalable vous identifier grâce à un couple login/mot de
passe. En fonction de votre niveau de privilège, vous aurez accès à plus ou moins de programmes sur le
système.
Un symbole de l'invite de commande vous permet de déterminer le type de compte que vous utilisez.
[user@linux ~]$
• Accès root :
[root@linux ~]#
2.1.2. Le Shell
Le rôle du shell est d'assurer l’exécution des commandes entrées par l’utilisateur. Il existe une multitude de
shells différents disposant chacun de ses propres spécificités. Le plus connu d'entre eux, BASH, est celui qui
sera utilisé tout au long de ce cours.
Plusieurs shells sont disponibles, chacun d’entre eux ayant des fonctionnalités différentes. Le choix d’un shell se
fera en fonction de l’utilisation que l’on souhaite en avoir.
• BASH (Bourne Again Shell) offre l'édition de la ligne de commande et le rappel des commandes précédentes.
• Csh (C Shell) développé à Berkeley est compatible avec le shell Bourne. Il n’offre pas d'édition de la ligne de
commande ni d'historique.
• Ksh (Korn Shell) offre l'édition de la ligne de commande (touches compatibles Emacs).
• Tcsh : version améliorée du csh, avec un support de l'édition de la ligne de commande avec correction des
commandes tapées.
• Zsh : shell similaire au Korn shell, avec plus de dynamisme lors des affichages et gère la non redondance des
commandes.
Un système Unix/Linux fonctionne à l'aide d'une multitude de programmes qui assurent, en général, chacun une
fonction bien distincte et sont capables de communiquer au sein du shell.
Note
La commande man man donne des informations sur l'utilisation du manuel en général.
Il existe plusieurs sections dans man destinées à indiquer quelles types d'informations vont être données, une
commande peut avoir de la documentation dans plusieurs sections man:
0. Fichiers d'entêtes
2. Appels système
3. Fonctions de bibliothèque
4. Fichiers spéciaux
6. Jeux
7. Divers
La commande man peut également être utilisée pour rechercher un terme dans l'ensemble des pages de manuel
grâce à l'option –K :
Il existe la commande commande -k de man est l'équivalent de la commande apropos. Cela affiche la ou les
commandes ainsi qu'un courte description contenant l'expression précisée par l'option :
Il est également possible d'obtenir un résumé du fonctionnement des commandes via l'option --help :
Celle-ci permet donc de voir rapidement le fonctionnement de la commande ou encore de vérifier l'existence
d'une option.
Pour cela il existe quatre fichiers principaux (d'autres peuvent être éventuellement ajoutés) appelés par le
système dans différents cas comme nous le verrons ensuite :
Ces fichiers permettent une grande personnalisation du système et notamment de conserver des paramètres
d'environnements que nous pouvons récupérer à divers moments comme exposé ci-dessous. (sinon, vous devrez
systématiquement préciser le chemin de votre script pour l'exécuter).
2.1.4.2. Variables
Contrairement au DOS qui ne connaît que les variables d'environnement, les shells d'Unix font la distinction
entre variables simples et variables d'environnement.
La modification d'une variable n'est perçue que par le shell qui la modifie et par ses descendants (c'est-à-dire les
commandes qu'il exécute) lorsque c'est une variable d'environnement. Il s'ensuit qu'un script ne pourra jamais
modifier les variables du shell courant, sauf s'il est appelé avec la commande source qui permet d'éxécuter un
script dans le shell courant. Cette commande est aussi utilie pour relire un fichier de configuration.
En Bourne-shell, définir une variable se fait par la commande : variable="valeur". Il est important que valeur
soit spécifiée entre guillemets ou apostrophes, et qu'il n'y ait d'espaces ni avant ni après le signe '='. Si valeur est
absente, la variable est créée mais contient une chaîne vide.
Terminaux et commandes de base 8
La deuxième notation est nécessaire si la variable est suivie d'un texte qui pourrait être interprété comme faisant
partie du nom de la variable.
Transformer une variable en variable d'environnement se fait par la commande export variable. Afficher la liste
des variables d'environnement se fait par la commande export ou env. Afficher la liste complète des variables
se fait par la commande set. La commande unset var permet de détruire définitivement la variable var.
Au lancement du shell, beaucoup de variables sont prédéfinies, qu'elles soient d'environnement ou non. Par ex-
emple, USER contient le nom de l'utilisateur, HOME contient le chemin de son répertoire personnel, etc... Pour en
avoir la liste complète, on utilise les commandes set ou export. D’avantage d’informations sont disponibles sur
le manuel de bash: man bash.
cd [<repertoire>]
2.2.1.1.2. La commande ls
La commande ls liste le contenu d'un répertoire. Sa syntaxe est la suivante :
ls [<options>] [<repertoire>]
Option Description
-l Affichage détaillé avec un fichier par ligne.
-a Affiche les fichiers cachés (commence par un ".").
-R Liste récursivement les répertoires courants (les sous
dossiers et fichiers de chaque dossier)
2.2.1.1.3. La commande cp
La commande cp permet de copier un fichier source vers un fichier destination. Sa syntaxe est la
suivante :
2.2.1.1.4. La commande mv
La commande mv permet de déplacer un fichier source vers un fichier destination. Elle est aussi utilisée
pour renommer un fichier.
2.2.1.1.6. La commande rm
La commande rm permet d'effacer un fichier ou un répertoire.
rm [<options>] <fichier|repertoire>
2.2.1.1.10. La commande ln
La commande ln permet de créer un lien destination qui va pointer vers un fichier source.
Sans options on crééra un lien dur (hard link) pointant sur la même inode. On l'utilise le plus souvent avec
l'option suivante :
touch <fichier|repertoire>
Option Description
-t [AAAA]MMJJhhmm[.ss] Permet de spécifier une date à utiliser plutôt que la
date courante.
2.2.1.2. Le globbing
Au sein du Shell, le globbing permet à l'utilisateur de désigner plus d'un motif à la fois grâce à l'utilisation de
caractères spéciaux tels que "*" ou "?". Un motif correspond à une suite de caractères quelconques.
• [a-z] : correspond à un ensemble de caractères. Ici ce sont tous les caractères alphabétiques entre la lettre
"a" minuscule et la lettre "z" minuscule.
• [^a-z] : correspond à tous les caractères sauf ceux de cet ensemble. Ici ce sera donc tous les caractères sauf
ceux entre la lettre "a" minuscule et la lettre "z" minuscule. La lettre "A" est donc comprise dans cet en-
semble.
Note
Si vous souhaitez utiliser un caractère spécial dans vos motifs, vous devez l'échapper à l'aide d'un
antislash.
[user@linux /tmp]$ ls
index.htm sommaire.htm t0st.c table.htm test.c
On affiche tous les fichiers commencant par "t" et ne finissant pas par "m".
Exemple avec "?" qui représente n'importe quel caractère non vide :
Note
L'utilisation de ls * donne un affichage récursif sur un niveau.
Pour chaque utilisateur, l'historique est stocké dans le fichier .bash_history situé dans son répertoire per-
sonnel.
Raccourci Description
Ctrl+f Caractère suivant (aussi accessible grâce à la flèche
de droite).
Ctrl+a Retour au début de la ligne.
Ctrl+e Retour à la fin de la ligne.
Ctrl+l Effacer l’écran (identique à la commande clear).
Alt+> Fin de l'historique.
Alt+< Début de l’historique.
Ctrl+d Supprimer un caractère.
Ctrl+k Effacer le texte depuis le curseur jusqu'à la fin de la
ligne.
Ctrl+y Coller le texte effacé avec ctrl+k.
Alt+d Effacer un mot.
Ces conjonctions sont trés utiles pour combiner des commandes. On va ainsi pouvoir exécuter plusieurs com-
mandes les unes à la suite des autres dont leur éxécution dépendra du résultat de la commande précédente.
par exemple:
La commande copie le monfichier1 vers monfichier2 si et seulement si cette commande réussie, alors on pourra
supprimer le fichier monfichier1.
utilisée à la fin d'une commande permet de lancer la commande en arrière plan. On peut utiliser combiné à une
autre commande :
Lance en arrière plan la création de monfichier1 et parallèlement à ça, en premier plan affiche le contenu de
monfichier2.
15
Table of Contents
3.1. Pipes et redirections ........................................................................................................15
3.1.1. Les flux standards ................................................................................................15
3.1.2. Redirections .......................................................................................................15
3.1.3. Les pipes ............................................................................................................17
3.1.4. La commande Tee ................................................................................................17
3.1.5. La commande xargs .............................................................................................18
3.2. Flux de textes et filtres ....................................................................................................18
3.2.1. Afficher un flux de textes ......................................................................................18
3.2.2. Modifier un flux de textes ......................................................................................21
3.3. L'éditeur VI ...................................................................................................................26
3.3.1. Appel de l'éditeur .................................................................................................26
3.3.2. Modes d'édition ...................................................................................................27
3.3.3. Mode d'édition ....................................................................................................27
• STDIN (0) : STDIN correspond à l'entrée standard, ce qui n'est ni plus ni moins que l'entrée au clavier. Ce
flux représente simplement tout ce que vous tapez au clavier.
• STDOUT (1) : STDOUT correspond à la sortie standard ce qui représente généralement un écran ou une im-
primante.
• STDERR (2) : STDERR représente la sortie d'erreur standard. Ce flux permet de séparer les messages
d'erreurs des autres messages.
3.1.2. Redirections
Si nous exécutons un programme tel que ls, le résultat sera affiché sur la sortie standard, c’est-à-dire l'écran par
défaut. Il est cependant possible de rediriger ces différents flux vers des fichiers ou d’autres flux.
Ceci peut être réalisé par le biais des signes "<" et ">". commande > fichier va créer un fichier fichier con-
tenant le résultat de commande.
De même, en utilisant le signe "<", le contenu de fichier est utilisé comme entrée de commande.
A chaque fois qu’un flux est redirigé avec ">" dans un fichier, le précédent contenu de celui-ci est écrasé. Afin
de conserver le contenu du fichier et d’ajouter notre sortie à la suite, il convient d’utiliser ">>".
Il est possible de rediriger tous les flux standards sous Unix/Linux. Pour cela, il suffit de spécifier quel flux doit
être redirigé :
Commande Description
commande 1>> fichier Redirige STDOUT à la suite de fichier.
commande 2>> fichier Redirige STDERR à la suite de fichier.
commande >> fichier 2>&1 Redirige STDERR et STDOUT à la suite de fichi-
er.
Par exemple, si nous utilisons commande1 | commande2, le résultat de la commande commande1 va être
utilisé en entrée de la commande commande2. Il est ainsi possible de chaîner autant de commandes que l'on
souhaite :
Ceci permet de rediriger une commande dans un fichier tout en pouvant observer la sortie de la commande à
l’écran.
La commande précédente permet de trouver tous les fichiers apache dans le répertoire /var/log et de les
supprimer grâce à l'utilisation de la commande xargs.
cat <fichier>
more <fichier>
less <fichier>
tac <fichier>
3.2.1.9. La commande pr
La commande pr permet de formater des fichiers de texte pour l'impression.
pr [<options>] <fichiers>
Editeurs et flux de texte 21
expand <fichier>
Option Description
-t <N> Spécifie le nombre d'espaces pour une tabulation.
3.2.2.6. La commande nl
La commande nl numérote les lignes d'un fichier. Ce fichier peut être séparé en trois partie : une entête, un
corps, et un pied de page. Ces parties sont définies par les chaînes "\:\:\: ", "\:\:", et "\:". Il est possible de définir
un style de numérotation pour chacune de ces parties :
nl [<options>] <fichier>
Editeurs et flux de texte 24
3.2.2.7. La commande wc
La commande wc permet tout comme la commande nl de compter le nombre de lignes mais aussi de mots ou de
caractères. Sa syntaxe est la suivante :
wc [<options>] <fichier>
3.2.2.8. La commande tr
La commande tr permet de remplacer certaines chaînes dans un flux de textes.
La commande suivante permet de découper fichier1 en fichiers de 10 lignes qui seront nommés nouv-aa,
nouv-ab, nouv-ac, etc ...
Editeurs et flux de texte 26
3.3. L'éditeur VI
Ici, nous vous présentons cet éditeur de texte car il s'agit du plus utilisé sur les systèmes Unix/Linux.
Note
Le logiciel vimtutor permet d'apprendre les principales commandes très simplement, en vous les
présentant pas à pas.
• Le mode insertion : les caractères tapés s'insèrent directement dans le texte en cours.
• Le mode commande : les caractères tapés sont considérés comme des commandes pour l'éditeur.
Table of Contents
4.1. Présentation ..................................................................................................................29
4.2. Ou utiliser les expressions régulières ? ...............................................................................29
4.3. Les ensembles ...............................................................................................................30
4.3.1. Les caractères .....................................................................................................30
4.3.2. Les motifs ..........................................................................................................31
4.3.3. Les regroupements ...............................................................................................31
4.3.4. Les alternatives ...................................................................................................31
4.4. Les quantificateurs .........................................................................................................31
4.5. Quelques exemples utiles avec grep ...................................................................................32
4.6. Sed ..............................................................................................................................33
4.6.1. Introduction ........................................................................................................33
4.6.2. Fonctionnement ...................................................................................................33
4.6.3. Commandes ........................................................................................................34
4.1. Présentation
Il existe dans un système Linux/Unix deux types de reconnaissances de chaînes :
• Les wildcards
Les wildcards sont les caractères permettant de compéter un nom de fichier : ~, *, ?, [ - ]. Ces caractères n'auront
plus la même signification dans les expressions régulières.
Les expressions régulières (regex ou expressions rationnelles) permettent de reconnaître une chaîne de caractère
contenant certains termes.
On peut coller plusieurs expressions les unes à la suite des autres, par exemple [a-z]coin reconnaîtra tous les
chaînes de caractères contenant une lettre minuscule, puis c, puis o, puis i, puis n, comme par exemple :
• acoin
• 123acoin
• acoinazerty
Les expressions régulières ont de nombreuses variantes de dialectes, en fonction des préférences des auteurs de
chaque outil les implémentant. Le dialecte de référence est celui du langage Perl, puisque Perl est un langage de
programmation qui a été écrit par un linguiste, les expressions régulières sont donc la base du langage.
Les regex peuvent être utilisées dans beaucoup de programmes et langages mais ils ne les implémentent pas
forcément de la même façon, il faut donc se méfier des différents dialectes. Voici une petite liste des langages et
programmes supportant les expressions régulières :
• Perl : la référence
• ed
• sed
• grep
• egrep
• Java
• .net
• vi
• vim
• emacs
• Les ensembles
• Les quantificateurs
Certains caractères ont un comportement un peu spécial, et d'autres permettent de définir d'autres types
d'ensembles ou de les quantifier :
Tous les caractères précédents doivent être échappés partout sauf dans les motifs ou ils peuvent avoir une signi-
fication différente.
• [abc] reconnaît a ou b ou c
• [a-z-] reconnaît [a-z] ou -. Le premier - signifie de a à z, et le deuxième signifie le caractère -. Pour que le
deuxième ne soit pas pris en compte comme décrivant un intervalle il doit être le premier ou le dernier
caractère du motif
• [a-zA-Z@-9_] et \w reconnaissent la même chose, c'est à dire l'ensemble des caractères autorisés dans les
noms de variables en Perl
• [^0-9] reconnaît tous sauf les chiffres compris entre 0 et 9. Le ^ doit être juste après le [ pour inverser le motif
qui le suit
• \d correspond à [0-9]
• \w correspond à [a-zA-Z0-9_-]
maximum.
• {n} : n occurrences
• {0,1} ou ? : 0 ou 1 occurrence
• {0,n} ou * : de 0 à n occurrences
• {1,n} ou + : de 1 à n occurrences
• (coin|couac) * : une chaîne contenant autant de coin et de couac que l'on veux, tous suivi par un espace. (ex:
"", "coin ", "couac ", "coin coin ", "coin couac coin " ...)
• [+-]?[\d]+\(,\d+)? : un nombre avec ou sans chiffre après la virgule, avec ou sans signe + ou -.
Dans tous les cas précédents, on ne tiens pas compte du début ni de la fin de la ligne: l'expression régulière coin
reconnaît toutes les lignes contenant les 4 lettres du mot coin, comme par exemple: azerty zecoinazqd qsd
Il va donc falloir utiliser les caractères de début et fin de chaînes pour préciser les expressions régulières:
4.6. Sed
4.6.1. Introduction
Sed est une des composantes essentielles à tout système Unix.
C’est un éditeur de texte non interactif, au sens où il se pilote soit par la ligne de commande, soit par le biais
d’un script.
Sed est un logiciel puissant, capable d’effectuer de nombreuses modifications (ajout, suppression, insertion…)
au sein d’un ou plusieurs flux de texte.
4.6.2. Fonctionnement
La syntaxe générale de sed est la suivante :
Afin de sélectionner les lignes à traiter, sed utilise un système d’adresses : soit un numéro ou une plage de
lignes, soit une expression régulière que doit satisfaire la ligne pour être prise en compte (cf. le cours sur les ex-
pressions régulières).
adresse commande
4.6.3. Commandes
Dans toutes les commandes, il est possible d’utiliser les références arrières. Si dans une première partie de
l’expression, nous reconnaissons un ou plusieurs motifs : /[0-9][a-Z]/, ils deviennent disponibles dans la
seconde partie de l’expression sous la forme de "\x" ou x est le numéro du motif. Ainsi :
s/[0-9][a-Z]/\2\1/
La sous chaîne \([0-9][0-9]*\) désigne un ou plusieurs chiffres, chacun sera entouré d'une chaîne de
charactères "abricot".
4.6.3.1. Substitution
La syntaxe générale de la commande de substitution est la suivante :
ad1,ad2 s/regex/remplacement/options
Remplace les chaînes reconnues par l’expression régulière regex par la chaîne de remplacement entre les lignes
ad1 à ad2 (facultatif).
Cela va changer la première occurence de la chaîne tux par TUX (la première chaîne tux uniquement)
Expressions régulieres 35
Les options de la commande de substitution, qui sont facultatives sont listées ci-dessous (il est possible d’en
spécifier plusieurs en les concaténant):
Remplace toutes les occurrences de Tux ou tux par Supertux dans tout le fichier mon_fichier.
Encadre le premier nombre de la ligne avec des ** (utilisation des références arrières).
4.6.3.2. Négation
Il est possible d’inverser le sens d’une expression régulière : n’afficher que les lignes qui ne contiennent pas
BSD par exemple. La syntaxe générale est la suivante :
La fonction est appliquée à toutes les lignes qui ne correspondant pas à la caractérisation.
4.6.3.3. Suppression
Efface les lignes reconnues par l’expression régulière ou spécifiées par les adresses (au niveau de la sortie, le
fichier d'origine n'est pas modifié).
- On efface tout sauf les lignes commencant par « From », donc on n'imprime que les lignes commencant par «
From ».
Tip
Il est parfois plus facile de caractériser la négation de ce que l'on veut (voir exemple précédent).
4.6.3.4. Insertion
Il existe deux commandes d’insertion :
Option Description
q Stoppe l’exécution de sed
= Ecrit les numéros de ligne
w fichier Ecrit dans un fichier
38
Table of Contents
5.1. Introduction à la notion de processus ..................................................................................38
5.2. Envoi de signaux aux processus ........................................................................................40
5.3. Arrière-plan, premier plan et détachement ...........................................................................41
5.4. Modification des priorités du Scheduler ..............................................................................42
• l'état "attente" (idle) : le processus attend un signal qui le passera à l'état prêt.
Il existe beaucoup d'autres états qui seront mis en évidence par l'utilisation de certaines commandes.
Une fois un processus lancé, le système lui affecte non seulement un identifiant numérique unique portant le
nom de PID (Process Identifier) permettant de le reconnaître parmis l'ensemble des processus mais aussi au sein
d'un arbre.
En effet lorsqu'un processus est lancé celui-ci fait partie d'une descendance, tout processus est le "fils" ou le "par-
ent" d'un ou plusieurs processus.
Note
Tous les processus sont hérités du premier processus exécuté par le système : init. Il prend en
charge l'exécution de l'ensemble des processus lancés par l'utilisateur par l'intermédiaire du shell
(interpréteur de commandes).
Ainsi le processus init a un PID égal à 1. De même qu'il existe des commandes indiquant l'état d'un processus,
des commandes permettent de mettre en évidence les relations d'héritage entre les processus.
Commande Description
rait le faire avec ps, mais de façon interactive.
pstree Permet de lister les processus dans un arbre indiquant
les liens de parentés entre eux.
jobs Permet de lister les processus lancés dans le shell
courant.
La commande ps peut être appelée avec différentes options, citons en exemple ps aux qui permet de lister tous
les processus :
• R : En cours d'exécution.
• S : En sommeil.
Champ Description
bibliothèques.
%CPU Taux d'occupation du (des) processeur(s) par ce pro-
cessus. Il peut être supérieur à 100% dans le cadre de
machine ayant plusieurs processeurs.
%MEM Taux d'occupation de la mémoire physique du proces-
sus.
TIME Temps total d'exécution au sein du (des) processeur(s)
depuis le lancement du processus.
COMMAND Affiche la ligne de commande qui a permis de lancer
le processus.
Une autre chose intéressante dans la commande top: la "load average" elle va nous permettre de savoir si notre
serveur est sous utilisé ou l'inverse. Nous donnant une mesure de la charge de travail effectuée sur les dernières
1minutes, 5 minutes et 15 minutes. Tant qu'elle est inférieur à 1 le système est correctement ou sous utilisé. Au
dessus cela signifie que des requêtes sont mises en attentes faute de capacité.
Caution
Chaque signal est également représenté par un nombre. Ce nombre peut varier d’un système à
l’autre. C’est pour cela qu’il est préférable d’utiliser le nom complet.
Tip
Si vous connaissez le nom du programme que vous souhaitez interrompre, vous pouvez aussi util-
Gestion des processus 41
iser la commande killall suivi du nom du programme à arrêter. C'est très utile lorsqu'on souhaite
arrêter plusieurs instances d'un programme en une seule fois.
La commande nohup permet de lancer une commande qui ne sera pas affecté par les signaux de types
HANGUP (déconnexion).
Il peut alors recevoir directement des signaux par les combinaisons de touches Ctrl+? .
Il existe cependant une autre possibilité où le processus est dit en arrière plan. Le shell reprend alors la main
sans attendre la fin de l’exécution du nouveau processus. Pour exécuter un processus en arrière plan, il suffit
d’ajouter un « & » à la fin de la commande.
Il est possible d’arrêter un processus sans pour autant l’interrompre. Le processus est alors dit en sommeil
(sleeping).
Il existe de plus d’autres commandes permettant de passer les processus en premier ou en arrière-plan. Il est im-
portant de noter que les processus sont identifiés au niveau du shell par un "numéro de job" visible grâce à la
commande jobs.
Lorsqu'un shell est exécuté, ceci est fait au sein d’un terminal. Du fait de l’héritage, chaque processus initié par
le shell est donc « attaché » a son terminal d’origine (TTY). Il est cependant possible de « détacher » ce proces-
sus par le biais de la commande disown suivie du PID du processus.
Cette action permet notamment de pouvoir fermer une session sans pour autant arrêter le processus.
Note
La priorité la plus haute est représentée par -20, et la plus faible par +19
Cependant, un processus lancé par un utilisateur ne peut avoir une priorité négative. Seul l'administrateur
système possède ce droit. Par défaut, un processus est lancé avec la priorité 10. Les commandes permettant de
contrôler les priorités des processus sont nice et renice.
La commande renice utilise l’option -p "PID" qui change la priorité d'un processus ayant un PID précis.
43
Chapter 6. FHS
Table of Contents
6.1. Introduction ..................................................................................................................43
6.2. Arborescence de "/" ........................................................................................................43
6.3. Arborescence de /usr .......................................................................................................44
6.4. Arborescence de /var .......................................................................................................44
6.1. Introduction
Le FHS (Filesystem Hierachy Standard) est une convention qui organise l'arborescence des répertoires sous
GNU/Linux, qu'on nomme plus communément Linux. Cette convention est aussi valable pour Unix. Pourquoi
utiliser ce standard ? Tout simplement pour une interopérabilité entre les différentes distributions Linux. Ima-
ginez que chaque distribution utilise sa propre arborescence de fichiers, lors de l'installation d'un programme par
exemple, les fichiers issus de cette installation iront dans des répertoires différents, dépendant de la distribution
Linux utilisée. Sans oublier que toutes les distributions Linux utilisent la même base : GNU/Linux. Ainsi, ça
permet d'éviter les écueils des années 80 où tous les Unix étaient devenus tous incompatibles entre eux.
Chapter 7. Recherche
Table of Contents
7.1. find .............................................................................................................................45
7.2. locate - slocate ...............................................................................................................46
7.3. which / whereis ..............................................................................................................46
7.1. find
find [chemin] [options]
La commande find permet d'effectuer une recherche récursive à partir d'un certain répertoire spécifié par un
chemin en fonction des options précisées.
Pour rechercher tous les fichiers textes contenus dans les répertoires personnels des utilisateurs :
• Les fichiers trouvés sont passés à la commande cmd comme des paramètres
• On est obligé de finir la ligne de la commande à l'aide du caractère ";". Ce caractère est échappé afin de ne
pas être interprété par le shell.
Pour effacer tous les fichiers .exe de mon répertoire personnel en demandant une confirmation cette fois ci la
syntaxe est la même que -exec:
[user@linux /usr/share]$ cd ~
[user@linux ~]$ find . -name "*.exe" -ok rm {} \;
Les recherches avec locate sont donc plus rapides étant donné l'indexation mais aussi moins fiable (si l'on oublie
de mettre à jour la base de données).
slocate est l'équivalent sécurisé de locate. slocate vérifie les permissions des fichiers afin que les utilisateurs ne
voient pas les fichiers dont ils ne doivent pas avoir accès. Sa syntaxe est identique.
Les commande whereis permet de situer un éxécutable (le binaire) mais aussi les dossiers /fichiers relatifs à cet
exécutable (fichiers manuels, fichiers de configurations...).
Table of Contents
8.1. Les utilisateurs ...............................................................................................................48
8.1.1. Le fichier /etc/passwd ...........................................................................................48
8.1.2. Le fichier /etc/shadow ...........................................................................................49
8.2. Les Groupes ..................................................................................................................49
8.3. Les commandes de gestion des utilisateurs ..........................................................................50
8.3.1. Ajouter un utilisateur ............................................................................................50
8.3.2. Suppression d'un utilisateur ...................................................................................51
8.3.3. Changer le mot de passe d'un utilisateur ...................................................................52
8.3.4. Afficher des informations sur un utilisateur ...............................................................52
8.4. Les commandes de gestion des groupes ..............................................................................53
8.4.1. Créer un groupe ...................................................................................................53
8.4.2. Suppression d'un groupe ........................................................................................53
8.4.3. Modifier les groupes secondaires d'un compte ...........................................................53
8.4.4. Afficher des informations sur les groupes .................................................................53
8.4.5. Définir les mots de passe pour les groupes ................................................................54
8.5. Changer d'identité ..........................................................................................................54
Pour le système, un utilisateur n'est pas obligatoirement une personne physique. Un utilisateur peut détenir des
fichiers, exécuter des programmes ou encore déclencher automatiquement des fonctions systèmes. Par exemple,
un utilisateur peut être créé dans le seul but de détenir des fichiers publics. On parle alors de « pseudo utilisateur
».
Un utilisateur possède un nom d'utilisateur appelé aussi login lui permettant de démarrer une session. Ce login
est associé à un mot de passe personnel. Pour accéder aux ressources du système, l'utilisateur doit entrer la
bonne paire login/mot de passe : c'est l'authentification.
Les utilisateurs sont identifiés par le système grâce à un UID (identifiant d'utilisateur) unique. Cet identifiant est
une valeur numérique.
login:password:UID:GID:commentaires:home:shell
Il contient un certain nombre d'informations relatives aux utilisateurs du système. Voici le détail du contenu :
Gestion des utilisateurs et des groupes 49
La présence du mot de passe dans /etc/passwd, même crypté, pose un problème de sécurité puisque tout le
monde possède un accès en lecture sur ce fichier. La solution à ce problème est de stocker les mots de passe
dans un fichier différent : /etc/shadow. Pour garantir la sécurité, seul l'administrateur peut le lire.
Note
Si le fichier /etc/shadow n'existe pas, l'utilitaire pwconv permet, à partir d'un fichier /
etc/passwd unique, de créer le fichier /etc/shadow qui lui correspond.
Voici sa syntaxe :
groupe:*:GID:utilisateurs
Voici un exemple :
compta:x:230:pierre,romain,jerome
Option Explication
nexion initial de l'utilisateur. Le nom ou le numéro du
groupe doivent exister. Le numéro de groupe par
défaut est 1.
-G groupes supplémentaire Les autres groupes auxquels appartient l'utilisateur
(séparés par des virgules)
-m Le répertoire personnel de l'utilisateur sera créé (ce
n'est pas le comportement par défaut). Le répertoire /
etc/skel est utilisé comme modèle pour la
création du répertoire personnel.
-k répertoire A utiliser si et seulement si l'option -m est présente.
Permet de spécifier un autre dossier que /etc/skel
comme modèle pour la création du répertoire person-
nel.
-p mot de passe chiffré Vous pouvez saisir le mot de passe en option. Il doit
être chiffré (pour récupérer la version cryptée d'un
mot de passe il faut utiliser la bibliothèque crypt).
-s chemin vers un exécutable Shell lancé à la connexion de l'utilisateur
-u UID L'identifiant unique de l'utilisateur
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=
SKEL=/etc/skel
Note
L'option -r efface le répertoire personnel de l'utilisateur.
Si l'argument login n'est pas spécifié, le changement de mot de passe s'applique sur l'utilisateur actuellement
connecté.
Les commandes who, users et w permettent de connaître les utilisateurs actuellement connectés sur la machine.
Gestion des utilisateurs et des groupes 53
Note
On ne peut pas supprimer un groupe si c'est le groupe principal d'un utilisateur.
Ceci permet d'ajouter l'utilisateur "toto" dans les groupes "toto", "users", "fileshare" et "dev".
Sur de très anciens SystemV, il n'était pas possible d'activer plusieurs groupes simultanément pour le même util-
isateur. La commande id permet de connaître les groupes actifs :
[root@linux ~]# id
uid=0(root) gid=0(root) groupes=0(root), 10(wheel),6(disk),4(adm),
3(sys),2(daemon),1(bin)
Pour changer le groupe actif sur un tel système, on utilise la commande newgrp. Lorsqu'elle est utilisée sans ar-
gument, elle active le groupe principal de l'utilisateur (le groupe qui figure dans /etc/passwd).
Il est également possible de changer le groupe utilisé lors de la vérification de permissions grâce la commande
newgrp. Cette commande va réaliser en quelques sortes un changement de groupe temporaire. Temporaire dans
Gestion des utilisateurs et des groupes 55
la mesure où le nouveau groupe attribué à l'utilisateur disparaîtra lors de la déconnexion de ce dernier. Lors de
l'exécution de la commande, la notion de mot de passe pour le groupe intervient puisque si le groupe a un mot
de passe configuré, celui-ci sera demandé pour le changement. Autrement, les utilisateurs non membres du
groupe désiré ne peuvent switcher.
56
Table of Contents
9.1. Propriétaire ...................................................................................................................56
9.1.1. Changer l'appartenance d'un fichier .........................................................................56
9.1.2. Changer le groupe propriétaire ...............................................................................57
9.2. Les droits ......................................................................................................................57
9.2.1. Notion de droits ...................................................................................................57
9.2.2. Modifier les droits ................................................................................................58
9.3. Umask .........................................................................................................................59
9.4. Les droits spéciaux .........................................................................................................60
9.4.1. Le bit SUID ........................................................................................................60
9.4.2. Le bit SGID ........................................................................................................61
9.4.3. Le sticky bit ........................................................................................................61
9.4.4. Équivalents numériques des droits spéciaux ..............................................................61
9.5. Les attributs ..................................................................................................................61
9.5.1. chattr .................................................................................................................62
9.5.2. lsattr ..................................................................................................................62
9.1. Propriétaire
Chaque fichier appartient à un utilisateur et à un groupe. Dans l'exemple ci-dessus, le fichier appartient à
l'utilisateur supinfo et au groupe labs. Ils en sont les propriétaires. Lorsqu'un fichier est créé, l'utilisateur
propriétaire est l'utilisateur qui l'a créé tandis que le groupe propriétaire est le groupe principal du même util-
isateur.
L'option -R, comme dans la plupart des commandes, est utilisée pour changer le propriétaire de façon récursive
pour les dossiers.
Exemple:
root@localhost # ls -l fichier
-rw-r--r-- 1 andrew kernel 52 2007-10-13 00:17 fichier
root@localhost # chown linus fichier
root@localhost # ls -l fichier
-rw-r--r-- 1 linux kernel 52 2007-10-13 00:17 fichier
root@localhost # chown richard:gpl fichier
root@localhost # ls -l fichier
-rw-r--r-- 1 richard gpl 52 2007-10-13 00:17 fichier
Gestion des permissions 57
Note
Les options entre crochets [] sont des options facultatives. Les options entres chevrons <> sont ob-
ligatoires.
Note
L'utilisateur doit faire parti du nouveau groupe.
Exemple:
root@localhost # ls -l fichier
-rw-r--r-- 1 andrew kernel 52 2007-10-13 00:17 fichier
root@localhost # chgrp gpl fichier
root@localhost # ls -l fichier
-rw-r--r-- 1 richard gpl 52 2007-10-13 00:17 fichier
supinfo@linux:~$ ls -l
-rwxr--r-- 1 supinfo labs 2585 2007-10-07 18:25 script.sh
Les droits assignés aux fichiers sont représentés par les 10 premiers caractères:
• Le premier caractère représente le type de fichier: "-" pour un fichier, "d" pour un dossier et "l" pour un lien.
Cela n'est pas un droit en soit mais une caractéristique du fichier.
Gestion des permissions 58
• La première série de 3 caractères (rwx dans l'exemple) représente les droits pour l'utilisateur propriétaire.
• La 2ème série de 3 caractères (ici: r-- )représente les droits pour l'utilisateur faisant parti du groupe
propriétaire.
• Enfin, la dernière série ( r-- ) représente les droits accordés à tous les autres utilisateurs.
Selon que cela soit un fichier ou un dossier, les droits n'auront pas la même portée. Par exemple, le droit
d'exécution sur un dossier permet de traverser le dossier, de lire son contenu.
Il est possible d'attribuer de nouveaux droits de deux manières différentes : de manière alphabétique ou de façon
octale.
root@localhost # ls -l fichier
-rw-r--r-- 1 root wheel 0 7 Sep 10:52 fichier
root@localhost # chmod u+x fichier
root@localhost # ls -l fichier
-rwxr--r-- 1 root wheel 0 7 Sep 10:52 fichier
root@localhost # chmod g+wx,o-r fichier
root@localhost # ls -l fichier
-rwxrwx--- 1 root wheel 0 7 Sep 10:52 fichier
Gestion des permissions 59
Dans cet exemple, initialement, le fichier fichier peut être lu et modifié (rw-) par l'utilisateur propriétaire
(ici, l'utilisateur root), seulement lu (r--) par un utilisateur faisant parti du groupe propriétaire (ici, un utilisateur
faisant parti du groupe wheel) et seulement lu (r--) par tous les autres utilisateurs du système.
La première commande chmod u+x nous permet d'ajouter (+) à l'utilisateur propriétaire (u) le droit d'exécution
(x) sur le fichier. Nous voyons bien que le x a été ajouté dans la description du fichier.
La commande suivante chmod g+wx,o-r va ajouter (+) au groupe (g) le droit d'écriture et d'exécution (wx). Elle
va également enlever (-) aux autres (o) le droit de lecture (r).
Enfin, la dernière commande chmod a=r va attribuer (=) à tous (a) le droit de lecture (r). On voit bien ici que
cela remet à zéro les droits n'étant pas spécifiés.
Ces chiffres peuvent, et devront s'additionner pour définir plusieurs droits. Ainsi, 6 permet de définir la lecture
ET l'écriture 4+2). 7 permettra de lire, écrire et exécuter (4+2+1). etc... 0 permet de définir aucun droit: pas de
lecture, pas d'écriture et pas d'exécution.
root@localhost # ls -l fichier
-rw-r--r-- 1 root wheel 0 7 Sep 10:52 fichier
root@localhost # chmod 755 fichier
root@localhost # ls -l fichier
-rwxr-xr-x 1 root wheel 0 7 Sep 10:52 fichier
Nous voyons ici que la définition des droits se fait en une série de 3 chiffres. Le premier chiffre correspond à
l'utilisateur propriétaire, le second chiffre un utilisateur faisant parti du groupe propriétaire et le dernier chiffre
aux autres utilisateurs.
Ainsi, nous avons passé les droits de lecture, écriture et exécution (4+2+1 = 7) à l'utilisateur propriétaire, les
droits de lecture et d'exécution (4+1=5) au groupe et les droits d'écriture et exécution aux autres utilisateurs. Il
est ainsi bien plus pratique est plus rapide de définir les droits que cela aurait été avec chmod u=rwx,g=rx,o=rx
fichier !
9.3. Umask
Lorsqu'un fichier est créé, il est créé avec les droit 666, les dossiers avec les droits 777. En effet, un dossier doit
Gestion des permissions 60
être exécuté pour pouvoir l'ouvrir. Le umask est un filtre permettant de définir les droits par défaut lors de la
création d'un de ces fichiers ou dossiers. Il est alors soustrait aux droits par défaut. La valeur par défaut de
l'umask est 022. On a donc pour les fichiers: 666 - 022 = 644.
Exemple :
Note
Le umask n'est défini que pour l'utilisateur en cours.
Le bit suid permet de changer ce comportement, en donnant à la commande les droits de l’utilisateur
propriétaire du fichier, qui peut être différent de l’utilisateur exécutant la commande.
La commande ping a besoin d'accéder au réseau, mais l'accès au réseau peut être restreint à l'utilisateur root par
exemple. Afin de permettre à tous les utilisateurs d'utiliser cette commande, l'exécutable, qui appartient à root,
doit avoir le bit SUID d'activé. Il faut bien évidemment que la commande possède également les droits
d'exécution.
user@localhost$ ls -l /sbin/ping
-r-sr-xr-x 1 root wheel 24876 27 May 18:18 /sbin/ping
Le bit SUID est représenté par la lettre "s" qui se situe à la place du droit d'exécution (x) de l'utilisateur
propriétaire.
Pour activer le bit SUID, il faut utiliser la commande chmod de la manière suivante :
Pour activer le bit SGID sur un fichier, il faut utiliser la commande chmod de la manière suivante :
Le bit SGID est alors représenté par la lettre "s" qui se situe toujours à la place du droit d'exécution, mais cette
fois ci, du groupe propriétaire.
Pour activer le sticky bit sur un répertoire, il faut utiliser la commande chmod de la manière suivante :
Exemple :
root@localhost # ls -l fichier
-rw-r--r-- 1 root wheel 0 7 Sep 10:52 fichier
root@localhost # chmod 4755 fichier
root@localhost # ls -l fichier
-rwsr-xr-x 1 root wheel 0 7 Sep 10:52 fichier
9.5.1. chattr
Dans POSIX1 on peut ajouter en plus des permissions des attributs supplémentaires qui s'appliqueront à tous les
utilisateurs (owner, group, others).
Le symbole "+" indique que les attributs doivent être ajoutés. Le symbole "-" qu'ils doivent être supprimés. En-
fin le symbole "=" indique que ce seront les seuls attributs que le fichier aura (comme pour la commande
chmod)
9.5.2. lsattr
Cette commande permet d'afficher les attributs des fichiers précisés avec la commande chattr.
Table of Contents
10.1. Gestion des disques durs ................................................................................................63
10.1.1. Les partitions ....................................................................................................63
10.1.2. Partitionner un disque dur ....................................................................................64
10.1.3. Formater une partition .........................................................................................65
10.2. Les systèmes de fichiers .................................................................................................66
10.2.1. Les différents systèmes de fichiers .........................................................................66
10.2.2. L'espace disque ..................................................................................................66
10.2.3. Intégrité des systèmes de fichiers ..........................................................................67
10.3. Accèder aux partitions ...................................................................................................68
10.3.1. Monter une partition ...........................................................................................68
10.3.2. Le fichier /etc/fstab .............................................................................................69
Tous les éléments de votre système, qu’il s’agisse du processeur, de la carte réseau, d’un processus ou encore
d’un fichier texte, sont considérés comme des fichiers.
Les disques durs n'échappent pas à cette règle. Par convention tous les périphériques sont représentés dans le
dossier "/dev". On distingue deux types de disques : les disques IDE et les disques SCSI.
Ils sont nommés respectivement "hd" et "sd". Afin de distinguer les différentes partitions de ceux-ci on ajoute
un suffixe composé d'une lettre et d'un chiffre. La lettre représente la position du disque sur le bus et le chiffre
représente l'une des partitions de ce disque.
Par exemple, le disque maître du premier contrôleur IDE sera nommé "/dev/hda". La première partition de ce
disque sera "/dev/hda1", la seconde "/dev/hda2".
Cette méthode est la plus utilisée, indépendemment du système d'exploitation. Il existe une autre méthode
appelée LVM (Logic Volume Manager) mais elle ne sera pas abordée dans ce cours.
Sous un système Linux, contrairement à un système Microsoft, chaque partition n'est pas représentée sous forme
de lecteur. Nous allons pouvoir monter, c’est-à-dire ajouter cet espace disponible à notre système de dossier
hiérarchique.
Par exemple si une machine fait office de serveur FTP, il est possible de créer une partition dédiée qui sera
montée dans "/var/ftp/". Ainsi le serveur FTP n'utilisera pas la place réservée aux utilisateurs ou aux
fichiers de logs.
Gestion des disques 64
Note
Il faudra aussi prévoir une partition réservée à la swap. La swap est utilisée comme complément à
la mémoire vive du système.
• cfdisk : utilitaire en mode curses (pseudo graphique) avec une liste des partitions.
Il est possible de modifier les partitions d'un disque dur en cours d'utilisation. Il faut cependant redémarrer pour
que les changements soient pris en compte.
Nous allons ici créer une partition primaire contenant la swap (512Mo) et une partition logique contenant "/"
(5Go)
Dans la majorité des cas, nous utiliserons la commande mkfs. Certains systèmes de fichiers utilisent leur propre
commande, nous les verrons ci-dessous.
Note
Cas particulier : Pour formater une partition de swap (partition d'échange), la commande à utiliser
Gestion des disques 66
10.2.2.1. du
du (disk utilization) permet de calculer la taille sur le disque d'un élément du système de fichiers. Exemple :
• -h : affiche la taille avec une unité adaptée et compréhensible (Megabyte, Gigabyte, Terabyte, ...)
10.2.2.2. df
df (diskfree) affiche les statistiques de remplissage de vos disques et périphériques de stockage. Il s'utilise en
général avec le commutateur -h pour avoir les unités de taille appropriées :
[root@linux]$ df -h
Heureusement nous disposons de tout un choix d'outils pour maintenir, vérifier, réparer nos précieux systèmes
de fichiers.
La commande pour effectuer cette opération est fsck (comprendre "files system check"). Il existe ensuite
plusieurs déclinaisons de cette commande pour chaque système de fichiers :
Exemple avec une partition en ext3 sur la 3ème partition du 2ème disque SCSI :
Hélas, il arrive parfois que la réparation échoue si le système de fichiers est trop abîmé. Par exemple, si trop de
données du journal sont corrompues, fsck ne parviendra pas à réparer. A ce moment, il faut utiliser une autre
commande : debugfs
Debugfs est comme son nom l'indique un débugeur qui fonctionne avec des partitions de types ext2/ext3 (il ex-
iste une commande similaire pour le reiserfs : debugreiserfs) et qui permet d'examiner et de changer l'état d'un
système de fichiers. On peut accèder aux blocks, aux inodes et à l'arborescence du système même s'il est cor-
rompu. Voici un exemple :
[root@linux]# debugfs
debugfs: open -f -w /dev/sda2
debugfs: cat /etc/fstab
debugfs: features -has_journal -needs_recovery
Explication :
• "features" : Permet d'afficher/modifier les fonctionnalités du F.S. Ici on supprime le journal et la variable qui
nous impose de le vérifier avant ouverture. Lorsque le journal est corrompus et que le F.S. ne s'ouvre plus,
c'est une manière de réparer. (On pourra par la suite réactiver le journal, il sera recréer sans problème).
Pour commencer, voici la commande qui permet de lire l'entête (paramètres, journal, ...) d'un système de fichiers
ext2/ext3 : dumpe2fs
Utilisée sans argument, dumpe2fs permet de récupérer tous les groupes de blocks et les numéros d'inodes de
votre système de fichiers. Ces informations sont utilisés en général par les applications de sauvegardes.
Pour afficher les détails, le journal et les paramètres d'un système de fichiers :
On peut donc voir différentes informations comme par exemple [Maximum mount count] qui définit le nombre
de montage maximum avant que le système de fichiers soit vérifié.
Toutes ces valeurs sont modifiables grâce à l'utilitaire tune2fs. Par exemple, modifions la valeur [Maximum
mount count] et augmentons la à 50 :
Il existe de nombreux paramètres que vous pouvez retrouver facilement depuis la page de man de tune2fs.
Dans la pratique, cela consiste à ajouter un répertoire, appelé point de montage, qui va pointer vers la ressource
voulue. Par convention, les points de montage sont regroupés dans le dossier /mnt.
L'option -t renseigne le système de fichier utilisé. Il est également possible d’ajouter "auto" pour que mount es-
saie de trouver le système de fichier lui-même.
Note
Pour connaître tous les systèmes de fichier supportés par votre noyau, consultez le fichier /
proc/filesystems.
Il est possible de passer plus d'options grâce à l'argument -o (voir prochain tableau).
• Faciliter l'utilisation de la commande mount, en entrant toutes les options à utiliser pour chaque périphérique.
Dans le fichier /etc/fstab chaque ligne représente un périphérique à monter. Chaque ligne est composée de
six parties :
• Le mot clé "dump" : active ou non la sauvegarde du disque avec l'utilitaire dump (1 ou 0)
• Le mot clé "fsck" : active ou non la verification du système de fichier avec l'utilitaire fsck (0, 1, 2 ou 3)
Table of Contents
11.1. Les limites ..................................................................................................................71
11.2. Activer les quotas .........................................................................................................71
11.3. Commandes .................................................................................................................72
11.3.1. quota ...............................................................................................................72
11.3.2. quotaon et quotaoff ...........................................................................................72
11.3.3. edquota ...........................................................................................................72
11.3.4. repquota ..........................................................................................................73
11.3.5. quotacheck ......................................................................................................73
• hard limit : espace total dont dispose l’utilisateur. Il ne peut pas stoker plus que la limite indiquée.
• soft limit : une fois cette limite dépassée, l’utilisateur recevra un message lui indiquant qu’il approche de la
fin de son quota.
• hard limit : espace total dont dispose un groupe. Une fois cette limite atteinte, tous les utilisateurs du groupe
ne pourront plus écrire même si leur propre quota utilisateur n’est pas atteint.
• soft limit : idem que pour les utilisateurs. Un message d’alerte est envoyé une fois la limite dépassée.
Un autre type de limite existe également : la grace period. Une fois la soft limit dépassée, l’utilisateur ou le
groupe entre dans une période probatoire. Si au terme de cette période, l’utilisation de l’espace n’est pas redes-
cendue en dessous de la soft limit, celle-ci devient hard limit et les utilisateurs ne peuvent donc plus écrire sur le
disque.
1. Activer les quotas sur le ou les disques voulus dans /etc/fstab en ajoutant les options : usrquota et
grpquota respectivement pour les utilisateurs et les groupes.
11.3. Commandes
11.3.1. quota
quota affiche les limites d’un utilisateur ou d’un groupe
11.3.3. edquota
edquota permet d’éditer les quotas à l’aide de l’éditeur de texte défini dans la variable d'environnement
$EDITOR.
11.3.4. repquota
repquota génère un rapport pour connaître l’états des quotas.
11.3.5. quotacheck
quotacheck test et crait le fichier de quota des utilisateurs et groupes
Table of Contents
12.1. Préparer une installation de Linux ....................................................................................74
12.1.1. La partition SWAP .............................................................................................74
12.1.2. La partition / .....................................................................................................75
12.2. Gestionnaire de démarrage .............................................................................................75
Pour simplifier, une partition est un morceau du disque dur sur lequel nous pourrons installer un système de
fichiers. Ce dernier, suivant son type permet d'accueillir des données et s'occupe de leur organisation sur le
disque. Bref un disque dur doit être correctement partitionnée, c'est à dire il faut qu'aucune partition ne se che-
vauche.
Important
Modifier les partitions est une tâche délicate qui peut engendrer la perte de données en cas d'erreur.
Donc avant de partitionner votre disque dur, assurez-vous de toujours avoir une sauvegarde de la
table de partitions et de vos données importantes.
Pour installer un système GNU/Linux, il est nécessaire de prévoir au moins 2 partitions pour Linux :
• swap
• /
Note
Nous verrons ensuite qu'il est possible de séparer la partition / en plusieurs autres partitions
Elle offre au système un espace de secours en cas de débordement de sa mémoire vive (très courant si vous n'en
disposez que très peu).
Généralement, la taille de la partition SWAP dépend de la mémoire vive déjà présente. Raisonablement, si
l'ordinateur dispose déjà de plus de 512 MO, allouer un espace de taille identique pour la SWAP est un choix
Installation 75
tout à fait raisonable. En dessous de 512 MO, il faut suivre un règle simple : allouer un espace égale au double
de la mémoire RAM.
12.1.2. La partition /
La partition / est la partition qui accueille le système d'exploitation. Elle sert donc à stocker les fichiers
nécessaires au fonctionnement du système mais aussi les fichiers de configurations, les répertoires personnels
des utilisateurs, etc.
Si aucun autre système n'est installé, l'espace pour cette partition est égale à la taille du dsique moins celle de la
SWAP. Sinon, un système linux utilisé dans un contexte personnel nécessite au moins 3 Go (à cause de
l'interface graphique), tandis qu'un serveur se contente d'au moins 2 GO. Bien évidement, il faut adapter ces
tailles suivant le besoin et l'utilisation. Par exemple un serveur de fichier ou une station hébergeant tous les doc-
uments d'un utilisateur nécessitera beaucoup plus d'espace.
Heureusement il est possible de dédié une partition à un répertoire de notre système GNU/Linux. Par exemple :
On peut donc créer des partitions pour chacun de ces répertoire. Voici le détail :
/boot
Ce répertoire qui contient l'ensemble des fichiers nécessaires au démarrage du système GNU/Linux doit être
comforme aux BIOS pour que ce dernier puisse correctement démarrer le système. En effet, le bootloader, ges-
tionnaire de démarrage, doit être situé dans les 1024 premiers cylindres car le BIOS ne sait pas lire au délà. Sa
taille peut être de 100 MO.
/home
Il contient les répertoires personnels des utilisateurs. En choississant de séparer ce dossier, en cas de réinsalltion,
les données pourront être disponible sans devoir sauvegarder et restaurer. La taille varie suivant le nombre
d'utilisateur du système.
/var
Le répertoire var contient les fichiers qui varient beaucoup sur le système, tels que les files d'envoie de mail,
d'impression, les fichiers de log, etc. Là aussi, il est possible d'allouer une partition dédié.
Tout ces répertoires peuvent donc être séparés de la racine (/) en différentes partitions lors de l'installation du
système. Lorsque le système démarre, il récupère alors les différentes partitions et les associent à leur répertoire,
c'est à dire leur point de montage (/var,...). Un point de montage est un répertoire, tels que /home ou /boot, qui
est dans une autre partition, disque, ou périphérique que le répertoire racine /.
Note
Que se passe-t-il entre le moment où l'on allume sa machine jusqu'au moment où l'on entre son lo-
gin et mot de passe :
• le BIOS effectue une série de tests sur le matériel (RAM, détection des disques, ...) nommé
POST : Power On Self Test. C'est pendant cette étape que l'utilisateur peut appuyer sur une
touche pour entrer dans le BIOS.
• le bootloader est chargé en mémoire, l'utilisateur peut alors choisir le système à démarrer
• le noyau linux est chargé en mémoire par le bootloader, il s'initialise, détecte les périphériques,
...
• le noyau passe alors la main au programme sysvinit, souvent dénommé init, père de tous les pro-
cessus. En effet c'est ce programme ayant comme PID 1, qui va lancer tous les services au
démarrage.
• init lance en dernier un terminal virtuel qui demande un login/password pour ouvrir un shell.
Le chargeur Lilo
Le programme Lilo (LInux LOader) est encore largement utilisé et s'installe entièrement dans le mbr et donc n'a
pas besoin d'avoir une distribution linux installée. Il sera cependant bien plus aisé de le configurer via linux. A
chaque modification du fichier la réinstallation dans la mbr de lilo sera indispensable.
Important
Une fois ce fichier modifié, il est impératif de relancer la commande Lilo pour que les change-
ments prennent effet.
Le chargeur Grub
Grub (GRand Unified Bootloader) est un bootloader bien plus récent et bien plus performant. Son utilisation est
aussi plus simple, puisqu’une fois installé il ne nécessite pas d’être réinstallé dans le MBR à chaque modifica-
tion de son fichier de configuration. Grub se configure généralement dans le fichier /boot/grub/menu.lst
• le stage_1 est un petit programme (<= 512octets) pouvant être placé dans le MBR (Master Boot Record) ou
sur une disquette. Ce stage fait appel au second qui nécessite plus d'espace mémoire.
• le stage_2, appelé chargeur d'amorçage, est généralement placé sur le disque dur. Il offre un menu permettant
la sélection des systèmes d'exploitations et permet de charger le noyau en RAM.
Le timeout précisera le temps d'attente avant de booter automatiquement sur la section par défaut (ici default est
mis à 0 c'est à dire qu'on bootera sur la partition linux par défaut).
On précisera le nom de la partition, le "root" c'est à dire la partition primaire sur laquelle le système va booter.
Vient ensuite la ligne kernel où sera précisé le kernel se trouvant dans /boot , le répertoire root (/ la racine qui
peut être situé sur une autre partition) et enfin les options de montages (ici en lecture seul)
Enfin l'initrd (initial ramdisk) se trouvant aussi dans /boot va s'occuper de faire quelques préparations avant le
montage de la partition root ,
Note
Sous certaines distributions, le fichier de configuration de Grub peut être /
boot/grub/grub.conf.
# Section 1
title Windows
root (hd0,2) # /dev/hda3
boot
Note
La syntaxe de Grub au niveau du nommage des disques et partitions diffère de celle utilisée
habituellement sous Linux. En effet, (hd0,0) correspond à /dev/hda1, c'est à dire à la
première partition du premier disque dur.
79
Table of Contents
13.1. Préambule ...................................................................................................................79
13.2. Librairies et dépendances ...............................................................................................79
13.3. L'approche RedHat .......................................................................................................80
13.3.1. Comment obtenir ces Paquetages ? ........................................................................80
13.3.2. Installation, désinstallation de paquetages ...............................................................80
13.3.3. Création d'un rpm à partir des RPMs sources ...........................................................81
13.4. L'approche Debian ........................................................................................................81
13.4.1. Installation, désinstallation, informations, mise à jour ................................................83
13.4.2. Création d'un fichier deb à partir des sources dsc ......................................................84
13.5. Installation depuis les sources .........................................................................................85
13.1. Préambule
Il existe de nombreuses distributions Linux différentes. Les principales différences sont :
Nous allons voir comment sont organisées les librairies sur un système GNU/Linux puis nous allons étudier les
différentes méthodes de gestion d'installation des programmes pour différentes distributions.
Sous certains systèmes d'exploitation tels que Microsoft Windows ou encore Apple Mac OS X, les applications
viennent avec les librairies qu'elles utilisent. Cela permet de faciliter considérablement l'installation d'une ap-
plication. L'inconvénient est qu'une même librairie peut être présente plusieurs fois sur le système, augmentant
l'espace disque nécessaire pour les applications.
À l'inverse, sur un système de type GNU/Linux, les applications pré-compilées (sous la forme de paquetages)
sont fournies sans les librairies associées. Cela signifie que pour installer un paquetage il faut que les librairies
nécessaires soient préalablement installées. On appelle « dépendance » tout paquetage qui doit être installé afin
qu'un autre paquetage puisse s'installer. C'est au gestionnaire de paquetage (RPM, DPKG, etc.) d'assurer cette
gestion des dépendances.
L'avantage de ce type de système est la mise en commun des librairies installées. En effet, ces librairies se
trouvent en général dans /usr/lib ou encore /usr/local/lib. Cela permet de minimiser la redondance
des librairies : si chaque programme installé utilise la version de la librairie mise en commun plutôt qu'une ver-
sion spécifique disponible pour lui seul, cette même librairie ne sera installée qu'une seule fois au lieu de
Installation de programmes 80
plusieurs et un gain de place s'en suivra. L'autre avantage est la sécurité : si une librairie contient une faille de
sécurité, la mise à jour de cette librairie permet de corriger toutes les applications qui en dépendent.
Il existe deux types de librairies. Elles peuvent être soit statiques, soit dynamiques. Une librairie dite « statique »
est liée à l'exécutable qui découle de la compilation du programme. Dans ce cas la, l'application est
complétement indépendante. L'avantage est qu'elle a tout ce qui lui faut pour fonctionner correctement. Une lib-
rairie dite « dynamique » ou encore « partagée » est une librairie qui ne va être chargée qu'à l'exécution du pro-
gramme. L'avantage de ce type de librairies est qu'elle peut être mise en commun pour plusieurs applications.
Mais ce genre de librairies comporte aussi les inconvénients vu plus haut tels que les dépendances : la librairie
doit être présente sur le système pour que les programmes qui en dépendent soient utilisables.
Les fichiers de librairies partagées se terminent par l'extension « .so » (Shared Object) suivi en général du
numéro de version de la librairie. Une commande permet de lister les librairies partagées dont dépend un
exécutable :
• Un portant l'extension "src.rpm" représentant les sources (fichiers sources, documentation, fichiers
d'installation et de configuration) utilisées généralement pour créer des ".rpm"
Ces deux types de paquetages sont installés via la commande rpm. Le type de paquetage RPM a été utilisé ini-
tialement sur les distributions RedHat et est désormais défini comme un standard dans la spécification LSB
(Linux Standard Base).
Généralement le téléchargement se fait en allant directement sur le site du paquetage après une recherche sur un
moteur de recherche. La difficulté de ce genre de méthode est la gestion des dependances. En effet, lorsque vous
installez un paquetage, il est très rare que ce dernier ne dépende d'aucun autre paquetage ou d'aucune librairie. Il
est donc nécessaire de télécharger l'ensemble des dépendances afin de pouvoir installer un logiciel.
L'arrivée de Fedora a changé l'esprit de la distribution Redhat en se munissant d'une commande appelée "yum",
basée sur le rpm et permettant de télécharger des applications avec l'ensemble de leurs dépendances sur des
miroirs dont le but principal est l'hébergement d'applications (exemple: ftp://freshrpms.net).
Option Description
-i fichier.rpm Installation d'un paquetage RPM
-ql fichier.rpm Liste tous les fichiers installés par le package
-e fichier.rpm Supprime un paquetage
-qi fichier.rpm Informations sur un paquet déjà installé
-qa Liste de tous les paquets déjà installés
-qf fichier Donne le rpm d'appartenance du fichier
-qpi Informations sur les paquetages non installés
-V fichier Vérifie le paquetage.
L'option -V vérifie un paquetage. Si le paquetage est bon il n'y aura aucune sortie sinon nous verrons apparaître
des lettres indiquant les différents problèmes rencontrés. Voici donc ci-dessous un listing de ces différents
caractères :
Cependant, il est intéressant d'utiliser les RPMs sources afin de compiler une application de manière à ce qu'elle
soit optimisée pour notre processeur. Bien sur, il existe des paquetages génériques c'est à dire qui correspondent
à toute une famille de processeurs. Exemple : samba-2.2.5-i386.rpm correspond à la famille x86.
Pour compiler un paquetage RPM source, il faut passer l'option --rebuild à la commande RPM comme ci-
dessous :
Après la compilation, le paquetage créé se retrouvera dans le répertoire /usr/src/redhat/RPMS/ dans le-
quel existent d'autres répertoires portant le nom d'architecture comme i386, i586, etc... Tous les paquetages
généralement créés de cette manière placent le fichier compilé dans le répertoire i386.
aire identifié par l'extension (.deb) et un format source identifié lui par l'extension (.dsc). Les commandes
généralement utilisées pour les installer sont celles présentées ci-dessous :
De plus vous pourrez trouver des informations complémentaires sur les paquets installés ou non dans le reper-
toire "/var/lib/dpkg"
dpkg-reconfigure <nom_paquet> permet de reconfigurer un paquet installé , cela a le même effet que de
réinstaller un paquet.
Il est important de noter que chaque paquet provenant du monde libre est testé au maximum de ses possibilités,
ceci permettant de lever tous les bugs possibles afin de les corriger et ainsi les faire migrer vers le niveau de
stabilité le plus sûr possible. Ces paquetages ainsi testés évoluent d'une version à une autre de Debian.
En effet, on distingue trois distributions de base chez Debian définie par le niveau de stabilité des logiciels :
Les paquetages Debian, quelque soit la version utilisée, sont généralement téléchargés via la commande apt-get.
La commande apt-get récupère les applications dans une arborescence bien définie appelée « pool » et présente
sur différents mirroirs Debian. Cette arborescence est répartie en 3 grandes familles de répertoires.
ou
Note
Si l'on ne connaît pas le nom exact du logiciel, il est possible d'avoir une description des différents
logiciels disponibles. En faisant apt-cache search 'mot_cle'. On obtient un listing de tous les
paquetages ayant soit dans leur description le mot clé recherché soit dans leurs noms. Ce mot clé
accepte les globbings.
ou
ou
Note
L'option --purge indique ici de supprimer à la fois le paquetage mais aussi l'ensemble des fichiers
de configurations installés.
L'ensemble des informations d'un paquetage installé est mis en évidence grâce a la commande dpkg. Voici
quelques options les plus souvent utilisées dans ce cas :
De même que sous Red Hat, il est possible d'afficher des informations sur les paquetages non installés, mais ce
via la commande apt. L'option de la commande apt à utiliser fait appel à un cache où est listé l'ensemble des
fichiers à jour pouvant être téléchargés sur Debian. La commande est :
Permet de visualiser les informations d'un paquetage installé ou pas sur la machine.
Si vous êtes un féru de programmation et que vous vous intéressez d'étudier le code source ou éventuellement de
faire des corrections sur du code bogué, avoir les sources d'une application serait intéressant. Pour cela apt
fournit des commandes permettant de télécharger les sources et des fichiers permettant la création d'un fichier
.deb . Pour télécharger un paquet source :
Cela va télécharger trois fichiers : un .orig.tar.gz, un .dsc et un .diff.gz. Dans le cas où les paquets sont faits
spécialement pour Debian, le dernier de ceux-ci n'est pas téléchargé et le premier n'a généralement pas orig dans
le nom.
Le fichier .dsc est utilisé par dpkg-source pour dépaqueter le paquet source dans le répertoire nomdupaquet-ver-
sion. Avec chaque paquet source téléchargé, il y a un répertoire du nom de l'application qui contient les fichiers
nécessaires pour la création d'un paquet .deb. Pour créer le .deb entrez dans le répertoire créé (spécialement pour
le paquet après le téléchargement) et tapez la commande suivante :
Cette étape aura pour but de créer un fichier Makefile à l'aide de l'utilitaire autoconf, qui permettra la com-
pilation du logiciel. Il est possible de passer des options à ce script, permettant par exemple de modifier le
chemin d'installation, grâce à --prefix=<repertoire> (défaut : /usr/local). Il existe par ailleurs des options
Installation de programmes 86
5. Compilation de l'application
6. Installation de l'application
[user@linux ~]$ su
[root@linux ~]# make install
Note
Cette dernière étape doit être exécutée en tant que root car l'installation nécessite la copie de
fichiers dans les répertoires systèmes.
87
Table of Contents
14.1. Le BIOS .....................................................................................................................87
14.1.1. Configuration de la date et de l'heure .....................................................................88
14.1.2. Disques et périphériques de boot ...........................................................................89
14.1.3. La limite des 1024 Cylindres ................................................................................89
14.2. Attribution des ressources ..............................................................................................90
14.3. Interfaces réseaux, USB et SCSI ......................................................................................91
14.3.1. Les interfaces réseaux .........................................................................................91
14.3.2. Les interfaces SCSI ............................................................................................94
14.3.3. Les interfaces USB .............................................................................................97
14.4. Configuration des modems et cartes réseaux ......................................................................98
14.4.1. Configuration des modems ...................................................................................98
14.4.2. Configuration des cartes sons ...............................................................................99
14.5. udev ...........................................................................................................................99
14.1. Le BIOS
Le BIOS est le firmware du PC, un composant logiciel dont le rôle est de préparer l'ordinateur et ses
périphériques afin de pouvoir démarrer un système d'exploitation :
• Initialisation du système
Le BIOS fournit également un système de configuration bas niveau permettant de configurer l’assignation des
ressources ainsi les paramètres de démarrage de l’ordinateur.
Lors du démarrage, l’ordinateur affiche un message expliquant la méthode d’accès à la configuration du BIOS.
Une fois l’utilitaire chargé, un menu texte permet d’effectuer les taches de configuration nécessaires, comme par
exemple la configuration :
• des disques
• de la mémoire
• de la fréquence d'horloge
• etc.
Note
Il est également possible de configurer cela depuis le système d’exploitation, ce qui permet par ex-
emple d’obtenir ses péramètres depuis un service réseau (voir NTP)
Figure 14.3.
Architecture et materiel 89
Les systèmes récents sont capables de détecter ses périphériques et de les configurer automatiquement.
Cependant, des BIOS plus anciens peuvent nécessiter une configuration manuelle, incluant la taille des support
ainsi que les paramètres d'accès aux lecteurs.
La plupart des PCs actuels possèdent 3 types de médias pouvant être utilisées pour le boot :
• Un lecteur de disquette
Après l'initialisation, le BIOS recherche un système d'exploitation (ou bien un loader tel que LILO) sur l'un ou
plus des médias cités précédement. Par défaut, le BIOS recherche tout d'abord sur les disquettes et le CD-ROM,
puis sur les disques durs. Ceci peut-être modifié dans le BIOS.
Avec Linux, cependant, l'utilisateur peut avoir un bootloader qui se place en partie dans le MBR et dans la parti-
tion contenant le /boot (ici, nous parlons du GRUB).
Architecture et materiel 90
Le BIOS (des machines les plus anciennes) n'est pas toujours capable d'accéder à des portions du disque situées
au delà du 1024ème cylindre. Si la partition contenant le /boot est située au délà, le boot échoue car GRUB ne
peut alors accéder à ses fichiers.
Note
Certaines anciennes versions de LILO doivent avoir l'image du noyau dans ces mêmes 1024 cyl-
indres pour les mêmes raisons.
Ses limitations ne sont pas réllement un problème, mais demandent cependant une certaine attention lors du par-
titionnement du disque dur.
• Les interruptions (IRQ) : Les interruptions sont les signaux électriques envoyés au micro processeur, lui de-
mandant d'arrosement son activité courante et de répondre à un évènement (une frappe clavier par exemple).
La plupart des systèmes récents partagent souvent les intérruptions, cependant certtains anciens systèmes
nécessitent une configuration manuelle afin d'éviter des conflits inter pérphériques.
• Les adresses d'entrées sorties (I/O) : Les adresses d'entrée sorties sont des emplacements dans la mémoire du
processeur (des emplacements mémoires) réservés pour l'entrée/sortie des informations d'une périphérique
comme par exemple une carte réseau. Le micro processur peut écrire vers le périphérique de la même manière
qu'il le fait pour la mémoire, ce qui simplifie la communication. Si plusieurs périphériques partagent le même
emplacement mémoire, cela occasionne un "crash" du système.
• Les canaux d'accès direct à la mémoire (DMA) : Les canaux DMA permettent aux périphériques d'accéder
directment à la mémoire, libérant le processeur de cette tâche. Sans DMA, les données doivent être lue depuis
un port d'entrée/sortie du périphérique et stockées en mémoire par le processeur. Un périphérique utilisant un
DMA a directement accès à la mémoire sans solliciter le processeur, ce qui augmente les performances du
système.
Toutes ses ressources ne sont pas illimitées, il est important d'éviter les conflits. Certains périphériques comme
les ports de communication séries et aprallèles ont des configurations standardisées :
Note
Le DMA n'est pas utilisé pour ces périphériques à l'exeception des lecteurs de disquettes. Lp1 util-
ise l'IRQ 5. Certaines cartes sons utilisent également cette interruption ce qui peut poser certains
problèmes dans le cas ou 2 ports parallèles sont requis.
La plupart des configurations actuelles n’incluent pas tous ses périphériques. Une configuration « standard »
comprend généralement :
• 2 ports séries ttyS0 et ttyS1 : ses 2 ports sont utilisés pour connecter les modems externes ou les terminaux et
occupent les interruptions 3 et 4. Pour les systèmes avec d’autres ports installés ttyS0 et ttyS2 partagent l’IRQ
4, et ttyS1 et ttyS3 l’IRQ 3. Cependant l’architecture du système n’autorise pas ces ports à se partager l’IRQ
en même temps. Les communications échouent si les 2 ports des 2 paires sont utilisées en même temps.
• L’époque des "Jumper” : Ces équipements étaient construits de telle manière que les paramètres étaient con-
figurables en modifiant la position de cavaliers directement sur la carte. Le principal inconvénient de cela est
le besoin d’un accès physique à l’intérieur de la machine. Ce type de cartes sont encore aujourd’hui parfois
utilisées dans les PCs.
• L’époque de la mémoire non volatile: Cette architecture abandonne l’utilisation de cavaliers au profit de
paramètres configurables et conservés dans un emplacement mémoire non volatile ; c’est à dire qui conserve
les données machine éteinte. Cette architecture élimine le besoin d’accès physique à la machine, mais de-
mande l’écriture de logiciels spécifique pour pouvoir modifier ces configurations, la plupart du temps écrits
pour MSDOS.
• L’époque moderne : La plupart des NIC (Network Interface Cards) utilisent le bus PCI pour se configurer
automatiquement. La configuration est faite pendant l’initialisation, avant le démarrage du système
d’exploitation. Cette méthode élimine les configurations manuelles et permet à l’utilisateur de ne plus se
soucier des problèmes de conflits.
Dans le cas d’une configuration manuelle, il convient d’accorder une grande attention à éviter les conflits entre
les différents IRQs, E/S et DMA.
Utilisation de /proc :
Lors de l’ajout d’un nouveau matériel avec un système Linux, il est utile de vérifier quelles ressources le
système actuel utilise. Le filesystem /proc, utilisé par le noyau pour stocker les informations au sujet du
matériel, vous permet de le faire.
Les fichiers de proc, interrupts, dma, et ioports, vous présentent comment les ressources systèmes sont actuelle-
ment utilisées. Voici un exemple de /proc/interrupts pris depuis une configuration de type double processeur
avec une carte SCSI Adaptec dual-AIC7895 SCSI :
# cat /proc/interrupts
CPU0 CPU1
0: 98663989 0 XT-PIC timer
1: 34698 34858 IO-APIC-edge keyboard
2: 0 0 XT-PIC cascade
5: 7141 7908 IO-APIC-edge MS Sound System
6: 6 7 IO-APIC-edge floppy
8: 18098274 18140354 IO-APIC-edge rtc
10: 3234867 3237313 IO-APIC-level aic7xxx, eth0
11: 36 35 IO-APIC-level aic7xxx
12: 233140 216205 IO-APIC-edge PS/2 Mouse
13: 1 0 XT-PIC fpu
15: 44118 43935 IO-APIC-edge ide1
NMI: 0
ERR: 0
Dans cet exemple, vous pouvez constater que l’interruption 5 est utilisée pour la carte son. Les 2 contrôleurs
SCSI utilisent les interruptions 10 et 11 et que la carte Ethernet partage l’IRQ 10. On peut également constater
que seule l’une des deux interfaces IDE par défaut est activé dans le BIOS, ce qui libère un IRQ pour un autre
périphérique.
# cat /proc/dma
0: MS Sound System
1: MS Sound System
2: floppy
4: cascade
# cat /proc/ioports
0000-001f : dma1
0020-003f : pic1
0040-005f : timer
0060-006f : keyboard
0070-007f : rtc
0080-008f : dma page reg
00a0-00bf : pic2
00c0-00df : dma2
00f0-00ff : fpu
0170-0177 : ide1
02f8-02ff : serial(auto)
0370-0371 : OPL3-SAx
0376-0376 : ide1
0388-0389 : mpu401
03c0-03df : vga+
03f0-03f5 : floppy
03f7-03f7 : floppy DIR
03f8-03ff : serial(auto)
0530-0533 : WSS config
Architecture et materiel 94
Le SCSI définit un bus sur lequel sont interconnectés plusieurs périphériques. Le média utilisé est un câble ou
une série de câbles reliant les équipements en série. L’un des éléments de la chaîne est le contrôleur et joue le
rôle d’interface avec les autres périphériques.
Tous les périphériques SCSI se voient assignés une adresse SCSI permanent ou "SCSI ID", définissant chacun
de manière unique sur le bus. Grâce à cela, le contrôleur peut accéder à tous les périphériques de manière
indépendante en utilisant ces adresses.
Les récentes évolutions ont permis d’obtenir de mettre au point des interfaces SCSI atteignant des débits de 160
MBps et permettent de conserver le SCSI comme compétitif avec les autres technologies. Cependant, avec
l’évolution des performances, les contraintes de câblage et de connecteurs se font de plus en plus sentir. Ces
contraintes deviennent un facteur de plus en plus important dans le déploiement à grande échelle de systèmes
basés sur le SCSI, notamment au niveau du coût, le SCSI étant aujourd’hui encore 3 fois plus cher qu’un
équivalent IDE.
Ces adresses sont configurées via des cavaliers ou des commutateurs. Généralement le contrôleur utilise l’ID
numéro 7. Les disques et autres unités doivent êtres définis avec une adresse unique.
Note
Le numéro de partition n’a rien a voir avec l’ID SCSI. Les lettres assignées se font de manière
croissante en fonction de L’ID SCSI et du LUN.
Table 14.3. Exemple : un bus SCSI-2 avec 2 disques, un contrôleur RAID avec 2 unités
logiques
Device Adresse SCSI LUN Périphérique Linux
Disque 0 0 - /dev/
Disque 1 1 - /dev/
Lecteur de bande 5 - /dev/
Périphérique RAID 0 6 0 /dev/
Périphérique RAID 1 6 1 /dev/
Controleur 7 - -
Si un disque présent sur le bus SCSI est destiné à être bootable, vous avez besoin de configurer le BIOS du
contrôleur SCSI avec l’adresse du disque.
La plupart des terminateurs externes ressemblent a un bouchon placé au bout du câble. Les terminateurs sont
particulièrement importants dans le cas où l’on mélange des périphériques 8 et 16 bits sur un bus, laissant la
moitié du bus SCSI non terminé.
Les terminaisons externes sont faciles à identifier car visibles. Cependant de nombreux constructeurs incluent
des terminaisons activables dans leurs équipements, ceci pouvant éviter l’utilisation d’un terminateur
supplémentaire. Lors de la configuration, il convient de bien faire attention aux terminaisons activées ou non
afin que ce soit bien le dernier équipement sur la chaîne qui joue ce rôle.
Le BIOS d’un contrôleur SCSI fonctionne de manière analogue à celui de PC, en dehors du fait que le menu est
spécifique aux paramètres SCSI :
• Adresse du contrôleur SCSI : L’adresse par défaut est 7 mais peut être changé
• Vitesse du bus SCSI : La plupart des interfaces SCSI capables de haut débit de transfert peut être utilisé à
vitesse moindre pour connecter des équipement de débits plus faible par exemple.
La support de l'USB au niveau du noyau se gère dans la partie Device Drivers>USB support. Pour activer l'USB
en fonction de votre matériel vous pouvez avoir recourt à 3 modules noyaux.
Afin de connaître quel module activer, vous pouvr avoir recourt à la commande suivante :
Le retour de la commande lscpi vue précédemment est ainsi découpé de manière à vous renvoyer que le nom
des modules à activer. Il ne vous reste plus qu'à consulter le chapitre sur le noyau pour activer et recompiler
votre noyau proprement.
En outre, afin de connaître l'ensemble des périphériques USB connectés au système, vous pouvez avoir recourt à
la commande lsusb.
Les modems sont des périphériques séries, ou les données entrent et sortent à raison d’un seul bit à la fois. À
l’origine, les modems étaient externes connectés au PC via les ports séries (RS232) COM1 ou COM2. Ceci
fonctionne toujours, dans la mesure ou le début offert par les connections téléphoniques demeurent en dessous
du débit maximal de ce type de port.
Les modems internes (PCI ou ISA) furent conçus dans un objectif de réduction de coût et offrent les mêmes
Architecture et materiel 99
fonctionnalités.
La plupart des modems internes sont considérés par le PCS comme un port de communication série standard, et
apparaîtront en tant que /dev/ttys2, alors que les 2 ports d’origine apparaîtront en tant que /dev/ttys0 et /
dev/ttys1.
Note
La commande setserial est utilie pour analyser ou définir des paramètres sur les ports série.
Cela signifie que d’un point de vue programmation, les modems internes sont in différentiables des modems ex-
ternes.
À l’exception de certains modems spécialement conçus pour fonctionner avec Microsoft Windows, les modems
externes et internes fonctionnent tous sous Linux. Ces « Winmodems » se basent sur le processeur et des logi-
ciels spécifiques afin d’utiliser le moins de composant matériel possible. Pour pouvoir les utiliser sous Linux, il
est nécessaire d’utiliser un driver spécifique pour Linux.
Comme c’est le cas pour toute carte configurée manuellement, un grand soin doit être apporté lors de la config-
uration matérielle du modem afin d’éviter tout possible conflit. Si le modem partage une interruption avec un
port de communication déjà présent, ce dernier ne pourra pas être utilisé en même temps.
14.5. udev
Pour les utilisateurs d'un noyau de la branche 2.6, udev est le nouveau gestionnaire de périphériques. Il remplace
devfs ou encore hotplug.
Architecture et materiel 100
Son but est de gérer le contenu du dossier /dev et d'accomplir les actions nécessaires à la bonne utilisation d'un
périphérique.
Un des grandes nouveauté avec udev est le fait que le gestionnaire de périphériques ne soit plus kernel land.
Udev est un daemon qui attend et écoute certains messages que le kernel renvoie lorsqu'un périphérique est
connecté au système. Il est ensuite possible de définir des règles qui permettent de définir quoi faire lorsqu'un
certain périphérique est branché.
La configuration principale d'udev se trouve dans le fichier /etc/udev/udev.conf alors que les règles sont
situées dans le répertoire /etc/udev/rules.d/.
101
Table of Contents
15.1. Introduction ............................................................................................................... 101
15.1.1. L'architecture de X-window et ses limites ............................................................. 101
15.1.2. Le projet XFree86 ............................................................................................ 102
15.1.3. Le projet Xorg ................................................................................................. 102
15.2. Configuration ............................................................................................................ 102
15.2.1. Génération d'un fichier de configuration ............................................................... 102
15.2.2. Edition du fichier de configuration ...................................................................... 102
15.3. Lancement du serveur X .............................................................................................. 106
15.4. x-terminals ................................................................................................................ 107
15.5. X-Distant .................................................................................................................. 107
15.5.1. X-Distant en local ............................................................................................ 107
15.5.2. Configuration d'XFree86 et X.org ....................................................................... 108
15.5.3. Afficher des applications à distance ..................................................................... 109
15.5.4. Afficher un environnement complet ..................................................................... 109
15.1. Introduction
Les interfaces graphiques sous GNU/Linux reposent en grande partie sur le standard X-Window. Ce standard est
né dans les laboratoires du MIT (Massachusetts Institute of Technology) dans les années 1984 pour fournir un
environnement graphique adaptable aux nombreuses et diverses plate-formes de l'université.
A l'époque, un seul serveur puissant servait d'unité de calcul pour tous les postes utilisateurs qui n'étaient que
des terminaux (écran, clavier, souris). Ce système graphique était donc capable de lancer des applications graph-
iques clientes sur un serveur distant. X-Window est bel et bien composé d'une partie serveur et d'une partie cli-
ente. C'est à partir de ce projet que sont nés les serveurs graphiques que nous utilisons aujourd'hui tel que
XFree86 et Xorg.
En 1988, le X Consortium est créé au MIT qui deviendra en 1999 X.org, une association à but non lucratif qui
se charge de superviser les développements futurs d'X-Window. La liste des membres de cette association est
composée des plus grands constructeurs : HP, Sun Microsystems, SGI, IBM.
Le concept X-Window est assez ancien et ne répond plus forcément aux exigences des utilisateurs d'aujourd'hui.
Par exemple, l'évolution remarquable des cartes graphiques a nécessité de gros changements dans l'architecture
d'XFree. La configuration de celui-ci semble assez laborieuse au premier abord pour cette raison.
Un autre problème vient du fait que la Xlib seule ne permet de dessiner que quelques formes primitives, et donc
nécessairement des surcouches (toolkits comme Qt ou GTK) ont dû être développées pour que les program-
meurs puissent créer des widgets (fenêtre, boutons, boîte texte, ...) aisément.
Serveur X 102
La core-team du projet Xfree a finalement voté son autodissolution le 30 décembre 2003, estimant qu'elle ne
représentait plus suffisamment la communauté de développement. La version 4.4 du projet est sortie le 29
février 2004 avec une nouvelle licence en version 1.1 qui a été l'objet de nombreuses controverses du fait de sa
non compatibilité avec la licence GPL.
X.org est maintenant un projet à part entière qui évolue très rapidement par rapport à XFree. Il a été intégré par
défaut à la place d'XFree dans la majorité des distributions actuelles.
15.2. Configuration
15.2.1. Génération d'un fichier de configuration
Les outils de génération de fichier de configuration posent des questions pour paramétrer votre serveur graph-
ique. Le fichier ainsi généré possède les options les plus courantes que nous allons détailler par la suite.
Ce fichier contient différentes sections qui vont renseigner le serveur X sur les différents matériels et fichiers
qui devront être utilisés. Chaque périphérique est défini dans une section, chaque section est déclarée avec le
mot clé "Section" suivit du nom de la section entre guillemets. Par exemple, la section qui définit la souris ou le
clavier sera Section "InputDevice" car ce sont des périphériques d'entrée (souris, clavier...).
Il est possible d'avoir plusieurs sections du même type, par exemple si vous avez un portable et que vous voulez
utiliser votre souris USB et votre touchpad, il vous faudra déclarer les deux souris. XFree ou X.org s'occupera
de charger toutes les souris disponibles. La directive "Identifier" suivie d'un nom que vous choisirez permettra
de différencier les matériels de deux sections déclarant le màªme matériel.
Une autre section "ServerLayout" rassemble ensuite les différents "Identifier" à utiliser. Il est donc possible de
Serveur X 103
déclarer des sections que nous n'utiliserons pas, par exemple vous déclarez deux écrans mais vous n'en utilisez
qu'un seul. Cependant il est nécessaire de déclarer au moins une section de chaque type.
La section module permet de charger dans le serveur X différents modules qui fournissent des options
supplémentaires, comme par exemple le support d'OpenGL.
Section "Module"
Load "GLcore" # Extension OpenGL
Load "dbe" # Extension Double buffer
Load "extmod" # Contient de nombreuses extensions utiles
Load "dri" # Extension DRI (Direct Rendering Infrastructure)
# qui permet l'accélération matérielle de
# l'interface graphique
Load "glx" # Extension supplémentaire pour OpenGL
# qui va de paire avec le DRI
# Ceci permet de charger les modules
# pour les polices Type1 et FreeType
Load "type1"
Load "freetype"
EndSection
La section Files indique à XFree les différents fichiers qui vont être utilisés tel que les polices et le chemin vers
les fichiers modules que nous chargeons dans la section Module.
Section "Files"
# Chemin vers la base de données RGB
# (plus valide et à commenter sous Xorg 7 modulaire).
RgbPath "/usr/X11R6/lib/X11/rgb"
# Chemins vers les polices
FontPath "/usr/X11R6/lib/X11/fonts/local/"
FontPath "/usr/X11R6/lib/X11/fonts/misc/"
Serveur X 104
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/Type1/"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/"
FontPath "/usr/X11R6/lib/X11/fonts/truetype"
# Chemin vers les différents modules
# (ceux de la Section Module, plus valide et à commenter sous Xorg 7 modulaire)
ModulePath "/usr/X11R6/lib/modules"
EndSection
La section ServerFlags contient les options globales du serveur X, les options sont très nombreuses et variées
selon l'utilisation que vous souhaitez en faire. Nous vous invitons à regarder les différentes options disponibles
sur le site d'XFree1.
Section "InputDevice"
Identifier "Clavier1"
Driver "Keyboard"
Option "AutoRepeat" "500 30"
Option "XkbRules" "XFree86"
Option "XkbModel" "pc102"
Option "XkbLayout" "fr"
EndSection
Voici deux déclarations de souris. La première représente une souris connectée au port PS/2 ou même un touch-
pad puisque la majorité d'entre eux sont reconnus comme connectés au port PS/2 :
Section "InputDevice"
Identifier "InternalMouse"
Driver "mouse"
Option "Protocol" "PS/2"
Option "Device" "/dev/psaux"
EndSection
Section "InputDevice"
Identifier "UsbMouse"
Driver "mouse"
Option "Protocol" "IMPS/2"
Option "Device" "/dev/usbmouse"
EndSection
1
ttp://www.XFree.org/current/XF86Config.5.html#sect4
Serveur X 105
Voici un exemple de déclaration de moniteur. La plupart des options utilisées sont fournies dans la documenta-
tion constructeur de votre écran.
Section "Monitor"
Identifier "Monitor0"
# HorizSync is in kHz unless units are specified
HorizSync 31.5 - 57.0
# VertRefresh is in Hz unless units are specified
VertRefresh 50-100
EndSection
La section mode détermine les options des différents modes vidéo, ces options sont fournies dans la documenta-
tion constructeur de votre écran.
Section "Modes"
Identifier "Modes1"
Modeline "1024x768" 64.11 1024 1064 1248 1360 768 783 790 829
Modeline "1024x768" 74.79 1024 1040 1208 1360 768 783 791 829
EndSection
La section Device permet de configurer la carte graphique. L'exemple qui suit permet de configurer une carte
ATI Radeon :
Section "Device"
Identifier "ATI Radeon 0"
Driver "radeon"
Option "AGPMode" "4"
BusID "PCI:1:0:0"
EndSection
Pour utiliser un des autres pilotes, le principe est identique, veuillez consulter la documentation : ht-
tp://www.XFree.org/current/manindex4.html
La section Screen défini l'écran virtuel en rassemblant une carte graphique, un moniteur et une déclaration de
modes vidéo à utiliser :
Section "Screen"
Identifier "Screen1"
Device "ATI Radeon 0"
Monitor "Monitor0"
DefaultDepth 16
Subsection "Display"
Serveur X 106
Depth 16
Modes "1024x768" "800x600" "640x480"
EndSubsection
EndSection
La dernière section ServerLayout permet de rassembler un ou plusieurs écrans virtuels avec des souris et clavi-
ers :
Section "ServerLayout"
Identifier "MonLayout"
Screen 0 "Screen 0" 0 0
# Screen 1 "Screen 1" RightOf "Screen 0"
InputDevice "Keyboard1" "CoreKeyboard"
InputDevice "InternalMouse" "CorePointer"
InputDevice "UsbMouse" "SendCoreEvents"
#Cette option permet d'activer le DualScreen
# Option "Xinerama" "on"
EndSection
XDM, GDM ou KDM permettent de changer votre gestionnaire de fenêtre. Par exemple vous pouvez passer de
Gnome à KDE sans avoir a éditer un quelconque fichier. Les fichiers de configuration de ces desktop manager
se trouvent respectivements dans /etc/X11/xdm/xdm.conf, /etc/X11/gdm/gdm.conf /etc/X11/kdm/kdm.conf .
Vous pourrez aussi changer l'affichage de votre desktop manager via le fichier /
etc/X11/<Desktop-manager>/RunChooser (couleurs, background..etc.).
Ces desktop manager seront chargé par défaut dans le runlevel 5 configuré dans /etc/inittab. Ce runlevel signi-
fie que l'on lance le système avec le desktop manager. Les applications lancées en fonction du runlevel sont bien
évidemment modifiables dans /etc/init.d/rc5.d/.
Pour définir un gestionnaire qui se lancera, après le lancement du serveur X, via la commande startx, il suffit de
renseigner le fichier ~/.xinitrc qui va être exécuté avant le lancement du serveur X dont voici un exemple
(Les commentaires sont précédés du caractère #):
Si startx ne trouve pas ce fichier dans votre répertoire personnel (home), il le lira dans /
etc/X11/xinit/xinitrc. Chaque ligne de ces fichiers contient une commande à exécuter, ainsi si vous
voulez lancer plusieurs programmes, vous devez finir les premières lignes par un "&" pour la lancer en arrière
plan.
15.4. x-terminals
Il existe différents terminaux sous X c'est ce que l'on appelle les émulateurs de terminal communément appelés
terminal window.
C'est à travers ces terminaux que l'on pourra accéder aux fonctions du shell et toutes ses applications. Il en ex-
iste de nombreux le plus populaire étant xterm. Il en existe d'autres tels que:
• rxvt
• aterm
• ...
Pour changer d'émulateur de terminal (à ne pas confondre avec le type de shell) il suffit de lancer le binaire du
terminal correspondant pour ouvrir une nouvelle fenêtre correspondant au terminal choisi.
15.5. X-Distant
15.5.1. X-Distant en local
Pour commencer nous allons tester le lancement de X sur un deuxième display de notre machine (Ctrl+Alt+F9).
Lorsque vous lancez startx, votre window manager se lance par défaut sur le display 0:0 soit (Ctrl+Alt+F7 )
[user@linux ~]$ X :2
Cette fois nous allons lancer X et un terminal Pour lancer un terminal en même temps que X il sufit de modifier
le lancement de startx Il nous faut modifier ~/.xinitrc et d'y placer exec xterm
[user@linux ~]$ cd
[user@linux ~]$ vi .xinitrc
Serveur X 108
Grâce au terminal lancé en même temps que X vous pouvez désormais exécuter des applications sur ce display.
Vous remarquerez également l'absence de bordures et l'impossibilité de déplacer, de fermer les fenêtres.
Editons ce script :
userclientrc=$HOME/.xinitrc
userserverrc=$HOME/.xserverrc
sysclientrc=/etc/X11/xinit/xinitrc
sysserverrc=/etc/X11/xinit/xserverrc
defaultclientargs=""
defaultserverargs="-nolisten tcp -br"
clientargs=""
serverargs=""
userclientrc=$HOME/.xinitrc
userserverrc=$HOME/.xserverrc
sysclientrc=/etc/X11/xinit/xinitrc
sysserverrc=/etc/X11/xinit/xserverrc
defaultclientargs=""
defaultserverargs=""
clientargs=""
serverargs=""
Nous allons maintenant lancer un affichage graphique qui acceptera les requêtes TCP/IP. Mais tout d'abord,
nous allons éditer notre fichier ~/.xinitrc pour qu'il contienne une ligne qui permettra de lancer un terminal
:
exec xterm
Il nous suffit maintenant de lancer startx sur un autre DISPLAY. Lorsqu'on lance startx sans arguments, le
DISPLAY localhost:0 est utilisé. Nous allons utiliser le DISPLAY :1 pour pouvoir utiliser notre affichage
graphique local en plus de l'affichage distant.
Exemple (A taper dans notre terminal graphique xterm): La machine 172.16.34.1 peut maintenant nous joindre !
DISPLAY=mon_ip:1: Nous indiquons notre machine et notre DISPLAY avant notre commande. Mon ip est
172.16.34.1. Je souhaite lancer l'utilitaire xclock
• Gnome
DISPLAY=172.16.34.1:1 /usr/bin/gnome-session
• KDE
DISPLAY=172.16.34.1:1 /usr/bin/startkde