Vous êtes sur la page 1sur 113

LPIC 101

Essentiel

Linux Lab., SUPINFO


Revision dated from the 01/03/2009
Copyright © 2008 SUPINFO
All rights reserved.
ble of Contents
1. Introduction .......................................................................................................................................................... 1
1.1. Introduction au système UNIX/Linux .............................................................................................................. 1
1.2. LPI Introduction .......................................................................................................................................... 2
1.2.1. LPI Certifications ............................................................................................................................. 2
2. Terminaux et commandes de base ............................................................................................................................. 4
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
3. Editeurs et flux de texte .........................................................................................................................................15
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
4. Expressions régulieres ...........................................................................................................................................29
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
5. Gestion des processus ............................................................................................................................................38
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
6. FHS ...................................................................................................................................................................43
6.1. Introduction ..............................................................................................................................................43
6.2. Arborescence de "/" ....................................................................................................................................43
6.3. Arborescence de /usr ...................................................................................................................................44
6.4. Arborescence de /var ...................................................................................................................................44
7. Recherche ...........................................................................................................................................................45
LPIC 101

7.1. find .........................................................................................................................................................45


7.2. locate - slocate ...........................................................................................................................................46
7.3. which / whereis ..........................................................................................................................................46
8. Gestion des utilisateurs et des groupes ......................................................................................................................48
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
9. Gestion des permissions .........................................................................................................................................56
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
10. Gestion des disques .............................................................................................................................................63
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
11. Quotas ..............................................................................................................................................................71
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
12. Installation .........................................................................................................................................................74
LPIC 101

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
13. Installation de programmes ...................................................................................................................................79
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
14. Architecture et materiel ........................................................................................................................................87
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
15. Serveur X ........................................................................................................................................................ 101
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
1

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

1.1. Introduction au système UNIX/Linux


Unix est né en 1969 de la volonté de Ken Thompson et Dennis Ritchie, issus de Bell Labs, de faire un système
d'exploitation à la fois multitâches et Multi-Utilisateurs.

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.

Figure 1.1. Ken Thompson et Dennis


Introduction 2

1.2. LPI Introduction


Linux est de plus en plus présent sur le marché professionnel. Que ce soit pour réaliser un serveur applicatif ou
un système embarqué, Linux répond à de nombreux besoins et il est maintenant primordial pour certaines organ-
isations de maîtriser un tel système.

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.

Figure 1.2. Logo de LPI

1.2.1. LPI Certifications


Introduction 3

Administrateur système débutant

• LPIC1 examen 101

• LPIC1 examen 102

Administrateur système avancé

• LPIC1 examen 201

• LPIC1 examen 202

Administrateur système expert

• LPI 301 français (examen en préparation)

• LPI 302 français (examen en préparation)


4

Chapter 2. Terminaux et commandes de


base

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

2.1. Terminaux et interpréteurs de commandes


2.1.1. Le terminal
Les systèmes Unix/Linux furent conçus dès l'origine pour fonctionner en mode texte, sans interface graphique.

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.

On distingue principalement deux types de comptes utilisables sur le système :

• Le compte utilisateur classique


Terminaux et commandes de base 5

• Le compte root (Administrateur)

Un symbole de l'invite de commande vous permet de déterminer le type de compte que vous utilisez.

• Accès simple utilisateur :

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

• Sh : shell original de Steve Bourne, pas d'édition de la ligne de commande.

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

2.1.3. Obtenir de l'aide


2.1.3.1. Les pages de manuel ou man pages
Sur un système Unix/Linux, la plupart des logiciels sont installés avec un manuel accessible par la commande
man. Ce manuel est d'une aide précieuse car il contient à la fois la syntaxe pour utiliser une commande mais
aussi l'explication de ses différentes options et même parfois des exemples pratiques.

La syntaxe d'utilisation de man est la suivante :


Terminaux et commandes de base 6

[user@linux]$ man <fonction_ou_commande>

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:

Pour choisir spécifiquement une section :

[user@linux]$ man <numero> <fonction_ou_commande>

0. Fichiers d'entêtes

1. Commandes utilisateur, programmes exécutables

2. Appels système

3. Fonctions de bibliothèque

4. Fichiers spéciaux

5. Formats de fichier et conventions

6. Jeux

7. Divers

8. Commandes d'administration système (commandes uniquement disponibles pour l'utilisateur root)

9. Routines du noyau Linux

La commande man peut également être utilisée pour rechercher un terme dans l'ensemble des pages de manuel
grâce à l'option –K :

[user@linux ~]$ man -K "disk space"

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 :

[user@linux ~]$ man -k cd

2.1.3.2. Aide simplifiée


Terminaux et commandes de base 7

Il est également possible d'obtenir un résumé du fonctionnement des commandes via l'option --help :

[user@linux ~]$ df --help


Usage: df [OPTION]... [FILE]...
Show information about the filesystem on which each FILE resides,
-B, --block-size=SIZE use SIZE-byte blocks
Output truncated…

Celle-ci permet donc de voir rapidement le fonctionnement de la commande ou encore de vérifier l'existence
d'une option.

2.1.4. Configuration de Bash


2.1.4.1. Fichiers de configuration
Afin de spécifier des conditions d'exécution de BASH, il est possible comme pour d'autres shells, d'utiliser des
fichiers de configuration spécifiant par exemple les variables à importer à l'ouverture d'une session, la syntaxe
du prompt à afficher ou encore des commandes à exécuter automatiquement.

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 :

• /etc/profile : fichier de personnalisation de session commun à tous les


utilisateurs. Lu uniquement si le shell courant est un shell de connex-
ion.

• /etc/bash/bashrc : fichier de personnalisation de son environnement bash


commun à tous les utilisateurs. Rechargé pour chaque shell intéractif
lancé.

• ~/.bashrc : fichier de personnalisation de son environnement bash person-


nel de l'utilisateur. Rechargé pour chaque shell intéractif lancé.

• ~/.bash_profile : fichier de personnalisation de session personnel de


l'utilisateur. Lu uniquement si le shell courant est un shell de connex-
ion.

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

L'utilisation d'une variable se fait grâce à l'expression $variable ou ${variable}.

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.

Example 2.1. Exemple

[mandriva@linux ~]$ jour=10; mois=11; an=1997; heures=19; minutes=30


[mandriva@linux ~]$ echo "Nous sommes le $jour/$mois/$an"
Nous sommes le 10/11/1997
[mandriva@linux ~]$ echo "Il est ${heures}h ${minutes}mn"
Il est 19h 30mn

Définir une variable d'environnement se fait par la commande export variable=valeur.

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.

2.2. Commandes de base


2.2.1. Gérer les éléments du système de fichiers
2.2.1.1. Opérations sur les fichiers et répertoires
2.2.1.1.1. La commande cd
La commande cd permet de se déplacer d'un répertoire à un autre.

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

Voici ses principales options :

Table 2.1. Options de la commande ls


Terminaux et commandes de base 9

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 :

cp [<options>] <source> <destination>

Voici ses principales options :

Table 2.2. Options de la commande cp


Option Description
-f Force l'écriture sur les fichiers existants.
-i Mode interactif : demande avant d'écrire sur un fichi-
er existant.
-p Préserve les informations : droits, propriétaires, date
d'accès, etc ...
-r / -R Copie récursivement les dossiers et les fichiers.
-v Affichage des fichiers avant leur copie.

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.

mv [<options>] <source> <destination>

Voici ses principales options :

Table 2.3. Options de la commande mv


Option Description
-f Force l'écriture sur les fichiers existants.
-i Mode interactif : demande avant d'écrire sur un fichi-
er existant.

2.2.1.1.5. La commande mkdir


La commande mkdir crée un ou plusieurs répertoires. Sa syntaxe est la suivante :
Terminaux et commandes de base 10

mkdir [<options>] <repertoire>

Table 2.4. Options de la commande mkdir


Option Description
-m <droits> Permet de définir les droits.
-p Crait les répertoires parents s'ils n'existent pas.

2.2.1.1.6. La commande rm
La commande rm permet d'effacer un fichier ou un répertoire.

rm [<options>] <fichier|repertoire>

Voici ses principales options :

Table 2.5. Options de la commande rm


Option Description
-d Efface les répertoires non vides.
-f Efface sans demander la confirmation.
-i Mode interactif : demande avant d'effacer un fichier.
-r / -R Mode récursif : supprime récursivement le contenu
des répertoires.

2.2.1.1.7. La commande rmdir


La commande rmdir permet aussi d'effacer un répertoire à condition que celui-ci soit vide. Sa syntaxe est la
suivante :

rmdir [<options>] <repertoire>

Voici sa principale option :

Table 2.6. Option de la commande rmdir


Option Description
-p Efface les répertoires parents si ceux-ci deviennent
vides.

2.2.1.1.8. La commande cat


La commande cat permet d'afficher le contenu d'un fichier:
Terminaux et commandes de base 11

cat [<options>] <fichier>

Voici sa principale option :

Table 2.7. Option de la commande cat


Option Description
-n affiche le nombre des lignes

2.2.1.1.9. La commande tac


La commande tac est l'inverse de cat c'est à dire qu'elle permet d'afficher le contenu d'un fichier mais à l'envers:

tac [<options>] <fichier>

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.

ln [<options>] <source> <destination>

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 :

Table 2.8. Option de la commande ln


Option Description
-s Permet de créer un lien symbolique.

2.2.1.1.11. La commande touch


La commande touch permet de créer un fichier vide ou de mettre à jour la date de modification du fichier passé
en argument si ce dernier existe. Sa syntaxe est la suivante :

touch <fichier|repertoire>

Voici ses principales options :

Table 2.9. Options de la commande touch


Option Description
-a Modifie la date d'accès au fichier / répertoire.
-m Modifie la date de modification au fichier / répertoire.
Terminaux et commandes de base 12

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.

Voici la liste des différents caractères spéciaux disponibles :

• * : correspond à aucun ou plusieurs caractères.

• ? : correspond à un et un seul caractère.

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

Voici la liste des fichiers utilisés pour l'exemple :

[user@linux /tmp]$ ls
index.htm sommaire.htm t0st.c table.htm test.c

On affiche tous les fichiers finissant par ".htm"

[user@linux /tmp]$ ls *.htm


index.htm sommaire.htm table.htm

On affiche tous les fichiers commencant par "t" et ne finissant pas par "m".

[user@linux /tmp]$ ls t*[^m]


t0st.c test.c

Exemple avec "?" qui représente n'importe quel caractère non vide :

[user@linux /tmp]$ ls t?st.c


t0st.c test.c
Terminaux et commandes de base 13

On affiche tous les fichiers comportant "st" dans le nom :

[user@linux /tmp]$ ls *st*


t0st.c test.c

Note
L'utilisation de ls * donne un affichage récursif sur un niveau.

2.2.2. Maîtriser l'environnement de son shell


2.2.2.1. Historique de commandes
Le shell conserve les commandes exécutées dans son historique pour permettre à l’utilisateur de pouvoir répéter
rapidement une opération déjà effectuée. L’historique complet est accessible grâce à la commande history.

Pour chaque utilisateur, l'historique est stocké dans le fichier .bash_history situé dans son répertoire per-
sonnel.

Il existe certaines commandes qui permettent d'éditer la ligne de commande :

Table 2.10. Edition de la ligne de commande


Commande Description
!! Exécute la dernière commande saisie.
!n Exécute la Nème commande de l'historique. La com-
mande history permet de trouver les numéros.
! <chaine> Exécute la dernière commande de l'historique qui
commence par <chaine>.
!? <chaine> Exécute la dernière commande de l'historique qui
contient <chaine>.
^ <chaine1>^<chaine2> Répète la dernière commande en remplaçant
<chaine1> par <chaine2>.

Des racourcis pour faciliter l'édition de commande sont aussi disponibles :

Table 2.11. Raccourcis


Raccourci Description
Ctrl+p Ligne précédente (aussi accessible grâce à la flèche
du haut).
Ctrl+n Ligne suivante (aussi accessible grâce à la flèche du
bas).
Ctrl+b Caractère précédent (aussi accessible grâce à la flèche
de gauche).
Terminaux et commandes de base 14

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.

2.2.2.2. Conjonctions logiques


Lors de l'exécution d'une commande, des conjonctions logiques peuvent être utilisées pour combiner plusieurs
expressions. Il est existe deux opérateurs OU symbolisé par || ainsi que ET représenté par &&.

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.

Table 2.12. Conjonctions logiques


Commande Description
a && b Exécute "b" seulement et seulement si la commande
"a" s'est éxécutée correctement.
a || b Exécute "b" seulement et seulement si la commande
"a" a échouée.
a;b Exécute "b" peut importe si la commande "a" s'est
éxécutée correctement.

par exemple:

cp monfichier1 monfichier2 && rm monfichier1

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 :

mkdir monfichier1 & cat monfichier2

Lance en arrière plan la création de monfichier1 et parallèlement à ça, en premier plan affiche le contenu de
monfichier2.
15

Chapter 3. Editeurs et flux de texte

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

3.1. Pipes et redirections


3.1.1. Les flux standards
Sur les systèmes Unix/Linux, les flux standards sont au nombre de trois :

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

Example 3.1. Exemple d'utilisation des redirections

[user@linux ~]$ cd /tmp


Editeurs et flux de texte 16

[user@linux ~]$ ls -l /bin


total 4872
-rwxr-xr-x 1 root root 3180 Jan 22 2001 arch
-rwxr-xr-x 1 root bin 27380 May 18 2000 bzip2
-rwxr-xr-x 1 root bin 6708 May 18 2000 bzip2recover
[user@linux ~]$ ls -l /bin > un_fichier
[user@linux ~]$ cat un_fichier
total 4872
-rwxr-xr-x 1 root root 3180 Jan 22 2001 arch
-rwxr-xr-x 1 root bin 27380 May 18 2000 bzip2
-rwxr-xr-x 1 root bin 6708 May 18 2000 bzip2recover

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

[user@linux ~]$ $ ls linux-lfs/


linux-lfs-flat.vmdk linux-lfs.vmx nvram
linux-lfs.vmdk linux-lfs.vmx.WRITELOCK vmware.log
[user@linux ~]$ ls evolution/
addressbook-sources.xml config mail
shortcuts.xml
cache gtkrc-mail-fonts meta
vfolders.xml
camel-cert.db local searches.xml views
[user@linux ~]$ ls linux-lfs/ >> fichier
[user@linux ~]$ ls evolution/ >> fichier
[user@linux ~]$ cat fichier
linux-lfs-flat.vmdk
linux-lfs.vmdk
shortcuts.xml
vfolders.xml
...

Il est possible de rediriger tous les flux standards sous Unix/Linux. Pour cela, il suffit de spécifier quel flux doit
être redirigé :

Table 3.1. Redirections des flux standards


Commande Description
commande > fichier Rediriger STDOUT dans fichier.
commande 1> fichier Rediriger STDOUT dans fichier.
commande 2> fichier Redirige STDERR dans fichier.
commande > fichier 2>&1 Redirige STDERR et STDOUT dans fichier.
commande > fichier1 2> fichier2 Redirige STDOUT dans fichier1 et STDERR
dans fichier2.
commande < fichier Reçoit STDIN de fichier.
commande >> fichier Redirige STDOUT à la suite de fichier.
Editeurs et flux de texte 17

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.

3.1.3. Les pipes


Les pipes ("|") représentes des voies de communication d’un processus vers un autre.

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 :

Example 3.2. Exemple d'utilisation des pipes

[user@linux ~]$ ls -la /bin > un_fichier


[user@linux ~]$ grep "bzip" un_fichier
lrwxrwxrwx 1 root root 5 Feb 12 2001 bunzip2 -> bzip2
-rwxr-xr-x 1 root bin 27380 May 18 2000 bzip2
-rwxr-xr-x 1 root bin 6708 May 18 2000 bzip2recover
[user@linux ~]$ ls -la /bin | grep "bzip"
lrwxrwxrwx 1 root root 5 Feb 12 2001 bunzip2 -> bzip2
-rwxr-xr-x 1 root bin 27380 May 18 2000 bzip2
-rwxr-xr-x 1 root bin 6708 May 18 2000 bzip2recover

3.1.4. La commande Tee


La commande tee permet de copier l'entrée standard sur la sortie standard ainsi que dans tous les fichiers passés
en argument.

Ceci permet de rediriger une commande dans un fichier tout en pouvant observer la sortie de la commande à
l’écran.

Example 3.3. Exemple d'utilisation de la commande tee

[user@linux ~]$ ls -la /bin | grep "bzip" | tee un_fichier


lrwxrwxrwx 1 root root 5 Feb 12 2001 bunzip2 -> bzip2
-rwxr-xr-x 1 root bin 27380 May 18 2000 bzip2
-rwxr-xr-x 1 root bin 6708 May 18 2000 bzip2recover
[user@linux ~]$ cat un_fichier
lrwxrwxrwx 1 root root 5 Feb 12 2001 bunzip2 -> bzip2
-rwxr-xr-x 1 root bin 27380 May 18 2000 bzip2
-rwxr-xr-x 1 root bin 6708 May 18 2000 bzip2recover
Editeurs et flux de texte 18

3.1.5. La commande xargs


La commande xargs permet d'éxécuter une commande sur chaque élément lu sur l'entrée standard.

Example 3.4. Exemple d'utilisation de la commande xargs

[user@linux ~]$ find /var/log -name apache -type f | xargs /bin/rm -f

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.

Voici les principales options de cette commande :

Table 3.2. Options de la commande xargs


Option Description
-0 Permet d'utilier un caractère NULL plutôt qu'un es-
pace pour délimiter les éléments.
-d <delim> Permet de spécifier le délimiteur utilisé pour chaque
élément.

3.2. Flux de textes et filtres


3.2.1. Afficher un flux de textes
Nous allons voir dans cette partie différentes commandes qui permettent d'afficher un flux de textes.

3.2.1.1. La commande cat


La commande cat permet simplement d'afficher le contenu d'un fichier sur la sortie standard.

cat <fichier>

3.2.1.2. La commande more


La commande more lit l'intégralité d'un fichier et ensuite l'affiche page par page. La syntaxe de cette commande
est la suivante :

more <fichier>

3.2.1.3. La commande less


La commande less est équivalente à la commande more mais ne nécessite pas de lire l'ensemble du fichier avant
de l'afficher et il est possible de remonter dans les pages :
Editeurs et flux de texte 19

less <fichier>

3.2.1.4. La commande head


La commande head permet d'afficher les N premières lignes d'un fichier. Par défaut, N vaut 10. La syntaxe est
la suivante :

head [<options>] <fichier>

Voici ses principales options :

Table 3.3. Options de la commande head


Option Description
-c <N> Affiche seulement les N premiers octets du fichier.
-l <N> Affiche seulement les N premières lignes du fichier.

3.2.1.5. La commande tail


La commande tail est identique à la commande head sauf qu'elle affiche les N dernières lignes d'un fichier.

tail [<options>] <fichier>

Voici ses principales options :

Table 3.4. Options de la commande tail


Option Description
-c <N> Affiche seulement les N premiers octets du fichier.
-l <N> Affiche seulement les N premières lignes du fichier.
-f Permet de rafraîchir dynamiquement le fichier lorsque
de nouvelles lignes apparaîssent.

3.2.1.6. La commande cut


La commande cut permet d'afficher uniquement certains champs ou colonnes d'un fichier. Par défaut, les
colonnes sont délimitées par des tabulations.

cut [<options>] <fichier>

Les principales options sont les suivantes :


Editeurs et flux de texte 20

Table 3.5. Options de la commande cut


Option Description
-d <delim> Permet de spécifier un délimiteur autre que les tabula-
tions.
-f <colonne> Liste la colonne à afficher.

Example 3.5. Exemple d'utilisation de la commande cut

[user@linux ~]$ cut -d':' -f 1 /etc/passwd


nobody
root
daemon
uucp
lp
postfix
www

3.2.1.7. La commande tac


La commande tac est similaire à la commande cat mais afficher le fichier en sens inverse.

tac <fichier>

3.2.1.8. La commande fmt


La commande fmt permet de formater du texte en regroupant les lignes jusqu'à obtenir des lignes de sortie ayant
une largeur spécifique. Par défaut, cette largeur vaut 75 caractères.

fmt [<options>] <fichiers>

Voici sa principale option :

Table 3.6. Option de la commande fmt


Option Description
-w <N> Définie la largeur qui sera utilisée.

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

Voici ses principales options :

Table 3.7. Options de la commande pr


Option Description
-h <chaine> Permet de remplacer le nom du fichier dans l'en-tête
par <chaine>.
-n [<separateur>] Permet d'ajouter le numéro de chaque ligne.
<separateur> permet de spécifier le caractère de
séparation entre les numéros et le contenu de chaque
ligne.
-r N'imprime pas l'en-tête et le pied de chaque page.

3.2.1.10. La commande uniq


La commande uniq permet de supprimer les doublons de lignes lors de l'affichage d'un fichier.

uniq [<options>] <fichiers>

Voici ses principales options :

Table 3.8. Options de la commande pr


Option Description
-c Pour chaque ligne, affiche le nombre d'occurences
trouvées
-d Affiche uniquement les lignes dont le nombre
d'occurences est suppérieur à 1
-i Ignore la case (majuscule/minuscule)

3.2.2. Modifier un flux de textes


Nous allons voir dans cette partie différentes commandes qui vont nous permettre de modifier un flux de textes
en y appliquant des filtres.

3.2.2.1. La commande expand


La commande expand permet de convertir les tabulations d'un fichier en espaces. Par défaut, une tabulation
représente 8 espaces.

expand <fichier>

On l'utilise généralement avec l'option :

Table 3.9. Option de la commande expand


Editeurs et flux de texte 22

Option Description
-t <N> Spécifie le nombre d'espaces pour une tabulation.

3.2.2.2. La commande unexpand


La commande unexpand fait exactement l'inverse de la commande expand et prend les mêmes options. Elle
convertie les espaces en tabulations.

unexpand [<options>] <fichier>

3.2.2.3. La commande paste


La commande paste permet de regrouper les différentes lignes de plusieurs fichiers.

paste [<options>] <fichiers>

Ses principales options sont :

Table 3.10. Options de la commande paste


Option Description
-s Regroupe toutes les lignes d'un fichier à la fois plutôt
qu'une ligne de chaque fichier.
-d <delim> Utilise <delim> pour séparer les lignes regroupées
plutôt que des tabulations.

Example 3.6. Exemple d'utilisation de la commande paste

[user@linux ~]$ cat fichier1


personne1
personne2
[user@linux ~]$ cat fichier2
telephone1
telephone2
[user@linux ~]$ paste -d' : ' fichier1 fichier2 > fichier3
[user@linux ~]$ cat fichier3
personne1 : telephone1
personne2 : telephone2

3.2.2.4. La commande join


La commande join fonctionne de façon similaire à la commande paste mais utilise un champ en commun pour
regrouper les fichiers.

join [<options>] <fichiers>


Editeurs et flux de texte 23

Voici ses principales options :

Table 3.11. Options de la commande join


Option Description
-j1 <champ> Effectue le regroupement en se basant sur <champ>
du fichier 1.
-j2 <champ> Effectue le regroupement en se basant sur <champ>
du fichier 2.
-t <carac> Utilise <carac> comme séparateur de champs.

Example 3.7. Exemple d'utilisation de la commande join

[user@linux ~]$ cat fichier1


1 personne1
2 personne2
[user@linux ~]$ cat fichier2
1 telephone1
2 telephone2
[user@linux ~]$ join fichier1 fichier2 > fichier3
[user@linux ~]$ cat fichier3
1 personne1 telephone1
2 personne2 telephone2

3.2.2.5. La commande sort


La commande sort permet de classer un fichier. Sa syntaxe est la suivante :

sort [<options>] <fichier>

Voici ses principales options :

Table 3.12. Options de la commande sort


Option Description
-n Effectue un tri numérique plutôt qu'alphabétique.
-r Inverse l'ordre du tri.

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

Les principales options sont les suivantes :

Table 3.13. Options de la commande nl


Option Description
-h <style> Défini le style de l'entête.
-b <style> Défini le style du corps.
-f <style> Défini le style du pied de page.
A Numérote toutes les lignes.
t Ne numérote pas les lignes vides.
n Ne numérote pas les lignes.

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>

Ses principales options sont les suivantes :

Table 3.14. Options de la commande wc


Option Description
-c Compte les caractères.
-l Compte les lignes.
-w Compte les mots.

3.2.2.8. La commande tr
La commande tr permet de remplacer certaines chaînes dans un flux de textes.

tr [<options>] <chaine1> <chaine2>

On l'utilise généralement avec l'option suivante :

Table 3.15. Option de la commande tr


Option Description
-d Efface <chaine1> du flux de textes.

Example 3.8. Exemple d'utilisation de la commande tr


Editeurs et flux de texte 25

[user@linux ~]$ echo "12334 54637" | tr 1234567 helowrd


hello world

3.2.2.9. La commande uniq


La commande uniq permet de supprimer les doublons d'un fichier. Ce fichier doit avoir été trié au préalable. Sa
syntaxe est la suivante :

uniq [<options>] <fichier>

Voici ses principales options :

Table 3.16. Options de la commande uniq


Option Description
-u Permet d'afficher uniquement les lignes uniques.
-d Permet d'afficher uniquement les lignes qui sont des
doublons.
-c Affiche le nombre d'occurences de chaque ligne.

3.2.2.10. La commande split


La commande split permet de découper un fichier en plusieurs parties. Par défaut, split coupe un fichier toutes
les 1000 lignes. Sa syntaxe est la suivante :

split [<options>] <fichier> <prefix>

Voici ses principales options :

Table 3.17. Options de la commande split


Option Description
-l Défini le nombre de lignes avant de couper un fichier.
-b <N> Permet de découper un fichier en parties de <N>
bytes.

Example 3.9. Exemple d'utilisation de la commande split

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

[user@linux ~]$ split -l 10 fichier1 nouv-

3.2.2.11. La commande sed


sed est un puissant éditeur de flux. Un chapitre du module 4 lui sera consacré.

sed [<options>] '{commande}' <fichier>

3.2.2.12. La commande hexdump


La commande hexdump est un filtre qui permet d'afficher un flux de textes dans un format spécifique qui par
défaut sera l'hexadécimal.

hexdump [<options>] <fichier>

Voici ses principales options :

Table 3.18. Options de la commande hexdump


Option Description
-c Permet d'afficher le flux en affichant 16 caractères par
colonnes.
-b Converti le flux en octal avant d'afficher uniquement
16 caractères par colonnes.

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.

3.3.1. Appel de l'éditeur


Éditer un fichier s'il existe, sinon, éditer un nouveau fichier vide :

[user@linux /tmp]$ vi fichier


Editeurs et flux de texte 27

Éditer chacun des fichiers à la suite :

[user@linux /tmp]$ vi fichier_1 fichier_2

3.3.2. Modes d'édition


Contrairement aux éditeurs de texte WYSIWYG (What You See Is What You Get) VI fonctionne par modes.
On distingue 2 modes bien distincts :

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

• i : permet de passer en mode insertion au niveau du curseur depuis le mode commande.

• ESC : permet de passer en mode commande depuis le mode insertion.

• ESC : permet d'interrompre une commande en mode commande.

Table 3.19. Opérations de bases dans VI


Commande Description
:w Sauvegarde les changements.
:q Quitte le document en cours.
:q! Quitte le document en cours sans demander à
l'utilisateur s'il souhaite sauvegarder les changements
éventuels.
:wq Enregistre et quitte l'éditeur.
:w fichier2 Enregistre le document sous le nom de fichier2
(équivalent de enregistrer sous).
:e fichier Permet de changer le fichier en cours d'édition.
/hop Recherche l'occurrence hop et la met en surbrillance.
Un appui sur la touche n permet de se positionner sur
la prochaine occurrence.
v Permet de passer en mode visualisation pour faire une
sélection par exemple.
d Équivalent de couper, après une sélection par ex-
emple.
dd Coupe la ligne entière.
y Équivalent de copier, après une sélection par ex-
emple.
yy Copie la ligne entière.
p Colle après le curseur.

3.3.3. Mode d'édition


Editeurs et flux de texte 28

Après l'utilisation de ces commandes, l'éditeur passe en mode insertion :

Table 3.20. VI en mode édition


Commande Description
a Ajoute après le curseur.
A Ajoute à la fin de la ligne courante.
i Insère au niveau du curseur.
I Insère au début de la ligne courante avant le premier
caractère non-blanc.
o Ouvre une nouvelle ligne en dessous de la ligne ac-
tuelle.
O Ouvre une nouvelle ligne au-dessus de la ligne ac-
tuelle.
29

Chapter 4. Expressions régulieres

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 expressions régulières

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.

[a-z] permet par exemple de reconnaître un caractère compris entre a et z.

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.

4.2. Ou utiliser les expressions régulières ?


Expressions régulieres 30

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

La syntaxe utilisée peut être découpée en plusieurs parties :

• Les ensembles

• Les quantificateurs

4.3. Les ensembles


Il existe plusieurs types d'ensembles :

4.3.1. Les caractères


Les caractères sont les ensembles les plus simples : le caractère a reconnaît une chaîne de caractère contenant la
lettre a.

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 :

• . reconnaît n'importe quel caractère

• \ permet d'échapper les autres caractères spéciaux

• | permet de séparer les choix d'une alternative

• ( et ) permettent de réaliser un regroupement

• [ et ] permettent de réaliser un motif

• {, }, *, + et ? permettent de quantifier les ensembles

• ^ et $ sont respectivement les débuts et fin de chaînes


Expressions régulieres 31

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.

4.3.2. Les motifs


Les motifs permettent de reconnaître un caractère parmi une liste :

• [abc] reconnaît a ou b ou c

• [a-z] reconnaît tous les caractères compris entre a et z

• [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

Certains caractères spéciaux permettent de simplifier l'écriture (comme pour \w précédemment) :

• \d correspond à [0-9]

• \D correspond à [^0-9] soit tout sauf \d

• \w correspond à [a-zA-Z0-9_-]

• \W correspond à tout sauf \w

• \s correspond à [ \n\t\r\f] soit un espacement quelconque

• \S correspond à tout sauf un espacement

4.3.3. Les regroupements


Les regroupements permettent de regrouper des ensembles en un ensemble plus gros. Nous verrons l'utilité des
regroupements dans le paragraphe sur les quantificateurs. Pour regrouper des ensembles, il suffit de mettre des
parenthèses autour des ensembles.

4.3.4. Les alternatives


Les alternatives fonctionnent un peu sur le même principe que les motifs, mais contrairement aux motifs elles
permettent un choix entre plusieurs autres motifs. Par exemple, (coin|pouet) reconnaîtra coin ou pouet. coin et
pouet peuvent être remplacés par n’importe quelle expression régulière, ce qui peux donner des choses comme
([a-z]|[a-zA-Z][0-9]coin).

4.4. Les quantificateurs


Les quantificateurs permettent de dire combien d'occurrences d'une expression doivent être reconnues. Ils
s'appliquent uniquement à l'atome le précédent, d'ou l'utilité des regroupements. Tous les quantificateurs
peuvent être écrits sous la forme {x,y}, ou x est le nombre d'occurrences minimum, et y le nombre d'occurrences
Expressions régulieres 32

maximum.

Voici les différents cas possibles et leur simplification :

• {n} : n occurrences

• {0,1} ou ? : 0 ou 1 occurrence

• {0,n} ou * : de 0 à n occurrences

• {1,n} ou + : de 1 à n occurrences

• {n,} : au moins n occurrences

4.5. Quelques exemples utiles avec grep


• \w+ : une suite d'au moins un caractères alphanumérique, soit un nom de variable en Perl. (ex: a, ab, a_b,
abba, ...)

[user@linux]$ grep -E '\w+' fichier_source.txt


a-b
abba
a

• (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 " ...)

[user@linux]$ grep -E '(coin|couac)*' fichier_source.txt


coin
coin coin
couin pouet
pouet

• </?[^>]+> : une balise HTML ouvrante ou fermante.

[user@linux]$ grep -E '</?[^>]+>' fichier_source.txt


<html>
<p>Hello World</p>
</html>

• [+-]?[\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:

• ^# reconnaît les lignes de commentaires (commençant par un #)


Expressions régulieres 33

• toto$ reconnaît les lignes finissant par toto.

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.

Pour de plus amples informations, veuillez vous référer à sa page de manuel :

[user@linux ~]$ man sed

4.6.2. Fonctionnement
La syntaxe générale de sed est la suivante :

sed [-n] [-e commande] [-f fichier de commandes] [fichier]

Table 4.1. Les options de sed 1


Option Description
-n Ecrit seulement les lignes spécifiées (par l'option /p)
sur la sortie standard.
-e Permet de spécifier les commandes à appliquer sur le
fichier. Cette option est utile lorsque vous appliquez
plusieurs commandes. Afin d'éviter que le shell
n'interprète certains caractères, il faut encadrer la
commande avec ' ou avec ".
-f Lit les commandes dans le fichier spécifié.

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

Ainsi, la forme générale d’une commande est :

adresse commande

Voici les différentes formes d’adresses :


Expressions régulieres 34

Table 4.2. Les options de sed 2


Options Description
aucune option Toutes les lignes
n La ligne n
n,m La portion de texte entre les lignes n et m
regex Les lignes reconnues par l’expression régulière regex

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/

Inverse l’ordre du chiffre et de la lettre.

Example 4.1. Exemple d'application

[user@linux ~]$ sed -e "s/\([0-9][0-9]*\)/abricot\1abricot/" fichier

La chaîne 3linux deviendra linuxabricot3abricot

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

Example 4.2. Sed et Substitution

[user@linux ~]$ sed "s/tux/TUX/" fichier

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

[user@linux ~]$ sed "s/tux/TUX/3" fichier

La 3ème occurence de la chaîne tux sera changé en TUX

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

Table 4.3. Sed et Substitution


Option Description
g Global, c'est à dire toutes les occurrences de la chaîne
seront remplacées (par défaut seule la première occur-
rence est remplacée)
p Imprime la ligne (utile avec l'option -n)
w fichier Ecrit la ligne dans le fichier spécifié en plus de la
sortie standard.

Example 4.3. Sed et la Substitution

[user@linux ~]$ sed "s/[Tt]ux/Supertux/g" mon_fichier

Remplace toutes les occurrences de Tux ou tux par Supertux dans tout le fichier mon_fichier.

[user@linux ~]$ sed -e "s/\([0-9][0-9]*\)/**\1**/" 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 :

ad1,ad2 !fonction argument

La fonction est appliquée à toutes les lignes qui ne correspondant pas à la caractérisation.

Example 4.4. Sed et la Négation

[user@linux ~]$ sed -e '/[a-cA-C]/!p' fichier


Expressions régulieres 36

Affiche toutes les lignes qui ne contiennent pas abc ou ABC

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

Example 4.5. Sed et la suppression

[user@linux ~]$ sed "1,10d" mon _fichier

- Sortie du fichier à partir de la onzième ligne.

[user@linux ~]$ sed "/^From/!d" mon _fichier

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

• Ecrire le texte après la ligne

[user@linux ~]$ sed a\texte monfic

• Ecrire le texte avant la ligne

[user@linux ~]$ sed i\texte monfic

4.6.3.5. Autres commandes

Table 4.4. les autres commandes de Sed


Expressions régulieres 37

Option Description
q Stoppe l’exécution de sed
= Ecrit les numéros de ligne
w fichier Ecrit dans un fichier
38

Chapter 5. Gestion des processus

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

5.1. Introduction à la notion de processus


Un processus peut prendre différents états définissant son comportement. Les principaux états sont :

• l'état "actif" (running) : le processus est traité par le processeur.

• l'état "prêt" (sleeping) : le processus attend d'être traité par le processeur.

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

L'arrêt d'un processus provoque l'arret de tous ses processus "fils".

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.

Table 5.1. Commandes de monitoring de processus


Commande Description
ps Permet de lister les processus suivants un certain
nombre de critères.
top Permet d'avoir un suivi de l'évolution des processus et
ce faisant, d'effectuer des traitements comme on pour-
Gestion des processus 39

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.

Table 5.2. les options de ps


Commande Description
a Tous les processus sauf ceux non associés au terminal
u Permet de lister les processus associés au PID d'un
utilisateur
x Tous les processus associés à un tty
e Tous les processus
f Plus d'informations sur les processus affichées

La commande ps peut être appelée avec différentes options, citons en exemple ps aux qui permet de lister tous
les processus :

Table 5.3. Les champs de ps et de top


Champ Description
PID Identifiant du processus.
USER Le propriétaire du processus.
PR Priorité de la tâche (plus le chiffre est petit, plus la
tâche est prioritaire).
SIZE Taille du processus en mémoire incluant la partie
donnée et la pile.
RSS Quantité totale de mémoire occupée par la tâche.
SHARE Quantité de mémoire partagée.
STAT
Ce champ identifie par des lettres les différents états
possibles pour un processus :

• D : En sommeil imperturbable (ce qui arrive


souvent à certain modules du kernel).

• R : En cours d'exécution.

• S : En sommeil.

• T : Stoppé ou stracé (notamment pour le


débugage).

• Z : Zombie (peut arriver lorsqu'un processus n'a pas


attendu la fin de l'exécution de l'un de ses fils).

LIB Nombres de pages mémoires occupées par les


Gestion des processus 40

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

5.2. Envoi de signaux aux processus


Afin de communiquer avec les processus, l’utilisateur ou le système leurs envoient des signaux. Ceci est
effectué par l’intermédiaire de la commande kill.

L’option –l de cette commande permet de lister les signaux disponibles.

Table 5.4. Les principaux signaux utilisés


Nom du signal Description
SIGHUP (1) Ce signal est envoyé directement lors de la
déconnexion à un modem ou bien oblige un DAE-
MON à relire son fichier de configuration.
SIGINT (2) Ce signal est équivalent au Ctrl-C et met fin à
l'exécution d'un processus.
SIGKILL (9) Tue un processus de manière immédiate. Ce signal est
à envoyer dans des mesures drastiques et ne peut être
ignoré par le processus.
SIGTERM (15) Termine un processus "proprement" si possible.
SIGTSTP (20) Mets un processus en attente, équivalent à Ctrl-Z.

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

5.3. Arrière-plan, premier plan et détachement


Lorsqu’un programme est exécuté, le shell prend en compte l'exécution du processus. Il faut donc attendre la fin
de celui-ci avant d'avoir à nouveau le prompt. On dit alors que le processus est au premier plan.

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.

[root@linux ~]# updatedb &

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.

Table 5.5. Contrôle des processus sous bash


Commande Description
fg %N° de Job Permet de mettre un processus au premier plan.
bg %N° de Job Permet de mettre un processus en arrière plan.
Ctrl-Z Permet de mettre un processus en attente.

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.

Example 5.1. Détachement du processus 1394 :

[root@linux ~]# disown 1394


Gestion des processus 42

5.4. Modification des priorités du Scheduler


Nous avons vu en introduction que les processus avaient des priorités et que celles-ci étaient modifiables. En ef-
fet, les propriétés évoluent sur une échelle de -20 à +19. Tout processus, au lancement, peut avoir une priorité
quelconque supérieure ou égale à zéro.

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.

Table 5.6. Les commandes nice et renice


Commande Description Options
nice priorité Permet d'affecter une priorité aux -n N : permet d'ajuster la priorité
processus dès leurs lancements. par défaut à N.
renice priorité Permet de modifier la priorité d'un -u "User" : change la priorité de
processus alors que celui-ci est tous les processus d'un utilisateur.
déjà lancé.

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.

6.2. Arborescence de "/"


Sous Linux, toute l'arborescence part de la racine (root) "/". Chaque chemin qui part de la racine "/" est un lien
absolu (exemple : /etc/X11/xorg.conf).

Table 6.1. Arborescence de "/"


Répertoire Contenu
/bin les binaires (exécutables) vitaux pour l'utilisateur
/boot les fichiers relatifs au bootloader, ainsi que le noyau
/dev tous les périphériques
/etc les fichiers de configuration et des fichiers nécessaires
au démarrage (rc scripts)
/home les répertoires des utilisateurs
/lib les librairies partagées et les modules du noyau
(/lib/modules)
/mnt les dossiers pour les points de montages temporaires
/proc les informations et les paramètres du système (noyau,
cpu, mémoire, disque, ...)
/root répertoire personnel du super utilisateur (root)
/sbin les binaires vitaux pour le super utilisateur (root)
/tmp les dossiers et les fichiers temporaires, il est vidé à
chaque démarrage
/usr User System Resources : tout ce qui n'est pas vital au
système (voir ci-dessous)
/var les fichiers qui sont souvent consultés/modifiés
comme les logs par exemple
FHS 44

6.3. Arborescence de /usr


La structure du répertoire /usr est très similaire à l'arborescence de "/". On va retrouver par exemple les
répertoires /bin, /lib, /sbin, etc. Il y a aussi d'autre répertoire que l'on va détailler dans le tableau ci-dessous.
Pourquoi utiliser un répertoire différent alors qu'on a les mêmes à la racine ? Simplement parce que les fichiers
contenus dans ces répertoires là (dans /usr) ne sont pas vitaux pour le système. Une suppression de /usr
n'empêchera pas le démarrage de la machine par exemple.

Table 6.2. Arborescence de /usr


Répertoire Contenu
/usr/bin les binaires pour l'utilisateur
/usr/doc la documentation des programmes installés (hors
manpages)
/usr/lib les librairies partagées
/usr/man les manpages (pages de manuel)
/usr/sbin les binaires pour l'administration
/usr/src les sources du noyau
/usr/X11R6 les fichiers du serveur X

6.4. Arborescence de /var


Le répertoire /var va contenir des fichiers variable. Un fichier variable est un fichier, comme son nom l'indique,
qui va beaucoup varier en fonction du temps. L'exemple le plus concret est celui des logs (/var/log). Ils sont
opposés aux fichiers statiques, fichiers dont le contenu ne varie pas ou très peu, exemple : les fichiers de config-
uration.

Table 6.3. Arborescence de /var


Répertoire Contenu
/var/log tous les fichiers de log
/var/mail les boites aux lettres de chaque utilisateur
/var/run les fichiers des PID des deamons
/var/spool les queues en cours (envoi de mail, impression,
crontab)
45

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.

Example 7.1. find

Pour rechercher tous les fichiers textes contenus dans les répertoires personnels des utilisateurs :

[user@linux ~]$ find /home/ -name "*.txt"

Table 7.1. Les options de la commande find


Option Description
-atime +n (-n) Trouve les fichiers auxquels on a accèdé il y a plus de
n jours (ou moins de n jours)
-mtime +n (-n) Trouve les fichiers modifiés il y a plus de n jours (ou
moins de n jours)
-name "toto*" Trouve les fichiers dont le nom commence par toto
-maxdepth n Définit le niveau maximum de sous répertoire à ex-
plorer (0 correspond à la ligne de commande)
-type type Indique le type de fichier à rechercher
-type d Pour les répertoires
-type f Pour les fichiers
-type l Pour les liens symboliques

Example 7.2. Exécuter une commande pour chaque fichier trouvé


Recherche 46

find [chemin] [option] -exec cmd {} \;

• Les fichiers trouvés sont passés à la commande cmd comme des paramètres

• {} sera remplacé par le nom de chaque fichier trouvé

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

Example 7.3. find

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 {} \;

7.2. locate - slocate


La commande locate utilise une base de données que vous devez mettre à jour régulièrement grâce à la com-
mande updatedb. Des fichiers récemment crées ne sont donc pas forcement référencés. La base de données peut
être mise a jour manuellement par le super utilisateur (root) avec la commande slocate -u ou encore updatedb.

Le fichier de configuration d'updatedb se trouve dans /etc/updatedb.conf .

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.

Example 7.4. locate

Recherche tous les fichiers dont le nom comporte la chaîne "toto" :

[mandriva@linux ~]$ locate toto

7.3. which / whereis


Les commande which permet de situer un éxécutable (le binaire).

[user@linux ~]$ which ls


/bin/ls
Recherche 47

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

[user@linux ~]$ whereis ls


ls: /bin/ls /usr/share/man/man1/ls.1.gz
48

Chapter 8. Gestion des utilisateurs et des


groupes

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

8.1. Les utilisateurs


Unix est un système multi-utilisateurs. Plusieurs personnes peuvent l'utiliser de façon simultanée via différents
terminaux (exemple : via le réseau).

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.

8.1.1. Le fichier /etc/passwd


La syntaxe de /etc/passwd est très simple, chaque ligne concerne un utilisateur. Les différents champs sont
séparés par le caractère ":" :

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

Table 8.1. Le fichier /etc/passwd


Champ Description
login Le login de l'utilisateur, avec lequel il pourra
s'identifier. Les caractères spéciaux sont interdits.
password Le mot de passe de l'utilisateur, chiffré en MD5, lor-
sque celui-ci n'est pas stocké dans /etc/shadow

• Le caractère '*' spécifie qu'il est impossible de


s'authentifier sur le système avec ce compte

• Le caractère '!!' spécifie que le compte est désactivé

• Les caractères 'x' ou '!' signifient que le mot de


passe est dans /etc/shadow.

• Si le champ est vide l'utilisateur n'a pas de mot de


passe.

UID L'identifiant unique de l'utilisateur. L'utilisateur root


possède l'UID 0. Par convention, les UID inférieurs à
100 sont réservés aux utilisateurs système.
GID L'identifiant unique du groupe principal de
l'utilisateur.
Commentaires Nom de l'utilisateur, commentaires divers ... Ces in-
formations sont séparées par des virgules.
Répertoire home Répertoire personnel de l'utilisateur. Par défaut le
répertoire est /home/login.
Shell Shell de l'utilisateur, peut être paramétré à /bin/false
pour interdire le login.

8.1.2. Le fichier /etc/shadow


Le fichier /etc/passwd est accessible en lecture par tout le monde. En effet, certaines commandes ont besoin
de connaître la liste des utilisateurs ou la correspondance login/UID.

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.

8.2. Les Groupes


Le fichier /etc/group contient les informations relatives aux groupes présents sur le système.
Gestion des utilisateurs et des groupes 50

Voici sa syntaxe :

groupe:*:GID:utilisateurs

Table 8.2. /etc/group


Champ Description
groupe Le nom du groupe.
* Ce champ existe pour la rétro-compatibilité avec les
anciens Unix. Il peut être soit vide ou marqué d'un x.
GID Identificateur unique du groupe.
utilisateurs Utilisateurs qui appartiennent au groupe séparés par
des virgules.

Voici un exemple :

compta:x:230:pierre,romain,jerome

8.3. Les commandes de gestion des utilisateurs


Afin de manipuler les fichiers /etc/passwd, /etc/shadow et /etc/group facilement, des commandes
ont été créées. Elles automatisent les vérifications (l'utilisateur à créer existe-t-il déjà ? Le mot de passe est-il as-
sez complexe ?...) évitant ainsi toute erreur de saisie.

8.3.1. Ajouter un utilisateur


La commande useradd permet de créer un utilisateur :

useradd [options] login

Table 8.3. Les options de la commande useradd


Option Explication
-c commentaire Informations concernant l'utilisateur (nom, poste)
-d répertoire Chemin du répertoire personnel de l'utilisateur
-e date Date d'expiration du compte. Le format est AAAA-
MM-JJ
-f nombre de jours C'est le nombre de jours suivant l'expiration du mot
de passe après lequel le compte est désactivé. La
valeur 0 permet de désactiver le compte dès que le
mot de passe expire. La valeur -1 permet de
désactiver cette caractéristique. La valeur par défaut
est -1.
-g groupe principal Le nom du groupe ou le numéro du groupe de con-
Gestion des utilisateurs et des groupes 51

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

Nous voulons créer l'utilisateur lambda avec :

• pour commentaire "utilisateur lambda"

• pour shell /bin/zsh

• pour répertoire personnel /home/lambda

• /etc/skel pour modèle de répertoire

• pour groupe "dev" et "final"

• un compte désactivé immédiatement après expiration du mot de passe

[root@linux ~]# useradd -c "utilisateur lambda" -f 0 -G final, dev -m -k /etc/skel \


> -s /bin/zsh lambda

La commande useradd -D montre les options par défaut :

GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=
SKEL=/etc/skel

8.3.2. Suppression d'un utilisateur


La commande userdel permet de supprimer un utilisateur :
Gestion des utilisateurs et des groupes 52

[root@linux ~]# userdel options login

Note
L'option -r efface le répertoire personnel de l'utilisateur.

8.3.3. Changer le mot de passe d'un utilisateur


La commande passwd permet de changer le mot de passe d'un utilisateur. L'administrateur peut changer
n'importe quel mot de passe. Un utilisateur normal ne peut changer que son propre mot de passe.

passwd [ options ] [ login ]

Si l'argument login n'est pas spécifié, le changement de mot de passe s'applique sur l'utilisateur actuellement
connecté.

Table 8.4. Les options de la commande passwd


Option Explication
-k Indique que seul le mot de passe doit être mis à jour
sans toucher aux propriétés d'expiration
-l Permet de verrouiller le compte spécifié en préfixant
le mot de passe crypté par le caractère "!". Seul
l'utilisateur root peut utiliser cette option
--stdin Le mot de passe doit être lu à partir de l'entrée stand-
ard qui peut alors être un pipe
-u Déverrouille le mot de passe du compte. Seul
l'utilisateur root peut utiliser cette option
-d Supprime le mot de passe d'un compte. Le champ
réservé au mot de passe crypté sera supprimé dans le
fichier de configuration. Seul l'utilisateur root peut
utiliser cette option
-S Affiche des informations sur le statut du mot de passe
pour un compte donné. Seul l'utilisateur root peut util-
iser cette option

8.3.4. Afficher des informations sur un utilisateur


Pour connaître l'identité de l'utilisateur courant (bien que cela soit affiché par défaut dans la majorité des
prompts) on utilise la commande whoami. Elle affiche le login de l'utilisateur courant.

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

8.4. Les commandes de gestion des groupes


8.4.1. Créer un groupe
La commande groupadd permet de créer un nouveau groupe :

[root@linux ~]# groupadd option groupe

Table 8.5. Les options de la commande groupadd


Option Explication
-g Permet de choisir la valeur numérique du GID du
nouveau groupe. Cet identifiant doit être unique
-r Cette option permet d'ajouter un groupe système (dont
le GID est inférieur à 100)
-f Permet de stopper la commande lorsque le groupe ou
le GID du nouveau groupe existe déjà

8.4.2. Suppression d'un groupe


Pour supprimer un groupe, on utilise la commande groupdel :

[root@linux ~]# groupdel numéro_du_groupe

Note
On ne peut pas supprimer un groupe si c'est le groupe principal d'un utilisateur.

8.4.3. Modifier les groupes secondaires d'un compte


Pour modifier les groupes secondaires d'un utilisateur, on utilise la commande usermod qui est similaire à
useradd et supporte les mêmes options :

[root@linux ~]# usermod -G toto,users,fileshare,dev toto

Ceci permet d'ajouter l'utilisateur "toto" dans les groupes "toto", "users", "fileshare" et "dev".

8.4.4. Afficher des informations sur les groupes


Pour connaître les groupes auxquels appartient un utilisateur, on utilise la commande groups. Sans argument,
elle affiche les groupes de l'utilisateur courant. Pour connaître les groupes d'un utilisateur particulier, il suffit de
Gestion des utilisateurs et des groupes 54

passer son login en argument de la commande :

[root@linux ~]# groups


root wheel disk adm sys daemon bin

[root@linux ~]# groups toto


toto users fileshare

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

8.4.5. Définir les mots de passe pour les groupes


Il est possible de définir un mot de passe pour les groupes. Pour cela, nous utilisons la commande gpasswd. A
l'issu de cette commande, le mot de passe du groupe sera enregistré dans le fichier concernant les groupes, /
etc/groups (ou dans le fichier /etc/gshadow si les fonctionnalité shadow sont activées comme vu
précédemment).

8.5. Changer d'identité


Il se peut qu'un utilisateur soit obligé d'effectuer des tâches avec une identité différente. La situation la plus
courante étant un utilisateur normal voulant effectuer certaines tâches en tant qu'administrateur.

La commande su (Switch User), permet de changer d'identité :

Table 8.6. Les options de la commande su


Commande Explication
su Sans option, su permet de se connecter en tant
qu'administrateur
su toto Agir en tant qu'utilisateur toto
su - toto Se connecter en tant que toto. Avec "-" on récupère
tout l'environnement de l'utilisateur toto. Cette
méthode est donc plus sûre.
su -c "mount /dev/cdrom /mnt/cdrom" L'option -c permet simplement d'exécuter la com-
mande entre guillemet en tant que root (pas d'option).
Une fois la commande terminée, on reprend son
identité

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

Chapter 9. Gestion des permissions

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.

9.1.1. Changer l'appartenance d'un fichier


La commande pour changer l'appartenance d'un fichier est la commande chown (change owner). Seul
l'utilisateur root peut changer l'appartenance d'un fichier. La syntaxe de cette commande est la suivante:

# chown [-R] <user>[:group] <fichier>

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.

9.1.2. Changer le groupe propriétaire


L'utilisateur ne pouvant pas utiliser la commande chown, il dispose de la commande chgrp (pour change group)
afin de modifier le groupe auquel appartient le fichier.

Note
L'utilisateur doit faire parti du nouveau groupe.

chgrp [-R] <group> <fichier>

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

9.2. Les droits


9.2.1. Notion de droits
Dans les systèmes Linux, on peut assigner différents droits aux fichiers suivant l'utilisateur qui va y accéder.
Ainsi, il est défini trois genre de personnes: l'utilisateur propriétaire, l'utilisateur faisant parti du groupe
propriétaire, et tous les autres utilisateurs. Pour chaque type de personnes, nous allons pouvoir assigner
différents droits: le droit de lecture, le droit d'écriture et le droit d'exécution.

Voyons comment lire les droits à partir de la commande ls:

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.

9.2.2. Modifier les droits


Pour modifier les droits d'un fichier, nous utiliserons la commande chmod. Sa syntaxe est la suivante :

$ chmod [-R] <droits> <fichier>

Il est possible d'attribuer de nouveaux droits de deux manières différentes : de manière alphabétique ou de façon
octale.

9.2.2.1. La méthode alphabétique


Avec cette méthode, chaque utilisateur (l'utilisateur, le groupe, les autres) et chaque droit (lecture, écriture,
exécution) est représenté par une lettre. Ainsi, nous avons donc :

Table 9.1. Les différents droits, version alphabétique


u - l'utilisateur propriétaire (user) r - lecture (read)
g - l'utilisateur faisant parti du groupe propriétaire w - écriture (write)
(group)
o - tous les autres utilisateurs (others) x - exécution (execute)
a - tous les utilisateurs (all) user, group et others

Afin de définir ces permissions, il faut utiliser les opérateurs suivants

Table 9.2. Les opérateurs sur les droits


+ ajout un droit
- enlève un droit
= définit un droit

Voyons un exemple concret d'utilisation de ces droits alphabétiques :

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

root@lab# chmod a=r fichier


root@localhost # ls -l fichier
-r--r--r-- 1 root wheel 0 7 Sep 10:52 fichier

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.

9.2.2.2. La méthode octale


La seconde méthode de modification ou d'attribution de droits est numérique. Ici, un chiffre représente un droit.
La position du chiffre représente le type d'utilisateur.

Table 9.3. Les droits, version numérique


4 - lecture
2 - écriture
1 - exécution

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.

Voici un exemple de l'utilisation de la méthode octale :

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 :

user@localhost$ touch fichier


user@localhost$ ls -l fichier
-rw-r--r-- 1 root wheel 0 7 Sep 10:52 fichier
user@localhost$ umask 077
user@localhost$ touch document
user@localhost$ ls -l document
-rw------- 1 root wheel 0 7 Sep 10:52 document

Note
Le umask n'est défini que pour l'utilisateur en cours.

9.4. Les droits spéciaux


En plus des permissions standard que nous venons de voir, il existe des permissions spéciales qui permettent
d'affiner et de mieux contrôler la sécurité sur les fichiers d'un système GNU/Linux

9.4.1. Le bit SUID


Lorsqu'une commande est exécutée, celle-ci hérite des droits de l'utilisateur l'ayant invoquée. Elle aura donc les
mêmes restrictions d'accès au système de fichiers et aux ressources que l'utilisateur.

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.

Voici les permissions de la commande ping :

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 :

user@localhost$ chmod u+s <fichier>


Gestion des permissions 61

9.4.2. Le bit SGID


Le droit SGID fonctionne de la même façon que le SUID mais concerne les droits du groupe propriétaire. Le
SGID peut aussi être attribué à un dossier, tout fichier créé dans un tel dossier aura comme groupe propriétaire
le groupe du dossier.

Pour activer le bit SGID sur un fichier, il faut utiliser la commande chmod de la manière suivante :

user@localhost$ chmod g+s <fichier>

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.

9.4.3. Le sticky bit


Lorsqu’un utilisateur possède le droit d'écriture sur un dossier, il peut alors renommer ou supprimer tous les
fichiers qu'il contient. Ce fonctionnement n'est pas adéquat pour un dossier public, où tout le monde a accès en
écriture comme "/tmp" par exemple. Si le sticky bit est placé sur un dossier, seul le possesseur d'un fichier à
l'intérieur de ce dossier pourra le modifier, le renommer ou le supprimer.

Pour activer le sticky bit sur un répertoire, il faut utiliser la commande chmod de la manière suivante :

user@localhost$ chmod +t <repertoire>

9.4.4. Équivalents numériques des droits spéciaux


Tout comme pour les droits standards, il est possible de définir les droits spéciaux de manière numérique. Il suf-
fit alors d'ajouter un quatrième chiffre à la gauche des trois chiffres permettant de définir les droits standards.
Les droits spéciaux sont numériquement définit ainsi :

Table 9.4. Représentation numérique des droits spéciaux


4 - SUID
2 - SGID
1 - Sticky bit

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


En plus des permissions standard et spéciales il y a un autre types de spécifications que nous pouvons appliquer
sur des fichiers ou dossiers.
Gestion des permissions 62

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)

Table 9.5. Les différents attributs


A le champs de dernier accés au fichier n'est pas
modifié, cela évite la charge en plus sur les Input/
Output d'un disque.
c le fichier est automatiquement compressé
i un fichier ne peut ni être supprimé ni être modifié ou
encore renommé, seul root ou un processus possédant
des droits bien particuliers peuvent modifier cet at-
tribut
s Lorsqu'un fichier est supprimé , son ancien emplace-
ment mémoire est remplacé par des 0.
u Lorsqu'un fichier est supprimé , il est sauvegardé ail-
leurs, cela permet de restauré un fichier malen-
contreusement supprimé par erreur.

user@localhost$ chattr +isu monfichier

9.5.2. lsattr
Cette commande permet d'afficher les attributs des fichiers précisés avec la commande chattr.

user@localhost$ lsattr monfichier


su--i--------- monfichier
63

Chapter 10. Gestion des disques

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

10.1. Gestion des disques durs


["Sous un système Unix, tout est fichier".]

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

10.1.1. Les partitions


Un disque ne peut contenir que 4 partitions primaires. Il est possible de remplacer une partition primaire par
une partition étendue, celle-ci peut contenir jusqu’à 12 partitions logiques sur un disque SCSI. Notre disque
pourra donc contenir 15 partitions utilisables soit 3 primaires plus les 12 partitions logiques (sur un disque SC-
SI). Sur un disque IDE ce nombre de partition logiques pourra s'étendre à 60.

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.

10.1.2. Partitionner un disque dur


Il existe plusieurs outils pour partitionner un disque dur sous linux. Les plus communs sont :

• fdisk : utilitaire en mode texte avec menu interactif.

• cfdisk : utilitaire en mode curses (pseudo graphique) avec une liste des partitions.

Ces deux utilitaires se lancent de la même façon :

[root@linux]# <commande> /dev/<disk>

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.

Example 10.1. Exemple avec fdisk

Nous allons ici créer une partition primaire contenant la swap (512Mo) et une partition logique contenant "/"
(5Go)

root@localhost # fdisk /dev/hda


Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2434, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-2434, default 2434): +512M
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 82
Changed system type of partition 1 to 82 (Linux swap)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
e
Partition number (1-4): 2
First cylinder (64-2434, default 64):
Using default value 64
Last cylinder or +size or +sizeM or +sizeK (64-2434, default 2434):
Using default value 2434
Command (m for help): n
Command action
l logical (5 or over)
Gestion des disques 65

p primary partition (1-4)


l
First cylinder (64-2434, default 64):
Using default value 64
Last cylinder or +size or +sizeM or +sizeK (64-2434, default 2434): +5000M
Command (m for help): p
Disk /dev/hda: 20.0 GB, 20020396032 bytes
255 heads, 63 sectors/track, 2434 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 63 506016 82 Linux swap
/dev/hda2 64 2434 19045057+ 5 Extended
/dev/hda5 64 672 4891761 83 Linux
Command (m for help): w
Writing table partition

Table 10.1. Commandes de fdisk


Commandes Description
m Permet d'obtenir de l'aide.
p Affiche la structure et les partitions du disque.
n Crée une nouvelle partition.
d Supprime une partition.
t Change le type d'une partition (82: linux swap, 83:
linux native).
w Sauver et quitter.
q Quitter sans sauver.

10.1.3. Formater une partition


Une fois les partitions définies, il faut à présent les formater afin de pouvoir créer un système de fichier dessus.
Le type de système de fichier indique, entre autres, comment organiser les données sur le disque dur.

Dans la majorité des cas, nous utiliserons la commande mkfs. Certains systèmes de fichiers utilisent leur propre
commande, nous les verrons ci-dessous.

Il existe deux moyens d'utiliser la commande mkfs :

[root@linux]# mkfs -t <type> /dev/<partition>

[root@linux]# mkfs.<type> /dev/<partition>

Note
Cas particulier : Pour formater une partition de swap (partition d'échange), la commande à utiliser
Gestion des disques 66

est légèrement différente :

[root@linux]# mkswap /dev/<partition>

10.2. Les systèmes de fichiers


10.2.1. Les différents systèmes de fichiers

Table 10.2. Les différents systèmes de fichiers


F.S. Description Formatage
swap Partition d'échange. mkswap
ext2 F.S. standard sous Linux. mke2fs, mkfs -t ext2, mkfs.ext2
ext3 ext2 journalisé. mke2fs -j, mkfs -t ext3, mkfs.ext3
reiserfs F.S. efficace pour de petits mkreiserfs
fichiers.
xfs F.S. adapté pour de très grandes mkfs -t xfs, mkfs.xfs
partitions.
jfs F.S. adapté pour de très grandes mkfs -t jfs, mkfs.jfs
partitions.
vfat fat16 / fat32 mkfs -t vfat, mkfs.vfat

10.2.2. L'espace disque


Voici quelques utilitaires indispensables pour afficher des statistiques sur l'occupation des disques sous Linux.

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 :

[root@linux]$ du -sh /tmp


25M /tmp

Voici une explication des différentes options :

• -h : affiche la taille avec une unité adaptée et compréhensible (Megabyte, Gigabyte, Terabyte, ...)

• -s : N'affiche que la taille totale sans le détails des sous éléments.

• -c : Lorsque du cible plusieurs éléments, affiche le total finale.


Gestion des disques 67

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

10.2.3. Intégrité des systèmes de fichiers


Les systèmes de fichiers sont des éléments sensibles de notre système car ils sont par exemple victimes de
l'instabilité des disques durs actuels. Ces derniers étant des pièces mécaniques, ils ne sont pas aussi fiables que
le reste des composants.

Heureusement nous disposons de tout un choix d'outils pour maintenir, vérifier, réparer nos précieux systèmes
de fichiers.

10.2.3.1. Vérification et réparation


Pour vérifier l'intégrité des données nous disposons sous Linux de commandes adaptés à chaque système de
fichiers. Le journal (pour un F.S. journalisé) et l'arborescence sont analysés puis réparés si par exemple les
données d'un fichier ne font pas la taille indiqué par l'inode (son [étiquette]).

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 :

[root@linux]# fsck.<fs> /dev/<partition>

Exemple avec une partition en ext3 sur la 3ème partition du 2ème disque SCSI :

[root@linux]# fsck.ext3 /dev/sdb3

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 :

• "open" : ouvre un système de fichiers. -f force l'ouverture et -w force l'accès en lecture/écriture.


Gestion des disques 68

• "cat" : commande permettant d'afficher le contenu d'un fichier.

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

10.2.3.2. Tuning du système de fichiers


Nous alons voir dans cette partie l'utilisation de commandes qui permettent de modifier le journal et les
paramètres d'un système de fichiers.

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 :

[root@linux]# dumpe2fs -h /dev/sda2


Filesystem state: clean
Inode count: 1149632
Block count: 2295286
Mount count: 11
Maximum mount count: 20
...

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 :

[root@linux]# tune2fs -C 50 /dev/sda2

Il existe de nombreux paramètres que vous pouvez retrouver facilement depuis la page de man de tune2fs.

10.3. Accèder aux partitions


Une fois le disque dur partitionné et formaté, il est à présent utilisable. Comme dit précedemment, pour accéder
à ce disque il est necessaire de le monter, c’est-à-dire de l’ajouter dans notre arborescence (le FHS).

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.

10.3.1. Monter une partition


La commande mount va permettre de monter un périphérique. Si l'on utilise la commande mount sans
paramètre, on obtiendra la liste des périphériques déjà montés.

[root@linux]# mount -t type /dev/partition /mnt/dir


Gestion des disques 69

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

La commande umount va elle, au contraire, démonter un périphérique.

[root@linux]# umount /mnt/dir

10.3.2. Le fichier /etc/fstab


Ce fichier a principalement deux utilisations :

• Contenir toutes les partitions à monter automatiquement au démarrage.

• 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 chemin du périphérique matériel (dans /dev)

• Le point de montage (dans le FHS)

• Le type de système de fichiers

• Les options (argument -o de mount)

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

Exemple de fichier /etc/fstab :

/dev/hda1 none swap sw 0 0


/dev/hda5 / ext3 defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,users,ro 0 0

Grâce à ce fichier, maintenant les deux commandes suivantes sont équivalentes.

mount -t iso9660 -o noauto,users,ro /dev/cdrom /mnt/cdrom


mount /mnt/cdrom
Gestion des disques 70

Table 10.3. Options de mount


Option Description
(no)auto Monte (ou non) automatiquement le périphérique au
démarrage de la machine.
defaults Active rw, suid, exec, auto, nouser.
(no)exec Autorise (ou non) l'exécution de binaires.
(no)suid Autorise (ou non) l'utilisation du suid et guid.
ro La partition sera montée en lecture seule.
rw La partition sera montée en lecture/écriture.
nom d'utilisateur Autorise un utilisateur à monter et démonter le
périphérique.
(no)users Autorise (ou non) tous les utilisateurs à monter ou
démonter le périphérique.
(no)user Autorise (ou non) tous les utilisateurs à monter un
périphérique. Seul l’utilisateur ayant monté le
périphérique a le droit de le démonter.
71

Chapter 11. Quotas

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

11.1. Les limites


Pour les utilisateurs :

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

Pour les groupes :

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

11.2. Activer les quotas


Pour activer les quotas deux actions sont indispensables :

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.

2. Créer les fichiers quota.user et quota.group à la racine de la partition à l'aide de la commande


quotacheck -avug (voir la commande expliquée en 1.3.5)

Example 11.1. Exemple d'activation des quotas


Quotas 72

[root@linux ~]# vi /etc/fstab


/dev/hda3 /home ext3 defaults,usrquota,grpquota 0 0

[root@linux ~]# quotacheck -avug

11.3. Commandes
11.3.1. quota
quota affiche les limites d’un utilisateur ou d’un groupe

Table 11.1. Les options de la commande quota


Option Description
-u user Affiche les limites de l'utilisateur [user].
-g group Affiche les limites du groupe [group].

11.3.2. quotaon et quotaoff


quotaon active les quotas déjà configurés, à l’inverse quotaoff les désactivent.

Table 11.2. Les options des commandes quotaon et quotaoff


Option Description
-u disque Dés/active les limites utilisateurs pour disque.
-g disque Dés/active les limites de groupes pour disque.
-a Dés/active les limites pour tous les disques de /
etc/fstab.

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.

Table 11.3. Les options de la commande edquota


Option Description
-u user Edite les limites d’un utilisateur.
-g group Edite les limites de groupes.
-t user/group Edite la grace period.
-p proto user Copie les quotas d’un utilisateur vers un autre.
Quotas 73

11.3.4. repquota
repquota génère un rapport pour connaître l’états des quotas.

Table 11.4. Les options de la commande repquota


Option Description
-a Rapport concernant tous les disques présents dans /
etc/fstab pour les utilisateurs et les groupes.
-g disque Affiche les limites des groupes pour disque.
-u disque Affiche les limites des utilisateurs pour disque.

11.3.5. quotacheck
quotacheck test et crait le fichier de quota des utilisateurs et groupes

Table 11.5. Les options de la commande quotacheck


Option Description
-a test tous les quotas
-g Ecrit le fichier de quotas des groupes
-u Ecrit le fichier de quotas des utilisateurs
-v mode verbeux
74

Chapter 12. Installation

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

12.1. Préparer une installation de Linux


L'installation de GNU/Linux nécessite tout d'abord préparer son ordinateur à ce grand changement qu'est
l'arrivée d'un nouveau système d'exploitation. Nous allons donc en premier modifier la table de partition.

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

12.1.1. La partition SWAP


Cette partition appelée partition "de swap" ou "d'échange" et est invisible pour l'utilisateur.

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 :

• /boot -> Disque 1, partition 1

• /home -> Disque2, partition 1

• /var -> Disque 1, partition 2

• / -> Disque 1, partition 3

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

12.2. Gestionnaire de démarrage


Le chargeur de démarrage (ou BootLoader) est un programme lancé avant n’importe quel système
d’exploitation par le BIOS. Son rôle est de charger le noyau du système souhaité. Il peut également permettre
une sélection interactive. Il en existe un certain nombre parmi lesquels on citera Grub et Lilo pour les architec-
Installation 76

tures x86 ou encore Silo pour SPARC ou yaboot pour PPC.

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.

Nous nous intéresserons ici à Lilo et Grub.

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.

Le fichier de configuration lilo.conf se trouve dans /etc.

Example 12.1. Exemple de fichier de configuration de Lilo

#Emplacement du secteur de boot


boot = /dev/hda
#Temps d’attente avant de démarrer sur l’image par défaut
delay = 10
image = /boot/vmlinuz-2.6.8 # Emplacement de l’image du noyau
# sur le disque.
label = Ancien noyau # Nom qui sera affiché lors de la sélection
# interactive au démarrage
root = /dev/hda1 # Partition à utiliser pour démarrer
read-only
# La même configuration mais pour un autre noyau
image = /boot/bzImage-2.6.10
label = Nouveau noyau
root = /dev/hda1
read-only
Installation 77

# Une entrée pour un système de type Windows


other = /dev/hda3
label = Windows
table = /dev/hda

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

Grub est séparé en deux parties nommées « stages » :

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

Example 12.2. Exemple de fichier de configuration de Grub

# Valeurs par défaut


timeout 10 # Démarre le noyau par défaut au bout de 10secondes
Installation 78

default 0 # Noyau par défaut


# section 0
title GNU/Linux # Titre
root (hd0,1) # Partition/dev/hda2 comme racine
kernel/boot/vmlinuz root=/dev/hda2 ro # noyau et paramètres
initrd/boot/initrd

# 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

Chapter 13. Installation de programmes

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 :

• Les utilitaires fournis avec le système pour l'administrer ou l'utiliser,

• Le gestionnaire d'installation de programmes,

• Des personnalisations au niveau du noyau.

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.

13.2. Librairies et dépendances


La plupart des programmes utilisent des fonctionnalités déjà disponibles dans ce qu'on appelle des librairies (ou
encore bibliothèques). L'utilisation de librairies permet aux programmeurs de ne pas avoir à réinventer la roue à
chaque fois qu'ils ont besoin d'utiliser des fonctionnalités « classiques », par exemple écrire ou lire un fichier,
récupérer un fichier depuis une URL, afficher une image, etc.

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 :

[user@linux ~]$ ldd /usr/bin/vi

13.3. L'approche RedHat


Les paquetages de la distribution RedHat sont présents sous deux formats :

• Un portant l'extension ".rpm" représentant l'application binaire (compilée)

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

13.3.1. Comment obtenir ces Paquetages ?


RedHat est une distribution livrée avec un certain nombre de paquetages de base, testés et approuvés par la
société RedHat. Toutes les applications autres que celles qui sont proposées doivent donc être téléchargées par
l'utilisateur.

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

13.3.2. Installation, désinstallation de paquetages


La commande rpm permet de gérer les programmes au travers des RPMs binaires (.rpm) ainsi que de créer des
fichiers RPM à partir des RPMs sources (src.rpm).

Table 13.1. Options de la commande rpm


Installation de programmes 81

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 :

Table 13.2. Types d'erreurs


Affichage Description
5 somme de contrôle md5
S taille du fichier
L lien symbolique
T date de modification
D fichier périphérique
U l'utilisateur propriétaire du fichier
G le groupe propriétaire du fichier
M le mode du fichier

13.3.3. Création d'un rpm à partir des RPMs sources


Tout fichier RPM est un fichier destiné à une architecture matérielle précise, par exemple : samba-
2.2.5.i586.rpm est destiné aux ordinateurs dotes d'un processeur de type i586.

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 :

[user@linux ~]$ rpm --rebuild samba-2.2.5.src.rpm

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.

13.4. L'approche Debian


Les paquetages Debian sont aussi utilisables par défaut sur d'autres distributions dérivées de Debian comme
Ubuntu ou Knoppix. Les paquetages debian existent comme ceux de Red Hat sous deux formats, un format bin-
Installation de programmes 82

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 :

Table 13.3. Commandes Debian


Commande Description
dpkg Commande dite de bas niveau, en ligne de com-
mande, elle permet l'installation, la désinstallation et
la gestion des informations des paquetages installés.
apt-get Cette commande est la commande la plus populaire
du système Debian. C'est une commande de haut
niveau, servant d'interface à la commande dpkg. Elle
permet le téléchargement et l'installation automatique
des paquetages en gérant toutes les dépendances de
celui-ci.
aptitude C'est une interface de la commande apt-get. Elle est
exécutée lors de l'installation d'un système Debian.
alien Commande permettant de transformer un paquet dans
un autre format. Les formats supportés sont Redhat
rpm, Debian deb, Slackware tgz ou encore Solaris
pkg.
dselect Cet outil moins évident à utiliser que dpkg et apt-get
et est en mode ncurses (pseudo graphique) .

La commande dpkg est configurable à l'emplacement de son fichier de configuration: /etc/dpkg/dpkg.cfg.

Les repository sont quant à eux situés dans le fichier /etc/apt/sources.list.

De plus vous pourrez trouver des informations complémentaires sur les paquets installés ou non dans le reper-
toire "/var/lib/dpkg"

Table 13.4. Options de la commande dpkg


Option Description
-i fichier.deb Installation d'un paquetage DEBIAN
-l fichier.deb Liste tous les fichiers installés par le package
-r fichier.deb Supprime un paquetage
-I fichier.deb Permet d'obtenir des informations sur un paquetage
(la version par exemple)

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 :

Table 13.5. Noms de versions Debian


Installation de programmes 83

Unstable Cette distribution est la moins stable et la plus récente


de Debian. Elle est réservée aux développeurs Debi-
an. Une fois certains bugs corrigés, les paquets mi-
grent en testing. Elle est utile pour les utilisateurs
expérimentés voulant bénéficier des dernières ver-
sions des applications.
Testing Cette distribution offre des paquetages stables mais
dont l'ensemble des tests de sécurité n'ont pas été
effectués.
Stable Cette distribution est la plus stable de Debian. Elle est
utilisée pour les serveurs et par les utilisateurs nor-
maux.

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.

Table 13.6. Les différents pool


Nom Description
main Contient uniquement des logiciels libres qui
représentent la distribution officielle Debian.
contrib C'est là que sont stockés des logiciels libres mais
dépendant de paquetages propriétaires.
non-free C'est le répertoire des logiciels payant ou possédant
des licences très restrictives.

13.4.1. Installation, désinstallation, informations, mise à jour


L'installation, d'une manière générale, est faite à l'aide de la commande apt-get. Il est également possible
d'installer un paquet avec la commande dpkg. Il faut alors disposer du fichier en local.

[root@linux ~]# dpkg -i samba-2.2.5.deb

ou

[root@linux ~]# apt-get install samba

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.

Pour supprimer un package installé :


Installation de programmes 84

[root@linux ~]# dpkg -r samba

ou

[root@linux ~]# apt-get remove samba

ou

[root@linux ~]# apt-get --purge remove samba

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 :

Table 13.7. Les options de la commande dpkg


Option Description
-l permet d'afficher l'ensemble des paquetages installes
-L package affiche l'ensemble des fichiers constituant un
paquetage
-s package affiche l'état d'un processus
-S fichier permet de retrouver l'appartenance d'un fichier à un
paquetage

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 :

[root@linux ~]# apt-cache show foo

Permet de visualiser les informations d'un paquetage installé ou pas sur la machine.

Afin de mettre à jour la liste des paquetages disponibles, on utilise la commande :

[root@linux ~]# apt-get update

13.4.2. Création d'un fichier deb à partir des sources dsc


Installation de programmes 85

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 :

[root@linux ~]# apt-get source nomdupaquet

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 :

[root@linux ~]# dpkg-buildpackage -rfakeroot -uc -b

13.5. Installation depuis les sources


Les logiciels installés depuis les sources sont présents sous la forme de fichiers tar compressés soit en bzip2 soit
en gzip2. Ces archives sont construits toujours de la même manière. On les appelle des « tarballs ». Cette
méthode d'installation générique fonctionne sur toutes les distributions. La procédure d'installation d'un tarball
suit toujours la même logique ainsi définie :

Prenons l'exemple d'un paquetage appelé packetage.tar.gz :

1. téléchargement de l'archive à l'aide de la commande wget

[user@linux ~]$ wget http://www.foobar.com/Download/archive.tar.gz

2. Décompression de l'archive a l'aide de la commande tar

[user@linux ~]$ tar xzf archive.tar.gz

3. Aller dans le répertoire créé par la décompression

[user@linux ~]$ cd archive

4. Lancement du script shell configure

[user@linux ~]$ ./configure

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

spécifiques à certains programmes pour en obtenir la liste, il vous suffit de taper :

[user@linux ~]$ ./configure --help

5. Compilation de l'application

[user@linux ~]$ make

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

Chapter 14. Architecture et materiel

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

• Test de la mémoire et des périphériques

• Localisation du système d'eploitation sur les différents périphériques de stockage

Figure 14.1. Initialisation du système


Architecture et materiel 88

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

• des ports de communication présents

• de la fréquence d'horloge

• etc.

Figure 14.2. Exemple de configuration via le BIOS

14.1.1. Configuration de la date et de l'heure


L'une des fonctions primaires du BIOS est de gérer l'horloge de la carte mère. Cette horloge est initialement
configurée dans le BIOS en entrant date et heure dans les champs appropriés. Une fois cela efefctuée, le système
d'exploitation peut accéder à ses informations et les utiliser.

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

14.1.2. Disques et périphériques de boot


Une autre fonction essentielle de la configuration du BIOS est la sélection des différents périphériques de stock-
age. Les PCs actuels peuvent contenir une grande variété de périphérique pour cela tels que :

• Les lecteurs de disquette (floppy disks)

• Les disques durs (hard disks)

• Les CD-ROMs, CD-RWs, et autres DVD-ROMs,

• Les lecteurs de type ZIP ou JAZ

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 disque dur-inter (IDE ou SCSI)

• Un lecteur CD-ROM (IDE ou SCSI)

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

14.1.3. La limite des 1024 Cylindres


Avec la plupart des systèmes d'exploitation, les informations chargées par le BIOS lors du démarrage sont
situées au début des cylindres du disque dur dans le "Master Boot Record", ou MBR. Les utilisateurs de Mi-
crosoft Windows ont rarement à penser au MBR car il n'y a pas d'autres emplacements possibles.

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.

14.2. Attribution des ressources


Le BIOS permet églament de configurer l'attribution des ressources du système aux périphériques. Les détails de
configuration sont :

• 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 :

Table 14.1. Configuration courante des périphériques


Périphériques Adresse entrée/sortie IRQ DMA
ttyS0 (COM 1) 3f8 4 /
ttyS1 (COM 2) 2f8 3 /
ttyS2 (COM 3) 3e8 4 /
ttyS3 (COM 4) 2e8 3 /
lp0 (LPT 1) 378-37f 7 /
lp1 (LPT 2) 278-27f 5 /
fd0, fd1 (disquettes 1 et 3f0-3f7 6 2
2)
Architecture et materiel 91

Périphériques Adresse entrée/sortie IRQ DMA


fd2, fd3 (disquettes 3 et 370-377 10 3
4)

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.

• 1 port parallèle lp0

14.3. Interfaces réseaux, USB et SCSI


Certains équipements ; en particulier d’anciens contrôleurs SCSI et certaines cartes réseaux ; nécessitent une
configuration particulière.

14.3.1. Les interfaces réseaux


D’une manière générale, la méthodologie de configuration de ces périphériques peut se résumer en 3 périodes :

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

Figure 14.4. Exemple de cavaliers présent sur les cartes réseaux


Architecture et materiel 92

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

Figure 14.5. Exemple de carte ISA équipée d’une EEPROM

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

Figure 14.6. Exemple de carte PCI moderne


Architecture et materiel 93

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.

Voici maintenant /proc/dma et /proc/ioports pris depuis la même machine :

# 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

0534-0537 : MS Sound System


e800-e8be : aic7xxx
ec00-ecbe : aic7xxx
ef00-ef3f : eth0
ffa0-ffa7 : ide0
ffa8-ffaf : ide1

14.3.2. Les interfaces SCSI


SCSI désigne un type d’interface utilisé les périphériques de stockage et de diffusion comme les disques durs,
les lecteurs de bandes ou encore les CDROMs. SCSI est un standard sur les architectures de type serveur PC,
Station de travail UNIX et de nombreux modèles Apple. L’avantage du SCSI sur l’IDE est principalement un
plus grand débit combiné avec une flexibilité accrue.

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 différents types d’interface SCSI


La première interface SCSI-1 est une interface 8 bits cadencée à 5-MBps (mégaoctets par seconde). Cette inter-
face utilise un connecteur Centronics à 50 broches. Cette interface est remplacée par des connecteurs Micro D à
50 broches également.

Figure 14.7. Connecteur 50 Broches Centronics

Figure 14.8. Connecteur SCSI interne 50 Broches


Architecture et materiel 95

Figure 14.9. Connecteur SCSI 68 pin SCSI 3

Table 14.2. Les différents types de SCSI


Type Description
SCSI-1 8-bit, 5-MBps, Connecteurs 50 broches Centronics
SCSI-2 8-bit, 5-MBps, Connecteurs 50 broches Micro-D. In-
terchangeables avec le SCSI-1. Adéquate pour les lec-
teurs de bandes mais trop lent pour les disques ac-
tuels.
Wide SCSI 16-bit, 10-MBps, Connecteurs 68 broches Micro-D.
Ce standard utilise un cable plus large pour supporters
les transferts 16 bits, permettant ainsi un plus grand
débit à fréquence égale.
Fast SCSI 8-bit, 10-MBps, Connecteurs 50 broches Micro-D. Un
plus grand débit est obtenu en doublant la fréquence
d’horloge initiale.
Fast Wide SCSI 16-bit, 20-MBps, Connecteurs 68 broches Micro-D.
Cette interface combien à la fois la fréquence doublé
et le bus 16 bits.
Ultra SCSI 8-bit, 20-MBps, Connecteurs 50 broches Micro-D.
Amélioration de la fréquence d’horloge.
Ultra Wide SCSI (SCSI-3) 16-bit, 40-MBps.
Ultra2 8-bit, 40-MBps.
Wide Ultra2 16-bit, 80-MBps

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.

Les IDs SCSI


Chaque périphérique sur un bus SCSI, y compris le contrôleur, dispose d’une adresse basée sur une lecture bin-
aire de lignes d’adresse. Un bus 8 bits à 3 lignes et peut donc contenir 2^3 adresses, soit 8 périphériques. Pour
un bus fonctionnant en 16 bits, 4 lignes sont utilisées permettant l’utilisation de puissance soit 16 périphériques.
Il en résulte ainsi respectivement la possibilité d’utiliser 7 et 15 périphériques en plus du contrôleur.
Architecture et materiel 96

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.

Les LUNs SCSI


Certains périphériques SCSI, tels les contrôleurs RAID, apparaissent au contrôleur comme une seule adresse.
Pour que le contrôleur puisse accéder à tous les disques en utilisant une seule adresse, un n° additionnel appelé
LUN (Logical Unit Number) est fourni. Les lecteurs simples n’utilisent pas le LUN ou renvois le LUN 0.

Les fichiers de périphériques sous Linux


Sous Linux, les disques IDE sont nommés /dev/hda, /dev/hdb, /dev/hdc, and /dev/hdd. Pour les disques SCSI,
les noms sont : /dev/sda, /dev/sdb, … La première partition du disque /dev/sda sera ainsi /dev/sda1

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.

Les terminateurs SCSI


Un bus SCSI peut être considéré comme un câble avec des périphériques connectés sur sa longueur, mais pas au
bout. A la place d’un périphérique se trouvant au bout de la chaîne, le bus SCSI utilise des terminateurs, qui sont
de simples unités électriques qui conditionnent le signal et réduisent le bruit électrique sur le bus.

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

Figure 14.10. Exemple de terminateur externe


Architecture et materiel 97

Figure 14.11. Exemple de terminateur interne

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.

Les contrôleurs SCSI pour PCs


La plupart des Pcs ne sont pas fournis avec des systèmes SCSI en standard. Les contrôleurs SCSI disposent
donc de leurs propres firmware accompagnés d’un BIOS avec son propre menu de configuration.

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é

• Périphérique de boot par défaut : Généralement mis à 0 pour un disque dur

• Terminateur intégré : Dépend de la topologie utilisée

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

14.3.3. Les interfaces USB


Architecture et materiel 98

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.

• OHCI HCD pour l'usb 1.1

• UHCI pour l'usb sur les chipset Intel et VIA

• EHCI HCD pour le support de l'usb 2.0

Afin de connaître quel module activer, vous pouvr avoir recourt à la commande suivante :

$ lspci | grep -o -e .HCI


EHCI
OHCI

La commande usbmodules renvoie le même résultat.

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.

14.4. Configuration des modems et cartes réseaux


14.4.1. Configuration des modems
Le rôle d’un modem (modulateur démodulateur) est de convertir un signal numérique en signal analogique et in-
versement.

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.

Figure 14.12. Modem USR Robotics externe

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.

Figure 14.13. Exemple de modem interne (PCI)

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.4.2. Configuration des cartes sons


Pour quasiment presque tous les PC fournis de nos jours, un périphérique audio est fourni. Les pilotes Linux
sont disponibles pour la plupart de ces équipements. La configuration de ce type de cartes se fait via un module
du kernel et une spécification correcte des ressources utilisées par la carte.

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

Chapter 15. Serveur X

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.

15.1.1. L'architecture de X-window et ses limites


Ce projet repose sur le principe d'une application réseau client/serveur. Le serveur gère l'accès aux périphériques
tels que la carte graphique, l'écran, le clavier... Les applications graphiques (navigateur, client de messagerie,
éditeur de texte, ...) sont des clients du serveur X. Ces clients font des requêtes au serveur X et reçoivent les
réponses via la Xlib, la librairie principale d'X qui permet d'interpréter des requêtes "simples" de clients pour les
transformer en instructions "complexes" conformes au standard X-Window et interprétables par le serveur X.

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

15.1.2. Le projet XFree86


Thomas Roell, étudiant Allemand, commence en 1990 à porté X-Window en version X11R4 pour PC. Son pro-
jet qui se nomme alors X386, attire l'attention du X Consortium, et devient la référence pour PC. Le projet est fi-
nalement abandonné par Roell en 1990 moins d'un an après sa création. Le projet est repris en 1991 par quatre
développeurs : David Wexelblat, Glenn Lai, David Dawes et Jim Tsillas qui rebaptisent le projet XFree86. Ce
noyau de développeurs nommé core-team décide des évolutions du projet et accepte ou non les contributions
extérieures.

15.1.3. Le projet Xorg


La core-team est considérée comme un frein par certains développeurs comme Keith Packard qui décide alors
de forker le projet, c'est à dire de commencer un nouveau projet en partant de l'ancien, avec une nouvelle équipe
de développement et créé une structure pour son projet : X.org foundation. Rappelons que Keith Packard a
développé RandR et Xft2 qui ont permis à X d'afficher des polices anti-aliasées pour la première fois.

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.

Table 15.1. Outils pour générer un fichier de configuration


XFree86 Xorg
xf86config xorgconfig
xf86cfg xorgcfg
XF86Setup

15.2.2. Edition du fichier de configuration


Le fichier se nomme /etc/X11/XF86Config-4 pour XFree et /etc/X11/xorg.conf pour X.org.

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.

Les différents types de sections sont décrits ci-dessous.

Table 15.2. Les sections des fichiers XF86Config-4 et xorg.conf


Nom Description
Files Chemin vers les fichiers
ServerFlags Options supplémentaires pour le serveur X
Module Chargement dynamique de modules
InputDevice Périphériques d'entrée
Device Cartes graphiques
Monitor Moniteurs
Modes Modes vidéos
Screen Configuration des écrans
ServerLayout Rassemble les différents Identifier à utiliser
DRI Configuration du DRI (Direct Rendering Infrastruc-
ture)

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.

Voici une section qui déclare un clavier avec 102 touches :

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

15.3. Lancement du serveur X


Il existe différentes façons de lancer X :

• directement via la commande startx

• en lançant un gestionnaire de connexion graphique tel que XDM, GDM ou KDM.

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 #):

exec gnome-session #lance gnome


#exec startkde #lance kde
Serveur X 107

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

• Gnome Terminal (Gnome terminal)

• Konsole (KDE terminal)

• ...

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.

Par exemple pour lancer l'émulateur de terminal spécifique à gnome:

[user@linux ~]$ gnome-terminal

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 )

Pour lancer X sur le display 2, exécutez dans un terminal la ligne suivante

[user@linux ~]$ X :2

Cette commande lancera X sur l'affichage F9

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

Si vous avez d'autre lignes n'oubliez pas de les commenter.

[user@linux ~]$ startx :2

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.

15.5.2. Configuration d'XFree86 et X.org


Nous partirons du principe que votre affichage graphique est configuré et fonctionnel sur votre serveur et sur
votre client. Sur certaines distributions, l'écoute du serveur graphique via TCP est désactivé lors de l'appel du
script startx. Il va falloir l'éditer pour l'activer. L'option -nolisten tcp est à enlever. Comment retrouver
votre fichier startx ?

[root@linux ~]# which startx


/usr/X11R6/bin/startx

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=""

Il doit maintenant ressembler à cela :

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.

[user@linux ~]$ startx :1 + <IP>


Serveur X 109

Exemple (A taper dans notre terminal graphique xterm): La machine 172.16.34.1 peut maintenant nous joindre !

[root@linux ~]# xhost + 172.16.34.1


172.16.34.1 being added to access control list

• xhost : permet de restreindre l'accès à notre machine

• xhost + : permet d'autoriser tout le monde peu recommande

• xhost - : permet d'interdire l'accès au IP non autorisées

• xhost {+/-} {ip} : permet d'autoriser ou de restreindre l'accès à une machine

15.5.3. Afficher des applications à distance


Il ne nous reste plus qu'à lancer une application. Pour cela nous allons utiliser la commande suivante :

[user@linux ~]$ DISPLAY=mon_ip:1 commande

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

[user@linux ~]$ DISPLAY=172.16.34.1:1 \


/usr/X11R6/bin/xclock

15.5.4. Afficher un environnement complet


Le principe est exactement le même :

• Gnome

Remplacez le chemin vers votre binaire gnome-session (which gnome-session)

DISPLAY=172.16.34.1:1 /usr/bin/gnome-session

• KDE

DISPLAY=172.16.34.1:1 /usr/bin/startkde

Vous aimerez peut-être aussi