Académique Documents
Professionnel Documents
Culture Documents
Administration linux-FR PDF
Administration linux-FR PDF
de Paul Sheer.
Thierry Lepoint.
Institut Suprieur d'Electronique et du Numrique
41, boulevard Vauban, 59046 Lille Cedex (France).
8 juillet 2006
1
Sommaire.
1 GNU/Linux et les logiciels libres 31
2 Introduction 35
3 Les bases 38
4 Matriel PC 47
5 Les commandes de base 58
6 Les expressions rgulires 81
7 Modications de chiers textes 85
8 Les scripts du shell 92
9 Flux et sed comme diteur de ux 103
10 Processus et variables d'environnement 111
11 Courriel 125
12 Comptes d'utilisateurs et droits 129
13 Utilisations des services internet 137
14 Ressources Linux 142
15 Droits et les trois types de temps 147
16 Liens symboliques et physiques 151
17 Documentation pr-installe 154
18 Survol de la structure des rpertoires Unix 160
19 Les priphriques d'Unix 166
20 Partitions, systmes de chiers, formatage et montage 197
21 Scripts de shell avancs 213
22 Services du systme et lpd 235
23 Elments de programmation C 248
24 Bibliothques partages 276
25 Paquets sources et binaires 280
26 Introduction IP 290
27 TCP et UDP 306
28 DNS et rsolution de noms 317
29 Systme de chiers en rseau NFS 328
30 Les services excuts sous inetd 333
31 exim et sendmail 340
32 Dmarrage, lilo et initrd 357
33 init, ?getty et niveaux d'excution Unix 365
34 Envoi de tlcopies 373
35 uucp et uux 377
36 Le systme de chiers Linux 387
37 httpd : serveur web Apache 431
38 crontd et atd 452
39 Serveur Postgres SQL 456
40 smbd le projet NT Samba 467
41 named serveur de noms de domaine 480
42 Protocol Point--Point Rseau Dialup 496
43 Sources du noyau Linux, modules et support matriel 515
44 Le systme X-Window 537
45 Unix et la scurit 566
A Programme de cours 580
B Certication LPI Rfrences croises 585
3
Index
4
Paul Sheer.
5
Thierry Lepoint
Remerciements
Mes remerciements vont Abraham van der Merwe, rapporteur, et Jane
Bonnell, mon diteur. Je tiens aussi remercier Jonathan Maltz, Jarrod Cin-
man et Alan Tredgold pour m'avoir introduit dans le monde GNU/Linux ds
1994. Ma reconnaissance va aussi aux dveloppeurs de la Free Software Founda-
tion qui dvelopprent LATEX, TEX, GhostScript, GhostView, Autotrace, XFig,
XV, Gimp, la police de caractres Palatino, les dirents styles d'extension
de LATEX, DVIPS, DVIPDFM, ImageMagick, XDVI, XPDF, et LATEX2HTML,
sans lesquels ce document et t trs dicilement ralisable. Pour en nommer
quelques-uns : John Bradley, David Carlisle, Eric Cooper, John Cristy, Peter
Deutsch, Nikos Drakos, Mark Eichin, Brian Fox, Carstein Heinz, Spencer Kim-
ball, Paul King, Donald Knuth, Peter Mattis, Frank Mittelbach, Ross Moore,
Derek B. Noonburg, Johannes Plass, Sebastian Rahtz, Chet Ramey, Tomas Ro-
kicki, Bob Scheier, Rainer Shoepf, Brian Smith, Supoj Sutanthavibul, Herb
Swan, Tim Theisen, Paul Vojta, Martin Weber, Marck Wicks, Masatake Ya-
mato, Ken Yap, Herman Zapf.
Merci Christopher R. Hertel pour avoir contribu l'introduction de Samba.
Mes remerciements les plus vifs au projet GNU de la Free Software Foun-
dation, aux dveloppeurs innombrables de la Free Software, et aux nombreux
lecteurs qui ont donn un retour prcieux sur le site web : http ://www.icon.co.-
za/~psheer/book.
Paul Sheer
7
Thierry Lepoint
Table des matires
2 Introduction 35
2.1 Quelle est la matire traite dans ce livre ? . . . . . . . . . . . . . 35
2.2 Comment utiliser ce cours ? . . . . . . . . . . . . . . . . . . . . . 35
2.3 Que faut-il pour dbuter ? . . . . . . . . . . . . . . . . . . . . . . 35
2.4 Un livre, un cours. . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.5 La documentation que je ne comprends pas. . . . . . . . . . . . . 36
2.6 L'Institut des Professionnels de Linux (LPI) et les conditions
pour devenir un ingnieur certi Red-Hat (RHCE) . . . . . . . 36
2.7 Pas RedHat mais de type RedHat . . . . . . . . . . . . . . . . 37
2.8 Mises--jour et errata. . . . . . . . . . . . . . . . . . . . . . . . . 37
3 Les bases 38
3.1 Bases binaire, octale, dcimale et hexadcimale. . . . . . . . . . . 38
3.2 Fichiers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.3 Commandes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.4 Connexion et changement de mot de passe. . . . . . . . . . . . . 42
3.5 Acher des chiers. . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.6 Touches d'dition de la ligne de commande. . . . . . . . . . . . . 43
3.7 Touches spciales de la console. . . . . . . . . . . . . . . . . . . . 45
3.8 Cration de chiers. . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.9 Caractres permis pour les noms de chiers. . . . . . . . . . . . . 45
3.10 Rpertoires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4 Matriel PC. 47
4.1 Carte-mre. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.2 IDE matre et esclave. . . . . . . . . . . . . . . . . . . . . . . . . 51
4.3 CMOS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.4 Priphriques srie. . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.5 Modems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
8
TABLE DES MATIRES 9
11 Courriel 125
11.1 Recevoir et envoyer du courriel. . . . . . . . . . . . . . . . . . . . 127
11.2 Protocole SMTP - Envoyer le courriel au port 25. . . . . . . . . . 127
29
Table des gures
30
Chapitre 1
31
CHAPITRE 1. GNU LINUX ET LES LOGICIELS LIBRES*. 32
Introduction
Tandis qu'avec d'autres livres vous risquez de n'avoir que les pieds mouills,
celui-ci vous laisse d'abord barboter un peu, vous pousse la tte sous l'eau et
vous alimente en oxygne.
35
CHAPITRE 2. INTRODUCTION 36
des scripts de shell complexes, mettre en place des rseaux de grande taille,
interfacer des bases de donnes, le web et le courriel.] En fait, ces certications
ne concernent pas la programmation.
Les bases
Ce chapitre dcrit des bases d'informatique familires de nombreux utili-
sateurs. La meilleure manire d'apprhender la mthode qu'utilise un ordina-
teur pour eectuer des enregistrements et pour grer l'information consiste
se demander comment vous feriez personnellement. Trs souvent, le mode de
fonctionnement d'un ordinateur est similaire la mthode que vous utiliseriez
vous-mme pour traiter le mme problme la premire fois. Les seules limitations
sont la faisabilit logicielle et l'imagination. Pour le reste, tout est permis.
38
CHAPITRE 3. LES BASES 39
3.2 Fichiers.
Le chier est un composant de base de tous les ordinateurs. Il contient un
seul bloc continu de donnes. Toute donne quelle que soit son type peut
tre contenue dans un chier et, il n'y a pas de donne qui ne puissent y tre
stockes. Par ailleurs, il n'y a pas de donne qui soit stocke ailleurs que dans
un chier. Un chier contient des donnes d'un mme type ; par exemple, une
image est enregistre dans un seul chier. Durant sa prparation, ce livre a t
enregistr dans un seul chier. Il est peu commun que dirents types de chiers
(par exemple un texte et des images) se trouvent ensemble dans le mme chier
car cela n'est pas trs commode. Un ordinateur peut contenir typiquement de
l'ordre de 10.000 chiers trs varis. Chaque chier possde un nom. Un nom de
chier sur une machine Linux ou Unix peut comporter jusqu' 256 caractres.
Usuellement, le nom de chier est explicite. Vous pourriez nommer une des
lettres de votre correspondance une amie ainsi : Mary_Jones.lettre. A partir
de maintenant, si vous voyez une police de caractres celle-ci, il s'agira de
mots pouvant tre interprts hors cran. Le nom que vous choisissez n'a pas
d'importance du point de vue de l'ordinateur et il pourrait tre une autre combi-
naison de chires et de lettres. Cependant, vous ferez rfrence ces donnes-l
l'aide de ce nom de chier-l lorsque vous souhaiterez traiter ce chier. Aussi,
prfrerez-vous que le nom de chier soit aussi descriptif que possible. [...]
Quel que soit le type de chier, toutes les donnes contenues dans ce dernier
consistent en une suite de nombres. La taille du chier n'est que la longueur de
la liste de ces nombres. Chaque nombre est appel un octet (byte). Chaque octet
contient 8 bits.2 Chaque bit vaut 1 ou 0 et donc, il y a :
2 2 2 2 2 2 2 2 = |{z} 256 combinaisons possibles. Donc, un octet
| {z }
8 bits 1 octet
ne peut contenir qu'un nombre infrieur ou gal 255. Il n'y a pas de type de
donnes qui ne puisse tre reprsent par une liste d'octets.
La lettre Mary sera encode sous forme d'octets pour tre enregistre sur le
disque de l'ordinateur. Nous savons tous qu'une image de tlvision n'est qu'un
ensemble de points (pixels) qui balayent l'cran de gauche droite. De la mme
manire, une image peut tre reprsente dans un chier, c'est--dire comme
une squence d'octets o chacun de ceux-ci est interprt comme un niveau de
brillance : 0 pour le noir, 255 pour le blanc. Dans le cas de la lettre Mary, la
convention est d'enregistrer A comme 65, B comme 66, etc. Chaque caractre
de ponctuation a son quivalent numrique.
Une table de correspondance appele jeu de caractres ou table de caractres
permet d'tablir le lien entre lettres et nombres. Le jeu de caractres le plus
rpandu ce jour est le jeu de caractres ASCII qui est l'acronyme d'American
Standard Code for Information Interchange . Le tableau 3.3 montre le jeu de
caractres ASCII entre les caractres et leur quivalent hex, dcimal et octal.
2 NdT : Le terme bit est une contraction de b inary dig it (ou nombre binaire).
Oct Dc Hex Caract Oct Dc Hex Caract Oct Dc Hex Caract Oct Dec Hex Caract Oct Dec Hex Caract
3.3 Commandes.
Le deuxime point commun tout ordinateur invent ce jour est la com-
mande. A l'aide de simples mots saisis squentiellement, vous indiquez un
ordinateur ce qu'il doit faire. Les ordinateurs modernes semblent en avoir ni
avec les commandes parce qu'ils prsentent de belles interfaces graphiques et
permettent que des actions soient ralises avec une souris. Cependant, fonda-
mentalement, des commandes sont excutes de manire masque. La saisie de
commandes reste le seul moyen d'exercer le contrle sur un ordinateur. Vous
ne connaissez rellement rien de l'ordinateur tant que vous n'acqurez pas les
commandes. L'utilisation d'un ordinateur revient donc saisir des mots puis
presser jusqu' ce que l'ordinateur ache une rponse l'cran. Pour la
plupart, les commandes interagissent avec un ou plusieurs chiers.
3.10 Rpertoires.
Nous avons mentionn qu'un systme peut contenir typiquement 10.000 -
chiers. Etant donn qu'il serait ardu de s'y retrouver dans 10.000 chiers a-
chs suite un ls, ces derniers sont regroups selon leur type dans dirents
CHAPITRE 3. LES BASES 46
dossiers de manire tre isols d'autres chiers. Par exemple, votre lettre
pourrait tre regroupes avec d'autres lettres dans un dossier idoine. Sur un or-
dinateur, un dossier est appel un rpertoire. Ceci est la troisime caractristique
commune des ordinateurs : tout chier peut faire partie d'un rpertoire. Pour
comprendre comment fonctionnent les rpertoires, tapez la commande mkdir
lettres, le terme mkdir signifant make directory. A prsent, tapez ls. Ceci de-
vrait vous retourner une liste avec aussi bien Mary_Jones.lettre que lettres.
Le chier lettres ne contient encore rien sauf le nom d'un rpertoire dans le-
quel d'autres chiers pourront tre placs. Pour se dplacer dans le rpertoire
lettres, il faut taper la commande cd lettres o cd signie change directory.
Etant donn que ce rpertoire vient d'tre cr, il ne contient pas de chiers
et cela peut se vrier en tapant ls. Vous pouvez crer un chier en excutant
la commande cat comme vous l'avez fait prcdemment (essayez). Pour reve-
nir dans le rpertoire original, vous utiliserez la commande cd .. o .. a la
signication spciale de vous faire sortir du rpertoire courant. Tapez nou-
veau ls pour vrier que vous tes remont d'un cran dans la hirarchie de vos
rpertoires.
Cependant, il est ennuyeux que vous ne puissiez voir la dirence entre chier
et rpertoire. La direnciation se fait en utilisant la commande ls -l o -l est
une option signiant format long. Si vous appliquez cette commande vous obser-
verez de nombreux dtails qu'ventuellement vous ne comprenez pas encore. Les
trois informations qui d'emble attireront votre attention sont : (i) tout--fait
droite, le nom de chier ; (ii) la taille mentionne dans la cinquime colonne
(le nombre d'octets que contient le chier) et (iii) le type de chier, information
se trouvant tout--fait gauche. Parmi la chane de caractres, vous trouverez
l'extrme gauche soit - ou d. Un - signie que vous avez faire un chier
tandis qu'un d montre qu'il s'agit d'un rpertoire (directory). La commande ls
-l Mary_Jones.lettre achera seulement le chier Mary_Jones.lettre ; ceci
est utile pour connatre la taille d'un chier particulier.
En fait, il n'y a pas de limitation sur le nombre de rpertoires qu'on peut
emboter les uns dans les autres. De suite, nous allons entrevoir la disposition
de tous les rpertoires sur votre ordinateur.
Tapez la commande cd / o / a la signication spciale de dsigner le rper-
toire qui englobe tous les autres et qu'on nomme la racine (root). Maintenant
tapez ls -l. Si la liste est trop longue et dborde au-del de votre cran, utilisez
plutt la commande ls -l | less (pressez alors PgUp ou PgDn pour naviguer
dans la page, puis q pour quitter). A prsent, vous pouvez vous dplacer dans
le systme l'aide de la commande cd en n'oubliant pas que cd .. vous fait
remonter d'un cran et que cd / vous replace dans le rpertoire racine.
A tout instant, vous pouvez utiliser la commande pwd (present working
directory) pour dterminer le rpertoire dans lequel vous tes.
Quand vous aurez ni, dconnectez-vous avec la commande logout (si vous
tes dans une console virtuelle) ou avec exit puis quitter la session dans le
menu graphique de base (si vous tes en mode graphique).
Chapitre 4
Matriel PC.
Ce chapitre dcrit de manire simplie les constituants matriels d'un PC.
Les lecteurs qui ont construit le leur ou qui ont congur divers priphriques
sur MS-Windows peuvent passer cette partie qui n'est incluse que pour tre
aussi complet que possible. En ralit, le titre aurait d tre Organisation d'un
micro-ordinateur ou, comment votre machine est lectroniquement structure.
4.1 Carte-mre.
A l'intrieur de votre machine, vous trouverez une carte de grande taille, en
un seul bloc, sur laquelle il y a de nombreux circuits. C'est la carte-mre (voir
la Figure 4.1). Elle est connecte une alimentation lectrique quelque peu
bourdonnante. Elle est aussi connecte au clavier et d'autres priphriques. [Il
n'y a rien qui ne soit la carte-mre, l'alimentation ou un priphrique]
La carte-mre contient quelques micro-puces de grande taille et certaines
plus nombreuses de petite taille. Voici une liste des composants les plus im-
portants :1
RAM : Random Access Memory ou mmoire-vive. Cette mmoire est une s-
quence linaire unique d'octets qui sont eacs lorsque l'ordinateur n'est
pas aliment. Elle contient une squence d'instructions simples codes sur
un plusieurs octets de longueur : par exemple, additionner ce nombre
celui-l ; dplacer ce nombre vers ce priphrique ; aller dans une autre
partie de la RAM pour obtenir d'autres instructions ; copier cette partie
de la RAM vers une autre partie. Si votre machine prsente 64 megs (ou
64 mega-octets ou encore 64 Mo), elle possde 64 1024 1024 octets
de RAM. Les localisations dans cet espace sont des adresses mmoires,
de sorte que dire adresse mmoire 1000 signie le 1000me octet en
mmoire.
ROM Une petite partie de la RAM n'est pas eace lors des arrts de la ma-
chine. Elle est nomme ROM ou Read Only Memory. Elle est xe d'ori-
gine par le constructeur et n'est usuellement pas modie durant la vie
de l'ordinateur (pas mme son nom). Elle correspond une partie de la
RAM proche de la n du premier mga-octet de mmoire si bien que cette
1 NdT : les noms en anglais ont t maintenus mais le texte propose une traduction franaise.
47
CHAPITRE 4. MATRIEL PC. 48
Fig. 4.2 Connexion terminale d'un pilote IDE typique avec le connecteur
IDE gauche, les cavaliers dans l'encoche centrale et la douille de connexion
d'alimentation ( droite).
4.3 CMOS.
CMOS [Complementary Metal Oxide Semiconductor] est une petite applica-
tion se trouvant dans la ROM. Elle est aussi connue sous le nom de congura-
tion BIOS de la ROM. Vous pouvez la dmarrer au lieu de votre OS (systme
d'exploitation ou Operating System) en appuyant, aprs avoir allum la ma-
chine, sur les touches ou , le plus souvent. En principe, le message Press
<touche> to enter set-up apparatra. En pratiquant ainsi, vous accderez au
programme CMOS o il vous est loisible de changer la conguration de votre
machine. Les programmes CMOS dirent selon les constructeurs.
A l'intrieur du CMOS, vous pouvez activer ou dsactiver des dispositifs ou
priphriques pr-installs (tels que votre souris ou vos ports en srie) ; congu-
rer l'horloge matrielle de votre ordinateur (pour avoir l'heure et la date justes) ;
ou encore slectionner la squence de dmarrage (en choisissant le priphrique
de dmarrage : le disque dur, un CD-Rom, tout ce dont dont vous aurez besoin
pour installer Linux). Les termes dmarrer, initialiser ou amorcer sont dsi-
gns en anglais par To boot [...]. Vous pouvez aussi y congurer votre disque dur.
Vous slectionnerez Hardrive autodetection que vous soyez en train d'instal-
ler une nouvelle machine ou que vous ajoutiez/retiriez un (ou des) disque(s)
[le terme autodetection se rapporte un systme, qui bien qu'tant incomplet,
s'autocongure. Dans ce cas, le CMOS sonde le priphrique pour dterminer
ses capacits. Les trs vieux CMOS exigent que vous entriez les donnes de pri-
phriques manuellement.] Les dirents CMOS prsentent direntes mthodes.
Aussi, feuilletez les menus de votre BIOS pour dterminer ce dont il est capable.
Le CMOS est important parce qu'il permet de congurer certains priph-
riques inclus sur la carte-mre. Les CMOS modernes vous permettent de xer
le nombre des ports E/S et des lignes IRQ pour particulariser les priphriques
que vous utilisez. Par exemple, vous pouvez permuter COM1 et COM2 ou utili-
ser un port E/S non-standard pour votre port parallle. Lorsqu'il est ncessaire
de congurer un priphrique sous Linux, il est judicieux d'teindre la machine
pour apprendre du CMOS ce qu'il sait de ce priphrique. Pour davantage d'in-
formations, consultez le chapitre 43.
DB-25
Seules huit des aiguilles sont rellement fonctionnelles, toutefois.
L'attribution des aiguilles leur fonction est mentionne dans le tableau 4.1.
La manire dont les priphriques srie communiquent est directe : un ux
d'octets est envoy entre l'ordinateur et le priphrique en divisant chaque octet
en 8 bits. La tension est ajuste sur une aiguille appele TD pin ou transmit
pin selon que le bit vaut 1 ou 0. Un bit de 1 correspond une tension ngative
(de -15 -5 volts) et un bit 0 une tension positive (de +5 +15 volts). Le
RD pin ou receive pin reoit les bits de la mme manire. L'ordinateur et le
priphrique srie doivent tre d'accord sur la vitesse de tranferts (data rate ou
serial port speed) de sorte que l'ajustement et la lecture des niveaux de tensions
soient synchroniss de manire idoine. La vitesse est souvent exprime en bps
(bits par seconde). Le tableau 4.2 montre une liste de vitesses de port srie
possibles.
Une souris communique avec une vitesse comprise entre 1.200 et 9.600 bps.
Les modems communiquent des vitesses de transfert de 19.200, 38.400, 57.600
ou 115.200 bps. Il est rare de trouver des priphriques srie ou des ports srie
qui ne supportent pas les vitesses reprises dans le tableau.
6 NdT : Ce mot dsigne toute connexion non-permanente avec ou sans rseau tlphonique.
CHAPITRE 4. MATRIEL PC. 54
Tab. 4.2 Vitesses typiques de transfert de donnes sur un port en srie (unit :
bps).
50 200 2.400 57.600 5760.00 2.000.000
75 300 4.800 115.200 921.600 2.500.000
110 600 9.600 230.400 1.000.000 3.000.000
134 1.200 19.200 460.800 1.152.000 3.500.000
150 1.800 38.400 500.000 1.500.000 4.000.000
CHAPITRE 4. MATRIEL PC. 55
Fig. 4.5 connexion distance entre deux ordinateurs relis par modems.
4.5 Modems.
Les lignes tlphoniques ayant t conues pour transporter la voix, elles
prsentent des limitations lorsqu'il s'agit de transmettre des donnes. Il ressort
que le meilleur moyen pour transfrer des nombres binaires via une ligne tl-
phonique est d'utiliser deux frquences : l'une basse pour 0 et l'autre plus haute
pour 1. La gure 4.5 illustre schmatiquement le procd.
La conversion d'une tension en frquence et l'opration inverse s'appellent
respectivement modulation-dmodulation, ce qui a donn le terme modem. Le
terme baud dsigne le nombre de fois que la frquence peut tre commute par
seconde ; le terme est interchangeable avec bps. Il existe beaucoup de nouvelles
techniques modernes de modulation pour obtenir le meilleur d'une ligne tl-
phonique de sorte que des modems 57.600 bps sont dsormais le standard (au
moment o ce texte est crit). Les modems ont sur les donnes d'autres actions
que la modulation : ils peuvent empaqueter les donnes pour rduire leur redon-
dance (c'est la compression de bits ou bit compression ), amliorer la dtection
d'erreurs et eectuer des compensations (correction d'erreurs ). De tels proto-
coles de modems portent les noms V.90 (57.600 bps), V.34 (33.600 ou 28.899
bps), V.42 (14.400 bps) ou V.32 (14.400 bps ou moins). Lorsque deux modems
sont en connexion, il est ncessaire qu'ils ngocient un protocole V utiliser.
Cette ngociation est base sur leurs capacits respectives et l'tat de la ligne
ce moment-l.
Un modem peut prsenter deux tats : le mode commande ou le mode de
connexion. Un modem est connect s'il peut entendre le signal de transport
d'un modem pair7 au cours d'un appel tlphonique actif (et qu'il y a pro-
bablement rception et transmission de donnes de la manire explique ici).
Autrement, il est en mode commande. Dans ce mode, un modem ne peut ni
moduler ni transmettre des donnes. En revanche, il interprte des squences
spciales de texte qui lui sont envoyes via une ligne srie. Ces squences de
7 au sens de semblable dans sa fonction.
CHAPITRE 4. MATRIEL PC. 57
texte commencent par les lettres AT et sont appeles ATtention commands. Les
commandes AT sont envoyes par votre ordinateur de manire congurer votre
modem pour les conditions du moment de votre ligne tlphonique, la fonction
projete, la capacit du port srie. Par exemple, il y a des commandes pour :
permettre une rponse automatique en boucle, installer la mthode de contrle
de ux, composer un numro, et raccrocher. La squence de commandes pour
congurer le modem est appele chane d'initialisation du modem. La manire
de raliser manuellement ces commandes est discute aux sections 33.6.3, 35.3
et 42.1. Cela deviendra intressant lorsque vous congurerez votre fournisseur
de service internet (ISP ou Internet Service Provider).
Vu que chaque modle de modem utilise un jeu de commandes lgrement
direntes, il est utile de se familiariser avec le manuel de votre modem. Les
modems modernes, pour la plupart, utilisent le jeu de commandes Hayes, un
jeu gnrique des commandes modems les plus utiles. Cependant, le jeu Hayes a
une manire de grer le contrle de ux matriel que beaucoup de modems n'ont
pas encore intgre. Chaque fois que dans ce livre des exemples d'initialisation
de modems seront donnes, une note se rapportant cette section sera mise.
Usuellement, il est susant de congurer votre modem avec les options par
dfaut du constructeur, mais souvent une seconde commande est requise pour
permette le contrle de ux matriel. Il n'y a pas de chane d'initialisation
pour tous les modems. Les sites internet http://www.spy.net/~dustin/modem
et http://www.teleport.com/~curt/modems.html sont des ressources utiles
pour obtenir des spcications sur les modems.
Chapitre 5
58
CHAPITRE 5. LES COMMANDES DE BASE. 59
cp <chier> <nouveau_chier>
cp <chier> [<chier> | ...] <rpertoire>
ou encore
cp chier nouveau_chier
cp chier [chier ...] rpertoire
Les lignes ci-dessus sont appeles rsum d'utilisation. Les signes < et >
ne doivent pas tre saisis mais bel et bien remplacer <fichier> par le nom de
votre chier. Les rsums d'utilisation sont parfois exprims en italique sous
la forme : cp fichier nouveau_fichier. Dans de rares cas, ils sont crits en
lettres capitales : cp FICHIER NOUVEAU_FICHIER. <chier> et <rpertoire>
sont des paramtres ou arguments de commande. Parfois, ils sont numriques
comme dans le cas d'une commande qui concernerait <ioport> [...]. Il y a des
conventions communes pour spcier l'usage d'une commande. Les crochets [ et
] ne sont pas usuellement saisis mais ils signient que leur contenu est optionnel.
Les points de suspension veulent dire que <fichier> peut tre mentionn de
manire rpte. Ils ne sont jamais saisis en ralit. Dsormais, vous tes cens
substituter vos propres paramtres en interprtant le rsum d'utilisation d'une
commande. Vous pouvez constater que la seconde ligne de la commande dcrite
ci-dessus montre qu'un ou plusieurs chiers peuvent tre achs avant de donner
le nom d'un rpertoire.
De ce qui vient d'tre dit, on dduit qu'il y a 2 mthodes d'utilisation de la
commande cp. Si le dernier nom n'est pas un rpertoire, cp copie le chier et le
renomme sous la forme du nom que vous avez indiqu en dernire position. Si
le dernier nom est un rpertoire, cp copie tous les chiers en argument dans le
rpertoire.
Le rsum d'utilisation de la commande ls est dcrit ainsi :
passwd [<nom_utilisateur>]
dans l'arborescence. Ainsi, vous voyez que / reprsente le passage d'un rper-
toire un autre. On parle du rpertoire alpha comme d'un sous-rpertoire de
nouveau.
La commande pwd permet de retourner le present working directory c'est-
-dire le rpertoire dans lequel vous tes en train de travailler ou rpertoire
courant. Cette commande vous permet de dterminer votre position dans l'ar-
borescence. Exprimentez cela en vous dplaant dans le rpertoire racine (ou
root) avec la commande cd / et revenez dans /home/<nom_utilisateur> (avec
cd /home/<nom_utilisateur>). Le rpertoire /home/<nom_utilisateur> est
connu sous le nom de rpertoire personnel (ou home directory) et est dsign par
l'abrviation ~. En d'autres termes, excuter : cd /home/<nom_utilisateur>
quivaut faire cd ~. Le processus par lequel un ~ est remplac par votre rper-
toire personnel est appel dveloppement de tilde (ou expansion tilde en anglais).
A prsent, vous devriez utiliser la commande man pour naviguer dans les
pages de man associes aux commandes que nous avons utilises. Tapez man cp,
man mv, man rm, man mkdir, man rmdir, man passwd, man cd, man pwd et bien
sr man man. Une grande partie de l'information contenue dans ces pages peut
encore vous tre incomprhensible pour l'instant. Nanmoins, naviguez parmi les
pages pour en acqurir la structure et savoir sous quel format elles se prsentent.
2 Par exemple : man 1 -a cp ache les explications sur l'usage de la commande cp.
CHAPITRE 5. LES COMMANDES DE BASE. 69
Les pages de man sont rfrences avec une notation telle que cp(1), pour ce qui
concerne la commande cp dans la section 1. On peut obtenir des informations
sur cp en tapant man 1 cp. Dsormais, cette notation sera utilise.
LESS=-Q
export LESS
cette dernire arme que vous pouvez le faire ; aumix permet un meilleur
contrle.
mikmod -.-interpolate -hq -.-renice Y <chier> joue des chiers Mod.
Ces chiers sont un type spcial de chiers audio qui stockent seulement
la dure et la hauteur des notes qui constituent une chanson, avec des
chantillons de chaque instrument de musique ncessaire la chanson.
Ceci rend une trs haute-qualit audio partir d'un chier d'une taille
extraordinairement petite. mikmod supporte les formats audio 669, AMF,
DSM, FAR, GDM, IMF, IT, MED, MOD, MTM, S3M, STM, STX, ULT,
UNI et XM -ce qui constitue probablement les types existant actuellement.
En fait, un grand nombre de chiers est disponible sur internet au format
de chier Mod. Les formats les plus communs sont .it, .mod, .s3m et .xm.
[Les chiers originaux .mod sont le produit des ordinateurs Commodore-
Amiga et ont seulement 4 pistes. Actuellement, les chiers Mod 16 pistes
(ou plus) sont comparables tous les chiers musicaux enregistrs].
updatedb
locate rpm
locate deb
locate passwd
locate HOWTO
locate README
[Les mots mot, chane, motif (word, string, pattern en anglais) sont utiliss
comme des synonymes dans ce contexte. Ils signient une courte numration
de lettres et/ou de nombres pour lesquels vous essayez de trouver une corres-
pondance. Un motif peut galement dsigner une chane de caractres avec des
motifs de remplacement, comme nous le verrons plus tard].
Excutez la commande grep avec pour motif le mot le de manire retour-
ner l'cran les lignes contenant ce motif le : grep 'le' Mary_Jones.lettre.
A prsent, essayez grep 'le' *.lettre. Voyons quelques options :
grep -n <motif> <chier> montre le nombre de lignes pour lequel le motif
a t trouv dans le chier.
grep -<nombre> <motif> <chier> ache le <nombre> de lignes qui pr-
cdent et suivent chaque ligne o le motif a t dtect dans le chier.
grep -A <nombre> <motif> <chier> ache le <nombre> de lignes qui
suivent chaque ligne o le motif a t dtect dans le chier.
grep -B <nombre> <motif> <chier> ache le <nombre> de lignes qui
prcdent chaque ligne o le motif a t dtect dans le chier.
CHAPITRE 5. LES COMMANDES DE BASE. 77
mdir A :
touch mon_fichier
mcopy mon_fichier A :
mdir A :
Notez qu'il n'y a pas de systmes comme le priphrique A : sur Linux. Seul
le paquet logiciel mtools interprte cette nomenclature de priphriques, ce qui
aide les utilisateurs de Windows se retrouver en terrain de connaissance lors
de leur passage Linux. La liste complte des commandes est :
tar -x -f <nom_de_fichier.tar>
Votre rpertoire devrait tre recr avec ses chiers intacts. Il est intressant
d'appliquer l'option -v. Cette dernire ache tous les chiers qui ont t ajou-
ts ou extraits de l'archive lors de son traitement (archivage/dsarchivage). Elle
est trs utile pour contrler l'archivage.
Il va de soi que vous pouvez attribuer n'importe quel nom votre ar-
chive. Toutefois, il est d'usage de la nommer <repertoire.tar> ce qui vous
permet d'y voir plus clair grce l'extension. Une autre option intressante
est -p qui prserve les attributs de chiers. Une fois votre archive obtenue
vous voudrez probablement la compresser avec gzip, ce qui donnera le chier
<repertoire.tar.gz>, parfois nomm <repertoire.tgz> par souci de contrac-
tion.
Un nouveau type d'utilitaire pour l'archivage est cpio. cpio est plus perfor-
mant que tar, mais est considr plus dicile manier. Le principe d'utilisation
de cpio est similaire tar et vous est laiss titre d'exercice.
4 Pour cela, excutez (voir section 5.9) : du -s <rpertoire>
CHAPITRE 5. LES COMMANDES DE BASE. 79
echo $PATH
Vous verrez une ligne de plusieurs rpertoires spars par des caractres :
(double-point).5 Notez que le rpertoire courant . n'est pas ach. Il est fonda-
mental que le rpertoire courant ne soit pas dans le PATH pour des raisons de
scurit. Ceci fait que pour excuter une commande dans le rpertoire courant,
il est ncessaire de faire : ./<commande>.
Pour ajouter un nouveau rpertoire votre PATH (imaginons, par exemple,
/opt/gnome/bin), faites :
which ls
which cp mv rm
which which
which cranzgots
which est aussi utile dans les scripts de shell pour rvler si une commande
existe, et par consquent, pour vrier si un paquet logiciel est install. Par
exemple, which netscape.
5 /bin : /usr/bin : /usr/local/bin
CHAPITRE 5. LES COMMANDES DE BASE. 80
81
CHAPITRE 6. LES EXPRESSIONS RATIONNELLES. 82
lisation des expressions rationnelles (rappelez-vous que l'option -w vaut pour les
mots, seulement). Les expressions sont insres entre des guillemets simples ' '
pour des raisons qui seront expliques plus tard.1
grep -w 't[a-i]e' dtecte les mots tee, the et tie. Les crochets ont une si-
gnication spciale. Ils stipulent que la recherche se fera sur un caractre
allant de a i.
grep -w 't[i-z]e' dtecte les mots tie et toe.
grep -w 'cr[a-m]*t' dtecte les mots craft, credit et criquet. Le signe *
dsigne n'importe quel nombre de caractres parmi ceux cits entre cro-
chets. En l'occurrence, il s'agit de la gamme de caractres allant de a
m.
grep -w 'kr.*n' dtecte les mots kremlin et krypton. Le signe . signie tout
caractre, et le signe * signie un nombre quelconque de fois.
egrep -w '(th | sh).*rt' dtecte les mots shirt, short et thwart. Le signe
| signie qu'il faut rechercher les correspondances sur th ou sh. egrep
se comporte comme grep mais pour des extended regular expressions qui
permettent donc l'usage de |. [Le caractre | est un oprateur logique OU
(en anglais : OR) qui permet la slection de ce qui se trouve gauche
ou droite de |. Ceci est galement vrai dans plusieurs langages de pro-
grammation]. Notez d'une part, que les crochets indiquent une recherche
sur un caractre parmi plusieurs et d'autre part, que les parenthses sont
utilises avec l'oprateur logique | qui permet la recherche sur un mot
parmi plusieurs.
grep -w 'thr[aeiou]*t' extrait les lignes contenant les mots thread et throat.
Une liste de caractres possibles peut se retrouver entre crochets.
grep -w 'thr[^a-f]*t' slectionne les lignes contenant les mots throughput et
throat. Le signe ^ aprs le crochet gauche indique que la recherche porte
sur tous les caractres sauf ceux qui vont de a f. Par exemple, le mot
thrift ne sera pas dtect puisqu'il contient un f.
Toutes les expressions rationnelles dcrites ci-dessus permettent de rechercher
des mots (en raison de l'option -w). Si l'option -w n'est pas prsente, elles
trouveront des correspondances sur des parties de mot, ce qui contribuera
augmenter le nombre de correspondances. Notez galement que le signe * signie
tout nombre de caractre, y compris pas de caractre. Par exemple, t[a-i]*e
pourrait dtecter la squence te, soit un t et un e sans aucun caractre entre
eux.
Le plus souvent, vous utiliserez des expressions rationnelles qui eectuent
des recherches sur les lignes entires. Parfois, vous prfrerez dtecter une ligne
qui commence ou se termine par une chane donne. Le caractre ^ spcie le
dbut d'une ligne et $ la n. Par exemple, ^The dtecte les lignes dbutant par
The et hack$ les lignes se terminant par hack. Par ailleurs, '^*The.*hack$'
extrait les lignes de texte qui commencent par The et se nissent par hack,
mme si un caratre blanc est prsent au dbut ou la n de la ligne. Parce
que les expressions rationnelles utilisent des caractres spciaux (. \ [ ] *
+ ?), ces derniers ne peuvent tre utiliss directement. Cette restriction vous
1 NdT : la recherche de mots anglais a t conserve comme dans le document original.
CHAPITRE 6. LES EXPRESSIONS RATIONNELLES. 83
Les exemples suivants devraient rendre ces deux dernires notations plus claires :
grep 'trot' dtecte les mots electrotherapist, betroth et ainsi de suite
mais,
grep '\<trot\>' dtecte seulement trot.
egrep -w '(this|that|c[aeiou])*t' dtecte les mots this, that, cot, coat,
cat et cut.
Modications de chiers
texte.
La cration et la modication d'un chier texte ordinaire est parfois traduite
(improprement) sous le nom d'dition de texte (text editing). Un traitement de
texte est un type particulier d'diteur un peu plus simple que les diteurs Unix.
7.1 vi.
L'diteur important qu'il faut apprendre manipuler est vi. Vous dcouvri-
rez rapidement pourquoi et vous verrez des diteurs un peu plus conviviaux.
Tapez simplement :
vi <fichier>
pour modier un chier. Vous pouvez utiliser un diteur vi amlior (vi impro-
ved = vim) :
vim <fichier>
vimtutor
85
CHAPITRE 7. MODIFICATIONS DE FICHIERS TEXTE. 86
==========================================
= Welcome to the VIM tutor - version 1.4 =
==========================================
Vim is a powerful editor that has many commands, too many to explain
in a tutor such as this. This tutor is designed to describe enough of the
commands that you will be able to use easily Vim as an all-purpose editor.
The approximate time required to complete the tutor is 25-30 minutes.
Vous tes suppos modier le chier tutor comme exercice pour les 6 leons
qui viennent. Copiez-le d'abord dans votre rpertoire personnel (home).
Le tableau 7.1 est un guide rapide pour vi. Il contient un extrait des quelques
centaines de commandes disponibles, mais cela est susant pour raliser des
oprations de base. Prenez note des commandes suivantes :
vi possde plusieurs modes. Si vous pressez la touche , vous entrerez
dans le mode insertion. Vous pourrez alors saisir du texte (comme vous le
feriez dans un diteur MS-DOS). Vous pourrez vous dplacer l'aide du
curseur et eacer du texte. Pour sortir de ce mode insertion, pressez la
touche . En consquence, vous ne pourrez plus ajouter de texte, mais il
sera possible d'en supprimer et de s'y dplacer.
L'action consistant presser - (c'est--dire la touche portant le
signe :) vous place dans le mode commande o vous pouvez eectuer
des oprations comme importer, sauver le chier courant, rechercher des
motifs, et traiter le texte. Typiquement, vous tapez : ensuite, vous entrez
une commande et pressez .
Le terme tampon est utilis ci-dessous. Il dsigne un presse-papier cach.
Une fonctionnalit utile est d'entrer :set ruler avant de faire quoique
ce soit. Ceci permet d'acher l'cran le numro de la colonne et de la
ligne o votre curseur se trouve.
Touches Fonctions
Ouvrir - sauvegarder -
quitter :
:w sauvegarder les modications
:wq sauvegarder et quitter
:q ! quitter sans sauvegarder
:new ouvrir une nouvelle fentre vi ou vim
:w nom_de_chier sauvegarde avec pour nom de chier
nom_de_chier
:5,20w nom_de_chier idem ; de la ligne 5 la ligne 20
CHAPITRE 7. MODIFICATIONS DE FICHIERS TEXTE. 87
Mode insertion :
i insertion de nouveaux caractres avant le cur-
seur
a insertion de nouveaux caractres aprs le cur-
seur
O insertion la ligne avant le curseur
o insertion la ligne aprs le curseur
:r nom_de_chier insre le chier nom_de_chier
Annuler - Refaire
u annuler (= undo)
Crtl-R refaire
Remplacement de
texte :
R met le curseur sur la premire lettre du mot
remplacer
r remplace le caractre sous le curseur
~ bascule de minuscule vers majuscule, depuis la
lettre sous le curseur (et vice-versa). Faire alt
~ puis appuyer sur la touche espace
cw supprime le mot sur le curseur (on peut crire
ensuite)
p copie le texte du tampon la position du cur-
seur
Dplacement :
h curseur vers la gauche (identique )
j curseur vers le bas
k curseur vers le haut
l curseur vers la droite
w curseur au mot suivant
b curseur au dbut du mot courant
0 (zro) curseur au dbut de la ligne courante
$ curseur la n de la ligne courante
f vers l'avant
b vers l'arrire
G en n de chier
1G au dbut de chier
10G la ligne 10 par rapport au dbut
Recherche et remplace-
ment
/mot (suivi d'une pression sur recherche les occurrences de mot vers l'avant
la touche enter)
: ? (suivi d'une pression sur la idem mais vers l'arrire
touche enter)
:1,%s/mot__remplacer/ de la ligne un la n, rem-
mot_de_remplacement place mot__remplacer par
mot_de_remplacement
%s peut tre substitu par %10, si on veut ef-
fectuer l'opration de la ligne 1 la ligne 10
:1,%s/mot__remplacer/ idem mais en demandant une conrmation
mot_de_remplacement/c
:1,%s/mot__remplacer/ idem mais sans conrmation
mot_de_remplacement/g
CHAPITRE 7. MODIFICATIONS DE FICHIERS TEXTE. 89
Assistance
:help accs l'aide
au lieu de
Cette mise en vidence syntaxique contribue viter des erreurs de program-
mation en colorant des motifs de manire dtermine. Vous pouvez enclencher
la mise en vidence syntaxique dans vi en faisant :syntax on (mais cela ne
fonctionnera pas avec vi). Utilisez la mise en vidence lorsque c'est possible :
les bons diteurs modernes le permettent.
7.3 Editeurs.
Bien qu'Unix ait des capacits graphiques trs performantes, la plupart des
actes d'administration de bas-niveau s'eectuent partir de chiers en mode
texte. Le traitement des textes est galement mieux ralis avec des outils tenant
en compte la typographie qui se basent sur la cration de texte ordinaire. [Ceci
en dpit de tous les amliorations des traitements de texte WYSIWIG (what
you see is what you get). Ainsi, ce document de traduction lui-mme a t ralis
avec LYX mais aussi avec LATEX et l'diteur vim].
Historiquement, l'diteur de texte standard tait ed. ed permet l'utilisateur
de ne voir qu'une ligne de texte la fois (ce qui est primitif du point de vue des
CHAPITRE 7. MODIFICATIONS DE FICHIERS TEXTE. 90
7.3.1 Cooledit.
(Lisez ceci si vous voulez un diteur ouvrant un chier et vous permettant
de faire des saisies comme sur Windows).
Le meilleur diteur pour le travail quotidien est cooledit [Pour citer Paul
Sheer : en tant qu'auteur de cooledit, je suis problalement partial], disponible
sur la page web de Cooledit http ://cooledit.sourceforge.net. Cooledit est
un diteur graphique (fonctionnant donc sous X). Il constitue aussi un Environ-
nement de Dveloppement Intgr (ou Integrated Development Environnement
IDE) pour tout ce que vous dsirez faire. Ceux d'entre vous qui veulent acheter
un IDE ne doivent pas aller plus loin car Cooledit est gratuit.
Les personnes venant du monde Windows trouveront qu'il est ais et trs
puissant. Il ne requiert pas d'apprentissage. Tapez juste Cooledit et commencez
votre saisie. Son alter ego en mode texte s'appelle mcedit ; ilest associ au
paquet logiciel GNU Midnight Commander, mc. La version en mode texte est
moins performante que celle des autres diteurs comme emacs et jed mais elle
est adquate si vous ne dsirez pas investir beaucoup de temps en mode texte.
Cooledit a des menus droulant et des touches intuitives. Il n'est pas nces-
saire de lire de la documentation avant d'en tirer parti.
7.3.2 vi et vim.
Aujourd'hui, vi est considr comme le standard. C'est le seul diteur qui
est install par dfaut sur tous les systmes Unix. vim est une version amliore
et augmente en termes de fonctionnalit par rapport vi. Il est fondamental
d'acqurir les bases de vi mme si ce dernier n'est pas votre diteur utilis au
quotidien. Le fait est qu'un jour ou l'autre, tout administrateur est confront
son usage.
En revanche, les nouveaux utilisateurs trouveront cet diteur peu intuitif et
laborieux parce qu'il requiert un certain temps d'apprentissage et la mmorisa-
tion de nombreuses commandes.
A sa dcharge, il faut signaler que de nombreuses personnes n'utilisent que
vi et qu'il s'agit probablement (avec emacs) de l'diteur qui fait tout. C'est aussi
un des rares diteurs qui prsentent une version parfaitement oprationnelle et
cohrente sur tous les systmes Unix et non-Unix. vim fonctionne sur Ami-
gaOS, AtariMiNT, BeOS, DOS, MacOS, OS/2, RiscOS, VMS, et les Windows
(95/98/NT4/NT5/2000) ainsi que sur toutes les variantes d'Unix.
7.3.3 Emacs.
Emacs signie Editor MACroS. C'est le monstre parmi les diteurs et il
peut absolument faire tout ce qu'on peut imaginer raliser avec un logiciel. Il
est devenu de facto un standard l'instar de vi.
CHAPITRE 7. MODIFICATIONS DE FICHIERS TEXTE. 91
Emacs est bien plus qu'un simple diteur de texte. C'est un systme com-
plet d'utilisation d'un ordinateur pour le dveloppement, les communications,
la gestion de chiers, et de multiples autres fonctions que vous n'imaginez peut-
tre pas encore. Il en existe mme une version pour le systme X Window, qui
permet de naviguer sur l'Internet.
8.1 Introduction.
Pour excuter plusieurs commandes squentiellement, crez d'abord un -
chier avec une extension .sh, ce chier contiendra vos commandes. L'extension
.sh n'est pas absolument ncessaire mais elle sert de rappel indiquant que le
chier contient un texte spcial nomm script de shell (ou shell script ). Dsor-
mais, le mot script sera employ pour dcrire toute squence de commandes
dans un chier texte. A prsent, faites :
ce qui permet au chier d'tre excut (les droits sur les chiers sont dcrits
au chapitre 12).
Modiez le chier en utilisant votre diteur de texte prfr. La premire
ligne devrait se prsenter comme ceci (sans qu'il n'y ait d'espace blanc [Les
espaces blancs sont des tabulations, des espaces proprement parler ou de nou-
velles lignes]) :
# !/bin/sh
Cette ligne impose au programme qui la suit d'tre un script de shell. Ce qui
veut dire que sont acceptes des commandes du mme type que celles entres
en ligne de commandes derrire votre invite (ou prompt ). A prsent, entrez les
commandes suivantes pour vous faire la main :
92
CHAPITRE 8. LES SCRIPTS DU SHELL. 93
Les crochets [ et ] signient que ce qu'ils renferment doit tre valu [substitu,
modi, rduit une forme plus simple] comme une expression numrique [une
squence de nombres avec les signes +, *, -, / entre ces nombres]. D'ailleurs, vous
pouvez tout moment faire un calcul dans le shell en saisissant derrire l'invite :
echo $[3*6+2*8+9]
Vriez que votre shell permet l'usage de cette notation [ ]. Certains Unix
utilisent la commande expr pour raliser ces oprations.
N=1
while test $N -le 10
do
echo Number $N
N=$[N+1]
done
L'initialisation N=1 cre une variable N et lui attribue une valeur 1. La com-
mande while excute toutes les commandes entre do et done, rptitivement
juqu' ce que la condition de test ne soit plus vrie (en l'occurrence, jusqu'
ce que N ne soit plus infrieur ou gal 10). L'expression -le signie less than
or equal to. Voir test (1) (c'est--dire man (1) test) pour rencontrer d'autres
types de test que vous pouvez appliquer des variables. Observez aussi la ma-
nire dont N est substitu avec la nouvelle valeur qui augnmente d'une unit
chaque rptition de la boucle while.
Vous devriez constater que chaque ligne est une commande ; les commandes
sont spares par un passage la ligne. Vous pouvez aussi avoir plus d'une
commande par ligne pour autant qu'elles soient spares par un point-virgule
comme dans l'exemple suivant :
N=1 ; while test $N -le 10 ; do echo Number $N ; N=$[N+1] ; done
N=1 ; until test $N -gt 10 ; do echo Number $N ; N=$[N+1] ; done
X=10
Y=5
if test $X -gt $Y ; then
echo $X est plus grand que $Y
fi
X=10
Y=5
if test $X -gt $Y ; then
echo $X est plus grand que $Y
elif test $X -lt $Y ; then
echo $X est plus petit que $Y
else
echo $X est gal $Y
fi
# !/bin/sh
for i 0 1 2 3 4 5 6 7 8 9 ; do
cp $1 $1.BAK-$i
done
Ne l'excutez pas immdiatement aprs en avoir modi les droits (chmod 0755
backup-lots.sh). Crez d'abord un chier vide data avec la commande touch
(c'est--dire touch data). Maintenant, l'excution de ./ backup-lots.sh data
revient copier le chier data 10 fois avec 10 extensions direntes. Vous consta-
tez que la variable $1 a une signication particulire : elle dsigne le premier
argument mentionn derrire la commande. Ralisons un script plus astucieux
o nous allons tester l'existence d'un argument et galement, l'existence de -
chiers de sauvegarde (utilisation de la forme test -e) :
# !/bin/sh
if
done
# !/bin/sh
for i 0 1 2 3 4 5 6 7 8 9 ; do
NEW_FILE=$1.BAK-$i
if test -e $NEW_FILE ; then
echo backup-lots.sh : **error** $NEW_FILE
echo already exists - exiting
break
else
cp $1 $NEW_FILE
fi
done
Ceci permet de sortir du programme en allant sur la ligne aprs le done. Si deux
boucles sont imbriques, la commande break 2 provoquera l'arrt de l'excution
sur les 2 boucles ; et ainsi de suite pour les valeurs suprieures 2.
L'instruction continue est aussi utile pour clturer l'itration d'une boucle.
Si l'instruction continue est rencontre, l'excution est poursuivie partir du
dbut de la boucle suivante, donc en ignorant le corps des boucles restant
eectuer :
# !/bin/sh
for i 0 1 2 3 4 5 6 7 8 9 ; do
NEW_FILE=$1.BAK-$i
if test -e $NEW_FILE ; then
echo backup-lots.sh : **warning** $NEW_FILE
echo already exists - skipping
continue
fi
cp $1 $NEW_FILE
done
Notez bien que break et continue fonctionnent dans des boucles for, while et
until.
# !/bin/sh
for i in *.txt ; do
echo found a file : $i
done
# !/bin/sh
for i in /usr/doc/*/*.txt ; do
echo found a file : $i
done
Cet exemple dmontre la capacit du shell rechercher des chiers ainsi qu'
utiliser les motifs d'englobement et des chemins absolus.
# !/bin/sh
case $1 in
--test|-t)
echo you used the --test option
exit 0
;;
--help|-h)
echo Usage :
echo myprog.sh [--test|--help|--version]
exit 0
;;
--version|-v)
echo myprog.sh version 0.0.1
exit 0
;;
-*)
echo No such option $1
echo Usage :
echo myprog.sh [--test | --help|--version]
exit 1
;;
esac
Vous noterez que nous essayons de traiter le premier argument d'un programme.
Etant donn qu'il y a plusieurs options, l'usage de if conduirait un programme
CHAPITRE 8. LES SCRIPTS DU SHELL. 98
# !/bin/sh
function usage ()
{
echo Usage :
echo myprog.sh [--test|--help|--version]
}
case $1 in
--test|-t)
echo you used the --test option
exit 0
;;
--help|-h)
usage
;;
--version|-v)
echo myprog.sh version 0.0.2
exit 0
;;
-*)
echo Error : no such option $1
usage
exit 1
;;
esac
Lorsqu'usage apparat, le terme est substitu par les lignes se trouvant entre {
et }. Les avantages de cette approche sont vidents : si vous souhaitez changer
la description de la fonction usage, il ne vous faudra faire les modications
qu' un seul endroit du script. Les bons programmes utilisent si abondamment
cette technique qu'ils exploitent rarement plus de 50 lignes de code sans faire
un appel l'une ou l'autre fonction.
CHAPITRE 8. LES SCRIPTS DU SHELL. 99
# !/bin/bash
et il ache :
Nous aurions bien besoin d'une boucle sur chaque argument. Un script comme :
for i in $1 $2 $3 $4 ; do
<instructions>
done
# !/bin/sh
function usage ()
{
echo Usage :
echo myprog.sh [--test|--help|--version] [--echo
<text>]
CHAPITRE 8. LES SCRIPTS DU SHELL. 100
et comparez avec :
X=`cat to_be_catted`
echo $X
L'action de cat sur le chier to_be_catted retourne daisy dans les guillemets
de sorte que X contient ce mot. C'est un outil puissant. Considerez la commande
expr :
Donc, nous pouvons utiliser expr et les guillemets inverss pour excuter des
CHAPITRE 8. LES SCRIPTS DU SHELL. 102
oprations mathmatiques sur des entiers dans les scripts de shell.1 Ci-dessous
se trouve une fonction permettant de raliser le factoriel d'un nombre. Notez la
manire dont le signe * est insr dans les guillemets simples. Ceux-ci empchent
le shell de considrer ce signe comme un motif de remplacement (comme cela
est utilis dans la recherche de chiers) :
function factorial ()
{
N=$1
A=1
while test $N -gt 0 ; do
A=`expr $A '*' $N`
N=`expr $N -1`
done
echo $A
}
Vous observerez que les crochets utiliss prcdemment peuvent tre employs
presque tout le temps avec expr. (Cependant, la notation $[ ] est une exten-
sion des shells de GNU et ne constitue pas une norme pour toutes les variantes
d'Unix). Nous pouvons maintenant excuter le code et observer le rsultat. Si
nous voulons attribuer le rsultat une variable, nous utiliserons X=`factorial
20`.
Prenez note du fait qu'une autre notation donne le mme eet que les guille-
mets inverss : $(command) qui est identique `command`. Dans ce livre, nous
utiliserons la notation classique en guillemets.
1 NdT : pour les calculs impliquant des nombres dcimaux, il convient d'utiliser bc.
Chapitre 9
9.1 Introduction.
Les commandes grep, echo, df, etc. achent leur rsultat l'cran. En fait,
ce qui se produit un niveau plus bas, c'est qu'elles crivent les caractres qui
seront achs, dans un ux de donnes (ou tube ) appel tube stdout. Le shell lit
ces donnes, caractre par caractre, et les ache l'cran. Le mot tube signie
exactement ceci : un programme met des donnes au dbut d'un canal tandis
qu'un autre programme lit ces donnes l'autre bout. Les tubes permettent
donc deux programmes spars de communiquer entre eux. Dans les cas cits
ci-avant, les programmes communiquent simplement avec le shell qui ache leur
sortie.
9.2 Tutoriel.
Crez un chier texte avec plusieurs lignes contenant le mot GNU et une
ligne contenant la fois GNU et Linux. Excutez la commande : grep GNU
mon_fichier.txt. Comme d'habitude, le rsultat est envoy stdout. A pr-
sent, essayez : grep GNU mon_fichier.txt > gnu_lignes.txt. La sortie de
la commande grep a t l'objet d'une redirection vers un chier. La partie >
gnu_lignes.txt indique au shell de crer un nouveau chier gnu_lignes.txt
103
CHAPITRE 9. FLUX ET SED COMME DITEUR DE FLUX. 104
et visualisez gnu_lignes.txt.
Le caractre < redirige le contenu d'un chier la place de stdin. Dit autre-
ment, le contenu d'un chier remplace ce qui normalement provient du clavier.
Essayez :
[Un backslash comme dernier caractre d'une ligne indique que la ligne se pour-
suit. Vous pouvez omettre le \ mais vous devrez aussi omettre la nouvelle ligne.
Ceci est connu sous le nom de continuit de ligne (ou line continuation)].
Le chier fr-60-only.rms contient un dictionnaire Unix usuellement uti-
lis pour les corrections orthographiques. En triant un peu, vous crerez un dic-
tionnaire qui permet d'aisment rsoudre des mots croiss. Tout d'abord, nous
employons la commande string, vue la section 5.9, pour extraire les octets
lisibles du texte. En l'occurrence, nous avons tir parti de son mode alternatif :
elle lit partir de stdin lorsqu'aucun chier ne lui est pass en argument. La
commande tr (abrviation pour translate (traduire)) convertit les majuscules
en minuscules. La commande grep ltre alors les lignes ne dbutant pas par
une lettre. Finalement, la commande sort trie les mots par ordre alphabtique.
L'option -u signie unique, et prcise que les lignes multiples doivent tre li-
mines. Essayez less mon_dico.
touch fichier_existant
rm -f fichier_non_existant
ls fichier_existant fichier_non_existant
La notation 1> est la mme que >A car, lorsque le descripteur de chier n'est
pas indiqu, le shell suppose qu'il s'agit d'1. Notez qu'A contient stdout et que
le message d'erreur est retourn l'cran.
Testons :
Nous observons que ceci a le mme eet que prcdemment, except que la
squence est inverse : stdout est d'abord redirig vers stderr (1>&2) puis stdout
est redirig vers A.
Pour apprcier ce qui se passe en permutant les redirections entre elles, fai-
sons :
ce qui signie que stdout est redirig vers A puis, que stder est redirig vers
stdout. Cette commande ne mixe pas stderr et stdout puisque la redirection
vers A se produit en premier lieu.
de man. Faites info sed pour accder des pages info explicitant sed l'aide
d'exemples.
L'usage le plus courant de sed est le remplacement de mots dans un ux
avec d'autres mots ou expressions littrales. sed lit depuis sdtin et crit vers st-
dout. Son comportement est similaire grep ; il lit une ligne la fois et ensuite
crit la ligne modie par les oprations d'dition qui lui ont t imposes. Les
remplacements sont, en gnral, raliss de cette manire :
sed -e 's/e/E/g'
Nous savons que, dans le cas des chiers ordinaires, la sortie de ls -l com-
mence par - . Nous utilisons grep pour liminer les lignes qui ne commencent
pas par - (ce que reprsente l'expression ls -l | grep '^-'). Si nous faisions
cela, nous verrions que la sortie (qui maintenant ne concerne plus que les -
chiers) est partage en quatre colonnes d'information qui ne nous intressent
pas, avant que nous ne trouvions la colonne avec les tailles de chiers.
Pour eectuer le remplacement ultrieurement, il faut donc rechercher une
chane de caractres suivie d'un nombre quelconque d'espaces l'aide de la pre-
mire sous-expression rationnelle \([^ ]*[ ]*\) et ce, quatre fois exactement :
d'o le complment \{4,4\}. Aprs quoi, nous trouverons une srie de chires
allant de 0 9 ayant une occurrence quelconque d'o la seconde sous-expression
rationnelle \([0-9]*\). Ensuite viennent une srie de caractres quelconques
(.) en nombre indtermin (*) la n ($) de la recherche. Tous ces lments
compris entre sed 's/ et + constituent donc le motif <recherche-expreg> que
nous avons dni dans nos premiers exemples. Notez que nous avons fait l'im-
passe sur la notation \< \> pour les mots complets (voir la section 6.4). A
la dirence de grep, sed essaye de trouver les correspondances sur le nombre
maximum de caractres autoriss, ce qui revient au mme que de prciser que
la recherche doit se faire sur des noms complets.
Vous pouvez essayer d'imaginer ce que retourne la commande ls -l | grep
'^-' | sed 's/^\([^ ]*[ ]*\)\{4,4\}\([0-9]*\).*$/ + \2/' (ceci est un
exemple) :
+ 438
+ 1525
+ 76
+ 92146
seul problme (mineur) est que la premire ligne dbute par un signe + qu'aucun
nombre ne prcde. Ceci devrait amener expr mettre un message d'erreur.
Pour contourner ce problme, il sut d'introduire 0 suite la commande expr
de manire commencer le calcul ainsi : 0 + ... .
sed -e '7a\
une ligne supplmentaire.\
Encore une autre.\
Une de plus.'
sed -e '7i\
une ligne supplmentaire.\
Encore une autre.\
Une de plus.'
sed -e '3,5D'
Cette dernire instruction supprime toutes les lignes comprises entre une ligne
contenant l'expression rationnelle Cher Henry et celle contenant, par ailleurs,
Meilleures salutations, Jeanne (ou la n du chier si la dernire expression
n'est pas mentionne).
Ce comportement s'applique galement aux insertions :
sed -e '$i\
The new second last line\
The new last line.'
eace toutes les lignes mais pas le texte compris entre les 7me et 11me lignes.
Chapitre 10
Processus et variables
d'environnement.
A partir de ce chapitre, nous allons dcrire ce qui se trouve sous le capot de
votre systme Linux.
10.1 Introduction.
Sur Unix, quand vous excutez un programme (tel que toutes les commandes
du shell que vous avez dj testes), les vraies instructions de l'ordinateur sont
lues depuis un chier situ sur le disque, dans le rpertoire /bin et, places en
RAM. Le programme est alors excut dans la mmoire et devient un processus.
Un processus est une commande, un programme ou un script de shell qui a t
lanc (ou excut ) en mmoire. Quand le processus est termin, il est limin
de la mmoire. Il y a environ 50 processus fonctionnant simultanment tout
instant sur un systme o un utilisateur s'est connecte. La CPU passe d'un
processus l'autre pour partager son temps d'excution [c'est--dire le temps
consacr pour raliser les instructions d'un programme particulier. Notez que
ceci est dirent de ce qui se passe sur Windows ou DOS, o un programme
de lui-mme doit permettre aux autres un partage de la CPU : sous Unix, les
processus n'ont rien dire ce propos]. Chaque processus se voit attribuer un
nombre appel le PID (process ID ou process IDentier ). A ct de la mmoire
rellement occupe par l'excutable, le processus en soi consomme de la mmoire
pour ses oprations.
De la mme manire qu'un chier a pour propritaire un utilisateur ou un
groupe, un processus est aect un propritaire usuellement la personne qui
excute le programme. Chaque fois qu'un processus essaye d'accder un chier,
ses droits de proprit sont compars ceux du chier de manire dcider
si l'accs est autoris. Du fait que tous les priphriques sont des chiers, un
processus ne peut faire quelque chose que via un chier et donc, les restrictions
sur les droits des chiers sont le seul type de restrictions requises sur Unix [ il y
a des exceptions, toutefois]. C'est comme cela que la gestion des accs par Unix
et la scurit fonctionnent.
Le centre des oprations de gestion est le noyau (kernel). Le noyau est l'entit
qui permet l'accs au matriel, l'excution, l'allocation d'ID de processus, le
111
CHAPITRE 10. PROCESSUS ET VARIABLES D'ENVIRONNEMENT. 112
ps sans options montre trois processus en cours. Il n'y a que trois processus
visibles pour vous, en tant qu'utilisateur, bien qu'il y ait d'autres processus en
cours ne vous appartenant pas. Le premier est le programme par lequel vous
vous tes connect en introduisant votre identiant et votre mot de passe. Cela
a entran l'excution d'un autre processus appel bash, le Bourne Again shell
dans lequel vous avez saisi la commande ps [le shell de Bourne est le shell origi-
nel de Unix]. Finalement, vous avez excut ps qui s'est trouv lui-mme parmi
les processus en cours. Ce processus disparat immdiatement aprs l'achage.1
# !/bin/sh
echo proc.sh : en cours
sleep 1000
# !/bin/sh
./proc.sh &
[1] 25647
indiquant que la tche est associe un numro valant 1 et que le PID du dernier processus
dans le tube est 25647. Tous les processus dans un tube simplefont partie du mme processus.
Le bash utilise la notion de tche (ou job) comme une abstraction pour aider les contrler.
Pour faciliter l'implantation d'une interface utilisateur pour le contrle des tches, le
systme introduit la notion d'ID de groupe de processus associs au terminal courant. Les
membres de ce groupe de processus (ceux dont le GID est gal au process group ID du terminal
courant) reoivent des signaux produits par le clavier tels que SIGINT. Ces processus sont
dits en avant-plan. Les processus en arrire-plan sont ceux dont le GID de processus dire de
celui du terminal ; de tels processus sont protgs des signaux produits par le clavier. Seuls les
processus en avant-plan peuvent lire partir du terminal et y crire. Les processus en arrire-
plan qui tentent de lire partir du terminal ou d'y crire reoivent un signal SIGTTIN (ou
SIGTTOU) par le pilote de priphrique du terminal qui, sauf interception du signal (saisie),
suspend le processus.
Si le systme d'exploitation sur lequel bash est en cours, permet le contrle des tches,
bash vous permettra l'accs. La saisie du caractre suspend (soit ^Z ou Ctrl-Z) pendant
l'excution du processus, provoque l'arrt du processus et vous ramne dans le bash. La
frappe du caractre de suspension dire (typiquement ^Y ou Crtl-Y) arrtera le processus
lorsqu'il tentera de lire depuis le terminal. Le contrle reviendra bash. Vous pourrez alors
manipuler l'tat de la tche en utilisant la commande bg de manire la relancer en arrire-
plan, la commande fg pour mettre la tche en avant-plan ou la commande kill pour tuer le
processus. Un ^Z prend eet immdiatement et a pour eet corollaire de provoquer une sortie
immdiate.
Il y a plusieurs mthodes pour dsigner une tche dans un shell. Le caractre % introduit
un nom de tche. Le numro n de tche peut tre mentionn comme %n. Une tche peut
2 Merci Brian Fox et Chet Raney pour ces donnes (de la part de P. Sheer).
3 NdT : concernant la traduction franaise, le texte est trs largement inspir de la page de
man bash dont la traduction a t ralise par Christophe Blaess en 1997 (cette traduction a
t ractualise par Thierry Vigneaud en 1999-2001).
CHAPITRE 10. PROCESSUS ET VARIABLES D'ENVIRONNEMENT. 114
aussi tre dcrite en employant le prxe du nom utilis pour le dmarrer ou en employant
une sous-chane qui apparat en ligne de commande. Par exemple, %ce se rfre une tche
ce arrte. Si un prxe correspond plusieurs tches, bash rapporte une erreur. Utiliser
% ?ce, en revanche, permet de dsigner toute tche contenant la chane ce dans la ligne
de commande. Si la sous-chane correspond plusieurs tches, bash renvoie une erreur. Les
symboles %% et %+ se rapportent au job de shell courant, qui est la dernire tche arrte
alors qu'elle tait en avant-plan. La tche prcdente peut tre mentionn en utilisant %-.
Dans les achages relatifs aux tches (c'est--dire la sortie de la commande jobs), la tche
en cours est toujours indiqu avec un +, et celle qui la prcde avec un -.
Il sut de nommer une tche pour la ramener en avant-plan : %1 est un synonyme pour
fg %1, ramenant la tche 1 de l'arrire-plan vers l'avant-plan. De manire analogue, %1
& transfre la tche 1 en arrire-plan, ce qui quivaut bg %1.
Le shell est immdiatement inform de tout changement d'tat d'une tche. Normalement,
le bash attend jusqu' ce qu'il soit prt acher une invite avant de faire un rapport des
modications de status de tche an qu'il n'interrompe pas toute autre achage. Si l'option
-b de la commande set est active, le bash ache les modications immdiatement. (Voir
aussi la description de la variable notify dans les variables du shell, ci-dessus).
Si vous essayez de quitter le bash alors que des tches sont suspendues, le shell ache
un message d'avertissement. Vous pouvez alors utiliser la commande jobs pour vrier l'tat
des tches. Si vous pratiquez de cette manire ou que vous essayez de sortir de suite, vous ne
serez plus averti et les tches suspendues seront dnitivement termines.
kill <PID>
ou bien :
qui est le signal que kill envoie normalement quand aucun signal particulier
n'est dclar en option.6
4 NdT : pour dterminer le PID, il faut utiliser la commande top (voir la section 10.8).
5 Onze d'entre elles les plus communes sont dcrites dans la section 10.6.
6 NdT : Pour suspendre un processus, il est possible d'utiliser kill -19 <PID>, et pour le
relancer kill -18 <PID>.
CHAPITRE 10. PROCESSUS ET VARIABLES D'ENVIRONNEMENT. 115
ou
kill -9 12345
qui ne devrait tre utilis qu'en dernier recours. Il est interdit aux processus
de traiter le signal SIGKILL.
Etant donn qu'il est ennuyeux de devoir rechercher rgulirement le PID
d'un processus, les utilitaires GNU prsentent une commande, killall, qui en-
voie un signal tous les processus de mme nom :
Cette commande est utile quand vous tes sr qu'il n'y a qu'un seul processus en
cours, soit parce que personne d'autre n'est connect, soit que vous n'agissez pas
comme super-utilisateur. Notez que sur d'autres systmes Unix, la commande
killall tue tous les processus que vous tes autoriss tuer. Si vous agissez comme
super-utilisateur, cette action plantera la machine.
snice -v <PID>
CPU states indique, en pourcentage, le temps CPU utilis en mode utilisateur (user), mode
systme (system), rednition des priorits (nice) et, arrts (idle). Les processus dont
le degr de douceur a t redni sont les seuls avoir des valeurs ngatives ;
Mem donne les statistiques sur l'utilisation de la mmoire : la mmoire totale disponible, la
mmoire libre, la mmoire utilise, la mmoire partage et la mmoire utilise par les
tampons. L'achage de ces informations peut tre rafrachi par la commande intractive
m;
Swap donne les statistiques sur l'espace de swap : l'espace total, celui disponible et celui
utilis. Swap et Mem constituent le rsultat de la commande free(1) ;
PID dsigne l'IDenticateur du processus associ chaque tche ;
PPID est l'IDenticateur du processus-parent de chaque tche ;
UID est l'ID d'utilisateur (le propritaire de la tche) ;
USER dsigne le nom d'utilisateur du propritaire de la tche ;
PRI dnit la priorit de la tche ;
NI reprsente la valeur de la douceur d'une tche ;
SIZE est la taille du code d'une tche, ajoute l'espace de pile, (units : kilo-octet) ;
TSIZE reprsente la taille du code d'une tche. Ceci donne des valeurs spciales pour les
processus du noyau ; non-fonctionnel pour les processus ELF ;10
DSIZE est la taille des donnes et de la pile. Ne fonctionne pas pour les processus ELF ;
TRS indique la taille de texte restant ;
SWAP reprsente la taille de la partie (d'une tche) dplace sur l'espace de swap ;
D indique la taille de pages marques dirty ;
LIB est la taille de l'ensemble des pages de bibliothques utilises. Ne fonctionne pas pour
les processus ELF ;
RSS dsigne la quantit totale de mmoire physique utilise par une tche (exprime en kilo-
octets). Dans le cas des processus ELF, les pages de bibliothques utilises sont prises
en compte ici (ce n'est pas le cas pour les processus a.out) ;
SHARE reprsente la quantit de mmoire utilise par une tche ;
STAT :l'tat d'une tche est y reprsente. L'tat est soit S pour sleeping, D pour unin-
terruptible sleep, R pour running, Z pour zombie, ou T pour stopped (encore appel
traced). Ces tats sont modis par un traceur < pour les processus avec une valeur
de priorit ngative, N pour les processus avec des valeurs de priorits positives et W
pour un processus dgag vers l'espace de swap (ceci ne fonctionne correctement que
pour les processus du noyau) ;
WCHAN : en fonction de la disponibilit de /boot/psdatabase ou de la table de liens du
noyau (/boot/System.map), ceci montre les adresses ou le nom de la fonction du noyau
pour lequel la tche est suspendue ;
TIME dnit la dure totale de CPU qu'une tche a utilis depuis son lancement. Si le
mode cumulatif est activ, ceci inclut aussi la dure de CPU utilise par les processus-
ls qui ont t tus. Le mode cumultif peut tre activ l'aide de l'option S en ligne
de commande. Vous pouvez oprer un rafrachissement de la valeur avec la commande
interactive S. La ligne d'en-tte sera modie de manire utiliser le CTIME.
%CPU reprsente le partage (en fonction des tches) de la dure d'utilisation de la CPU
depuis la dernire mise--jour l'cran. Cette valeur est exprime en pourcentage de
la dure d'utilisation de CPU par processeur.
%MEM reprsente le partage (en fonction des tches) de la mmoire physique.
COMMAND dsigne le nom (la commande) d'une tche. Celui-ci sera tronqu s'il est trop
long pour tre ach sur une seule ligne. Les tches en mmoire ont une ligne de
commande, mais les tches dgags sur l'espace de swap ont seulement le nom du
programme entre parenthses (par exemple : (getty)).
10 Format de binaires sous SVr4 (System V, version 4).
CHAPITRE 10. PROCESSUS ET VARIABLES D'ENVIRONNEMENT. 120
set
La commande qui suit est utile pour trouver la valeur d'une variable dont vous
n'tes pas sr du nom :
Essayez set | grep PATH pour connatre la variable d'environnement PATH que
nous avons vu la section 5.18.
Le but d'un environnement est essentiellement de fournir un moyen alter-
natif pour passer des paramtres un programme (alternatif veut dire : en
plus des arguments passs en ligne de commande). La dirence est qu'un
environnement est transmis d'un processus au suivant : par exemple, un shell
peut disposer d'un jeu de variables d'environnement et excuter un gestion-
naire de chiers, qui son tour excute un traitement de texte. Le traitement
de texte hrite son environnement du gestionnaire de chier qui, lui-mme, h-
rite son environnement du shell. Si, par exemple, vous avez plac une variable
PRINTER dans le shell, celle-ci sera transmise jusqu'au traitement de texte. Cette
technique n'oblige plus congurer sparment l'imprimante que le traitement
de texte doit utiliser.
Testez :
X=Bonjour tous
echo $X
bash
echo $X
CHAPITRE 10. PROCESSUS ET VARIABLES D'ENVIRONNEMENT. 121
Vous constaterez que X n'est pas une variable d'environnement du second bash
dans lequel vous vous trouvez maintenant. La raison en est que la variable X
n'a pas t exporte comme variable d'environnement. De ce fait, elle n'a pas
t transmise. Tapez maintenant :
exit
export X
bash
echo $X
Variables du shell.12
Les variables suivantes sont xes par le shell :
PPID reprsente le PID du shell-parent (variable protge en criture) ;
PWD est associe au rpertoire de travail courant tel que congure par la commande cd ;
OLDPWD est associe au rpertoire de travail prcdent telle que dnie par la commande
cd ;
REPLY contient la ligne d'entre lue par la commande interne read quand aucun argument
n'est fourni ;
UID contient l'UID de l'utilisateur courant, et est initialise au dmarrage du shell ;
EUID contient l'ID de l'utilisateur eectif associ l'utilisateur courant, initialis au dmar-
rage du shell ;
BASH contient le nom complet du chemin utilis pour invoquer l'instance de bash en cours ;
BASH_VERSION correspond au numro de version de l'instance du bash en cours ;
SHLVL (Shell Level) est incrmente d'une unit, chaque invocation d'une session de bash ;
RANDOM chaque fois que ce paramtre est rfrenc, un entier alatoire est produit. La
squence des nombres entiers alatoires peut tre initialise en attribuant une valeur
RANDOM. Si RANDOM est inutilise (usage de la commande unset), elle perd
ses proprits spciales, mme si elle est ultrieurement rinitialise ;
11 Merci Brian Fox et Chet Ranney. (de la part de P. Sheer)
12 NdT : la traduction franaise est inspire de la traduction de la page de man bash, ralise
par Christophe Blaess en 1997 (cette dernire a t ractualise par Thierry Vigneaud en
1999-2001).
CHAPITRE 10. PROCESSUS ET VARIABLES D'ENVIRONNEMENT. 122
SECONDS chaque fois que ce paramtre est lu, le nombre de secondes couls depuis l'appel
du shell est renvoy. Si une valeur est confre SECONDS, la valeur retourne pour
des attributions ultrieures sera le nombre de secondes depuis l'attribution plus la
valeur confre initialement. Si SECONDS n'est pas initialise, elle perd ses proprits
spciales, mme si elle est ultrieurement rinitialise ;
LINENO chaque fois que ce paramtre est rfrenc, le shell le remplace par un nombre
dcimal reprsentant le numro de ligne courante (commenant 1) dans le script
ou la fonction. Lorsqu'il ne s'agit pas d'un script, il n'est pas garanti que la valeur
remplace ait un sens. Lorsqu'il s'agit d'une fonction, la valeur n'est pas le numro de
la ligne du chier-source o la commande apparat (cette information est perdue ds
que la fonction est excute), mais bien une approximation du nombre de commandes
simples excutes dans le corps de la fonction en cours. Si LINENO est dtruite (par
unset), elle perd ses proprits spciales, mme si elle est ultrieurement rinitialise
(c'est--dire recre) ;
HISTCMD c'est le numro (ou rang) d'une commande dans l'historique. Si HISTCMD
est dtruite, elle perd ses proprits spciales, mme si elle est ultrieurement recre ;
OPTARG est la valeur du dernier argument trait par la commande interne getopts (voir
COMMANDES INTERNES DU SHELL, ci-dessous) ;
OPTIND est l'indice du prochain argument, que doit trait la commande interne getopts
(voir COMMANDES INTERNES DU SHELL, ci-dessous) ;
HOSTTYPE est automatiquement rempli par une chane qui dcrit de manire univoque
le type de machine sur laquelle bash est en train d'tre excut. La valeur par dfaut
dpend du systme ;
OSTYPE est automatiquement rempli par une chane qui dcrit le systme d'exploitation
sur laquelle bash est en train d'tre excut. La valeur par dfaut est fonction du
systme.
Les variables suivantes sont utilises par le shell. Dans certains cas, bash
attribue une valeur par dfaut aux variables. Ces cas sont nots ci-dessous :
IFS est le Sparateur de Champ Interne (Internal Field Separator) qui est utilis pour sparer
les mots aprs une dveloppement (ou expansion ) et pour dcouper les lignes en mots
avec la commande interne read. La valeur par dfaut est <space><tab><newline>
(<espace><tabulation><retour_chariot>) ;
PATH dnit le chemin de recherche des commandes. C'est une liste de rpertoires spare
par des doubles points ( :), que le shell parcourt pour rechercher les commandes (voir
COMMAND EXECUTION ci-dessous). Le chemin par dfaut dpend du systme,
et de la conguration choisie par l'administrateur qui installe le bash. Une valeur
commune est /usr/gnu/bin :/usr/local/bin :/usr/ucb :/usr/bin :/ ;
HOME dnit le rpertoire personnel de l'utilisateur courant ; c'est l'argument par dfaut
de la commande interne cd ;
CDPATH est le chemin de recherche pour la commande cd. C'est une liste spare des
double points ( :), de rpertoires dans lequel le shell recherche les rpertoires de desti-
nation spcis par la commande cd. Une valeur typique est . :~ :/usr ;
ENV si ce paramtre est x quand le bash excute un script de shell, sa valeur est considre
comme un nom de chier contenant les commandes pour initialiser le shell, comme dans
.bashrc. La valeur de ENV est soumise au remplacement de paramtres, la substitution
de commandes et l'valuation (ou expansion) arithmtique avant d'tre interprte
comme un nom de chemin. PATH n'est pas utilis pour rechercher le chier obtenu.
MAIL si ce paramtre correspond un nom de chier et que le variable MAILPATH
n'est pas congure, bash informe l'utilisateur de l'arrive d'un courrier dans le chier
indiqu.
MAILCHECK souvent exprime en secondes, cette variable spcie quand le bash doit
vrier l'arrive de courriels. La valeur par dfaut est de 60 s. Lorsqu'il est temps est
coul, le shell vrie l'arrive de courriel avant de rpondre par le symbole d'accueil.
Si la variable est supprime, le shell n'autorise pas le relev du courriel.
MAILPATH consiste en une liste (spare par des double-points) de chemins qui doivent
tre parcourus pour le relev du courriel. Le message qui doit tre ach en cas de
courriel peut tre indiqu en sparant le nom du chemin et le message l'aide du motif
CHAPITRE 10. PROCESSUS ET VARIABLES D'ENVIRONNEMENT. 123
command_orientated_history si cette variable est cre, bash tente de sauver toutes les
lignes des commandes multi-lignes sous une mme entre dans l'historique. Ceci facilite
la rdition de commandes sur plusieurs lignes.
glob_dot_lenames Si cette variable est active, le bash inclut les noms de chiers com-
menant par un . lors compltement des nom de chemin (pathname).
allow_null_glob_expansion Si cette variable est active, le bash permet aux motifs des
noms de chemin ne correspondant aucun chier d'tre complts par une chane nulle
plutt que par leur propre valeur (voir Pathname expansion ci-dessous).
histchars ce sont les deux ou trois caractres qui contrlent le compltement de l'historique
et le dcoupage en lments lexicaux (voir HISTORY EXPANSION ci-dessous). Le
premier caractre est le caractre de compltement de l'historique, c'est--dire le carac-
tre qui signale le dbut du compltement de l'historique, normalement !. Le second
caractre ou caractre de substitution rapide (quick substitution) est utilis comme
abrg pour excuter nouveau la commande prcdemment entre, en subsitutant
une chane par une autre dans la commande. La valeur par dfaut est ^. Le troisime
caractre est optionnel et indique que le reste de la ligne est un commentaire lorsqu'il
prcde un nom (normallement il s'agit de #). Le caractre de commentaire de l'histo-
rique produit un saut vers les mots suivants d'une ligne. Il n'induit pas ncessairement
l'interpteur synatxique du shell traiter le reste d'un ligne comme un commentaire.
nolinks si cette variable est active, le shell ne suit pas les liens symboliques lors des ex-
cutions de commandes qmodiant le rpertoire de travail courant. Au lieu de cela, elle
permet d'utiliser la structure physique du rpertoire. Par dfaut, le bash suit la chane
des rpertoires lorsqu'il excute des commandes modiant le rpertoire courant, telles
que cd. Voir aussi la description de l'option -P de la commande interne set (SHELL
BUILTIN COMMAND ci-dessous).
hostname_completion_le
HOSTFILE contient le nom d'un chier dans le mme format que /etc/hosts qui devrait
tre consult par le shell lorsqu'il doit complter un nom d'hte. Ce chier peut tre
modi interactivement ; au compltement de nom d'hte (hostname ) la suite de la
modication, bash ajoute le contenu du nouveau chier sa base de donnes existante.
noclobber si cette variable est active, le bash n'crase pas le contenu d'un chier existant
lorsque les oprateurs de redirection >, >& et <> sont utiliss. Cette variable peut tre
annule lors de la cration de chiers de sortie en utilisant l'oprateur de redirection >
au lieu de > (voir aussi l'option -C de la commande interne set).
auto-resume cette variable contrle la manire dont le shell interagit avec un utilisateur et
le contrle des tches. Si cette variable existe, les commandes simples (en un seul mot)
sans redirections sont traites comme des candidats pour la reprise d'une tche existante
mais arrte. Il n'y a pas d'ambigut permise : s'il y a plus d'une tche commenant
avec la chane saisie, le choix se porte sur celle d'accs le plus rcent. Dans ce contexte, le
nom (name) de la tche arrte est la ligne de commande utilise pour son dmarrage.
Si la variable est pose exact, la chane fournie doit correspondre exactement au
nom d'une tche arrte ; si la valeur est substring, la chane doit correspondre une
sous-chane du nom de la tche arrte. La valeur substring fournit une fonctionnalit
analogue l'id de job % ? (voir le JOB CONTROL ci-dessous). Si la valeur est
autre, la chane fournie doit tre le prxe du nom d'une tche arrte ; ceci fournit une
fonctionnalit analogue l'id de job %.
no_exit_on_failed_exec si cette variable existe, un shell non-interactif ne se terminera
pas s'il ne peut excuter le chier spci dans la commande interne exec. Un shell
interactif ne se termine pas si exec choue.
cdable_vars si cette variable est active, un argument de la commande interne cd qui ne
serait pas un rpertoire sera considr comme le nom d'une variable dont le contenu
est le rpertoire modier.
Chapitre 11
Courriel
En gnral, les utilisateurs d'un ordinateur entre en contact avec l'internet
via la messagerie lectronique qui permet d'envoyer et de recevoir du courriel
(electronic mail ou e-mail ou encore ml, en franais). Bien qu'usuellement,
le courriel soit utilis dans un environnement graphique, nous vous montrons
ici comment il a t conu pour un systme multi-utilisateur. Dans une large
mesure, ce qui est dcrit ci-dessous constitue les fondements de tout systme de
messagerie.
Un message courriel est un texte en un bloc, envoy par un utilisateur
l'attention d'un autre utilisateur et ce, l'aide d'une commande ou d'un pro-
gramme de messagerie. Une rubrique sujet dnit souvent le thme du message.
L'ide de base est qu'un message puisse tre envoy quelqu'un qui n'est pas
ncessairement connect et que ce message puisse tre stock jusqu'au moment
o le destinataire dcide de le lire. La forme d'une adresse de courriel vous est
probablement familire ; par exemple : bruce@kangeroo.co.au. Ceci signie
que bruce a un compte sur un ordinateur appel kangeroo.co.au, ce qui veut
souvent dire que cet utilisateur peut se connecter en tant que bruce sur cette
machine-l. Le texte derrire le signe @ indique toujours le nom d'une machine.
De nos jours, l'internet ne respecte plus totalement ceci, mais il y a toujours une
machine sur laquelle bruce doit avoir un compte sur lequel le courriel peut tre
envoy. [Le systme d'exploitation de cette machine est usuellement un Unix].
Parfois, les adresses de messagerie lectronique sont crites de manire plus
conviviale comme Bruce Wallaby <bruce@kangeroo.co.au> ou encore : bru
ce@kangeroo.co.au (Bruce Wallaby). Si c'est le cas, les caractres qui en-
tourent l'adresse sont purement cosmtiques ; seule l'expression bruce@kange
roo.co.au sera rellement exploite.
Lorsque vous recevez un courriel (soit d'un autre utilisateur du systme
sur lequel vous travaillez, soit d'un utilisateur travaillant sur une autre ma-
chine), celui-ci est ajout au chier /var/spool/mail/<nom_utilisateur> ap-
pel communment bote messages (mail le ou mailbox) ; <nom_utilisa-
teur> dsigne votre identiant. Vous excutez alors un des programmes qui
interprtent votre bote messages, vous permettant ainsi de feuilleter le chier
en une squence de messages, de les lire et ventuellement d'y rpondre.
Un exemple raliste d'ajout cette bote de messagerie se prsente comme
ceci :
125
CHAPITRE 11. COURRIEL 126
hey paul
ist me
how r u doing
i am well
what u been upot
hows life
hope you are well
amanda
Les courriels commencent par From suivi d'un espace. Ensuite, vient l'en-tte
(header ) qui indique comment le message a t rout jusqu' atteindre votre
bote de messagerie, quel en est l'expditeur, quel est l'adresse o les rponses
aboutiront, le sujet du courriel ainsi que d'autres champs d'en-tte (mail header
elds ). En l'occurrence, l'en-tte est plus grand que le texte lui-mme. Examinez
cet en-tte attentivement.
L'en-tte est sparar du texte par une ligne blanche. Le corps du message
suit immdiatement. Dans le chier, l'en-tte suivant commencera nouveau
par From. Ces From n'apparaissent jamais comme premier mot d'une ligne du
corps. Si c'tait le cas, la bote de messagerie serait corrompue.
Certains logiciels de traitement du courriel enregistrent les messages dans
un format dirent. Cependant, le format ci-dessus est typique des systmes
Unix (on l'appelle le format mbox ). Le format Maildir est intressant car il
n'enregistre pas les messages de manire contigu dans un seul chier. Chaque
message est plac dans un chier spar l'intrieur d'un rpertoire. Le nom du
rpertoire est alors dni comme le chier de la bote de courrier lectronique.
Par dfaut Maildir utilise un rpertoire Maildir dans le rpertoire home de
l'utilisateur.
CHAPITRE 11. COURRIEL 127
hi there
heres a short message
.
250 OAA04620 Message accepted for delivery
QUIT
221 onion.cranzgot.co.za closing connexion
connexion closed by foreign host.
[root@cericon]#
Comptes d'utilisateurs et
droits.
Par essence, Unix est un systme multi-utilisateur et multi-tche. Chaque
utilisateur possde un rpertoire personnel /home/<nom_utilisateur> dans le-
quel ses chiers sont enregistrs tout en restant l'abri du regard des autres
utilisateurs.
Lorsque vous utilisez la machine en tant que superutilisateur (root, ou
administrateur), vous avez un accs total chaque chier du systme. Le rper-
toire personnel du superutilisateur est /root et ce rpertoire est mont sur la
racine (/) [Notez que, dans la terminologie anglo-saxonne, il y a des ambiguts :
le rpertoire-parent de votre systme (/) est appel root. Le superutilisateur
s'appelle root et son rpertoire personnel est /root].
Sauf en ce qui concerne le superutilisateur, les autres utilisateurs ont un ac-
cs limit aux chiers et aux rpertoires. Utilisez toujours votre machine comme
un utilisateur classique de manire ne vous connecter en root (superutilisa-
teur) que pour des travaux d'administration. Dans ce chapitre, nous montrons
comment crer manuellement et automatiquement des comptes utilisateurs.
L'ensemble des utilisateurs est divis en groupes (groups ). Un utilisateur
peut appartenir dirents groupes et il n'y a pas de limitation sur le nombre
de groupes dans le systme. Chaque groupe est dni par une liste d'utilisateurs.
Par ailleurs, chaque utilisateur peut avoir un groupe son nom (c'est--dire un
groupe ayant le mme nom que l'identiant).
129
CHAPITRE 12. COMPTES D'UTILISATEURS ET DROITS. 130
0 c'est le nombre de jours avant que le mot de passe ne puisse tre chang.
Usuellement, la valeur est = 0. Ce champ n'est pas souvent utilis.
99999 correspond au nombre de jours aprs quoi le mot de passe doit tre
modi. Ce champ est rarement utilis. Par dfaut, sa valeur est 99999.
7 nombre de jours pour lequel un utilisateur est averti que son mot de passe
expirera.
-1 est le nombre de jours aprs quoi le mot de passe expire de sorte que le
compte est dsactiv. -1 est utilis pour indiquer un nombre inni de jours
(ce qui veut dire que cette proprit du compte n'est pas considre).
-1 est le nombre de jours entre le 1er janvier 1970 et la date de dsactivation
du compte.
134537220 est un indicateur rserv un usage ultrieur.
Les droits [expliqus au chapitre 15] imposent le type d'accs, mais le chier
ou le rpertoire doit au pralable tre la proprit de ce groupe avant que ne se
discutent les droits d'accs.
Le chier /etc/group prsente aussi des champs spars par des double-
points. Une ligne typique se prsente comme ceci :
su paul
CHAPITRE 12. COMPTES D'UTILISATEURS ET DROITS. 135
Cette commande vous invite entrer votre mot de passe (sauf si vous tes
superutilisateur). Ceci ne fait rien de plus que de permettre l'utilisateur cou-
rant d'obtenir les droits d'accs de paul. Les variables d'environnement restent
identiques pour la plupart. Les variables HOME, LOGNAME et USER sont adaptes
l'utilisateur paul mais toutes les autres variables seront hrites. su ne permet
donc pas une connexion normale.
Pour obtenir l'quivalent d'une connexion classique avec su, eectuez la com-
mande suivante :
su - paul
Ainsi, les scripts d'initialisation seront excuts. Il s'agit de ceux dmarrs lors
de la connexion de l'utilisateur lui-mme. [Dans ce cas, le shell subsquent est
dmarr avec un - avant l'argument d'ordre zro. Ceci fait que le shell lit le prol
personnel de l'utilisateur. La commande login pratique de la mme faon]. Par
consquent, aprs avoir excut su avec l'option -, vous vous connectez comme
si vous aviez utilis la commande login.
Les pages info pour cette commande donnent davantage d'information. La du-
re d'inactivit (idle time) indique la priode coule depuis qu'un utilisateur
CHAPITRE 12. COMPTES D'UTILISATEURS ET DROITS. 136
n'a pas press de touches. Le plus souvent, c'est la commande who - Huw qui
est utilise.
La commande w est similaire. Un extrait de la page de page de man indique :
telnet <ordinateur_distant>
telnet localhost
pour vous connecter sur votre machine distance. Il n'est pas ncessaire de
disposer d'un rseau physique ; les services du rseau fonctionne toujours parce
qu'un ordinateur possde toujours un lien interne.
rlogin est une version minimale de telnet qui permet seulement la connexion
distance. Vous pouvez excuter les commandes :
137
CHAPITRE 13. UTILISATION DES SERVICES INTERNET. 138
Voici un exemple :
L'option -r permet la copie de manire rcursive ; les copies peuvent tre rali-
ses dans chaque direction ou mme entre deux machines non-locales.
scp devrait toujours tre utilis au lieu de rcp pour des raisons de scu-
rit. Notez aussi le message d'avertissement retourn par scp lors de la pre-
mire connexion. Voyez la documentation de ssh pour raliser votre premire
connexion de manire sre. Toutes les commandes du paquet ssh ont le mme
comportement.
13.3 rsh.
rsh (shell distant ou remote shell) est un utilitaire trs intressant pour ex-
cuter une commande sur une machine distante. En voici quelques exemples :
congurer ce service.
A nouveau, pour des raisons de scurit, rsh ne devrait jamais tre utilis
travers un rseau public.
13.4 FTP.
FTP signie File Transfer Protocol (protocole de transfert de chiers). Si
FTP est activ sur votre machine locale, alors, d'autres machines peuvent tl-
charger des chiers qu'elle contient (download). Tapez :
ftp metalab.unc.edu
ou
ncftp metalab.unc.edu
ftp est le client FTP traditionnel en ligne de commande pour Unix [le terme
client indique toujours un programme utilisateur accdant des services
distance] alors que ncftp est un client plus puissant qui ne sera pas forcment
install par dfaut.
Vous devriez prsent tre dans une session FTP. Un identiant et un mot
de passe vous sont demands. Le site metalab.unc.edu est un des nombreux
sites qui autorisent des connexions anonymes. Ceci signie que vous pouvez
taper anonymous comme identiant et laisser un blanc pour mot de passe. Vous
noterez aussi que la session vous demande une adresse de courriel comme mot
de passe. Toute squence de lettres incluant un arobase (@) devrait sure, mais
il est courtois d'indiquer son adresse de courriel.
La session FTP prsente un mini-shell. Vous pouvez utiliser cd, ls et ls
-l pour visualiser la liste des chiers et y naviguer. help renvoie une srie de
commandes et vous pouvez aussi saisir help <commande> pour obtenir de l'aide
propos d'une commande donne. Vous pouvez tlcharger (rcuprer = down-
load) un chier en utilisant la commande get <nom_de_fichier>. Cependant,
auparavant, vous devez activer soit tranfer type soit binary. Le terme transfer
type indique si des caractres de mise la ligne seront transfrs au format DOS.
Le fait de taper ascii active cette proprit, tandis que binary la dsactive.
Vous souhaiterez peut-tre utiliser hash qui achera un dise (#) tous les 1024
octets tlchargs. Ceci est utile pour suivre la progression du tlchargement.
Descendez dans le rpertoire README et entrez ceci :
get README
put README
La plupart des sites FTP ont un rpertoire /incoming qui est vid priodique-
ment.
FTP permet bien plus que de charger des chiers, quoique l'administrateur
du site ait sa disposition l'option de restreindre l'accs certaines proprits.
Vous pouvez crer des rpertoires, changer les droits, et faire presque tout ce
que vous ralisez dans votre systme de chiers usuel.
Si vous avez plusieurs machines sur un rseau LAN de conance [Local Area
Network , c'est--dire soit un rseau priv domestique ou de bureau], toutes
ces machines devraient avoir un FTP activ pour permettre aux utilisateurs de
copier aisment des chiers d'ordinateur ordinateur. La manire d'installer et
de congurer un des nombreux serveurs FTP disponibles sera discute plus tard
dans ce livre.
13.5 finger.
finger est un service pour lister sur une machine distante les utilisateurs
qui y connects. Essayez finger@<hostname> pour dterminer qui est connect
sur <hostname>. Nanmoins, le service nger est trs souvent dsactiv pour
des raisons de scurit.
uudecode <mon_fichier>.uu
Ressources LINUX.
Trs souvent, il ne vous sera mme pas ncessaire de vous connecter l'in-
ternet pour trouver l'information que vous recherchez. Le chapitre 17 contient
une description de la documentation principale des distributions Linux.
Cependant, il est essentiel d'accder l'information la plus rcente lorsque le
matriel et la scurit sont concerns. Il est galement passionnant et tout--fait
intressant d'interagir avec des utilisateurs Linux travers le monde. Le dve-
loppement rapide des logiciels libres vous amnera penser que vous pourriez
passer ct d'informations importantes circulant propos des technologie de
l'information. En consquence, la lecture de magazines (ventuellement sur le
web), de forums (newsgroups) et la souscription des listes de diusion (mailing
lists) sont des actions essentielles de l'administrateur.
142
CHAPITRE 14. RESSOURCES LINUX. 143
http ://www.google.com/ ,
http ://www.google.com/linux,
http ://www.infoseek.go.com/,
http ://www.altavista.com/ ou
http ://www.yahoo.com,
14.3 SourceForge.
Le site web SourceForge est apparu plus rcemment dans la communaut du
libre, http ://sourceforge.net/. Les dveloppeurs peuvent utiliser ce service
gratuit pour hberger le site web de leur projet, des archives FTP et les listes
de diusion. SourceForge s'est developp de manire si spectaculaire et rapide
qu'il hberge la meilleur moiti de tous les projets libres.
subscribe <mailing-list-name>
subscribe bugtraq
unsubscribe <mailing-list-name>
14.4.2 *-request.
Vous souscrivez ce type de listes en envoyant un message lectronique
blanc <mailing-list-name>-request@<machine> avec le mot subscribe
comme sujet. La dsinscription s'eectue de la mme manire mais en utilisant
unsubscribe pour sujet.
A nouveau, n'envoyez jamais les messages subscribe ou unsubscribe la
liste de diusion elle-mme.
14.5 Forums.
Un forum de discussion (newsgroup) est un espace auquel tout le monde a
accs. Il y a des dizaines de milliers de forums de discussion et chacun est unique
au monde.
Le logiciel client que vous utilisez pour lire un forum de discussion est appel
un lecteur de nouvelles (news reader ou news client en anglais). rtin est un
lecteur en mode console tandis que netscape fonctionne en mode graphique.
pan constitue un excellent lecteur en mode graphique.
Les forums de discussion ont le mme nom que les htes internet. Vous
pourriez tre intress par comp.os.linux.announce. Le terme comp est le des-
cripteur de sujet pour computers ; os vaut pour operating system et ainsi de
suite. De nombreux autres forums linux traitent de sujets relatifs au systme
Linux. Les serveurs de forums de discussion dvorent normment d'informa-
tion. Ils forment une structure arborescente sur l'internet. Lorsque vous envoyez
un message sur un forum, cela prend environ une journe pour que l'information
se propage sur les serveurs du monde entier. Inversment, vous pouvez consul-
ter une liste de tous les messages posts sur chaque forum par n'importe qui se
trouvant n'importe o.
Quelle est la dirence entre un forum de discussions et une liste de diusion ?
L'avantage d'un forum est qu'il vous est loisible de ne charger que les messages
qui vous intressent. Dans le cas d'une liste, vous tlchargez obligatoirement
toute l'information. Dans le cas d'un forum, vous analysez la liste des messages
et ne captez que ceux qui vous intressent.
Pourquoi ne pas mettre une liste de diusion sur une page web ? Si vous
faisiez cela, toute personne dans le monde intresse par la liste devrait raliser
des recherches via des liens internationaux pour obtenir la page web. Ceci char-
gerait le serveur proportionnellement au nombre des membres ayant souscrit
la liste. C'est ce que fait SlashDot. Cependant, votre serveur de forum de dis-
cussions est local, si bien que vous rcuprez les messages via un lien rapide et
CHAPITRE 14. RESSOURCES LINUX. 146
A prsent, vous devriez avoir une assez bonne ide de ce que sont les RFCs.
Chapitre 15
Dans le premier bloc gauche, sont dcrits les droits d'accs. Jusqu'ici, nous
avons vu que le premier indicateur pouvait tre - ou d, c'est--dire respective-
ment un chier ordinaire et un rpertoire. Les neuf autres indicateurs prsentent
un - pour droits d'accs dsactivs ou divers caractres (r, w, x, s, S, t, ou T).
Le tableau 15.1 dtaille la description complte des droits sur les chiers et
rpertoires.
Par exemple,
147
CHAPITRE 15. DROITS ET LES TROIS TYPES DE TEMPS. 148
te les droits de lecture (read) et d'excution (execute) pour tous (all), c'est-
-dire l'utilisateur, le groupe et les autres. L'option -R signie rcursivement.
Les droits d'accs sont souvent reprsents sous leur forme binaire, en par-
ticulier dans les programmes. Il est donc utile de voir comment rwxrwxrwx se
traduit en mode octal [voir la section 3.1]. Les chiers sont usuellement crs
sur un ordinateur selon le mode 0644, ce qui signie rw-r-.-r-.-.1 Vous xez
les droits de manire explicite en mode octal de cette manire :
ce qui donne mon_fichier les droits rwxrw-rw-. Pour une liste complte des
valeurs octales des droits et des types de chiers, rfrez-vous /usr/include/-
linux/stat.h.
Dans le tableau 15.1, vous pouvez lire s, le bit setuid ou setgid. S'il est
utilis sans excuter de droits, cet indicateur n'a pas de signication et il est
crit comme S. Cet indicateur modie un x en s de sorte que vous devriez lire
un s pour excuter avec le bit setuid (ou setgid selon la position) . t est le bit
sticky. Il n'a pas de signication s'il n'y a pas de droits d'excution et est alors
crit comme T.
Le chire 0 peut tre nglig mais il est souhaitable de l'indiquer pour ex-
pliciter compltement les droits. Ce chire peut prendre une valeur associe aux
bits setuid (4), setgid (2) et sticky (1). Ainsi, une valeur de 5764 quivaut
-rwsrw-r-T.2
1 NdT : Pour l'utilisateur (u), rwx correspond 400 + 200 + 100 (=700). Pour le groupe
(g), rwx correspond 40 + 20 + 10 (=70). Pour les autres (o), rwx correspond 4 + 2 +
1 (=7). La combinaison rw-r-.-r-.- vaut 400 + 200 + 0 + 40 + 0 + 0 + 4 + 0 + 0 (=644).
L'origine du chire 0 prcdant ce nombre dans l'exemple du texte est expliqu la n du
paragraphe 15.1.
2 NdT : Dans ce cas, 764 signie donc -rwxrw-r- -. Etant donn que le droit d'excution (x)
associ l'utilisateur est converti en bit setuid et que le dernier bit est converti en bit sticky,
on compte 4000 + 0 + 1000 (=5000) auquel on ajoute 764 (=5764). Etant donn que le bit
sticky s'applique un droit dsactiv, il passe en majuscule (T).
3 NdT : Dans le cas d'un chier excutable, les droits seront xs comme 777-022=755,
c'est--dire -rwxr-xr-x. Dans le cas d'un chier non-excutable (texte, image, etc.), les droits
seront 666-022=644 soit -rw-r-.-r-.-. C'est du moins ce qui se produit sur la distribution
Gentoo du traducteur.
CHAPITRE 15. DROITS ET LES TROIS TYPES DE TEMPS. 150
umask
touch <fichier1>
ls -al <fichier1>
umask 026
touch <fichier2>
ls -al <fichier2>
026 est probablement plus proche du type de masque employs dans le cas des uti-
lisateurs ordinaires. Vriez votre chier /etc/profile pour dterminer quelle
valeur d'umask est associ votre identiant, et aussi pourquoi.
File : /etc
Size : 4096 Filetype : Directory
Mode : (0755/drwxr-xr-x) Uid : ( 0/ root) Gid ( 0/ root)
Device : 3,1 Inode : 14057 Links : 41
Access : Sat Sep 25 04 :09 :08 1999(00000.15 :02 :23)
Modify : Fri Sep 24 20 :55 :14 1999(00000.22 :16 :17)
Change : Fri Sep 24 20 :55 :14 1999(00000.22 :16 :17)
Le terme Size : indiqu ici est la quantit d'espace disque rellement occu-
pe pour stocker le rpertoire de listing, et cette dernire est la mme que celle
retourne par la commande ls. Dans le cas prsent, il s'agit probablement de
quatre blocs du disque valant chacun 1024 octets. La taille ainsi mentionne
n'est pas la somme des tailles des chiers composant le rpertoire.4 En revanche,
pour un chier, Size : donnera exactement la taille du chier en octets telle
que retourne par la commande ls.
Liens symboliques et
physiques.
Trs souvent, un chier doit se trouver dans deux rpertoires. Considrez,
par exemple, un chier de conguration requis par deux paquets logiciels di-
rents recherchant ce chier dans deux rpertoires dirents. Le chier pourrait
tre tout simplement recopi. Toutefois, lors de modications, vous devrez re-
produire ces dernires en plusieurs endroits de votre systme, ce qui deviendra
rapidement un cauchemar en termes d'administration. L'idal serait d'avoir un
chier prsent dans plusieurs rpertoires, mais modiable en un seul endroit. Les
liens constituent une mthode lgante permettant deux (ou plusieurs) chiers
de contenir exactement les mmes donnes.
touch mon_fichier
ln -s mon_fichier lien_fichier
ls -al
cat > mon_fichier
quelques
lignes
de texte
^D
cat mon_fichier
cat lien_fichier
Notez bien que le rsultat de la commande ls -al montre qu'il y a une lettre
l tout gauche de la ligne correspondant lien_fichier et qu'un tiret (-)
caractrise le chier mon_fichier. Ceci indique que lien_fichier est un lien
symbolique (symbolic link, symlink ou soft-link) associ un autre chier.
Un lien symbolique ne contient pas de donnes en soi car c'est une rfrence
un autre chier. Il peut mme contenir une rfrence un rpertoire. Dans les
deux cas, les programmes agissant sur le lien symbolique manipuleront le chier
151
CHAPITRE 16. LIENS SYMBOLIQUES ET PHYSIQUES. 152
mkdir repertoire
ln -s repertoire lien_repertoire
ls -al .
touch ./repertoire/fichier1
touch ./repertoire/fichier2
ls -al ./repertoire
ls -al ./lien_repertoire
cp lien_repertoire /
ls -al /
cd /lien_repertoire
Vous avez copi le lien dans le rpertoire racine /. Cependant, ce lien pointe
selon un chemin relatif vers repertoire (qui est dans le mme rpertoire que
le lien). Or, repertoire ne se trouve pas dans /, d'o l'mission d'une erreur.
Essayez maintenant :
rm -f repertoire /lien_repertoire
ln -s `pwd`/repertoire lien_repertoire
ls -al
cp lien_repertoire /
ls -al /
cd /lien_repertoire
touch mes_donnees
ln mes_donnees mes_donnees2
ls -al
Documentation pr-installe.
Ce chapitre dcrit o se trouve la documentation associe une distribu-
tion Linux usuelle. Les chemins correspondent une distribution RedHat. Ils
sont peut-tre un peu dirents pour d'autres distributions. Une dirence
consiste en la migration des sources de documentation de /usr/ ? ? ? ? vers
/usr/share/ ? ? ? ? (leur emplacement adquat vu qu'elles peuvent tre parta-
ges par direntes machines). Dans beaucoup de cas, la documentation n'est
pas installe ou se trouve dans des rpertoires compltement dirents. Malheu-
reusement, il est dicile de suivre l'volution des quelque 20 diteurs principaux.
Dans le cas de nombreux systmes propritaires, la documentation relative
au systme se prsente sous la forme de textes imprims. Pour Linux, la ma-
jorit de l'information est crite par les auteurs eux-mmes et est jointe au
code source. Une distribution typique Linux associera la documentation avec
les binaires compils. Les distributions communes contiennent des centaines de
mga-octets de documentation sous forme de texte tel quel, hyperli ou im-
primable. Souvent, il n'est pas ncessaire de visiter le World Wide Web, sauf
lorsqu'une information est obsolte. Si ce n'est dj fait, essayez ceci :
/usr/X11R6/doc /usr/share/vim/vim57/doc
/usr/lib/X11/doc /usr/share/doc
/usr/local/doc /usr/share/gphoto/doc
/usr/share/texmf/doc /usr/share/lout/doc
Ce rpertoire contient l'information sur tous les pilotes matriels sauf les
cartes graphiques. Le noyau possde des pilotes intgrs pour les cartes rseau,
154
CHAPITRE 17. DOCUMENTATION PR-INSTALLE. 155
les controleurs SCSI, les cartes son, etc. Si vous devez dterminer qu'un de ces
pilotes est support, /usr/src/linux/Documentation est le premier rpertoire
visiter.
Les HOWTO sont une excellente source de tutoriaux pour le dbutant, qui
permettent d'installer et d'utiliser touts les services imaginables. RedHat semble
ne plus fournir cette documentation avec les paquets de base. Il est intressant
de publier la liste de ces HOWTO pour illustrer la diversit des sujets. Ceux-
ci sont rchis via des sites-miroirs sur l'internet de sorte qu'il n'y a pas de
dicults les obtenir l'aide d'un moteur de recherche (en particulier via
http ://www.tldp.org). Voir le tableau 17.1.
Il y a des tutoriaux de plus petite taille pour une initiation rapide (voir
http ://www.tldp.org) (tableau 17.2).
CHAPITRE 17. DOCUMENTATION PR-INSTALLE. 156
Les pages du manuel sont discutes dans la section 5.7. Les autres rpertoires
de la superstructure (voir la section 18.2) peuvent contenir des pages de man.
Sur certains autres systmes Unix, ces pages sont hberges ailleurs.
Pour convertir une page de man en Postscript (en vue d'une impression ou
d'une visualisation), utilisez ceci (qui est un exemple se rapportant la page de
man de cp)1 :
Enn, tous les paquets installs sur le systme ont leur propre rpertoire de
documentation individuel. Un paquet foo prsentera trs probablement un r-
pertoire de documentation /usr/doc/foo (ou /usr/share/doc/foo). Ce rper-
toire contiendra la documentation fournie avec les sources du logiciel, tel qu'une
information de version, des mises--jour propos des caractristiques, du code
titre d'exemple ou une FAQ. Si vous tes intress par un paquet donn, vous
devriez toujours consulter son rpertoire dans /usr/doc (ou /usr/share/doc),
ou mieux encore tlcharger les sources.
Dans le tableau 17.3, vous trouverez les rpertoires contenus dans /usr/doc
(ou /usr/share/doc) qui constituent plus qu'une simple documentation sur les
paquets. Dans certains cas, les paquets prsentent une documentation tout--
fait complte. A titre d'exemple, les rfrences de Python ne sont reprises nulle
part ailleurs.
Chapitre 18
18.1 Paquets.
Les systmes Linux sont construits l'aide de centaines de petits paquets
logiciels, chacun d'eux ralisant des groupes d'oprations logiques. Sur Linux,
des paquets autonomes intragissent de manire produire plus de fonction-
nalits que ne le feraient de grands ensembles logiciels unitaires. Il n'y a pas
de distinction nette entre les parties propres du systme d'exploitation et les
applications ; chaque fonction est un paquet.
Un paquet logiciel (software package ) sur un systme RedHat typique est
distribu sous forme d'un chier RPM (pour RedHat Package Manager ) qui
prsente une extension .rpm. Dans le cas d'une distribution Debian, un chier
quivalent est caractris par une extension .deb ; pour une Slackware, l'exten-
sion est .tgz. Les paquets d'une Gentoo ont un suxe .ebuild qui permet au
sein de Portage de compiler les sources sous forme .tar.gz ou .tar.bz2 en
vriant les dpendances.1
Lors de son installation, chaque paquet est developp en plusieurs chiers
distribus dans tout le systme. Les paquets ne crent gnralement pas de
rpertoires majeurs mais au lieu de cela, les chiers qui le constituent sont
disposs dans des rpertoires existant clairement identis.
160
CHAPITRE 18. SURVOL DE LA STRUCTURE DES RPERTOIRES U NIX.161
Le rpertoire /usr qui est gnralement mont depuis une partition spare, ne
devrait contenir que des donnes partageables, en lecture-seule, an d'tre mont
par plusieurs machines utilisant Linux. Il devrait contenir les sous-rpertoires
suivants :
less -f /dev/hda
Bien sr, /dev/hda n'est pas un chier du tout, en ralit. Lorsque vous prati-
quez par la commande que nous venons d'utiliser, vous lisez rellement ce qui se
trouve sur le premier disque physique de votre machine. De fait, /dev/hda est
un chier de priphrique. Tous les priphriques sont stocks dans le rpertoire
/dev.
Les chiers de priphriques permettent l'accs au matriel. Si votre carte
son est installe et congure, vous pouvez tester ceci :
Le systme mettra les sons que vous avez enregistrs, via les hauts-parleurs.
Notez que ceci ne fonctionne pas toujours parce que le volume et/ou la vitesse
d'enregistrement ne sont peut-tre pas correctement adapts.
Si, par ailleurs, aucun programme ne fait usage de votre souris, vous pouvez
tester ceci :
166
CHAPITRE 19. LES PRIPHRIQUES D' UNIX. 167
cat /dev/mouse
Si, prsent, vous dplacez votre souris, les commandes du protocole qui y
sont associes seront crites directement sur votre cran (cela ressemblera du
gribouillis). C'est une manire directe et aise de constater que votre souris fonc-
tionne bien (en particulier, lorsque vous dsirez tester un port srie). Si jamais
ce test ne fonctionnait pas (parce qu'une commande a prcongur votre port
srie d'une manire particulire), essayez :
cu -s 1200 -l /dev/mouse
A plus bas niveau, les programmes accdant aux chiers de priphriques pra-
tiquent de deux manires :
soit ils lisent depuis un priphrique et y crivent en manipulant des don-
nes de masse (de manire similaire ce que font less et cat dans les
exemples vus prcdemment),
soit ils utilisent la fonction C ioctl (IO Control) pour congurer le pri-
phrique. Dans le cas de la carte son, ceci peut permettre le basculement
du mode mono vers le mode stro et vice-versa.
Etant donn que chaque priphrique (sauf les cartes rseau) peut tre amenag
pour correspondre ces deux modes, la mthode Unix est toujours utilise
depuis son dveloppement. Elle demeure une mthode de rfrence d'accs au
matriel.
En revanche, l'accs aux priphriques srie se fait un octet la fois. Les donnes
peuvent tre lues ou crites une seule fois seulement. Par exemple, aprs qu'un
octet ait t lu depuis votre souris, le mme octet ne peut plus tre lu par un
autre programme. Les priphriques srie sont appels priphriques caractres
(character devices) et sont caractriss par un c sur la partie gauche de la ligne
ache via ls. Votre priphrique /dev/dsp (Digital Signal Processor, c'est--
dire votre carte son) se caractrise ainsi :
/dev/modem ne devrait pas tre utilis dans le cas d'un modem supportant
la gestion d'appels entrants (dial-in ) aussi bien que celle d'appels sortants
(dial-out ), du fait que cela tend induire des problmes de verrouillage de
chiers. Si /dev/modem existe, il devait pointer sur le premier priphrique
TTY (l'utilisation de priphriques d'appels externes est obsolte).
Concernant le matriel SCSI, /dev/tape et /dev/sr* devraient pointer
vers les priphriques combins (par exemple, /dev/st* et /dev/sr*),
tandis que /dev/cdwriter et /dev/scanner devraient pointer vers les p-
riphriques SCSI gnriques (/dev/sg*).
/dev/mouse peut pointer vers le premier priphrique TTY, un priph-
rique matriel de souris ou encore une connexion pour un module de souris
(par exemple, /dev/gpmdata).
Sockets et tubes :
Les sockets non-transitoires et les tubes peuvent exister dans /dev.3 Les
entres frquentes sont :
3 NdT : le terme socket, dsormais consacr, dsigne une connexion (comme une prise
lectrique).
CHAPITRE 19. LES PRIPHRIQUES D' UNIX. 172
Pour utiliser dd, vous devez spcier un chier d'entre et un chier de sor-
tie avec les options if= et of=, respectivement. Si l'option of= est omise, dd
crira vers stdout. Si l'option if= est omise, dd lit partir de stdin. [Si vous
ressentez une dicult, rappelez-vous que dd fonctionne en termes d'entre et
sortie par rapport lui-mme].
Notez que dd est une commande implacable et destructrice qui ne devrait
tre utilise qu'avec beaucoup de prcautions.
dd if=boot.img of=/dev/fd0
Cette commande crit l'image brute du disque sur la disquette. Toutes les dis-
tributions ont des images similaires an de permettre la cration de disquettes
d'installation (et parfois de disquettes de secours).
crira une collection de zros sur les 10 premiers Mo de votre disque IDE. Ceci
nettoyera la table de partition aussi bien que toute information propos du
systme de chiers de manire vous restituer un disque ambant neuf.
Il est tout aussi ais d'encoder des zros sur une disquette :
Cependant, mme le transfert de zros sur une disquette ne sera pas toujours
susant. Des quipements spcialiss peuvent encore lire des supports magn-
tiques aprs qu'ils aient t eacs plusieurs reprises. Si, cependant, vous
crivez des octets de manire alatoire sur une disquette, il devient assurment
impossible de dterminer ce qui y tait inscrit au pralable :
mknod dev/urandom c 1 9
for i in 1 2 3 4 ; do
dd if=/dev/urandom of=/dev/fd0 bs=1024 count=1440
done
Ceci vous donne /dev/stdin : x86 boot sector, code offset 0x48.
Pour dterminer le type d'une disquette, essayez :
ce qui retournera : x86 boot sector, system )k ?/bIHC, FAT (12 bit) dans
le cas des disquettes formates DOS.
dd if=/dev/hdc of=/dev/hdd
tar -cvzf /dev/hdd /bin /boot /dev /etc /home /lib /sbin /usr /var
mt -f /dev/st0 rewind
tar -cvf /dev/st0 /home
Donc, si tous les messages, y compris les messages d'erreurs, doivent tre limi-
ns, il faut utiliser :
ou,
souvent utilis quand un chier est requis pour certaine fonctionnalit dans les
scripts de conguration ou, quand vous souhaitez dsactiver une fonctionnalit
particulire. Par exemple, le fait de spcier un shell /dev/null pour certains
utilisateurs dans le chier password prviendra tout usage incertain d'un shell.
C'est une mthode explicite pour spcier que le compte de ces programmes
utilisateurs n'autorise pas de connexion un shell.
Vous pouvez galement utiliser /dev/null an de crer un chier ne conte-
nant rien :
Les lettres b et c sont requises pour crer un priphrique bloc (block) ou carac-
tre (character), respectivement. Pour dmontrer cela, essayons :
cd /dev
./MAKEDEV -v fd0
./MAKEDEV -v fd1
Remarquez que les programmes donnant l'erreur ENOENT : No such le or directory
indiquent normalement que le chier de priphrique est manquant, alors que EN-
OENT : No such device signie que, concernant le noyau, le pilote n'est pas congur
ou charg.
19.7 devfs*.5
19.7.1 Fonctionnement gnral de devfs.
devfs signie Device File System (ou systme de chier de priphriques ).
Ce systme de gestion de priphriques a t conu pour viter les inconv-
nients associs au rpertoire /dev. En eet, la gestion des droits sur les chiers
de /dev est complexe puisqu' ct des priphriques de votre systme, il existe
bien d'autres chiers de priphriques prvus mais non-utiliss. En outre, quand
un programme interagit avec un chier de priphrique, la partition / est auto-
matiquement monte en lecture/criture alors que souvent le montage en lecture
seul sut. Finalement, /dev ne peut tre plac sur une partition spare car
mount ncessite /dev pour monter les partitions.
devfs a t incorpor au noyau Linux pour corriger ces problmes. Avec
devfs, vous ne devez plus vous proccuper des paires majeur/mineur. Elles
sont encore supportes pour des raisons de compatibilit avec le schma exis-
tant, sans tre ncessaires toutefois. Pour utiliser devfs, les options :
doivent tre slectionnes dans le noyau (ces options se trouvent dans la section
File Systems Pseudo filesystems). Voir la section 43.11 pour la slection
des options et la compilation du noyau.
devfs utilise des sous-rpertoires pour amliorer la lisibilit du rpertoire
/dev. Ainsi, les priphriques IDE sont logs dans le sous-rpertoire /dev/ide/.
Les priphriques SCSI se retrouvent dans /dev/scsi/. Tous les deux prsentent
la mme structure de sous-rpertoires un niveau encore plus bas.
Les disques SCSI et IDE sont contrls par un adaptateur host (hte ) se
trouvant sur la carte mre ou sur une carte spare. Comme il peut y avoir
dirents canaux (appels bus ), il peut y avoir plusieurs IDs sur chaque canal,
permettant d'identier un disque de manire univoque. Cet identiant est appel
la cible (ou target en anglais). Pour les priphriques SCSI, il peut y avoir divers
LUN (Logic Unit Number ou encore numro d'unit logique ).
Donc, en considrant /dev/hda1, la structure du rpertoire /dev/ide se pr-
sente de la manire suivante pour ce priphrique :
5 Cette section est un ajout au texte original.
CHAPITRE 19. LES PRIPHRIQUES D' UNIX. 177
/dev/ide/host0/bus0/target0/lun0/part1
REGISTER .* MKOLDCOMPAT
UNREGISTER .* RMOLDCOMPAT
# You may comment out the above and uncomment the following if you've
# configured your system to use the original "new" devfs names or the really # new names
#REGISTER vc/.* MKOLDCOMPAT
#UNREGISTER vc/.* RMOLDCOMPAT
#REGISTER pty/.* MKOLDCOMPAT
#UNREGISTER pty/.* RMOLDCOMPAT
#REGISTER misc MKOLDCOMPAT
#UNREGISTER misc RMOLDCOMPAT
# You may comment these out if you don't use the original "new" names REGISTER .*
MKNEWCOMPAT UNREGISTER .* RMNEWCOMPAT
# Enable module autoloading. You may comment this out if you don't use # autoloading
LOOKUP .* MODLOAD
# Uncomment the following if you want to set the group to "tty" for the
# pseudo-tty devices. This is necessary so that mesg(1) can later be used to #
enable/disable talk requests and wall(1) messages.
REGISTER ^pty/s.* PERMISSIONS -1.tty 0600
REGISTER ^pts/.* PERMISSIONS -1.tty 0600
# Uncomment this if you want permissions to be saved and restored
# NB : Do NOT change the following !
# Do not do this for pseudo-terminal devices
REGISTER ^pt[sy]/.* IGNORE
CHANGE ^pt[sy]/.* IGNORE
CREATE ^pt[sy]/.* IGNORE
DELETE ^pt[sy] IGNORE
REGISTER ^log IGNORE
CHANGE ^log IGNORE
CREATE ^log IGNORE
CHAPITRE 19. LES PRIPHRIQUES D' UNIX. 178
# Video4Linux devices
REGISTER v4l/.* PERMISSIONS root.video 660
# ALSA/OSS stuff
# Comment/change these if you want to change the permissions on
# the audio devices
LOOKUP snd MODLOAD ACTION snd
LOOKUP dsp MODLOAD
LOOKUP mixer MODLOAD
LOOKUP midi MODLOAD
REGISTER sound/.* PERMISSIONS root.audio 660
REGISTER snd/.* PERMISSIONS root.audio 660
# Create /dev/mouse
LOOKUP ^mouse$ CFUNCTION GLOBAL mksymlink misc/psaux mouse
REGISTER ^misc/psaux$ CFUNCTION GLOBAL mksymlink $devname mouse
UNREGISTER ^misc/psaux$ CFUNCTION GLOBAL unlink mouse
INCLUDE /etc/devfs.d
Lorsque ce chier est modi, le dmon devfsd doit tre relanc par les com-
mandes suivantes :
ou
# REGISTER .* MKOLDCOMPAT
# UNREGISTER .* RMOLDCOMPAT
Dans ce cas, le systme doit tre redmarr pour que les modications soient
prises en compte.
Lors du chargement d'un module, devfsd cre automatiquement le chier
priphrique correspondant. Pour dsactiver ce comportement par dfaut, com-
mentez ou supprimez la ligne associe la fonction d'autochargement dans
/etc/devfsd.conf :
# LOOKUP .* MODLOAD
Le second champ est une expression rationnelle dsignant des chiers commen-
ant par /dev. Le quatrime champ reprsente le propritaire et le groupe du
chier de priphrique. Le cinquime donne les droits sous forme octale.
Sur certaines distributions,6 le comportement par dfaut lors d'une modi-
cation des droits par chmod ou chown est que devfsd enregistre la modication
au moment de la procdure d'extinction de l'ordinateur. Ce comportement est
congur par les lignes suivantes du chier /etc/devfsd.conf :
mount --bind /dev /lib/dev-state mount -t devfs none /dev devfsd /dev
# /etc/security/console.perms
#
# This file determines the permissions that will be given to priviledged # users of the
console at login time, and the permissions to which to
# revert when the users log out.
# format is :
# <class>=list of regexps specifying consoles or globs specifying files
# file-glob|<class> perm dev-regex|<dev-class> \
# revert-mode revert-owner[.revert-group]
# the revert-mode, revert-owner, and revert-group are optional, and default # to 0600,
root, and root, respectively.
#
# For more information :
# man 5 console.perms
CHAPITRE 19. LES PRIPHRIQUES D' UNIX. 181
# permission definitions
<console> 0660 <serial> 0660 root.tty
<console> 0660 <floppy> 0660 root.floppy
<console> 0600 <sound> 0600 root.audio
<console> 0600 <cdrom> 0660 root.cdrom
<console> 0600 <pilot> 0660 root.uucp
<console> 0600 <jaz> 0660 root.disk
<console> 0600 <zip> 0660 root.disk
<console> 0600 <ls120> 0660 root.disk
<console> 0600 <scanner> 0600 root
<console> 0600 <camera> 0600 root
<console> 0600 <memstick> 0600 root
<console> 0600 <flash> 0600 root
<console> 0600 <diskonkey> 0660 root.disk
<console> 0600 <rem_ide> 0660 root.disk
<console> 0600 <fb> 0600 root
<console> 0600 <kbd> 0600 root
<console> 0600 <joystick> 0600 root
<console> 0600 <v4l> 0600 root.sys
<console> 0700 <gpm> 0700 root
<console> 0600 <mainboard> 0600 root
<console> 0660 <burner> 0660 root.cdrw
<console> 0600 <usb> 0660 root.usb
<console> 0600 <rio500> 0600 root
19.8 udev*.7
19.8.1 Avantages d'udev.
Avec les noyaux Linux-2.6, de nouvelles technologies sont apparues. udev
est l'une d'elles. Nous en verrons deux autres ci-aprs. udev pour userspace
implementation of devfs est un gestionnaire de priphriques de petite taille
(~6 ko) mis en oeuvre dans l'espace utilisateur, contrairement devfs dont le
dmon (devfsd) fonctionne dans l'espace noyau. L'objectif est de disposer d'un
systme ayant les caractristiques suivantes :
un fonctionnement dans l'espace utilisateur,
7 Cette section est un ajout au texte original. Elle est directement inspire de G.Kroah-
Hartman, udev A Userspace Implementation of devfs in Proceedings of the Linux Sympo-
sium, (Eds. A.J. Hutton, S. Donovan and C. C. Ross), July 23-26, 2003, Ottawa, Canada,
pp.263-271.
CHAPITRE 19. LES PRIPHRIQUES D' UNIX. 183
rpm -i udev-045
( urpmi udev )
( apt-get install udev )
( emerge udev )
Si le paquet n'est pas prsent sur le disque dur, il peut tre install aisment
partir du CD-ROM.
Lorsque ces paquets sont installs, vous avez deux possibilits pour utiliser
udev.
Dans le premier cas, il faut recompiler le noyau (voir le chapitre 43). Puisque
vous utilisez un noyau 2.6, descendez dans l'arborescence du noyau :
CHAPITRE 19. LES PRIPHRIQUES D' UNIX. 184
cd /usr/src/linux
make menuconfig
L'option /dev file system support (OBSOLETE) pourrait rester coche mais
l'option Automatically mount at boot doit tre dsactive.
Aprs avoir remont votre partition /boot :
mount /boot
recompilez votre noyau (la premire commande ne vaut que pour un noyau
2.6, voir le chapitre 43) :
devfs=nomount
( gentoo=nodevfs )
CHAPITRE 19. LES PRIPHRIQUES D' UNIX. 185
###########################################################
#
# For devfs similar /dev layout (neater)
#
###########################################################
# alsa devices
KERNEL="controlC[0-9]*", NAME="snd/%k"
KERNEL="hw[CD0-9]*", NAME="snd/%k"
KERNEL="pcm[CD0-9cp]*", NAME="snd/%k"
KERNEL="midiC[D0-9]*", NAME="snd/%k"
KERNEL="timer", NAME="snd/%k"
KERNEL="seq", NAME="snd/%k"
...
...
# vc devices
KERNEL="vcs", NAME="vcc/0", SYMLINK="%k"
KERNEL="vcs[0-9]*", NAME="vcc/%n", SYMLINK="%k"
KERNEL="vcsa", NAME="vcc/a0", SYMLINK="%k"
KERNEL="vcsa[0-9]*", NAME="vcc/a%n", SYMLINK="%k"
# v4l devices
KERNEL="video[0-9]*", NAME="v4l/video%n", SYMLINK="video%n" KERNEL="radio[0-9]*",
NAME="v4l/radio%n"
KERNEL="vbi[0-9]*", NAME="v4l/vbi%n", SYMLINK="vbi%n" KERNEL="vtx[0-9]*",
NAME="v4l/vtx%n"
le d'attente. Le dmon udevd gre cette le d'attente et excute les commandes
selon un numro d'ordre transmis par le noyau au cas o plusieurs priphriques
seraient branchs simultanment. La commande udevsend reoit du noyau un
jeu de variables d'environnement et les informations relatives au priphrique
branch (ajout, suppression ou r-attribution de nom ; tablissement du che-
min vers le priphrique dans /sys). udevd utilise alors ces donnes et consulte
les chiers /etc/udev/rules.d et /etc/udev/permissions.d pour dterminer
le(s) chier(s) de priphrique crer, les droits lui (ou leur) appliquer et les
liens symboliques tablir.
udev garantit que le nom de chier spcial aect un priphrique donn
ne change pas et est explicite (voir la section 19.8.6). Ceci est vrai quelle que
soit la manire et l'ordre dont les priphriques sont connects au systme. L'at-
tribution explicite sur base des donnes matrielles empche la confusion entre
priphriques. La liste des paramtres utiliss pour lever les ambiguits de ma-
triel peut tre obtenue avec la commande systool (du paquet sysfsutils).
Par exemple, si vous venez de brancher une cl USB (disque SCSI), vous pouvez
excuter :
dev.cdrom.lock = 0
/etc/rc.d/init/hald start
( /etc/rc.d/init.d/hald start )
Les clefs sont : BUS et SYSFS{serial}. udev appliquera cette rgle au priph-
rique qui est connect au bus USB et dont le numro de srie est HXOLL001220232-
CHAPITRE 19. LES PRIPHRIQUES D' UNIX. 190
3480. Notez qu'il faut une correspondance sur toutes les clefs pour qu'udev
utilise la rgle d'attribution de nom du priphrique.
Le chier (noeud) sera nomm lp_epson et celui-ci pourra tre trouv en tant
que /dev/lp_epson. udev crera aussi un lien symbolique printers/epson_-
stylus dont le chemin absolu est /dev/printers/epson_stylus (s'il n'existe
pas, le rpertoire /dev/printers sera cr). Avec cette rgle, vous pouvez impri-
mer en envoyant vos donnes sur /dev/printers/epson_stylus ou /dev/lp_epson.
KERNEL="ts*", NAME="input/%k"
KERNEL="fd[0-9]*", NAME="floppy/%n"
CHAPITRE 19. LES PRIPHRIQUES D' UNIX. 191
/block/sda
Ceci indique que le chemin de sysfs est /sys/block/sda. Vous pouvez lan-
cer la commande :
udevinfo -a -p /sys/block/sda
SYSFS{bNumCongurations}="1"
SYSFS{speed}="12"
SYSFS{manufacturer}="Tekom Technologies, Inc"
SYSFS{product}="USB 2.0M DSC"
/class/usb/lp0
La seconde commande :
udevinfo -a -p /sys/class/usb/lp0
donne :
udevinfo -a -p /sys/block/sda/sda1
L'appareil photo sera donc associ au chier /dev/dsa1 mais aussi au noeud
plus explicite /dev/camera. (Si /dev/sda1 n'est pas disponible, /dev/sdb1 sera
utilis, voire /dev/sdc1 si /dev/sdb1 n'est pas non plus disponible, et ainsi de
suite.) Bien sr, /dev/sda sera cr. Toutefois, ce qui est important c'est que
le lien symbolique persistent nomm camera pointera toujours vers la partition
montable /dev/sda1.
CHAPITRE 19. LES PRIPHRIQUES D' UNIX. 195
udevinfo -a -p /sys/class/net/eth0/
Etant donn que chaque carte rseau possde une adresse MAC unique apporte
sa fabrication, il est pertinent de s'en servir pour tablir la rgle. A moins que
vous ne changiez de carte, la rgle restera valable. En voici un exemple typique :
Pour que cette rgle prenne eet, il faudra soit ramorcer votre systme, soit
dcharger puis recharger le pilote de la carte rseau. Il faudra galement recon-
gurer la carte pour lui donner le nom lan au lieu d'eth0. Pour tre sr que
cela fonctionne, il est possible qu'il faille supprimer toutes les rfrences eth0
au pralable.
KERNEL="hdc", SYMLINK="dvd"
Lorsqu'udev la lit, il la mmorise. Lorsqu'il lit une autre rgle associe au mme
priphrique (mais qui comprend une clef NAME), udev cre le chier tel qu'indi-
qu par la rgle comprenant la clef NAME et, en plus, les liens symboliques dnis
par les clefs SYMLINK des deux rgles.
En l'occurrence, l'attribution de nom du priphrique hdc se passe selon les
rgles par dfaut applicables les priphriques blocs, mais un lien symbolique
dvd sera aussi cr compte tenu de la rgle personnelle cite ci-dessus.
Bien sr, udev ne tient compte de votre rgle personnelle que si elle peut
tre lue avant que les rgles par dfaut ne le soient. Consultez udev(8).
Chapitre 20
Partitions, systmes de
chiers, formatage et
montage.
Une simple piste mais aussi l'empilement de toutes les pistes de mme dia-
mtre (sur touts les disques individuels du disque dur) forment un cylindre. On
parle donc des disques en mentionant le nombre de cylindres et de secteurs
au lieu du nombre de ttes, pistes ou secteurs. Les partitions sont usuellement
dlimites par les bords des cylindres. Donc, les disques ne peuvent contenir
de partitions de taille arbitraire : la taille d'une partition est un multiple de la
quantit de donnes contenue dans un cylindre. Par consquent, les partitions
prsentent des diamtres interne et externe bien dnis. La gure 20.1 illustre
la structure gnrale d'un disque dur.
197
CHAPITRE 20. PARTITIONS, SYSTMES DE FICHIERS, FORMATAGE ET MONTAGE.198
fdisk /dev/hda
CHAPITRE 20. PARTITIONS, SYSTMES DE FICHIERS, FORMATAGE ET MONTAGE.199
Avant tout, nous utilisons l'option p an d'acher la table des partitions cou-
rante (voir l'encadr suivant le tableau 20.1).
CHAPITRE 20. PARTITIONS, SYSTMES DE FICHIERS, FORMATAGE ET MONTAGE.200
Nous voyons qu'il n'y a pas encore eu de partionnement sur /dev/hda. A pr-
sent, ajoutons une nouvelle partition (introduisons d'abord n puis p) :
Nous souhaitons dnir une partition de 80 Mo. fdisk calcule le dernier cy-
lindre de manire automatique :
Par dfaut, fdisk xe le type Linux. Nous devons seulement dclarer ex-
plicitement le type de la partition swap :
A ce stade, rien n'a encore t crit sur le disque. Nous pratiquons de la manire
suivante (sachant que cette tape est irrversible) :
Mme aprs avoir crit (written ) la table de partition, fdisk peut donner un
avertissement au sujet du fait que le noyau ne connait pas l'existence des nou-
velles partitions. Ceci arrive lorsque le disque est dj en activit. Dans ce cas,
vous devez relancer le systme. Pour le partitionnement prcdent, le noyau
mettra l'information que voici lors du r-amorage de la machine (reboot ) :
Partition check :
hda : hda1 hda2 < hda5 hda6 hda7 hda8 hda9 >
less /dev/hda1
less -f /dev/hda1
20.3.2 mke2fs.
Pour crer un systme de chiers sur une partition vierge, utilisez la com-
mande mkfs (ou une de ses variantes). Ainsi, pour crer un systme de chiers
ext2 de Linux sur votre premier matre, excutez :
ou de manire alternative,
mke2fs -c /dev/hda1
L'option -c conduit une vrication des blocs dfectueux (bad blocks ) par
lecture du disque entier au pralable. Cette vrication se fait en mode lecture-
seule et marque les blocs altrs de manire ce qu'il ne soient plus utiliss.
Si vous voulez faire une vrication en lecture-criture, utilisez la commande
badblocks. Cette dernire crit et vrie chaque octet dans la partition teste.
Bien que l'option -c doive toujours tre utilise dans le cas d'un nouveau disque,
raliser un test en lecture-criture total est quelque peu excessif. Pour la parti-
1 NdT : et plus rcemment NTFS.
CHAPITRE 20. PARTITIONS, SYSTMES DE FICHIERS, FORMATAGE ET MONTAGE.205
mke2fs -c /dev/pda1
mke2fs -c /dev/pcd0
mke2fs -c /dev/pf0
mke2fs -c/dev/fd0
En ralit, l'usage d'un systme de chiers de type ext2 sur une disquette
prend beaucoup de place. Prfrez-lui un systme de chiers FAT ou VFAT,
qui possde moins d'en-ttes tout en prsentant l'avantage d'tre lu par de trs
nombreux utilisateurs (voir la section 20.3.4).
Souvent, vous n'irez pas jusqu' partitioner un priphrique susceptible de
ne contenir qu'une seule partition. Vous utiliserez l'entiret du disque comme
partition unique. C'est le cas, par exemple, d'un lecteur IDE comme premier
esclave [les lecteurs LS120 et Jazz sont des exemples commerciaux] :
mke2fs -c /dev/hdb
Elle vrie que chaque piste fonctionne correctement et compense les variations
d'ordre mcanique des dirents lecteurs de disquette. Pour formater une dis-
quette de 3.5 1440 ko, 1620 ko ou 1920 ko (respectivement), excutez :
cd /dev
./MAKEDEV -v fd0
superformat /dev/fd0H1440
superformat /dev/fd0H1690
superformat /dev/fd0H1920
Notez que ces disquettes ont des noms de chiers longs (long le name ; VFAT)
mais pas comme dans le cas des anciennes disquettes MS-DOS 13 caractres.
La plupart des utilisateurs n'emploieront que des disquette de 3.5 1.44 Mo.
En fait, le support disque et les ttes magntiques peuvent crire de manire
plus dense que cela, permettant 24 secteurs par pistes de faire du stockage au
lieu de 18 secteurs, usuellement. Ceci explique pourquoi il y a plus d'un chier
de priphrique pour le mme priphrique dans le rpertoire /dev. Des disques
de qualit infrieure prsenteront des erreurs lors d'un stockage plus grande
densit. La commande superformat ache ces erreurs.
Consultez la table 19.1 de la page 166 pour les conventions de dnomination
des lecteurs de disquettes et de leur format respectif.
mkswap -c /dev/hda5
swapon /dev/hda5
swapoff /dev/hda5
Nagure, les partitions de dgagement ne devaient pas tre plus grandes que
128 Mo, bien qu'il tait permis de les multiplier. Cette limitation ne concerne
plus les noyaux rcents. Grce swapon, vous pouvez activer plusieurs partitions
de dgagement (swap ) simultanment.
ls /mnt/cdrom
mount -t iso9660 -o ro /dev/hdb /mnt/cdrom
Votre CD-ROM peut tre dsign comme /dev/hdc ou /dev/hdd (dans ce cas,
vous devrez tablir un lien symbolique /dev/cdrom pointant vers le priph-
rique adquat). Votre distribution peut prfrer la dnomination /cdrom ou
/mnt/cdrom.
A prsent, descendez dans le rpertoire associ votre lecteur en utilisant
la commande cd /mnt/cdrom. Vous observerez que celui-ci n'est plus vide : il
contient les chiers de votre CD-ROM. Vous pouvez naviguer parmi les chiers
comme s'ils avaient t copis sur votre disque dur. C'est une des caractristiques
qui rendent Unix si agrable.
Lorsque vous aurez termin de consulter les chiers du CD-ROM, passez
dans un autre rpertoire que /mnt/cdrom et procdez l'opration de dmon-
tage (en anglais unmount ; notez que la commande est umount) :
umount /dev/hdb
eject /dev/hdb
mkdir /mnt/floppy
mount -t vfat /dev/fd0 /mnt/floppy
ou, dans le cas d'anciennes disquettes MS-DOS, employer les commandes sui-
vantes :
mkdir /mnt/floppy
mount -t msdos /dev/fd0 /mnt/floppy
umount /dev/fd0
de sorte que les donnes situes dans le cache soient crites sur le disque. Ne
pas dmonter la disquette avant de l'jecter corrompra sans aucun doute son
systme de chiers.
mkdir /windows
mount -t vfat /dev/hda1 /windows
mkdir /nt
mount -t ntfs /dev/hda2 nt
-V indique qu'il faut produire une sortie en mode bavard (verbose ) ; -a force
la vrication du systme de chiers de manire non-interactive, c'est--dire en
ne consultant pas l'utilisateur avant d'eectuer les rparations.
La commande que vous utiliserez normalement avec Linux si vous ne connais-
sez pas l'ensemble des proprits du systme de chiers ext2 est :
CHAPITRE 20. PARTITIONS, SYSTMES DE FICHIERS, FORMATAGE ET MONTAGE.209
bien que vous puissez omettre l'option -t puisque Linux autodtecte le sys-
tme de chiers. Notez que vous ne devriez pas excuter fsck sur un systme
de chiers mont. Dans certains cas exceptionnels, il est possible de lancer la
commande fsck sur un systme de chiers mont en lecture seule.
En fait, fsck ne fait que lancer un programme analysant le systme de
chiers. Dans le cas d'ext2, la commande e2fsck (aussi connue sous le nom de
fsck.ext2) est excute. Voir e2fsck(8) pour une description exhaustive.
Pendant une vrication interactive (lorsque l'option -a n'est pas utilise ou
lorsque l'option -r est active par dfaut), diverses questions sont poses l'utili-
sateur. Elles concernent la sauvegarde et les corrections. Il est prudent de sauver
les donnes si vous n'tes pas sr de vous. La sauvegarde aura lieu dans le rper-
toire lost+found qui se trouve sur le rpertoire racine du priphrique. Ainsi,
les rpertoires suivants pourraient exister : /lost+found, /home/lost+found,
/var/lost+found, /usr/lost+found, etc. Aprs avoir demand la vrication
du rpertoire /dev/hda9, par exemple, achez le rpertoire /home/lost+found
l'cran et liminez les lments qui ne sont plus ncessaires. La plupart du
temps, il s'agira des chiers temporaires et des journaux, c'est--dire des -
chiers qui changent de contenu frquemment. Il est rare de perdre des chiers
importants lors d'une opration o l'ordinateur est teint de manire incorrecte
(en anglais, shutdown dsigne l'opration consistant teindre un ordinateur
proprement).
2 NdT : dans ce cas, il sera certainement utile d'utiliser le mode rescue en tirant parti du
CD d'installation ou d'une disquette de sauvetage.
CHAPITRE 20. PARTITIONS, SYSTMES DE FICHIERS, FORMATAGE ET MONTAGE.210
Intressons-nous pour l'instant aux six premires lignes. Les trois premiers champs
(ou colonnes) indiquent respectivement les partitions, les rpertoires o elles
doivent tre montes et les systmes de chiers qui sont associs. Le quatrime
champ donne les options, c'est--dire les arguments passs l'option -o de la
commande mount.
Le cinquime champ prcise si le systme de chiers contient des chiers rels.
Ce champ, qui communment n'est pas utilis, est exploit par la commande
dump pour dcider si une sauvegarde est possible.
Le dernier champ nous indique l'ordre dans lequel un fdisk devrait tre
ralis sur les partitions. La partition / devrait tre la premire concerne (avec
un 1) suivie de toutes les autres partitions (avec un 2). En plaant un 2 partout
ailleurs, on s'assure que les partitions places sur dirents disques seront v-
ries en parallle, ce qui amliore la vitesse laquelle la phase d'initialisation
(boot ) procde.
Les entres floppy et cdrom vous permettront d'utiliser une forme contrac-
te pour la commande mount. Cette commande ne considrera que le rpertoire
correspondant et le systme de chiers dans /etc/fstab. Essayez :
mount /dev/cdrom
Ces entres possdent aussi l'option user, qui permet aux utilisateurs ordinaires
de monter ces priphriques. L'option -ro nous apprend que le CD-ROM est
mont en lecture seule (r ead-o nly ) et la commande noauto indique mount
de ne pas monter les systmes de chiers lors de la phase d'initialisation de la
machine (des explications plus prcises se trouvent plus bas dans le texte).
proc est une base de donnes d'information du noyau, qui ressemble un
systme de chiers. Par exemple, /proc/cpuinfo ne constitue pas un type de
chier rellement prsent sur votre disque. Essayez cat /proc/cpuinfo.
Beaucoup de programmes utilisent /proc pour obtenir des informations dy-
namiques sur l'tat et la conguration de votre machine. Davantage ce propos
est dcrit dans la section 43.4.
Le systme de chiers /dev/pts est un autre pseudo-systme de chiers qui
produit des paires de terminaux matres/esclaves pour les programmes. Ceci
s'adresse plus particulirement aux dveloppeurs.
CHAPITRE 20. PARTITIONS, SYSTMES DE FICHIERS, FORMATAGE ET MONTAGE.211
Cette mthode constitue une exception l'usage normal de mount. Notez que
toutes les installations communes de Linux requiert que /proc soit mont lors
de l'initialisation de votre systme. Les seules occasions o cette commande est
ncessaire sont le dmarrage manuel ou l'usage de chroot (voir la section 21.7.1
la page 220).
Lorsque vous aurez termin la copie des chiers que vous souhaitez avoir dans
~/mnt, excutez simplement :
umount ~/mnt
losetup -d /dev/loop0
Une mthode similaire pour les priphriques RAM consiste lancer les com-
mandes suivantes :
Quand vous en avez termin avec la copie des chiers que vous voulez avoir
dans ~/mnt, excutez simplement :
umount ~/mnt
Pour transfrer le systme de chiers vers une disquette (ou un chier), ex-
cutez respectivement :
dd if=/dev/cdrom of=un_nom.iso
mount -t iso9660 -o ro,loop=/dev/loop0 un_nom.iso /cdrom
Cette commande est trs utile quand vous vous connectez en mode monoutili-
sateur (single-user ) sans accs en criture votre partition racine.
sync
Chapitre 21
213
CHAPITRE 21. SCRIPTS DE SHELL AVANCS. 214
Paramtres spciaux.
Le shell traite plusieurs variables (ou paramtres) de manire spciale. Ces paramtres
peuvent seulement tre lus ; il n'est pas possible de les modier.
$* s'applique aux paramtres de position en commenant la numrotation partir d'1 (c'est-
-dire, aux arguments en ligne de commande passs au script de shell, avec $1 comme
premier argument, $2 pour le second, etc.). Quand l'extension ($*) apparat dans
des guillemets doubles, elle se comporte comme un mot unique bien que chaque para-
mtre soit spar par le premier caractre de la variable spciale IFS (Internal Field
Separator ).2 Cela signie que $* est quivalent $1c $2c ... , o c est le premier
caractre de la valeur de la variable IFS. Si la variable IFS n'est pas dnie, les para-
mtres sont spars par des espaces. Si IFS est nulle, les paramtres sont joints sans
espacements.
$@ s'applique aux paramtres de position, en commenant la numrotation partir de 1.
Lorsque le dveloppement se produit entre des guillemets doubles, chaque paramtre se
comporte comme un mot spar. C'est--dire que $@ est quivalent $1 $2 ...
Lorsqu'il n'y a pas de paramtres de position, $@ et $@ ne s'applique rien (donc,
ils sont limins). [Remarque : ceci est utile pour crire des scripts de shell d'interfaces
qui ne font qu'ajouter un argument].
$# se dveloppe pour fournir le nombre de paramtres de position en mode dcimal .
$ ? renvoie le code de retour du tube3 le plus rcemment excut en avant-plan [c'est--dire
au code de retour de la dernire commande].
$- se dveloppe en une liste des options courantes du shell telles que spcies par la com-
mande interne set ou attribues par le shell lui-mme (comme dans l'option -i).
$$ se dveloppe en le PID du shell courant. Dans un sous-shell [o les commandes sont places
entre ()],4 cette variable s'applique au PID du shell courant et non du sous-shell.
$ ! se dveloppe en le PID de la commande en arrire-plan (ou commande asynchrone) la plus
rcemment excute. [C'est--dire qu'aprs avoir excut une commande en arrire-plan
avec commande &, la variable $ ! donnera l'ID du processus].
$0 se dveloppe pour donner le nom du shell ou du script de shell. Ce paramtre est x
lors de l'initialisation du shell. Si bash est invoqu avec un chier de commande, $0
contiendra le nom de ce chier. Si bash est dmarr avec l'option -c, $0 contiendra le
premier argument (s'il y en a un) aprs la chane excuter. Autrement, ce paramtre
contiendra le chemin utilis pour invoquer bash, tel que donn par l'argument zro.
[Notez que basename $0 est un moyen lgant d'obtenir le nom de la commande
courante, isolment].
$_ lors de dmarrage du shell, ce paramtre contient le chemin absolu du shell ou du script
de shell en cours d'excution, tel que pass sur la ligne de commande. Subsquemment,
la variable est dveloppe en le dernier argument de la commande prcdente. Elle
1 Brian Fox et Chet Ramey doivent tre remercis pour leur contribution.
2 NdT : la variable IFS est souvent un espace.
3 NdT : il s'agit d'un tube associ un enchanement de tubes, appel en anglais pipeline.
4 NdT : ceci est une note pour donner un exemple de sous-shell en relation avec l'usage
de la commande tar pour copier un rpertoire intitul origine (en l'occurrence) d'un disque
vers un autre. Il est entendu que le chemin chemin_vers_repertoire_origine est le chemin
absolu donnant accs ce rpertoire :
cd /repertoire_destination
(cd /chemin_vers_repertoire_origine ; tar cf - *) | tar xvf -
CHAPITRE 21. SCRIPTS DE SHELL AVANCS. 215
correspond aussi au chemin d'accs complet de chaque commande excute et, elle est
place dans l'environnement export vers cette commande. Lors de la vrication de
l'arrive de courriel, ce paramtre contient le nom du chier de courriel en cours de
vrication.
21.3 Dveloppements.
Le terme dveloppement (ou en anglais : expansion ) se rapporte la ma-
nire dont bash modie la ligne de commande avant de l'excuter. bash ralise
plusieurs modications de texte de la ligne de commande, en procdant dans
l'ordre que voici :
Dveloppement d'accolades (brace expansion ) : vous pouvez utiliser,
par exemple, le raccourci touch fichier{1,2,3}.txt pour crer plu-
sieurs chiers intituls fichier1.txt, fichier2.txt et fichier3.txt.
Cette mthode est connue sous le nom de dveloppement d'accolades
(brace expansion ). Elle se produit avant tout autre type de modication
de la ligne de commande.
Dveloppement de tilde (tilde expansion ) : le caractre spcial ~ (tilde)
est remplac par le chemin complet contenu dans la variable d'environ-
nement HOME, ou par le rpertoire home propre chaque utilisateur (si
$HOME est vide). ~+ est remplac par le rpertoire de travail courant et ~-
est substitu par le rpertoire de travail, prcdant qui est le plus rcent.
Ces deux derniers dveloppements sont peu utiliss.
Dveloppement de paramtre (parameter expansion ) : ce terme se rap-
porte au dveloppement de tout terme commenant par un signe $. Notez
que $VAR et ${VAR } oprent exactement la mme manire, ceci prs
que, dans le second cas, la variable peut contenir des caractres ne for-
mant pas de mots entiers (non-whole word ) qui normalement pourraient
amener une confusion dans l'interprtation que doit en faire bash.
Il y a plusieurs astuces pour le dveloppement de paramtres dont vous
pouvez tirer parti an de manipuler des chanes. La plupart des program-
meurs du shell ne les exploitent pas, probablement parce que les autres
Unix les tolrent mal.
TEXT=scripting_for_phun
echo ${TEXT :10 :3}
echo ${TEXT :10}
if <commande> ; then
:
else
echo la <commande> a chou
fi
. lename args un simple point agit comme la commande source. Voyez ci-
dessous.
alias commande=valeur cre un synonyme (ou alias ) associ une com-
mande. Essayez :
# !/bin/sh
function on_hangup ()
{
echo 'Hangup (SIGHUP) signal received'
}
6 NdT : man ulimit indique que cette commande est obsolte. Consultez man limits.
CHAPITRE 21. SCRIPTS DE SHELL AVANCS. 219
while true ; do
sleep 1
done
exit 0
Lancez le script et ensuite, envoyez son PID le signal -HUP, titre de test
(rapportez-vous aussi la section 10.5).7
Une autre fonction importante pour un programme consiste eectuer un
nettoyage aprs la terminaison. Le signal spcial EXIT (qui n'est pas stricto
sensu un signal) excute le code suivant la terminaison d'un script :
# !/bin/sh
function on_exit ()
{
echo 'Je vais effacer les fichierstemporairesprsent'
}
while true ; do
sleep 1
done
exit 0
set -h enregistre l'emplacement des commandes dans votre PATH. Le shell sera
aect si des binaires sont insrs dans les rpertoires de votre PATH, ce qui
provoquera peut-tre une erreur du type No such file or directory.
Dans ce cas, dsactivez cette option ou redmarrez votre shell. Cette option
est active par dfaut.
set -n lit les commandes sans les excuter. Cette commande est utile pour la
vrication de la syntaxe.
set -o posix se conforme exactement la norme POSIX 1003.2
set -u rapporte une erreur lorsqu'on essaye de rfrencer une variable qui est
vide ou inexistante. Usuellement, bash remplit une chane vide.
set -v ache chaque ligne d'un script au fur et mesure de son excution.
set -x ache chaque dveloppement de commande au fur et mesure de l'ex-
cution.
set -C n'crase pas le contenu de chiers existants lors de l'usage de >. Vous
pouvez utiliser > | pour forcer l'crasement.
21.7.1 chroot.
La commande chroot fait croire un processus que son systme de chiers
n'est pas /. Par exemple, vous pouvez avoir une installation Debian complte r-
sidant sous le rpertoire /mnt/debian. Vous pouvez faire usage de la commande :
pour lancer un shell bash interactif, sous le systme de chiers racine /mnt/de
bian.9 Cette commande excute donc /mnt/debian/bin/bash -i. Toute com-
mande ultrieure excute sous ce shell n'aura pas connaissance du vrai rper-
toire / de votre systme, de sorte que vous pouvez utiliser votre Debian sans
avoir ramorcer. Toutes les commandes se comporteront comme si elles taient
lances depuis une machine Unix indpendante. Un avertissement toutefois :
vous pourriez devoir remonter votre systme de chier /proc l'intrieur de
votre systme de chier chroot (voir la section 20.8).
Ceci est utile pour amliorer la scurit. Les services non-scuriss du rseau
peuvent changer d'un rpertoire racine l'autre. Toute corruption aectera le
systme entier.
La plupart des disques de secours possdent une commande chroot. Aprs
l'amorage, vous pouvez monter manuellement les systmes de chiers sur votre
propre disque, et ensuite utiliser un chroot pour commencer exploiter une ma-
chine de manire normale. Notez que la commande chroot <nouvelle_racine>
sans arguments invoque un shell par dfaut.
9 NdT : tout se passe donc comme si /mnt/debian tait devenu une nouvelle / (indpendante
de la racine initiale qui reste la seule vraie dans l'absolu).
CHAPITRE 21. SCRIPTS DE SHELL AVANCS. 221
21.7.2 if conditionnels.
Au chapitre 8, if test ... a t utilis pour contrler le ux de program-
mation. Cependant, bash possde un alias interne pour la fonction test, le
crochet gauche, [.
L'usage de [ au lieu de test apporte de l'lgance aux scripts :
if [ 5 -le 3 ] ; then
echo '5 < 3'
fi
Ces lignes permettent d'ajouter /usr/local/bin dans votre PATH si grep n'y
trouve pas ce rpertoire.
diff peut galement tre employe pour extraire les dirences entre deux ar-
borescences de rpertoires. diff compare rcursivement tous les chiers corres-
pondant :
vent gzips. Le chier correctif ainsi extrait peut tre appliqu <ancien_reper-
toire> de cette manire :
cd <ancien_repertoire>
patch -p1 -s < <correctif>.diff
MY_DNS_SERVER=197.22.201.154
while true ; do
(
dig @$MY_DNS_SERVER netscape.com IN A &
DIG_PID=$ !
{ sleep 2 ; kill $DIG_PID ; } &
sleep 1
wait $DIG_PID
) 2 > /dev/null | grep -q '^[^ ;]*netscape.com' && break
done
10 NdT : DNS est l'abrviation de Domain Name Server. Quand un utilisateur envoie un
courriel ou pointe son navigateur sur un domaine internet (comme www.unixtech.be), le DNS
traduit cette adresse aise mmoriser en une adresse internet (IP). Ce terme recouvre deux
dnitions : (i) celle que nous venons de voir (la conversion de nom d'adresses) mais aussi (ii)
l'attribution de noms d'htes.
11 NdT : ICMP est l'abrviation d'Internet Control Message Protocol.
12 NdT : UDP est l'acronyme d'User Data Protocol.
13 NdT : le terme anglais est ISP (acronyme d'Internet Service Provider ).
CHAPITRE 21. SCRIPTS DE SHELL AVANCS. 223
Notez que les nouvelles versions de grep possdent l'option -r pour eectuer
une recherche rcursive parmi les rpertoires.
# !/bin/sh
N=`basename $0`
Pour la mme raison que dans l'exemple prcdant, cette expression devrait
d'tre remplace par :
Cette exibilit se manifeste lorsque des espaces sparent les champs comme
dans le premier exemple qui suit et qui permet d'isoler les 6, 7 et 8mes champs
de ce que retourne la commande ls -al (on obtient la date et l'heure) :
Achez tous les noms d'utilisateurs communs (c'est--dire le nom des utilisa-
teurs ayant une valeur d'UserID suprieure 499 sur RedHat et 999 sur Debian) :
for i in *.pcx ; do
CMD=convert -quality 625 $i `echo $i | sed -e 's/\.pcx*/.png/'`
# afficher la ligne de commande l'utilisateur :
ECHO $CMD
# excute la ligne de commande :
eval $CMD
done
for i in * ; do
dd if=/dev/urandom \
of=$i \
bs=1024 \
count=`expr 1+ \
\`stat $i | grep 'Size :' | awk '{print $2}'\` \
/ 1024
done
rxtv &
Cependant, une fois lanc, rxtv a encore sa sortie connecte au shell et reste
un processus-ls du shell. Or, si le shell dont dpend rxtv meurt, il emporte ses
processus-ls. Par ailleurs, rxtv peut aussi mourir de lui-mme en tentant de
lire ou d'crire dans un terminal qui n'existe pas sans le shell-parent. Essayons
donc prsent :
CHAPITRE 21. SCRIPTS DE SHELL AVANCS. 227
Cette technique est connue sous le nom de forking twice 14 ou redirection d'un
terminal vers dev null. Le shell est donc inform en matire de processus-ls mais
pas concernant le processus rsultant du forking twice. Ds lors, nous pouvons
crer un processus-dmon propre avec la commande ci-dessus.
Par consquent, il est possible de crer un dmon qui redmarre au cas o il
lui arriverait de mourir. Bien qu'une telle fonctionnalit soit plus aise raliser
en C (dont nous verrons un aperu au chapitre 23), vous pouvez atteindre cet
objectif en bash avec :
ps awwwxf
ps awwwxo %cpu,%mem,alarm,args,blocked,bsdstart,bsdtime,c,caught,cmd,comm,\
command,cputime,drs,dsiz,egid,egroup,eip,esp,etime,euid,euser,f,fgid,fgroup,\
flag,flags,fname,fsgid,fsgroup,fsuid,fsuser,fuid,fuser,gid,group,ignored,\
intpri,lim,longtname,lstart,m_drs,m_trs,maj_flt,majflt,min_flt,minflt,ni,\
nice,nwchan,opri,pagein,pcpu,pending,pgid,pgrp,pid,pmem,ppid,pri,rgid,rgroup,\
rss,rssize,rsz,ruid,ruser,s,sess,session,sgi_p,sgi_rss,sgid,sgroup,sid,sig,\
sig_block,sig_catch,sig_ignore,sig_pend,sigcatch,sigignore,sigmask,stackup,\
start,start_stack,start_time,stat,state,stime,suid,suser,svgid,svgroup,svuid,\
svuser,sz,time,timeout,tmout,tname,tpgid,trs,trss,tsiz,tt,tty,tty4,tty8,ucomm,\
uid,uid_hack,uname,user,vsize,vsz,wchan
Ainsi, tous les processus ayant httpd dans le nom de commande ou la ligne
de commande seront achs. Ce ltre est utile pour arrter netscape :
ps awwxf
ps awwxl
ps awwxv
ps awwxu
ps awwxs
L'option -f est la plus utile pour mettre en vidence les relations entre processus-
pre et processus-ls. Elle signie forest, et ache l'arborescence des processus
principaux. Ainsi, dans l'exemple qui suit, un cran X avec deux fentres est
utilis :
CHAPITRE 21. SCRIPTS DE SHELL AVANCS. 229
locking ) de chiers.
Dans le cas d'un rpertoire de courriels, si un chier est en cours d'criture,
il ne faut pas qu'un autre processus puisse lire ce chier ou y crire : il est
donc ncessaire de mettre en place un verrouillage en criture sur ce chier.
Cependant, si ce dernier est en cours de lecture, aucun autre processus ne devrait
tenter de le lire : il est asticieux de ne mettre en place qu'un verrouillage en
lecture. Les verrouillages en criture sont appels verrouillages exclusifs ; ceux
en lecture verrouillages partags. Pour des raisons de simplicit, le verrouillage
exclusif est souvent prfr.
La mise en place d'un verrouillage consiste simplement crer un chier
temporaire pour indiquer aux autres processus d'attendre avant de tenter un
accs. Unix prsente galement des fonctions internes plus sophistiques.
function verrouillage_de_fichiers ()
{
TEMPFILE=$1.$$
LOCKFILE=$1.lock
echo $$ > $TEMPFILE 2>/dev/null || {
echo You don't have permission to access `dirname $TEMPFILE`
return 1
}
ln $TEMPFILE $LOCKFILE 2>/dev/null && {
rm -f $TEMPFILE
return 0
}
CHAPITRE 21. SCRIPTS DE SHELL AVANCS. 232
function verrouillage_de_fichiers ()
{
LOCKFILE=$1.lock
test -e $LOCKFILE && return 1
touch $LOCKFILE
return 0
CHAPITRE 21. SCRIPTS DE SHELL AVANCS. 233
lockfile /var/spool/mail/mary.lock
grep freddy /var/spool/mail/mary
rm -f /var/spool/mail/mary.lock
Cette squence vous assure de raliser une recherche dans une bote non-corrompue
mme si /var est impliqu dans un partage NFS.
235
CHAPITRE 22. SERVICES DU SYSTME ET LPD. 236
rpm -i lpr-0.50-4.i386.rpm
( rpm -i LPRng-3.6.24-2 )
{ dpkg -i lpr_0.48-1.deb }
/etc/init.d/lpd /usr/share/man1/lprm.1.gz
/etc/cron.weekly/lpr /usr/share/man5/printcap.5.gz
/usr/sbin/lpf /usr/share/man8/lpc.8.gz
/usr/sbin/lpc /usr/share/man8/lpd.8.gz
/usr/sbin/lpd /usr/share/man8/pac.8.gz
/usr/sbin/pac /usr/share/man8/lpf.8.gz
/usr/bin/lpq /usr/share/doc/lpr/README.Debian
CHAPITRE 22. SERVICES DU SYSTME ET LPD. 237
/usr/bin/lpr /usr/share/doc/lpr/copyright
/usr/bin/lprm /usr/share/doc/lpr/examples/printcap
/usr/bin/lptest /usr/share/doc/lpr/changelog.gz
/usr/share/man/man1/lpr.1.gz /usr/share/doc/lpr/changelog.Debian.gz
/usr/share/man/man1/lptest.1.gz /var/spool/lpd/lp
/usr/share/man/man1/lpq.1.gz /var/spool/lpd/remote
contiennent mme des archives de leur liste de diusion. Notez que certaines
pages web sont orientes vers des revendeurs de CDs qui essayent de crer leur
propre distribution et, par consquent, elles ne prsentent pas les paquets
tlcharger que l'utilisateur dbutant peut installer aisment.
/usr/bin/lpd
/etc/rc.d/init.d/lpd start
/etc/rc.d/init.d/lpd stop
CHAPITRE 22. SERVICES DU SYSTME ET LPD. 239
/etc/rc.d/init.d/lpd status
/etc/rc.d/init.d/lpd restart
(ou /etc/init.d/lpd).
Pour s'assurer que lpd est bien lanc au dmarrage, vous pouvez vrier
qu'il y a un lien symbolique sur le niveau d'excution appropri. Les liens sym-
boliques peuvent tre visualiss en eectuant :
ce qui donne :
Le 3 dans rc3.d est ce que nous recherchons. Le fait d'avoir S601lpd avec
un lien symbolique lpd sous le niveau d'excution rc3.d signie que lpd est
lanc lorsque le systme entre dans le niveau d'excution 3 (ou run level 3 ), qui
est l'tat du systme en temps normal (mode console).
Notez bien que sur RedHat, la commande setup a une option System Servi-
ces. La liste des Services vous autorise grer les services qui doivent tre
initialiss lors de la procdure de dmarrage de la machine ; c'est ainsi que les
liens symboliques sont tablis de manire automatique. Concernant Debian, v-
riez la page de man pour la commande update-rc.d.
Des informations supplmentaires sur la squence de dmarrage d'une ma-
chine sont prsentes au chapitre 33.
tail -f /var/log/messages
tail -f /var/log/syslog
la le d'impression par dfaut. Par exemple, export PRINTER=lp1 force l'usage
de l'imprimante lp1.
lp :\
:sd=/var/spool/lpd/lp :\
:mx#0 :\
:sh :\
:lp=/dev/lp0 :\
:if=/var/spool/lpd/lp/filter :
lp0 :\
:sd=/var/spool/lpd/lp0 :\
:mx#0 :\
:sh :\
:rm=edison :\
:rp :lp3 :\
:if=/bin/cat :
Les imprimantes sont nommes dans le premier champ : dans le cas prsent,
lp est la premire imprimante et lp0 est la seconde. Chacune d'elles dcrit un
priphrique physique dirent avec sa propre le. L'imprimante lp devrait tou-
jours tre cite en premier et devrait tre la premire utilise si aucune n'autre
n'est spcie. En l'occurrence, lp se rapport la premire imprimante locale
sur le priphrique /dev/lp0 (premier port parallle). lp0 se rapporte une le
d'impression distante sur la machine edison.
Le chier printcap possde une page de man dtaille. Cependant, les champs
suivants sont ceux dont vous aurez, de loin, le plus besoin :
sd le rpertoire de spoule. Ce dernier contient les chiers d'tat et de spoule.
mx taille maximale de chier. Dans l'exemple prcdent : illimit.
sh supprime les en-ttes. L'en-tte consiste en une srie de lignes d'informa-
tion imprimes avant et aprs le travail d'impression. Cette option devrait
toujours tre dsactive.
lp priphrique d'impression en ligne.
if ltre d'entre. Il s'agit d'un script excutable dans lequel les donnes d'im-
primante sont fournies l'aide d'un tube. La sortie de ce script alimente
directement l'imprimante ou la machine distante. Ce ltre traduit la sortie
d'une application en un code interprtable par l'imprimante (code natif).
rm machine distante (remote machine). Si la le d'impression n'est pas locale,
ceci est le nom de la machine.
CHAPITRE 22. SERVICES DU SYSTME ET LPD. 242
qui envoye du PostScript vers l'entre standard (stdin) de lpr. Toutes les
applications n'ayant pas leurs propres pilotes d'impression procdent de cette
manire. Ceci signie qu'en gnral, nous pouvons compter sur le fait que le ltre
CHAPITRE 22. SERVICES DU SYSTME ET LPD. 243
touch /var/spool/lpd/lp/filter
chmod a+x /var/spool/lpd/lp/filter
# !/bin/bash
cat | gs -sDEVICE=ljet4 -sOutputFile=- -sPAPERSIZE=a4 -r600x600 -q -
exit 0
L'option -sDEVICE dcrit l'imprimante. Dans cet exemple, il s'agit d'une Hew-
lett Packard LaserJet 1100. Beaucoup d'imprimantes ont des formats similaires
et compatibles. Donc, il y a beaucoup moins de types de DEVICE que de marques
d'imprimantes. Pour obtenir une liste complte des priphriques d'impression
supports, utilisez la commande gs -h et consultez galement un des chiers
suivants (cela dpendra de votre distribution) :
/usr/doc/ghostscript- ?. ? ?/devices.txt
/usr/share/doc/ghostscript- ?. ? ?/Devices.htm
/usr/share/doc/gs/devices.txt.gz
Le terme -sOutputFile=- indique d'crire dans stdout (comme cela est re-
quis par le ltre). L'option -sPAPERSIZE peut tre xe une des valeurs sui-
vantes : 11x17, a3, a4, a5, b3, b4, b5, halfletter, ledger, legal, letter,
note. D'autres valeurs sont indiques dans la page de man. Vous pouvez gale-
ment utiliser -g<largeur>x<hauteur> pour attribuer la taille de page exacte
en pixels. Par exemple, -r600x600 xe la rsolution 600 dpi (dots per inch ou
points par pouce carr). L'option -q indique d'utiliser le mode silencieux, ce qui
supprime les messages d'information qui autrement, corromperaient la sortie en
PostScript. Le signe - signie qu'il faut lire depuis stdin et non depuis le chier.
La conguration de notre imprimante est prsent complte. Il faut main-
tenant lancer lpd et tester l'impression. Vous pouvez raliser cette opration en
ligne de commandes grce au paquet enscript. enscript est un programme de
conversion des chiers-textes en pages PostScript joliment formates. La page de
man d'enscript dcrit de trs nombreuses d'options. Cependant, vous pouvez
vous contenter d'essayer :
CHAPITRE 22. SERVICES DU SYSTME ET LPD. 244
22.9.2 apsfilter.
apsfilter signie any to PostScript lter. L'installation dcrite plus haut
requiert que tout soit converti en PostScript avant l'impression ; cependant un
ltre pourrait auparavant utiliser la commande file pour dterminer le type
de donnes et invoquer un programme destin convertir ces donnes en Post-
Script avant de l'envoyer via gs. Ceci permettrait aux chiers texte, JPEG, GIF,
DVI, et mme aux chiers HTML gzipps d'tre imprims directement tant
donn que des convertisseurs Postscript ont t crits pour chacun de ces types
de chiers. apsfilter est un de ces ltres appels ltres magiques [ce terme
provient du fait que la commande file utilise les nombres magiques, voir la
section 5.9].
S'agit-il seulement d'une astuce ? Sans doute : la plupart du temps, les utili-
sateurs eectuent une prvisualisation de ce qu'ils veulent imprimer, ce qui n-
cessite une conversion en PostScript. Dans la majorit des cas, le ltre Postscript
direct, dcrit plus haut, fonctionne parfaitement bien pourvu que les utilisateurs
utilisent enscript au lieu de lpr lors de l'impression de texte plein.
22.9.3 mpage.
mpage est un utilitaire prcieux lorsqu'il s'agit de sauver des arborescences. Il
reformate les sorties PostScript de sorte que deux, quatre ou huit pages peuvent
tre regroupes sur une seule. La modication du ltre de sortie se fait ainsi :
# !/bin/bash
cat | mpage -4 | gs -sDEVICE=ljet4 -sOutputFile=- -sPAPERSIZE=a4 \
-r600x600 -q -
exit 0
22.9.4 psutils.
Le paquet psutils contient divers programmes de manipulation de Post-
Script en ligne de commandes. Ils sont d'un attrait majeur pour tous ceux qui
exploitent les subtilits des ltres.
le ltre met son rsultat vers un autre priphrique, nous pouvons utiliser lpd
pour rediriger tout travail d'impression sur n'importe quel service imaginable.
Voici ci-dessous, un script appel mon_filtre.sh qui pourrait envoyer un
travail d'impression via un partage d'impression SMB (Windows NT) en utili-
sant smbclient (voir le chapitre 40), vers un programme de prvisualisation ou
vers un script qui transmettrait le travail par courriel :
lp1 :\
:sd=/var/spool/lpd/lp1 :\
:mx#0
:sh :\
:lp=/dev/null :\
:if=/usr/local/bin/mon_filtre.sh
Elments de programmation
C.
Le langage C a t invent dans le but d'crire un systme d'exploitation
qui pouvait tre recompil (donc port) sur direntes plate-formes matrielles,
c'est--dire direntes CPUs. Du fait que le systme d'exploitation est crit
en C, ce langage est le premier auquel on pense pour crire des applications
susceptibles de communiquer ecacement avec le systme d'exploitation.
De nombreuses personnes qui ne savent pas trs bien programmer en C pense
que celui-ci n'est qu'un langage parmi d'autres. Fixons les ides : le C est la
base de toute la programmation dans le monde d'aujourd'hui. Unix, Microsoft
Windows, les suites oce, les navigateurs web et les pilotes sont tous crits en
C. Quatre-vingt dix pourcents du temps pass sur un ordinateur concernent des
applications crites en C. Environ 70% des logiciels libres sont crits en C, et les
30% restant sont crits dans des langages dont les compilateurs et interprteurs
sont crits en C. [Le C++ est galement trs populaire. Cependant, il n'est
pas aussi fondamental que le C, bien qu'il soit plus adapt dans de nombreuses
situations].
Du reste, il n'y a pas de langage de substitution au C. Etant donn qu'il rem-
plit ses fonctions sans dfaillance, il n'a pas encore fallu lui trouver un rempla-
ant. D'autres langages remplissent d'autres objectifs, mais le C est le langage
qui convient le mieux aux fonctions auxquelles il est destin. Il est peu prs
certain que les futurs systmes d'exploitation seront crits en C, et ce durant
de nombreuses annes, encore.
C'est pour cela que votre connaissance d'Unix ne sera complte que si vous
pouvez programmer en C. En revanche, le fait que vous puissiez crire en C ne
signie pas que vous devrez l'utiliser pour modier votre systme d'exploitation
proprement-dit. La bonne programmation en C est un art subtil qui chappe
mme des personnes pratiquant la programmation depuis de nombreuses an-
nes. Il est essentiel de rejoindre un projet logiciel libre pour matriser de manire
adquate un bon style de programmation destin au dveloppement.
248
CHAPITRE 23. ELMENTS DE PROGRAMMATION C. 249
#include <stdlib.h>
#include <stdio.h>
./hello
appele par le systme d'exploitation est la fonction main. Tapez echo $ ? pour
voir le code de retour du programme. Vous verrez qu'il s'agit de 3, la valeur
return de la fonction main.
D'autres points sont noter : par exemple, le signe entourant la chane
qui doit tre ache l'cran. Les guillemets entourent toujours une chane
littrale. A l'intrieur d'une chane littrale, la squence \n indique un retour
de chariot. ascii(7) dcrit en dtail d'autres squences. Vous noterez aussi la
prolifration de ; dans un programme en C. Chaque instruction doit se conclure
par un ; contrairement aux scripts de shell o le signe ; est optionnel.
A prsent, essayez :
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
x = 10 ;
y = 2;
printf (number %d, number %d\n, 1 + y, x) ;
exit 3 ;
}
#include <stdlib.h>
#include <stdio.h>
Vous remarquez que %f est utilis aussi bien pour le type float que pour le
type double. En fait, un type float est toujours converti en double avant
d'tre utilis. Essayez aussi de remplacer %f avec %e pour acher un nombre en
notation exponentielle.
23.1.3 Fonctions.
Les fonctions sont implmentes de la manire suivante :
#include <stdlib.h>
#include <stdio.h>
exit (3) ;
}
Ici, nous avons une fonction non-main appele par la fonction main. Elle est
d'abord dclare dans le code ainsi :
Cette dclaration indique la valeur retourne par la fonction (void signie qu'il
n'y a pas de valeur), le nom de la fonction (ici, multiply_and_print) et la liste
des arguments qui lui sont passs. Les nombres passs cette fonction sont d-
crits par leur propre nom, x et y. Ils sont convertis dans le type associ x et
y avant d'tre passs la fonction multiply_and_print. Dans ce cas, les types
sont int et int. Le code C qui dcrit la fonction se trouve entre les accolades {
et }. En d'autres termes, la fonction multiply_and_print est quivalente ceci :
void multiply_and_print ()
{
int x ;
int y ;
x = <premier_nombre_passe>
y = <second_nombre_passe>
printf (%d * %d = %d\n, x, y, x * y) ;
}
#include <stdlib.h>
#include <stdio.h>
if (x == 10) {
printf (x vaut 10\n) ;
CHAPITRE 23. ELMENTS DE PROGRAMMATION C. 253
x++ ;
} else if (x == 20) {
printf (x vaut 20\n) ;
} else {
printf (x ne vaut ni 10 ni 20) ;
}
if (x > 10) {
printf (x vaut plus que 10\n) ;
}
switch (x) {
case 9 :
printf (x vaut 9\n) ;
break ;
case 10 :
printf (x vaut 10\n) ;
break ;
case 11 :
printf (x vaut 11\n) ;
break ;
default :
printf (x ?) ;
break ;
}
return 0 ;
}
Il est facile de voir le format que ces instructions prennent, quoiqu'elles soient
trs direntes de celles associes aux scripts de shell. Le code C fonctionne
par blocs de dclarations dcrites entre accolades. Les scripts de shell, eux, pra-
tiquent avec des couples do et done.
Remarquez qu'avec la plupart des langages de programmations, lorsque nous
voulons ajouter 1 une variable, nous crivons une instruction du type :
x=x+1. En C, l'abrviation x++ est utilisable et signie qu'il faut incrmenter la
variable x d'une unit.
La boucle for contient trois dclarations entre (...) : la premire pour
initialiser x, un test et une incrmentation de la variable x excuter tant que
la condition reste valide.
switch est similaire l'instruction case des scripts de shell, et son argument
est la portion de code qui se trouve dans les parenthses () c'est--dire x. La
valeur de cet argument dcide de la ligne laquelle le ux de programmation se
poursuit. Dans notre exemple, le ux se rendra l'instruction printf (x vaut
CHAPITRE 23. ELMENTS DE PROGRAMMATION C. 254
int y[10] ;
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
Observez qu'il est ncessaire de terminer toute chane par un zro. Le code
y[10] = 0 dnit le 11me caractre du tableau comme tant zro. La cons-
quence est que la longueur d'une chane contient toujours une unit de plus que
le nombre de caractres qui lui donne un sens linguistique. Remarquez aussi que
le premier caractre est y[0] et non y[1], une particularit retrouve dans de
nombreux langages de programmation.
Dans l'exemple qui prcde, la ligne char y[11] rserve en mmoire 11 oc-
tets pour la chane. Que se passerait-il si nous voulions 100.000 octets ? Le C
nous permet de demander de la mmoire au noyau. Cette mthode est appele
l'allocation mmoire (ou alloc ation m emory ). Tout programme un peu com-
plexe ncessite de l'allocation mmoire pour lui-mme et on ne peut obtenir de
blocs mmoires de grande taille autrement qu'en pratiquant ainsi :
#include <stdlib.h>
#include <stdio.h>
La dclaration *y signie qu'on dclare une variable (un nombre) appel y qui
pointe vers une adresse de la mmoire RAM. Le symbole * veut dire pointeur.
Disons que vous avez une machine avec 256 Mo de RAM + swap, y a potentiel-
lement une taille de cette valeur-l. (La valeur numrique d'y est ache avec
printf (%ld\n, y) ;, mais cela n'a pas d'intrt immdiat pour le program-
meur).
Lorsque vous en avez ni avec l'utilisation de la mmoire, vous devez rendre
l'espace qui vous a t accord, au noyau en utilisant free. Les programmes qui
n'ont pas restitu toute la mmoire qui leur a t alloue sont dits fuite de
mmoire.
L'allocation de mmoire requiert trs souvent de se livrer un petit cal-
cul pralable de manire dterminer la quantit de mmoire requise. Dans le
cas que nous venons de voir, nous avons allou l'espace associ 11 caractres
(chars). Etant donn que chaque caractre compte pour un octet, cela ne pose
pas de problme. Que se passerait-il si nous avions faire 11 entiers (int). Un
int sur un PC vaut 32 bits soit 4 octets (4 adresses conscutives de la mmoire).
CHAPITRE 23. ELMENTS DE PROGRAMMATION C. 256
Pour dterminer la taille d'un type, nous pouvons utiliser le mot-cl sizeof :
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
Sur de nombreuses machines, un int compte pour 4 octets (32 bits), mais vous
CHAPITRE 23. ELMENTS DE PROGRAMMATION C. 257
ne devriez jamais postuler cela. Utilisez toujours sizeof avant de pratiquer une
allocation mmoire.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
2 NdT : il faut toujours se souvenir d'ajouter une unit la longueur d'une chane (ici d'un
mot) pour le zro de clture ; d'o l'expression malloc (length_of_word + 1).
3 NdT : nous pouvons pratiquer pas--pas sur le cas du mot is. Lorsque la lettre i du
mot is est rencontre, la valeur du compteur i est 21 puisque le compte a t commenc
par i=0. Les deux if qui suivent l'entre dans la boucle for sont passs car, concernant le
premier, p[21] vaut 105, selon la table ASCII. Au tour prcdent, lorsque la mmoire a t
restitue, lentgh_of_word a t r-initialis zro (ligne 30). A la ligne 32, lentgh_of_word
est incrment d'une unit. La boucle for continue avec i = 22.La lettre s est rencontre et,
passant les if on arrive ce que lentgh_of_word devienne = 2. Cependant, au tour suivant,
lorsque i = 23, p[23] est un caractre espace. On rserve alors de la mmoire sous forme
d'un tableau q (il est noter que tous les tableaux sont en fait des pointeurs puisque leur nom
pointe vers la premire adresse hexadcimale du premier octet du tableau). Pour terminer de
manire correcte la chane de caractre is , on lui adjoint un caractre nul, ce qui est fait en
deux temps. A la ligne 21, la mmoire demande via malloc est de length_of_word + 1 (soit
2+1). A la ligne 27, le dernier lment de q (c'est--dire q[lenght_of_word] ou encore q[3])
recevra un zro de clture de chane. Entre-temps, la ligne 26, strncpy transfre is dans
q. Il s'agit de raliser une opration arithmtique sur le pointeur p. Celui-ci pointe toujours
sur la premire adresse hexadcimale du premier octet du tableau p. Lorsqu'on incrmente p
d'une unit, le pointe se dplace (comme un curseur) d'une unit car il s'agit d'un type char.
Si nous avions eu faire un tableau d'entiers, le pointeur et eectu un dplacement de
4 octets [voir le programme relatif sizeof dans la section 23.1.5]. Donc, dans la mmoire,
le pointeur p s'est dplac de l'adresse dsignant la lettre h +23 positions (p + i). L, il
pointe vers le caractre espace suivant le mot is. Ensuite, on le fait se dplacer en arrire
de length_of_word (soit 3 octets). Et, dans q , on sauve le mot compris entre ces positions,
c'est--dire is. Aprs achage du mot contenu dans q, la mmoire occupe par q est libre.
CHAPITRE 23. ELMENTS DE PROGRAMMATION C. 259
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
FILE * constitue un nouveau type pour nous. Il s'agit d'une variable associe
des oprations, qui doit tre initialise avec fopen avant d'tre utilise. La fonc-
tion fopen prend deux arguments : le premier est le nom de chier, le second est
une chane expliquant le mode d'ouverture du chier en l'occurrence, r signie
reading (en lecture depuis le dbut du chier). Une autre option courante est
w pour writing (en criture). D'autres options sont dcrites dans fopen(3).
Si la valeur retourne par fopen est zro, on dit que fopen a chou. La
fonction perror ache alors un message littral comme, par exemple, No such
file or directory. Il est essentiel de vrier la valeur de retour de tous les
appels de bibliothques selon cette mthode. Ces vrications peuvent constituer
jusqu' environ un tiers de vos programmes en C.
La commande fgetc extrait un caractre du chier. Elle rcupre les octets
conscutifs contenus dans le chier jusqu' ce qu'elle atteigne la n de ce dernier.
Elle renvoye alors le nombre -1. La dclaration break impose de terminer im-
mdiatement la boucle for, pour reprendre le ot d'excution la ligne 21. Les
dclarations break peuvent ventuellement apparatre l'intrieur des boucles
while.
Vous aurez not que la dclaration for est vide ; ce qui implique qu'il n'y a
pas de conditions de boucle et, par consquent, que celle-ci est innie. Ceci est
tout--fait admis en C. En l'occurrence, on n'en sort que par le break.
D'autres fonctions associes aux chiers sont fread, fwrite, fputc, fprintf
et fseek. Consultez fwrite(3), fputc(3), fprintf(3) et fseek(3).
CHAPITRE 23. ELMENTS DE PROGRAMMATION C. 260
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
c = 0;
exit (1) ;
perror (fopen failed) ;
}
length_of_word = 0
amount_allocated = 256 ;
q = malloc (amount_allocated) ;
if (q == 0) {
perror (malloc failed) ;
abort () ;
}
while (c != -1) {
if (length_of_word >= amount_allocated) {
amount_allocated = amount_allocated * 2 ;
q = realloc (q, amount_allocated) ;
if (q == 0) {
perror (realloc failed) ;
abort () ;
}
}
c = fgetc (f) ;
q[length_of_word] = c ;
return 0 ;
}
Ce programme est plus compliqu qu'il n'y parat premire vue. Lire un chier
pour lequel vous tes sr qu'aucun mot ne dpasse 30 caractres est lmen-
taire. Cependant, que se passe-t-il si des mots excdent 100.000 caractres ?
Les programmes GNU sont supposs se comporter correctement dans toutes les
circonstances.
Pour faire face aux circonstances exceptionnelles autant que normales, nous
allons d'abord supposer qu'un mot ne dpasse pas 256 caractres. S'il appa-
rat que cette hypothse ne convient plus, nous rallouons (reallocate ) un es-
pace mmoire double (lignes 32 et 33). Lorsque nous commenons avec un nou-
veau mot, nous pouvons librer cette mmoire nouveau de sorte dsallouer
(reallocate back ; lignes 48 et 49). De cette manire, nous utilisons toujours un
minimum d'espace mmoire tout instant.
Nous avons donc crer un programme qui peut travailler ecacement avec
des chiers de centaines de Go aussi bien qu'avec des chers de l'ordre de la
centaine d'octets. Ceci constitue une partie de l'art de la programmation C.
Les programmeurs expriments en C remarqueront de suite que ce pro-
gramme n'est pas minimalis. En fait, c'est un excellent programme parce
qu' :
il est ais comprendre,
il utilise un algorithme ecace (bien que non-optimis),
il n'y a pas de limites imposes son usage qui, autrement, provoqueraient
des comportements inattendus dans des conditions d'usage intensif,
il n'utilise pas de fonctions C ou de notations non-standards qui emp-
cheraient sa compilation sur d'autres plate-formes ; il est donc portable.
La lisibilit d'un programme en C est votre objectif majeur : il est impratif que
ce que vous avez crit soit vident lire par une autre personne lisant le code.
que cela :
/***************************----SQR----******************************
* x = argument to make the square of *
* return value = *
* -1 on error *
* square of x (on success) *
*********************************************************************
int sqr (int x)
{
< ... >
permise. Cette pratique autorise par gcc ne peut pas tre recommande sauf
si vous crivez en C++. De plus, les programmeurs introduisent souvent des
lignes de commentaires entre #if 0 et # endif ce qui produit le mme rsultat
que dcrit plus haut mais autorise placer des commentaires l'intrieur du
commentaire principal (voir la section 23.1.12). Ainsi, par exemple, dans le code
suivant :
int x ;
x = 10 ;
#if 0
printf (debug : x is %d\n, x) ; /*print debug information */
#endif
y = x + 10 ;
< ... >
#ifndef START_BUFFER_SIZE
#error This code did not define START_BUFFER_SIZE. Please edit
#endif
CHAPITRE 23. ELMENTS DE PROGRAMMATION C. 265
23.2.1 gdb.
Le dbogueur de GNU, gdb, remplace le dbogueur db d'Unix.4 Le d-
bogage d'un programme consiste en raliser l'excution ligne par ligne, en
vue de trouver les erreurs ventuelles. Utilisez la commande gcc -Wall -g -O0
-o wordspilt wordsplit.c pour recompiler le programme de la sous-section
23.1.9. L'option -g signie support de dbogage dans l'excutable rsultant
et l'option -O0 dsactive toute optimisation du compilateur (qui, sinon, parfois
provoque un comportement droutant). Pour raliser l'exemple qui suit, crez
deux chiers d'essai readme.txt et readme2.txt contenant du texte. A prsent,
vous pouvez lancer gdb -q wordsplit. L'invite de gdb apparat pour indiquer
le dbut d'une session de dbogage :
(gdb)
(gdb) r
Starting program : /home/src/wordsplit/wordsplit.c
Usage :
wordsplit <filename> ...
(gdb) b main
Breakpoint 1 at 0x8048796 : file wordsplit.c, line 67.
(gdb) r
Starting program : /home/src/wordsplit/wordsplit readme.txt readme2.txt
(gdb) p argc
$1 = 3
(gdb) p argv[1]
$2 = 0xbffff988 readme.txt
(gdb) l
63 int main (int argc, char *argv[])
64 {
65 int i ;
66
67 if (argc < 2) {
68 printf (Usage :\n\twordsplit <filename> ...\n) ;
69 exit (1) ;
70 }
(gdb) l wordsplit.c :1
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4
5 void word_dump (char *filename)
6 {
7 int length_of_word ;
8 int amount_allocated ;
L'excution s'arrte la ligne 48. A ce stade, il est utile de lancer un back trace .
Ceci ache la pile des fonctions qui ont t appeles pour atteindre la ligne
courante, ce qui vous permet de tracer l'historique de l'excution.
(gdb) bt
#0 word_dump (filename=0xbffff988 readme.txt) at wordsplit.c : 48
#1 0x80487e0 in main (argc=3, argv=0xbffff814) at wordsplit.c :73
#2 0x4003db65 in __libc_start_main (main=0x8048790 <main>, argc=3,
ubp_av=0xbffff814, init=0x08048420 <_init>,
fini=0x804883c <_fini>, rtld_fini=0x4000df24 <dl_fini>,
stack_end=0xbffff80c) at ../sysdeps/generic/libc-start.c :111
(gdb) clear
Deleted breakpoint 2
Les commandes les plus importantes pour le dbogage sont next et step. La
commande n excute une seule ligne de code C la fois :
(gdb) n
49 q = realloc (q, amount_allocated) ;
(gdb) n
50 if (q == 0) {
(gdb) n
50 length_of_word = 0 ;
(gdb) s
73 word_dump (argv[i]) ;
(gdb) s
word_dump (filename=0xbffff993 readme2.txt) at wordsplit.c :13
13 c = 0
(gdb) s
15 f = fopen (filename, r) ;
(gdb)
[root@cericon]# lpd
[root@cericon]# ps awx | grep lpd
28157 ? S 0 :00 lpd Waiting
28160 pts/6 S 0 :00 grep lpd
Le dmon lpd n'a pas t compil avec le support de dbogage, mais vous
pouvez arrter et dboguer n'importe quel processus de votre systme. Essayez
bt pour voir. A prsent, librez le processus avec :
(gdb) detach
Detaching from program : /usr/sbin/lpd, Pid 28157
/root/core : ELF 32-bit LSB core file of '<executable>' (signal 11), Intel 80386, version
1
23.2.3 strace.
La commande strace ache chaque appel systme ralis par un programme.
Un appel systme est un appel une fonction fait par une fonction de la biblio-
thque C l'attention du noyau Linux. Essayez :
strace ls
strace ./wordsplit
23.3 Bibliothques du C.
Nous avons dj mentionn la bibliothque standard du C. Le langage C en
soi ne fait pas grand-chose ; tout ce qui est utile se trouve dans des fonctions
externes. Cellesci sont groupes en bibliothques. La bibliothque standard du
C est le chier /lib/libc.so.6. Pour acher toutes les fonctions de cette bi-
bliothque, lancez :
nm /lib/libc.so.6
nm /lib/libc.so.6 | grep ' T ' | cut -f3 -d' ' | grep -v '^_' | sort
-u \
| less
De nombreuses fonctions ont une page de man mais, certaines ne prsentent pas
de documentation si bien qu'il est ncessaire de lire les explications fournies dans
les chiers d'en-ttes. Il vaut mieux ne pas utiliser de fonctions qui ne seraient
pas standards (c'est--dire qui ne sont pas usuelles sur d'autres systmes).
La cration de sa propre bibliothque est simple. Supposons que nous ayons
deux chiers contenant plusieurs fonctions que nous souhaitons compiler pour
les placer dans une bibliothque. Les chiers s'appellent simple_math_sqrt.c
et simple_math_pow.c :
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
L'option -c vaut pour compile only (compiler seulement). Le code ne sera pas
CHAPITRE 23. ELMENTS DE PROGRAMMATION C. 272
converti en excutable. Les chiers produits seront caractriss par une exten-
sion .o. On les appelle des chiers objets.
Maintenant, il faut archiver ces chiers dans la bibliothque. A cette n, on
fait usage de la commande ar (prcurseur de tar) :
#include <stdlib.h>
#include <stdio.h>
et excutez :
#include <stdlib.h>
#include <stdio.h>
#include simple_math.h
Notons que la marge gauche est une seule tabulation (et non une suite de
huit espaces).
La dernire dpendance est celle des chiers simple_math_sqrt.o et simple-
_math_pow.o qui dpendent de simple_math_sqrt.c et simple_math.pow_c,
respectivement. Ceci requiert deux rgles de make. Cependant, make prsente
un raccourci qui fonctionne dans le cas de nombreux chiers sources C :
.c.o :
gcc -Wall -c -o $*.o $<
Ceci signie que tous les chiers .o doivent tre construits partir des chiers
.c du mme nom au moyen de la commande gcc -Wall -c -o $*.o $<, o
$*.o dsigne le nom du chier object et $< le nom du chier dont dpend $*.o
et ce, squentiellement, pour tous les chiers impliqus.5
La cible all : constitue la rgle laquelle make essaie de satisfaire quand il est
lanc sans arguments en ligne de commande. Cela signie juste que libsimple_
math.a et mon_test sont les deux derniers chiers tre construits. Ils sont
donc au sommet de la srie des dpendances.
Les Makefiles ont aussi leur propre forme de variables d'environnements,
l'instar des scripts de shells. Vous pouvez constater que nous avons utilis le
texte simple_math dans trois de nos rgles. Il est donc pertinent de dnir une
macro.
Notre Makefile nal est donc :
5 NdT : cette notation .c.o est aujourd'hui remplace par %.o : %.c (o l'espacement
entre le signe : et % est une tabulation)
CHAPITRE 23. ELMENTS DE PROGRAMMATION C. 275
lib$(LIBNAME).a : $(OBJS)
rm -f $@
ar rc $@ $(OBJS)
ranlib $@
.c.o :
gcc $(CFLAGS) -c -o $*.o *<
clean :
rm -f *.o *.a mon_test
make
make clean
Bibliothques partages.
Ce chapitre est un prolongement direct de l'laboration des bibliothques
statiques extension .a comme cela a t vu au Chapitre 23. Nous y discutons
la cration et l'installation de bibliothques lies dynamiquement (DLLs ou Dy-
namically Linked Libraries ). Ainsi, nous allons avoir une vue d'ensemble de bon
niveau technique propos du fonctionnement des DLLs sur Unix. Dans ce qui
est discut ci-aprs, vous ne devrez pas oublier ldconfig et LD_LIBRARY_PATH.
Les chiers .a des bibliothques lies statiquement sont utiles pour crer des
fonctions que de nombreux programmes incorporent. Cette manire de procder
est connue sous le terme de rutilisabilit du code (code reuse ). Cependant, si on
analyse un peu la manire dont un chier est li (en ralit, incorpor) dans un
excutable comme mon_test (au chapitre 23), on s'aperoit vite que la taille de
ce dernier chier a augment d'exactement la taille de libsimple_math.a. Si
des centaines de programmes utilisent le mme chier .a, le code est dupliqu
chaque utilisation. Une telle inecacit a t considre comme rdhibitoire
bien avant la naissance de Linux. Des chiers de bibliothque ont t invents,
qui se lient seulement lorsqu'un programme qui y fait appel est excut. Cette
manire de procder est base sur le chargement dynamique. Au lieu d'avoir
faire des chiers .a, on utilise dans ce cas des chiers .so (shared object ) se
trouvant dans /lib et /usr/lib. Le chargement se fait de manire automatique
lorsqu'un programme est excut.
276
CHAPITRE 24. BIBLIOTHQUES PARTAGES. 277
lib$(LIBNAME).so : $(OBJS)
gcc -shared $(CFLAGS) $(OBJS) -lc -Wl,-soname -Wl,$(SOVERSION) \
-o $(SONAME) && \
ln -sf $(SONAME) $(SOVERSION) && \
ln -sf $(SONAME) lib$(LIBNAME).so
.c.o :
gcc -fPIC -DPIC $(CFLAGS) -c -o $*.o *<
clean :
rm -f *.o *.a *.so mon_test
ldd mon_test
Ceci indique les chiers DLL que mon_test peut lier (il est programm pour
cela) :
CHAPITRE 24. BIBLIOTHQUES PARTAGES. 278
mkdir -p /usr/local/lib
install -m 0755 libsimple_math.so libsimple_math.so.1.0 \
libsimple_math.so.1.0.0 /usr/local/lib
/usr/local/lib
ldconfig
ldconfig congure toutes les bibliothques du systme. Elle recre les liens
symboliques de manire approprie (comme nous l'avons fait manuellement) et
CHAPITRE 24. BIBLIOTHQUES PARTAGES. 279
280
CHAPITRE 25. PAQUETS SOURCES ET BINAIRES. 281
./configure
make
make install
Cela implique galement que les paquets doivent pouvoir tre compils sur n'im-
porte quel systme Unix. Par consquent, cette section va vous apprendre
utiliser des paquets Linux pouvant tre installs et pouvant fontionner sur des
systmes non-Linux.
Nous allons choisir un exemple titre d'illustration. Commenons par tl-
charger cooledit partir du site metalab.unc.edu. dans le rpertoire /pub/Li-
nux/apps/editors/X/cooledit, en utilisant ftp.1 Maintenant, entrez :
cd /opt/src
tar -zxvf cooledit-3.17.5.tar.gz
cd cooledit-3.17.5
Vous noterez que le nom de la plupart des sources est du type package-major.mi
nor.patch.tar.gz. Le nombre majeur n'est modi que lorsque les dveloppeurs
ont ralis des changements substantiels ou lorsqu'une version prsente des in-
compatibilits vis--vis des versions prcdentes. Le nombre mineur est mis
jour lors de modications peu importantes. Le numro de correctif (patch, aussi
connu sous le terme niveau de correctif) correspond une mise jour vers toute
nouvelle version (release ) et usuellement, dans ce cas, il y a des corrections de
bogues.
A ce stade, vous pouvez appliquer au besoin tous les patches dont vous
disposez. Rfrez-vous la section 21.7.3.
Vous pouvez alors lancer la commande ./configure. Le script ./configure
est produit par autoconf, un paquet utilis par les dveloppeurs pour crer
un code source C qui compilera le paquet sur tout type d'Unix. Le paquet
autoconf contient galement les GNU Coding Standards auxquels tous logiciels
devraient se conformer [autoconf est le fruit du travail remarquable de David
MacKenzie. J'ai souvent entendu le mythe selon lequel les systmes Unix avaient
tellement diverg au cours du temps qu'ils n'taient plus compatibles. Le fait
qu'un logiciel volu comme cooledit (et de nombreux autres) soit compilable
sur tous les Unix devrait dissiper ce non-sens. Il y a aussi un exagration
propos des developpeurs portant des logiciels Unix commerciaux sous Linux.
Si pour commencer, ils avaient crits leur logiciel proprement, il n'y aurait pas
de portage raliser. En bref, tous les logiciels Linux fonctionnent sur tous les
Unix. Les seules exceptions sont des paquets qui exploitent des caractristiques
propres au noyau Linux].
./configure --prefix=/opt/cooledit
./configure --help
make
make install
Voici une jolie astuce [qui n'est pas toujours supporte] pour installer le pa-
quet dans un sous-rpertoire dirent :
mkdir /tmp/cooledit
make install prefix=/tmp/cooledit
Vous pouvez utiliser ces commandes pour empaqueter la construction ainsi ra-
lise an de la dsarchiver sur un systme dirent. Cependant, vous ne devrez
pas excuter le programme partir d'un rpertoire dirent de celui pour lequel
il a t --prefix durant l'tape d'installation. En eet, en majorit, les pa-
quets sont compils cet endroit et accdent aux donnes installes en fonction
de cela.
L'utilisation d'un paquet source est souvent le meilleur moyen de pratiquer
une installation quand vous voulez qu'un paquet fonctionne de la manire ima-
CHAPITRE 25. PAQUETS SOURCES ET BINAIRES. 283
gine l'origine par ses dveloppeurs. Il vous sera aussi souvent ncessaire de
trouver de la documentation car il se peut que les distributeurs aient oubli
d'inclure certains chiers.
nom_de_paquet>-<version_du_source>-<version_du_paquet>.<plateforme_materielle>.rpm
( <nom_du_paquet>_<version_du_source>-<version_du_paquetage>.deb )
Par exemple,
bash-1.14.7-22.i386.rpm
( bash_2.03-6.deb )
est le Bourne Shell Again que vous utilisez, version majeure 1, version mineure
14, patch 7, version de paquet 22, compil sur un processeur Intel 386. Parfois,
les paquets Debian prsenteront une indication sur l'architecture, ajoute au nu-
mro de la version. Il se peut qu'on ait, par exemple, bash_2.03-6_i386.deb.
Le terme <version_du_source> est la version du chier original .tar (com-
me ci-dessus). Le terme <version_du_paquet>, galement appel version (ou
release ), se rapporte au chier .rpm lui-mme ; dans ce cas,bash-1.14.7-22.i-
386.rpm a t empaquet pour la 8ime fois, probablement avec des amliora-
tions mineures. Le terme i386 dcrit l'architecture. Il pourrait s'agir de SPARC
[un type de processeur utilis par les stations de travail Sun Microsystems], ppc
pour PowerPC [un autre type de station de travail non-Intel], alpha pour une
station DEC Alpha [un type de station de travail/serveur 64 bits, de haut-
niveau], ou tout autre architecture.
rpm -i mirrodir-0.10.48-1.i386.rpm
( dpkg -i mirrodir_0.10.48-2.deb )
2 NdT : concernant la distribution Mandriva (.rpm), il existe une commande urpmi qui
permet l'installation et la dsintallation via le nom de chier sans numro de version, ni
d'extension .rpm. Pour les paquets de la distribution Debian, les commandes modernes sont
prsentes la section 25.2.8.
CHAPITRE 25. PAQUETS SOURCES ET BINAIRES. 284
rpm -U mirrodir-0.10.48-1.i386.rpm
( dpkg -i mirrodir_0.10.49-1.deb )
rpm -e mirrodir
( dpkg --purge mirrodir )
dpkg -r mirrodir
25.2.3 Dpendances.
Les paquets requirent souvent d'autres paquets qui doivent tre installs
au pralable. La base de donnes des paquets conserve une trace de ces dpen-
dances (dependencies ). Il se peut aussi que vous obteniez une erreur du type :
error : failed dependencies : (ou dependency problems dans le cas de
Debian) alors que vous tentez une installation. Ceci signie que d'autres pa-
quets doivent tre installs au pralable. Le mme problme survient lorsque
vous essayez de supprimer des paquets. Si deux paquets au moins ont besoin
l'un de l'autre, vous devez les placer tous les deux sur la mme ligne de com-
mande lors de l'tape d'installation. Parfois, il arrivera qu'un paquet require
quelque chose qui n'est pas essentiel ou qui est dj fourni par un paquet lo-
giciel quivalent. Par exemple, un programme pourra requrir l'installation de
sendmail alors qu'exim constitue un substitut adquat. Dans de tels cas, l'op-
tion --nodeps permet de passer la vrication des dpendances.
Notez que Debian est beaucoup plus tatillon en terme de dpendances. Ne les
crasez donc pas tort et travers.
CHAPITRE 25. PAQUETS SOURCES ET BINAIRES. 285
rpm -qa
( dpkg -l '*' )
Essayez :
Pour vrier l'existence d'un paquet, par exemple textutils (query, list), ta-
pez :
rpm -q textutils
( dpkg -l textutils )
textutils-2.0e-7
( ii textutils 2.0-2 The GNU text file processing utilities. )
Pour acher quels paquets requirent un paquet donn (notez qu'avec Debian,
nous pouvons vrier cela en essayant d'enlever le paquet donn avec l'option
--no-act pour signier tester seulement),
Les listes de chiers associs aux paquets sont trs utiles pour trouver les com-
mandes et la documentation associes un logiciel. Les utilisateurs sont souvent
frustrs par un paquet pour lequel ils ne savent pas quoi s'attendre. Un bon
point de dpart consiste donc acher les chiers constituant le paquet.
Pour dterminer quel paquet appartient un chier :
Cependant, il n'existe pas encore de mthode pour armer que le paquet install
est le vrai paquet (voir la section 45.3.2). Pour procder une telle vrication,
vous devez obtenir le vrai paquet .deb ou .rpm et oprer la vrication de cette
manire :
md5sum openssh-2.2.2p4-1.i386.rpm
( md5sum openssh-2.2.2p4-1.i386.deb )
CHAPITRE 25. PAQUETS SOURCES ET BINAIRES. 287
En l'espce, VERSION est un mot-cl (tag ) applicable aux chiers .rpm. Voici
une liste d'autres mots-cls qui peuvent tre utiliss :
Par ailleurs, il est possible d'extraire tous les scripts config et les chiers
de contrle d'un paquet .deb l'aide de :
rpm2cpio <fichier_rpm>
Enn, la liste des chiers d'un paquet peut tre sonde avec :
ce qui est analogue aux recherches eectues sur les paquets intalls.
les. Les paquets sources de RedHat ont pour extension .src.rpm. Les sources
de Debian apparaissent dans l'arborescence des sources de la distribution. Le
HOWTO-RPM dtaille la construction des paquets sources de RedHat. Les paquets
dpkg-dev et packaging-manual de Debian contiennent une rfrence complte
des standards et des mthodes utiliss par cette distribution (essayez dpkg - L
dpkg-dev et dpkg -L packaging-manual).
La construction de paquets sources pour les distributions RedHat et Debian
n'est pas couverte dans cet ouvrage.4
Introduction IP.
IP est l'acronyme d'Internet Protocol. Il s'agit d'un protocole de transmission
de donnes sur l'internet (c'est--dire un ensemble de rgles respecter pour
pouvoir transmettre ou recevoir des donnes).
290
CHAPITRE 26. INTRODUCTION IP. 291
sdent un en-tte et un corps de donnes) mais leur taille est adapte par souci
d'ecacit aux particularits du matriel. Les paquets IP sont encapsuls dans
des trames : chacun d'eux est intgr dans la partie Data de la trame. Cepen-
dant, une trame peut prsenter une taille insusante pour contenir un paquet
entier. Dans ce cas, le paquet IP est morcel en sous-paquets. Ce groupe de sous-
paquets IP reoit un numro d'identication. Chaque sous-paquet prsente un
champ d'Identication avec ce numro ainsi qu'un champ d'Oset indiquant
la position relative du sous-paquet dans le paquet principal. A l'autre bout de la
connexion, la machine destinataire reconstruit le paquet principal partir des
sous-paquets en fonction du nombre contenu dans leur champ d'Identication
et du numro prsent dans leur champ d'Oset.
La convention d'criture d'une adresse IP, sous une forme qui nous est lisible,
consiste utiliser une notation avec des points sparateurs de nombres dcimaux
comme dans 152.2.254.81. Chaque nombre spar par les points est un octet
et, par consquent, la gamme va de 0 255. Donc, l'espace d'adresses s'tend de
0.0.0.0 255.255.255.255. Pour organiser l'attribution des adresses, chaque
adresse 32 bits est divise en deux parties : une partie rseau (network ) et une
partie hte (host ), tel qu'indiqu dans la gure 26.1.
chiers /dev/loop ?). Le priphrique loopback est une carte rseau imaginaire
utilise pour faire communiquer la machine avec elle-mme. Par exemple, si vous
utilisez telnet sur votre machine locale, vous tes rellement connect via le
priphrique loopback. La commande ifconfig (inter face configuration ) est
utilise pour eectuer des oprations de conguration des interfaces. Excutez :
/sbin/ifconfig lo down
/sbin/ifconfig eth0 down
/sbin/ifconfig lo 127.0.0.1
L'adresse de broadcast est spciale car toutes les machines y rpondent. Usuel-
lement, il s'agit de la premire ou de la dernire adresse d'un rseau particulier.
Poursuivons :
/sbin/ifconfig
Ceci permet d'acher les caractristiques des interfaces. La sortie devrait tre :
eth0 Link encap :Ethernet HWaddr 00 :00 :E8 :3B :2D :A2
inet addr :192.168.3.9 Bcast :192.168.3.255 Mask :255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU :1500 Metric :1
RX packets :1359 errors :0 dropped :0 overruns :0 frame :0
TX packets :1356 errors :0 dropped :0 overruns :0 carrier :0
collisions :0 txqueulen :100
Interrupt :11 Base address :0xe400
Tout paquet arrivant une interface est vers dans un bassin de traitement
(pool ) par le noyau. Le noyau analyse alors chaque adresse de destination du
paquet et dcide, en fonction de la destination, o le paquet est envoy. La
provenance du paquet n'a pas d'importance. Une fois le noyau en possession du
paquet, c'est la destination qui compte. Au premier chef, il incombe au rseau
d'assurer que le paquet n'arrive pas une mauvaise interface.
Nous savons que tout paquet destin l'adresse rseau 127. ? ? ?. ? ? ?. ? ? ?
doit tre dirig vers l'interface loopback (ceci est une convention en quelque
sorte). La commande
/sbin/route -n
L'option -n agit sur route an de ne pas acher les adresses IP sous forme
de nom d'hte, ce qui donne :
La table de routage indique que les paquets dont l'adresse de destination est
127.0.0.0/255.0.0.0 [la notation network/mask est souvent utilise pour d-
signer les gammes d'adresses IP] doivent tre envoys au priphrique loopback.
De plus, les paquets dont l'adresse de destination est 192.168.3.0/255.255.2-
55.0 doivent tre envoys eth0. L'adresse de la passerelle ou Gateway est zro,
ce qui veut dire qu'elle n'est pas congure (voir les commandes qui suivent).
La table de routage permet donc d'eectuer le routage des paquets vers 127.
et 192.168.3. A prsent, nous devons avoir une route pour les autres adresses
IP ventuelles. Unix peut admettre une route permettant d'envoyer des pa-
quets avec des adresses de destination IP particulires, vers une autre machine
du LAN. C'est partir de cette machine (parfois appele passerelle ou gate-
way ) que ces paquets pourront tre envoys ailleurs. La commande tablissant
ce routage est :
Cette commande est la plus gnrale, mais usuellement il est plus facile d'utili-
ser :
CHAPITRE 26. INTRODUCTION IP. 296
lorsque nous voulons ajouter une route qui s'applique tout autre paquet que
ceux dnis plus haut (par exemple). Cette route est appele la passerelle par
dfaut (default gateway ). default signie tous les paquets ; cela quivaut :
mais, tant donn que les routes sont tablies en fonction du netmask, les routes
les plus spciques sont utilises prfrentiellement celles qui le sont moins.
Finalement, vous pouvez xer le nom d'hte (le nom de votre machine) ainsi :
hostname cericon.cranzgot.co.za
/sbin/ifconfig lo down
/sbin/ifconfig eth0 down
/sbin/ifconfig lo 127.0.0.1
/sbin/ifconfig eth0 192.168.3.9 broadcast 192.168.3.255 netmask 255.255.255.0
/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo
/sbin/route add -net 192.168.3.0 netmask 255.255.255.0 eth0
/sbin/route add default gw 192.168.3.254 eth0
hostname cericon.cranzgot.co.za
Bien que ces 7 commandes vous permettent de faire une conguration manuelle
complte, la conguration de scripts de dmarrage vous vite cette procdure
fastidieuse (voir la section 26.7).
DEVICE=eth0
IPADDR=192.168.3.9
NETMASK=255.255.255.0
NETWORK=192.168.3.0
BROADCAST=192.168.3.255
ONBOOT=yes
CHAPITRE 26. INTRODUCTION IP. 297
NETWORKING=yes
HOSTNAME=cericon.cranzgot.co.za
GATEWAY=192.168.3.254
/etc/init.d/network start
( /etc/rc.d/init.d/network start )
/etc/init.d/network stop
( /etc/rc.d/init.d/network stop )
DEVICE=eth1
IPADDR=192.168.4.1
NETMASK=255.255.255.0
NETWORK=192.168.4.0
BROADCAST=192.168.4.255
ONBOOT=yes
De manire ce que le noyau puisse envoyer les paquets entre ces deux cartes,
excutez :
ip_forward=no
spoofprotect=yes
syncookies=no
/etc/init.d/networking stop
/etc/init.d/networking stop
cericon.cranzgot.co.za
CHAPITRE 26. INTRODUCTION IP. 299
les machines B et C.
La machine X a pour adresse IP (dans LAN 1) : 192.168.1.1. Cette ma-
chine est une passerelle vers l'internet. Le port Ethernet de la machine B est
simplement congur avec une adresse IP 192.168.1.2 et la passerelle par d-
faut (pour pouvoir sortir vers l'internet via X) est 192.168.1.1. Observez que
l'adresse de broadcast est 192.168.1.63 (les 6 derniers bits valent 1).
Le port Ethernet de la machine C (LAN 2) est congur avec une adresse
IP gale 192.168.1.129. Aucune passerelle par dfaut ne devrait tre dclare
avant que la connexion srie ne soit congure.
Nous devons tablir le rseau entre B et le sous-rseau 192.168.1.128/26
via la machine C. Il s'agit d'un sous-rseau en soi, mme s'il n'y a que deux
machines interconnectes. Nous allons attribuer les adresses 192.168.1.252
la machine B et 192.168.1.253 la machine C pour ce qui concerne les ports
se faisant face. Ceci constitue un exemple rel avec un lien srie non able. Sont
requis, pppd1 pour conserver le lien actif et, un script shell pour redmarrer le
lien s'il disparaissait. Le script sur la machine B sera :
#/ !bin/sh
while true ;do
pppd lock local mru 296 mtu 296 nodetach nocrtscts nocdtrcts \
192.168.1.252 :192.168.1.253 /dev/ttyS0 115200 noauth \
lcp-echo-interval 1 lcp-echo-failure 2 lcp-max-terminate 1 lcp-restart 1
done
Notez que si le lien tait de type Ethernet (sur une seconde carte Ethernet
de la machine B) et que nous avions faire un vritable LAN entre les ma-
chines B et C (avec un sous-rseau 192.168.1.252/26), le script quivalent
serait :
Dans ce cas, tous les ppp0 seraient changs en eth1 dans les scripts qui suivent.
Le routage sur la machine B est ralis avec le script suivant, pourvu que
le lien soit activ. Le script doit tre excut chaque fois que pppd vient de n-
gocier la connexion et il peut donc tre plac dans le chier /etc/pppd/ip-up.
Ce script sera excut par pppd automatiquement ds que l'interface ppp0 est
disponible :
0.0.0.0 255.0.0.0 U 0 0 0 lo
eth0 Link encap :Ethernet HWaddr 00 :A0 :24 :75 :3B :69
inet addr :192.168.1.2 Bcast :192.168.1.63 Mask :255.255.255.192
lo Link encap :Local Loopback
inet addr :127.0.0.1 Mask :255.0.0.0
ppp0 Link encap :Point-to-Point Protocol
inet addr :192.168.1.252 P-t-P :192.168.1.253 Mask :255.255.255.255
#/ !bin/sh
while true ; do
pppd lock local mru 296 mtu 296 nodetach nocrtscts nocdtrcts \
192.168.1.253 :192.168.1.252 /dev/ttyS0 115200 noauth \
lcp-echo-interval 1 lcp-echo-failure 2 lcp-max-terminate 1 lcp-restart 1
done
eth0 Link encap :Ethernet HWaddr 00 :A0 :CC :D5 :D8 :A7
inet addr :192.168.1.129 Bcast :192.168.1.191 Mask :255.255.255.192
lo Link encap :Local Loopback
inet addr :127.0.0.1 Mask :255.0.0.0
ppp0 Link encap :Point-to-Point Protocol
inet addr :192.168.1.253 P-t-P :192.168.1.252 Mask :255.255.255.255
La machine D peut tre congure comme toute machine ordinaire d'un LAN.
Il faut lui indiquer que la passerelle par dfaut est 192.168.1.129. En revanche,
la machine A doit tre capable d'envoyer des paquets destins au sous-rseau
192.168.1.128/26 via la machine B. Sa table de routage doit donc prsenter
une ligne pour le LAN 192.168.1.128/26. La table de routage complte de la
machine A est :
26.10.1 ping.
La commande ping est l'utilitaire rseau le plus rpandu. Les paquets IP
vhiculs sur l'Internet sont de trois types : TCP, UDP ou ICMP. Les deux pre-
miers discuts au chapitre 27 constituent deux moyens fondamentaux de com-
munications entre deux programmes en cours d'excution sur deux machines.
ICMP est l'acronyme d'Internet Control Message Protocol. Il s'agit d'un proto-
cole permettant de grer les informations relatives aux erreurs sur des machines
en connexion.2
Essayez :
ping metalab.unc.edu
ou spciez n'importe quel hte bien connu. Vous devriez obtenir le rsultat
suivant :
Dans les faits, ping envoie des paquets ICMP metalab.unc.edu, qui rpond
automatiquement avec un paquet ICMP de retour. Pinguer est souvent le
test-cl pour dterminer si une interface rseau est correctement congure et
fonctionnelle. Notez que certains sites ltrent les paquets ICMP : par exemple,
ping cnn.com ne fonctionnera pas.
2 NdT : en fait, le protocole IP eectue peu de contrles et ne permet pas de corriger des
erreurs associes au transport de donnes. En revanche, il fait part de ces erreurs aux couches
rseau voisines. ICMP est utilis par les routeurs pour signaler une erreur (Delivery Problem ).
ICMP peut aussi tre sujet aux erreurs. Pour viter l'eet boule de neige, il n'y a pas de
rapport lorsqu'ICMP commet lui-mme une erreur.
CHAPITRE 26. INTRODUCTION IP. 304
ping envoie un paquet toutes les secondes et mesure le temps qu'il faut pour
recevoir le paquet de retour exactement comme le ping du sonar d'un sous-
marin. Sur l'internet, il est possible d'obtenir des dures excdant les 2 secondes
si le site sond est trs loign. Sur un rseau local LAN, cette dure peut tre
infrieure la milliseconde.
Si ping ne parvient mme pas produire la ligne PING metalab.unc.edu...,
cela signie que ping ne peut pas rsoudre le nom d'hte. Vous devrez alors v-
rier que votre DNS est fonctionnel (voir le chapitre 28). Si ping met cette
ligne mais rien d'autre, les paquets ne sont pas mis ou retourns. Dans tous les
autres cas, ping engendrera un message d'erreur signalant l'absence de routes
ou d'interfaces.
26.10.2 traceroute.
traceroute est un utilitaire tonnant qui indique la route emprunte par un
paquet pour atteindre sa destination. Cette commande utilise des paquets UDP
ou, lorsque l'option -I est utilise, des paquets ICMP pour dterminer l'itin-
raire suivi. Par exemple de cericon.cranzgot.co.za metalab.unc.edu,
traceroute metalab.unc.edu
donne :
15 * * *
19 * * *
sont pas utiliss sur les marchs non-amricains : il n'y a pas assez de vitesse
rseau pour charger de tels serveurs, ce qui rend superue toute comparaison
de vitesses de serveurs].
26.10.3 tcpdump.
tcpdump scrute tout le trac passant sur une interface donne, c'est--dire
tout le trac de toutes les machines connectes sur le mme concentrateur (hub )
(aussi appel segment rseau ou segment ). De manire usuelle, une carte rseau
saisit les trames qui lui sont destines. Cependant, tcpdump bascule la carte en
mode promiscueux (promiscuous mode ), ce qui veut dire que la carte recherche
toutes les trames indpendamment de leur adresse matrielle de destination.
Essayez :
tcpdump -n -N -f -i eth0
TCP et UDP.
Au cours du chapitre prcdent, nous avons abord la communication entre
machines en nous intressant la couche IP. Ce protocole eectue peu de
contrles et ne permet pas de corriger des erreurs associes au transport de don-
nes. En particulier, il ne vrie pas le bon acheminement des paquets. Aussi,
lorsque deux applications fonctionnent de part et d'autre de l'Ocan Atlantique
(par exemple), le fait d'tre capable d'envoyer un paquet qui peut (ou peut ne
pas) atteindre le ct oppos ne sut-il pas. Nous avons besoin de communica-
tions ables donc d'un protocole supplmentaire.
Idalement, un programme utilisateur tablit un lien sur une machine dis-
tante et lui transmet des octets tout en tant sr que ceux-ci atteignent leur
destination point--point (et ce, de part et d'autre de la ligne de communica-
tion). Une telle opration est appele communication ux able.
Vous pourriez imaginer envoyer des paquets spars et attendre que pour
chaque paquet, le machine distante conrme leur rception. Cette approche
est inecace car les paquets mettent un temps assez long pour atteindre leur
destination ; il en va de mme pour la conrmation de la rception associe
chaque paquet. L'ide est plutt d'envoyer autant de paquets que possible en une
fois et de disposer d'un moyen de ngocier avec la machine distante de manire
renvoyer les paquets qui n'auraient pas t reus. C'est prcisment ce que
fait TCP (Transmission Control Protocol ) en envoyant des paquets de donnes
en un coup et en analysant les paquets de contrle (acknowledgment packets ) de
sorte indiquer les parties du ux de donnes qui ont t correctement reues
sur la machine de destination.
Nous voyons donc que TCP est mis en oeuvre un niveau suprieur IP.
Ainsi, la communication sur l'internet est-elle souvent appele communication
par TCP/IP.
La communication TCP se fait en trois tapes : la ngociation, le transfert
et la dconnexion (detachment ) [Ceci est la terminologie de l'auteur du texte
original en anglais. Il s'agit d'une reprsentation quelque peu schmatique].
Ngociation L'application cliente (disons votre navigateur) initie tout d'abord
la connexion en utilisant la fonction C connect() (voir connect(2)). Ceci
force le noyau envoyer un paquet SYN (de SYN chronisation) au serveur
TCP distant (dans le cas prsent, un serveur web). Le serveur web rpond
en envoyant un paquet SYN-ACK (ACK nowlegde : pour accus de r-
306
CHAPITRE 27. TCP ET UDP. 307
[root@cericon]# tcpdump \
'( src 192.168.3.9 and dst 207.25.72.20 ) or ( src 207.25.71.20 and dst 192.168.3.9 )'
Kernel filter, protocol ALL, datagram packet socket
tcpdump :listening on all devices
ce qui indique la machine d'acher tous les paquets ayant pour sources (src)
et destinations (dst) notre adresse et celle de CNN.
A prsent, nous pouvons utiliser le protocole HTTP pour capter la page
principale. Tapez la commande HTTP GET /HTTP/1.0 et pressez deux fois la
touche (comme cela est requis dans le protocole HTTP). Les quelques pre-
mires et dernires lignes sont donnes ci-dessous :
HTTP/1.0 200 OK
Server : Netscape-Enterprise/2.01
Date : Tue, 18 Apr 2000 10 :55 :14 GMT
Set-cookie :CNNid=cf19472c-23286-956055314-2 ; expires=Wednesday, 30-Dec-2037 16 :00 :00
GMT ;path=/ ; domain=.cnn.com
<HTML>
<HEAD>
<TITLE>CNN.com</TITLE>
<META http-equiv=REFRESH conntent=1800>
..............
..............
</BOBY>
</HTML>
connexion closed by foreign host.
sont changs. tcpdump facilite la lecture en achant les noms d'hte au lieu
des adresses IP et aussi les lettres www plutt que le numro de port 80. Le port
choisi alatoirement (au-del de 1024) est en l'occurrence 4064.
[root@cericon]# tcpdump \
'(src 192.168.3.9 and dst 207.25.71.20) or (src 207.25.71.20 and dst 192.168.1.3)'
..............
..............
.19 :19(0) ack 61396 win 31856 <nop,nop,timestamp 154035732 1075176765> (DF)
sont souhaites. Un autre cas concerne NFS (Network File System 2 ) qui utilise
UDP pour exclusivement mettre en oeuvre via des programmes (en anglais, to
implement ) des transferts de donnes large bande passante. Avec UDP,3 , l'uti-
litaire client envoie et reoit des paquets individuels qui sont encapsuls dans
IP. Les ports sont utiliss de la mme manire qu'avec TCP, mais ceux-ci ne
sont que des identicateurs. Par consquent, la notion de ux n'existe pas avec
UDP. L'en-tte complet UDP/IP est donne dans le tableau 27.2.
tout message capt par un tiers soit illisible. Quelles doivent tre les proprits
d'un ux chir ?
1. Il devrait garantir que le client se connectant eectue vraiment cette opra-
tion sur le serveur en question. En d'autres termes, il devrait authentier
le serveur pour assurer que ce dernier n'est pas un cheval de Troie (ou
Trojan, en anglais).
2. Il devrait viter que des parties des donnes soient lisibles par un pirate.
Toutes donnes lues par une tierce personne devraient apparatre sous
forme crypte.
3. Il devrait tre impossible pour quelqu'un qui a capt le message de modier
le trac des donnes sans se faire reprer.
Deux paquets permettent de rencontrer aisment ces objectifs. Supposons que
nous voulions utiliser POP3 (Post Oce Protocol permet la station de travail
d'un utilisateur d'accder au courrier depuis un serveur de courrier) pour recher-
cher du courriel provenant d'une autre machine. Premirement, nous pouvons
vrier que POP3 est en cours d'excution en se connectant au serveur POP3
lui-mme. Lancez un telnet sur le port 110 (qui est le service POP3) :
Pour crer un canal crypt comme indiqu la gure 27.1, nous utiliserons
le programme de connexion client ssh d'une manire un peu spciale. Nous
souhaitons le faire couter sur un port TCP particulier et ensuite, crypter puis
rediriger tout le trac vers le port TCP distant du serveur.
Cette technique est connue sous le nom de redirection de port crypt (en-
crypted port forwarding ). Sur la machine cliente, nous slectionnons un port
quelconque mais inutilis. Dans le cas prsent, il s'agit de 12345 :
Cet exemple peut, naturellement, tre transpos presque tous les services.
Avec certains de ceux-ci qui eectuent des oprations spciales comme la cration
de connexion de retour TCP sur un client (c'est le cas avec FTP, par exemple),
cela ne fonctionnera pas.
Chapitre 28
317
CHAPITRE 28. DNS ET RSOLUTION DE NOMS. 318
Il n'y a que 13 serveurs de noms principaux (root) sur l'internet. [Leur liste
peut tre obtenue l'adresse suivante : ftp ://ftp.rs.internic.net/domain/named.ro-
ot] :
a.root-servers.net 198.41.0.4
b.root.servers.net 128.9.0.107
c.root-servers.net 192.33.4.12
d.root-servers.net 128.8.10.90
e.root-servers.net 192.203.230.10
f.root-servers.net 192.5.5.241
g.root-servers.net 192.112.36.4
h.root-servers.net 128.63.2.53
i.root-servers.net 192.36.148.17
j.root-servers.net 198.41.0.10
k.root-servers.net 193.0.14.129
l.root-servers.net 198.32.64.12
m.root-servers.net 202.12.27.33
Chaque pays possde aussi un serveur de noms. Chaque organisme son tour
possde un serveur de noms. Chaque serveur de noms n'a d'informations qu'au
sujet des machines se trouvant dans son propre domaine, ainsi qu'au sujet des
autres serveurs de noms. La structure de cet ensemble est donc une arborescence
inverse. Les serveurs de noms principaux ou root n'ont d'information sur les
adresses IP qu' propos des noms de serveurs .com, .edu, .za, etc. Le serveur
de noms .za, lui-mme ne possde des informations IP qu'au sujet de .co.za,
.ac.za, .org.za, etc. Et son tour, .co.za ne possde de renseignements
IP que concernant les serveurs de toutes les compagnies sud-africaines comme,
.cranzgot.co.za, .icon.co.za, .mweb.co.za, etc. Finalement, le serveur de
noms .cranzgot.co.za ne connat que les IP des machines de Cranzgot Sys-
tems, comme www.cranzgot.co.za.
Dans ses chiers de conguration , votre propre machine dnit un serveur
de noms qui lui est proche gographiquement. Les responsabilits de ce serveur
de noms sont (i) de rpondre toute requte au sujet de son nom de domaine,
pour lequel il a de l'information et (ii) de rpondre toute autre requte en
interrogeant autant de serveurs de l'internet qu'il sera ncessaire de contacter
pour satisfaire la demande initiale.
Les htes pepper, cericon et onion sont ceux avec lesquels cette machine com-
munique le plus. Par consquent, leur nom est cit. cericon est la machine
locale et doit tre rpertorie. Vous pouvez inclure n'importe quel hte auquel
vous voulez adresser des requtes rapides ou des htes qui doivent tre connus.
Le chier /etc/host.conf pourrait avoir l'allure suivante :
order ce terme dsigne l'ordre dans lequel les requtes sont eectues. N'essayez
pas de jouer sur cette valeur. Elle semble ne pas avoir d'eet. Vous devriez
laisser la ligne order hosts, bind telle qu'elle (ou utiliser order hosts,
bind, nis, si vous avez un NIS1 voir le HOWTO sur le web).
trim te le domaine un.domaine se trouvant la n du nom d'hte quali
avant de tenter une requte.Vous n'aurez probablement jamais besoin de
cette option.
spoofalert tente des requtes inverses sur un nom d'hte aprs avoir eectuer
une requte d'IP : spoofalert demande de trouver le nom d'hte partir
d'une IP. Si la demande ne retourne pas le rsultat correct, cela peut
signier qu'une machine essaye de se faire passer pour ce qu'elle n'est pas.
1 NdT : il s'agit du service d'information du rseau (Network Information Service ) qui
permet certaines informations d'tre connues par toutes les machines disponibles du rseau.
Ce service est gr par la bibliothque C standard, libc de Linux. La version NIS+ prsente
un niveau de scurit suprieur ainsi qu'une convivialit amliore pour les installations de
grande taille.
CHAPITRE 28. DNS ET RSOLUTION DE NOMS. 322
nameserver 192.168.2.1
nameserver 160.123.76.1
nameserver 196.41.0.131
search cranzgot.co.za ct.cranzgot.co.za uct.co.za
sortlist 192.168.3.0/255.255.255.0 192.168.2.0/255.255.255.0
options ndots :1 timeout :30 attempts :2 rotate np-check-names inet6
Une requte AAAA est une adresse internet IP de type IPv6 c'est--
dire de prochaine gnration.
En dpit de cette gamme d'options, un chier /etc/resolv.conf ressemble le
plus souvent ceci :
nameserver 192.168.2.254
search cranzgot.co.za
qutes provenant d'o que se soit sur l'internet et ayant pour domaine cranzgot-
.co.za sont du ressort de ns2.cranzgot.co.za.
host www.cnn.com
pour obtenir diverses adresses IP partir d'un nom d'hte. Ressayez host
plusieurs fois. Observez que l'ordre de sortie des adresses change de manire
alatoire. Ceci montre que la charge est distribue sur divers serveurs cnn.com.
A prsent, prenez une des adresses IP et tapez :
host <adresse-IP>
whois cnn.com@rs.internic.net
[rs.internic.net]
domain names in the .com, .net, and .org domains can now be registered
with many different competing registrars. Go to http ://www.internic.net
for detailed information
> > > Last update of whois database : Thu, 20 Jan 00 01 :39 :07 EST < < <
The Registry database contais ONLY, .COM, .NET, .ORG, .EDU domains and
Registrars
(Internic parvient obtenir cette base de donnes des domaines .com, .net,
.org et .edu).
nslookup
vous obtiendrez une invite derrire laquelle vous pourrez saisir diverses com-
mandes. Si vous entrez un nom d'hte, nslookup vous retournera son ou ses
adresse(s) IP ou vice versa. En tapant :
help
derrire l'invite, vous obtiendrez une liste complte des commandes. Par dfaut,
nslookup utilise le premier serveur de noms mentionn dans /etc/resolv.conf
pour toutes ses requtes. Cependant, la commande
server <serveur_de_noms>
set type=NS
set type=NS
cnn.com
nslookup retournera :
CHAPITRE 28. DNS ET RSOLUTION DE NOMS. 326
Non-authoritative answer
cnn.com nameserver = NS-02B.ANS.NET
cnn.com nameserver = NS-02A.ANS.NET
cnn.com nameserver = NS-01B.ANS.NET
cnn.com nameserver = NS-01A.ANS.NET
Ceci nous apprend que quatre serveurs de noms sont autoritaires pour le domaine
cnn.com (un plus trois sauvegardes). Cela nous apprend aussi que la source de
renseignements n'est pas autoritaire si bien que les donnes proviennent d'un
cache. Enn, nous voyons quels serveurs de noms sont autoritaires.
Maintenant, passons un serveur de noms autoritaire pour cnn.com :
server NS-02B.ANS.NET
cnn.com
set type=MX
cnn.com
set type=PTR
<adresse-IP>
set type=A
<nom_hote>
set type=CNAME
<nom_hote>
CHAPITRE 28. DNS ET RSOLUTION DE NOMS. 327
Les enregistrements PTR sont des requtes inverses, ou des Poin Teu Rs (Poin Te Rs )
vers des noms d'htes. Les enregistrements A sont des requtes directes. Les re-
qutes directes constituent le type de requtes par dfaut lorsqu'on invoque la
premire fois qu'on lance nslookup et le type de requtes que, pour moiti,
nous avons vues dans ce chapitre. Le terme A dsigne les requtes d'Adresses
(Adresses lookups ). Les enregistrements CNAME sont des requtes de noms cano-
niques (Canonical NAMEs ). DNS permet d'attribuer des synonymes (ou alias )
une machine. Le nom rel est dit canonique. Les requtes CNAME retournent le
nom principal d'une machine.
o, <serveur> est la machine sur laquelle est excut le dmon DNS re-
chercher, <domain> est le domaine d'intrt et <type_de_requete> est un des
enregistrements tels que A, ANY, MX, NS, SOA, HINFO, AXFR ou ceux moins triviaux
que dtaille dig(1). dig peut galement tre utilise pour tester une connexion
internet : voir la section 21.7.4.
L'enregistrement AXFR est utile. Par exemple,
29.1 Logiciels.
Selon votre distribution, les programmes cits ci-dessous peuvent se trouver
dans les rpertoires bin ou sbin. Tous sont des dmons. Pour que NFS puisse
fonctionner, ces services doivent tre dmarrs dans l'ordre suivant :
portmap (aussi appel parfois rpc.portmap). Ce dmon tablit une correspon-
dance des noms de services et des ports. Les processus clients et serveurs
doivent demander un numro de port TCP bas sur un nom de service, et
portmap gre ces requtes. En fait, il s'agit d'une version rseau de votre
chier /etc/services.
1 NdT : le lecteur devrait se rapporter la page principale du projet OpenAFS, qui est un
systme de partage de chiers plus rcent. Voir http ://www.openafs.org
328
CHAPITRE 29. SYSTME DE FICHIERS EN RSEAU NFS. 329
mkdir -p /mnt/cdrom
mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom
portmap
rpc.mountd
rpc.nfsd
rpc.lockd
exportfs -r
/mnt/cdrom 192.168.1.0/24
/mnt/cdrom localhost.localdomain
c'est--dire une liste des rpertoires partags et des htes autoriss y acc-
der.
Il est utile de tester les montages depuis votre machine locale avant d'eec-
tuer les tests sur une machine distante. Ici, nous ralisons l'opration de montage
de NFS :
mkdir /mnt/nfs
mount -t nfs localhost :/mnt/cdrom /mnt/nfs
mkdir /mnt/nfs
mount -t nfs cdromserver :/mnt/cdrom /mnt/nfs
Si quelque chose va mal, vous rechercherez certainement tous les processus in-
cluant rpc, mount, nfs ou portmap. L'arrt complet de nfs quivaut stopper
tous ces processus, au cas o vous dsireriez repartir de zro. Il est galement
utile de vrier la dernire partie des journaux :
tail -f /var/log/messages
tail -f /var/log/syslog
dans une console dirente pour attendre les messages d'erreur (ou de succs).
Il faut toujours faire cela quelle que soit la conguration que vous mettez en
CHAPITRE 29. SYSTME DE FICHIERS EN RSEAU NFS. 331
place. Notez qu'il n'est pas toujours vident que NFS choue cause d'un pro-
blme de requte DNS directe ou inverse ; aussi, au pralable, vriez en double
que ces requtes fonctionnent. mount ne devrait pas donner davantage de rensei-
gnements que le message classique d'erreur de NFS : mount : <xyz> failed,
reason given by server : Permission denied. Un DNS erron est gale-
ment indiqu par des pauses d'une minute en cours d'opration.
En majorit, les distributions n'exigeront pas que vous dmarreriez ou que
vous arrtiez les dmons cits prcdemment. A l'instar de la plupart des ser-
vices, la mise en oeuvre de NFS par RedHat peut tre invoque simplement avec :
/etc/init.d/nfs start
/etc/init.d/nfslock start
/etc/init.d/nfs-common start
/etc/init.d/nfs-kernel-server start
/mnt/cdrom *.mynet.mydomain.co.za(ro)
/home *.mynet.mydomain.co.za(rw)
/ *.very.trusted.net(rw,no_root_squash)
29.4 Securit.
Pour que NFS fonctionne, divers services doivent tre lancs. Ceux-ci ne sont
pas utiliss hors du cadre de NFS. Beaucoup d'administrateurs agissent nave-
CHAPITRE 29. SYSTME DE FICHIERS EN RSEAU NFS. 332
333
CHAPITRE 30. LES SERVICES EXCUTS SOUS INETD. 334
/usr/bin/in.ftpd -D
( /usr/bin/in.wuftpd -s )
/etc/init.d/inet restart
( killall -1 inetd )
( /etc/rc.d/init.d/inet restart )
Ensuite, il faut redmarrer le service inetd comme nous l'avons fait la sous-
section 30.2.2. La modication eectue sur la ligne de /etc/inet.conf permet
tcpd d'invoquer in.ftpd (ou in.wuftpd) au nom d'inetd. La commande tcpd
eectue divers tests sur la connexion entrante an de dcider si cette dernire
est de conance. tcpd vrie de quel hte provient la connexion et compare
ce dernier aux entres du chier /etc/hosts.allow et /etc/hosts.deny. Elle
peut refuser des connexions de certains htes, ce qui donne un contrle d'accs
n aux services.
Considrons l'entre de /etc/inetd.conf et celle du chier /etc/hosts.al-
low :
in.ftpd : ALL
( in.wuftpd : ALL )
Dans cet exemple, seront refuses les connexions de toutes les machines dont le
nom d'hte ne se termine pas par .my.domain. Seront acceptes les connexions
de la machine locale [celle sur laquelle inetd est exccut]. A ce stade, il est
utile d'essayer d'tablir une connexion ftp de direntes machines pour vrier
le contrle d'accs. Une description complte du format de /etc/hosts.allow
et /etc/hosts.deny est donne dans hosts_access(5). Voici un autre exemple
relatif /etc/hosts.deny :
Dans ce cas, l'accs sera refus pour tous les services (ALL) toutes les machines
faisant partie du rseau 146.168.160.0 et toutes les machines appartenant
au domaine .snake.oil.com.
/etc/init.d/named.
named est tudi au chapitre 41. Notez qu'il y a toujours un script /etc/in-
it.d/inet.
Les services mentionns ci-dessus ont les fonctions suivantes (le numro de port
est indiqu entre parenthses) :
ftp (21) Protocole de transfert de chiers (File Transfer Protocol ).
telnet (23) connexion par telnet ;
shell (514) rsh ou service d'excution du script de shell distant.
login (513) rlogin ou service de connexion distance.
talk (517) aussi appel ntalk : utilitaire de communication pour l'utilisateur.
pop-3 (110) service de rcupration du courriel par Post Oce Protocol
en majorit les utilisateurs rcuprent leurs courriels via leur fournisseur
d'accs internet.
imap (143) Protocole d'accs au courriel par internet (Internet Mail Access
Protocol ) un service plus sophistiqu mais bien moins scuris que POP.
uucp (540) copie Unix--Unix oprant via TCP.
tftp (69) service FTP commun utilis, par exemple, par les stations de travail
sans disque pour rcuprer une image du noyau.
bootpd (67) service de conguration BOOTP IP pour les rseaux LAN qui
requirent une attribution IP automatique.
nger (79) service de requte pour utilisateur.
CHAPITRE 30. LES SERVICES EXCUTS SOUS INETD. 337
auth (113) un service qui dtermine le propritaire d'une connexion TCP par-
ticulire. Si vous avez une machine avec de nombreux utilisateurs, les
administrateurs des autres machines peuvent voir quels utilisateurs sont
connects leur(s) machine(s) via la vtre. Pour disposer d'une trace,
certains serveurs TCP et IRC demandent aux clients qui se connectent
d'excuter ce service. Dsactivez ce service si votre machine ne supporte
pas les connexions par shell pour de multiple utilisateurs.
defaults
{
instances = 60
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST RECORD
}
includedir /etc/xinetd.d
service ftp
{
socket_type = stream
server = /usr/sbin/in.ftpd
server_args = -l -a
CHAPITRE 30. LES SERVICES EXCUTS SOUS INETD. 338
wait = no
user = root
log_on_success += DURATION USERID
log_on_failure += USERID
nice = 10
}
defaults
{
only_from = 127.0.0.1 mamachine.local.domain
.
.
.
permet un accs toutes les machines dont le nom d'hte se termine par
.somewhere.friendly.com.
Enn, il existe une option no_access qui travaillant de manire identique
only_from, indique les htes et/ou les adresses IP des machines qui n' ont pas
l'autorisation de se connecter :
CHAPITRE 30. LES SERVICES EXCUTS SOUS INETD. 339
no_access = .snake.oil.net
30.6 Scurit.
On pourrait penser qu'utiliser /etc/hosts.deny (ou only_from =) pour
interdire l'accs toutes les machines distantes est susant pour scuriser un
systme. Ceci n' est pas vrai : mme un utilisateur local qui n'est autoris qu'
accder un service local est potentiellement un trou de scurit. En eet, un
service prsente usuellement des privilges plus lvs que ceux de l'utilisateur.
Il est donc indiqu de supprimer tous les services qui ne sont pas absolument
ncessaires. Concernant les machines sur l'internet, n'hsitez pas couper le
dernier service qui n'est pas utilis, voire mme dsinstaller inetd (ou xinetd)
entirement.
Reportez-vous au chapitre 45.
Chapitre 31
exim et sendmail.
Le prsent chapitre explique comment faire de votre station Linux un serveur
de messagerie. Une discussion sur le processus de livraison du courriel et sa
rcupration via POP et IMAP est prsente.
31.1 Introduction.
exim et sendmail sont des MTAs (mail transfer agents ou logiciels de trans-
fert du courriel). Un MTA est dmon qui, sur le port 25, coute les connexions
entrantes du courriel, gre les spoules1 [voir la page 239 propos du spoule en
termes gnraux] et place les messages dans une le (dans le cas d'exim, il s'agit
du rpertoire /var/spool/exim/input ; dans le cas de sendmail, il s'agit du r-
pertoire /var/spool/mqueue). Ensuite, le MTA renvoie les messages un autre
MTA ou les livre localement dans la bote lectronique d'un utilisateur. Donc, le
MTA est le logiciel par excellence qui manipule le courriel et assure son routage
ainsi que les livraisons de messages. A la section 11.2, nous avons vu comment se
connecter manuellement un MTA via telnet. Dans cet exemple-l, sendmail
(version 8.9.3) tait le MTA fonctionnant sur la machine mail.cranzgot.co.za.
sendmail est le premier MTA apparu sous Unix et il est de ce fait populaire.
Il est probablement ncessaire de savoir le congurer car de nombreuses entre-
prises l'emploient.2 Cependant, exim qui est beaucoup plus ais congurer
est tout--fait apte remplacer sendmail. Il y a au moins trois MTAs prf-
rables sendmail. Nous nous attacherons dcrire le minimum propos de
sendmail et tudier en dtail exim.
340
CHAPITRE 31. EXIM ET SENDMAIL. 341
/etc/aliases
/usr/bin/mailq
/usr/bin/newaliases
/usr/bin/rmail
/usr/lib/sendmail
/usr/sbin/sendmail
31.3.2 Transports.
La section relative au transport suit immdiatement celle contenant les op-
tions de conguration principales. Elle dnit diverses mthodes d'achemine-
ment du courriel. Nous nous rfrerons ces mthodes plus tard, dans le chier
de conguration. telnet sur le port 25 a transport un message par SMTP. Il
existe une autre mthode de transport qui consiste ajouter un message la
n de la liste du courriel. Ces mthodes sont reprsentes, respectivement, par
remote_smtp : et local_delivery :.
remote_smtp : cette mthode de transport prsente les sous-options suivantes :
driver la mthode relle d'acheminement.L'option driver = indique tou-
jours le type de transport, le redirecteur ou le routage.
hosts_override et hosts En utilisant ces deux options simultanment,
on passe outre toute liste d'htes qui a t reprise par des requtes
DNS MX. Par liste d'htes, il faut comprendre les machines ta-
blies partir de l'adresse courriel du destinataire, auxquelles nous
pourrions faire des livraisons par SMTP, mais que nous n'utilisons
pas.
local_delivery : ce type de transport prsente les options suivantes :
driver la mthode relle de acheminement. L'option driver = indique
toujours le type de transport, le redirecteur ou le routage.
le le chier ajouter au message de courriel. ${local_part} est rem-
plac par tout ce qui se trouve avant le caractre @ de l'adresse du
destinataire.
delivery_date_add, enveloppe_to_add, return_path_add sont
diverses indications placer dans les en-ttes.
group, mode_fail_narrower, mode divers rglages des droits.
A ce stade, il devrait tre vident, que ces deux mthodes sont eectivement
utilises. En ce qui concerne le MTA, les deux seules choses qui arrivent un
message sont (i) son envoi via SMTP un autre serveur ou (ii) son ajout la
le de courrier.
31.3.3 Redirecteurs.
Si un message arrive et qu'il est list dans local_domains, exim tente une
livraison locale. Ceci signie qu'exim fonctionne avec une liste de redirecteurs
jusqu' ce qu'il en trouve un qui n'choue pas. Le seul redirecteur list dans
notre conguration est localuser : avec local_delivery comme transport.
Ici, le mcanisme est donc simple : les messages ayant des adresses de destination
listes sous local_domain sont ajouts la bote lectronique de l'utilisateur.
31.3.4 Routeurs.
Si un message arrive et qu'il n'est pas list dans local_domains, exim tente
une livraison distante. De manire analogue ce qui est dcrit dans la sous-
section 31.3.3, exim utilise une liste de routeurs jusqu' ce qu'il en trouve un
qui n'choue pas.
CHAPITRE 31. EXIM ET SENDMAIL. 347
group = mail
mode = 0660
address_pipe :
driver = pipe
return_output
address_file :
driver = appendfile
delivery_date_add
envelope_to_add
return_path_add
address_reply :
driver = autoreply
end
#################### DIRECTORS CONFIGURATION ######################
# routers because of a self=local (not used in this configuration).
system_aliases :
driver = aliasfile
file = /etc/aliases
search_type = lsearch
user = mail
group = mail
file_transport = address_file
pipe_transport = address_pipe
userforward :
driver = forwardfile
file = .forward
no_verify
no_expn
check_ancestor
# filter
file_transport = address_file
pipe_transport = address_pipe
reply_transport = address_reply
# procmail director goes here <---
localuser :
driver = localuser
transport = local_delivery
end
#################### ROUTERS CONFIGURATION ########################
# widen_domains = sales.mycompany.com :mycompany.com
lookuphost
driver = lookuphost
transport = remote_smtp
# widen_domains =
literal :
driver = ipliteral
transport = remote_smtp
end
CHAPITRE 31. EXIM ET SENDMAIL. 349
procmail :
driver = pipe
command = /usr/bin/procmail -Y -d ${local_part}
procmail :
driver = localuser
transport = procmail
require_files = /usr/bin/procmail
/etc/init.d/exim stop
/etc/init.d/exim start
/etc/init.d/exim reload
Vous devriez toujours eectuer reload lorsque vous dsirez que le chier de
conguration soit relu. Le script de dmarrage (start) n'excute en ralit que
la commande exim -bd -q30m, qui indique exim de dmarrer en mode auto-
nome(standalone ), pour couter sur le port25 et excuter un runq toutes les 30
minutes (voir ci-dessous).
Pour faire en sorte qu'exim [mais ceci vaut pour beaucoup d'autres MTA]
eectue une boucle sur la le des messages en suspens et, qu'il prenne en consi-
dration ceux qui doivent tre livrs, eectuez :
runq
mailq
exim -qf
exim -qff
[root@cericon]# mailq
Om 320 14Epss-0008DY-00 <psheer@icon.co.za>
freddy@elmstreet.org
[root@cericon]# ls -l /var/spool/exim/input/
total 16
-rw------- 1 root root 25 Jan 6 11 :43 14 Epss-0008DY-00-D
-rw------- 1 root root 550 Jan 6 11 :43 14 Epss-0008DY-00H
-rw------- 1 root root 35 Jan 6 11 :43 14 Ept8-0008Dg-00-D
-rw------- 1 root root 530 Jan 6 11 :43 14 Ept8-0008Dg-00-H
montre clairement que les deux messages sont en attente de livraison. Les -
chiers se terminant par -H sont des en-ttes d'enveloppe (envelope headers )
tandis que celles se terminant par -D sont des corps de message. Le document
spec.txt vous montre comment interprter le contenu des chiers d'en-ttes.
N'ayez pas peur d'liminer (rm) manuellement les chiers de ce rpertoire,
mais faites-le par paires (supprimez la fois l'en-tte et le corps). Assurez-vous
qu'exim n'est pas en cours ce moment-l. Pour ce qui concerne l'exemple pr-
cdent, les commandes :
[root@cericon]# mailq
[root@cericon]#
MAILER-DAEMON : postmaster
abuse : postmaster
anonymous : postmaster
backup : postmaster
backup-reports : postmaster
bin : postmaster
daemon : postmaster
decode : postmaster
dns : postmaster
dns-admin : postmaster
dumper : postmaster
fetchmail-daemon : postmaster
games : postmaster
gnats postmaster
ingres : postmaster
info : postmaster
irc : postmaster
list : postmaster
listmaster : postmaster
lp : postmaster
mail : postmaster
mailer-daemon : postmaster
majordom : postmaster
man : postmaster
CHAPITRE 31. EXIM ET SENDMAIL. 352
manager : postmaster
msql : postmaster
news postmaster
nobody : postmaster
operator : postmaster
postgres : postmaster
proxy : postmaster
root : postmaster
sync : postmaster
support : postmaster
sys : postmaster
system : postmaster
toor : postmaster
uucp : postmaster
warnings : postmaster
web-master : postmaster
www-data : postmaster
Vous pouvez liminer bon nombre de ces alias. Pour qu'ils soient actifs, il faut
que les services correspondant soient en cours de fonctionnement alors qu'en
ralit sur votre systme, ils ne sont peut-tre mme pas installs par exemple,
games, ingres, etc. Les alias permettent deux choses : (i) prvoir quels utilisa-
teurs de courriel peuvent contacter l'administrateur, le cas chant ; (ii) capter
tout courrier envoy par les dmons du systme (par exemple, l'adresse cour-
riel de l'administrateur DNS est impose par les chiers de conguration DNS,
comme cela est expliqu au chapitre 41).
Notez bien qu'un alias dans le chier /etc/aliases ne doit pas avoir de
compte sur le systme : larry et arny ne doivent pas gurer dans /etc/passwd.
lectronique. L'envoi de spam est trs facile. Les spammeurs recherchent sur
l'internet des serveurs de courrier qui permettent de relayer leurs messages. Ils
leur envoyent 10.000 messages (disons) dont un relatif la manire d'obtenir
des photos d'adolescentes nues. Si vous faisiez cela, vous seriez un spammeur
passible de poursuites judiciaires. Malheureusement, pourvu que le spammeur
contrle seulement un peu ce qu'il fait, un administrateur peu souponneux ne
sera probablement pas mme de le traquer. Les spammeurs utilisent bien des
astuces.
Notez que le spam n'est pas seulement du courriel indsirable. Souvent, le
grand public pense que le courriel est analogue aux communications tlpho-
niques, par exemple. Dans le cas d'appels indsirables par tlphone, le caractre
intrusif de l'appel n'a lieu que lorsque vous dcrochez. Dans le cas du courriel,
vous pouvez liminer les messages. C'est pour cela que les ltres de messageries
sont utiles, ils bloquent le courriel provenant d'un (ou plusieurs) expditeur(s)
sur base de son (ou leurs) adresse(s) (voir procmailex(5)). [Lorsque le spam
envahit votre bote, cela devient un problme que vous devez traiter. Faites at-
tention : le fait de rpondre un spammeur en lui envoyant un message S'il
vous plat ne m'envoyer plus ... indique que vous tes vulnrable son spam et
que vous ne recevez pas beaucoup de courrier.].
Quand le courriel devient-il intrusif ? Cela dpend beaucoup du volume de
courrier reu. Par ailleurs, du fait que ce courriel provient souvent d'origines
direntes, vous ne pouvez vous en protger totalement l'aide de ltres agissant
sur le courriel de votre bote.
Typiquement, le pourriel commence par un Augmentez vos richesses
ds prsent, le spammeur s'empressant d'ajouter dans le corps du message :
Ceci n'est pas du spam. Vous recevez ce ml parce que vous tes sur
une liste d'adresses que j'ai achete. Vous avez accept de recevoir des
informations propos des opportunits professionnelles. Si ce n'est pas le
cas, acceptez nos excuses. Pour tre SOUSTRAIT de cette liste, rpondez
simplement avec le mot REMOVE dans la case sujet. Ainsi vous ne
recevrez plus de courrier de notre part.
Il va sans dire qu'il ne faut pas rpondre (certainement pas avec REMOVE
dans le sujet) ; autrement, vous indiquerez aux spammeurs que votre adresse est
valide.
headers_check_syntax
headers_sender_verify
sender_verify
receiver_verify
Rpondre : (Reply-To :) et
En provenance de : ( From :)
mais aussi, les adresses manipules par les commandes SMTP MAIL et RCPT pour
dterminer s'il s'agit de vritables adresses de courriel.
Le raisonnement la base de ce dispositif est que les spammeurs utilisent
souvent des en-ttes mal forms pour tromper le MTA de manire lui faire
envoyer des messages que, d'ordinaire, il n'enverrait pas. L'auteur du texte ori-
ginal anglais prcise qu'il ne sait pas exactement comment ces mesures sont
utilises par exim mais qu'il est un fait que les courriers sont rejets au moment
o l'change SMTP dbute.
31.9 Sendmail.
Le chier de conguration de sendmail est /etc/sendmail.cf. Ce format
de chier est un hritage des premiers serveurs Unix et des chiers de rfrence
sous le rpertoire /etc/mail/. Vous pouvez raliser la plupart des oprations
en modiant divers chiers sous /etc/mail/ sans tre confront la complexit
de /etc/sendmail.cf.
A l'instar de la plupart des MTAs fournis avec les distributions Linux, le
paquet sendmail fonctionne sans conguration pralable. Comme toujours, ce-
pendant, vous devrez ajouter une liste de serveurs-relais. Cette conguration se
fait dans le chier /etc/mail/access pour les versions suprieures ou gales
sendmail-8.10. Pour eectuer des relais partir de votre propre machine et
des machines de votre propre rseau 192.168.0.0/16, disons, aussi bien que du
domaine hosts.trusted.com, vous devez au moins avoir :
localhost.localdomain RELAY
localhost RELAY
127.0.0.1 RELAY
192.168 RELAY
trusted.com RELAY
donc impratif de toujours installer la version la plus rcente. Notez bien que
les versions plus anciennes ont un dfaut extrmement gnant : par dfaut, leur
conguration permet de faire du relai, d'o la ncessit d'une remise jour.
Voici une ressource pour utiliser les celles de sendmail, The Sendmail FAQ
sur http ://www.sendmail.org/faq/.
Chapitre 32
qu'il est peu intressant d'analyser, si ce n'est qu'il faut savoir qu'on y trouve
la documentation technique et celle destine l'utilisateur au cas o des infor-
mations pointues sont recherches.
32.1 Utilisation.
Lorsque vous dmarrez votre systme Linux, l'invite LILO : laquelle vous
passez des options d'amorage (boot ) est ache. Si vous presser la touche
., vous verrez s'acher une liste d'options. Le principe est de permettre
l'accs direntes installations Linux sur la mme machine ou l'accs des
systmes d'exploitation dirents sur direntes partitions d'un mme disque.
Plus tard, vous pourrez jeter un coup d'oeil /proc/cmdline pour voir quelles
sont les options d'initialisation (ou d'amorage) utilises, y compris les options
par dfaut.
1 NdT : il existe un systme appel GRUB (GRand Unied Bootloader ) qui possde un mini-
shell et des fonctionnalits plus grandes que celles de lilo.
357
CHAPITRE 32. DMARRAGE, LILO ET INITRD. 358
32.2 Thorie.
32.2.1 Squence de dmarrage du noyau.
Un noyau Unix, pour permettre l'amorage, doit tre charg en mmoire
alors qu'il se trouve sur le disque dur. Il doit aussi tre excut. L'excution
entrane la dcompression du code lui-mme et le lancement du programme
[Les termes initialisation ou amorage (boot en anglais) viennent du fait qu'un
ordinateur ne peut commencer l'excution d'un programme sans code, et que le
code ne peut tre plac en mmoire sans l'intervention d'un autre programme
NdT : d'o l'importance d'un chargeur de dmarrage]. Aprs avoir t charg,
dcompress et install dans la mmoire, le noyau initialise les priphriques
matriels. Ensuite, il monte le systme de chiers sur une partition dtermine.
C'est seulement l'issue de cette tape que le noyau excute /sbin/init pour
dmarrer le systme d'exploitation Unix.
32.2.4 Limitations.
Les BIOS ont hrit de svres limitations cause du manque de prvoyance
de leurs concepteurs. Premirement, certains BIOS ne supportent pas plus d'un
IDE [du moins selon la documentation de lilo].
La seconde limitation est importante. Comme expliqu la sous-section
32.2.2, lilo utilise les fonctions du BIOS pour accder aux IDEs, mais le BIOS
d'un PC est souvent limit n'accder qu'aux 1024 premiers cylindres du disque.
Donc, ce que lilo lit doit se trouver dans les 1024 premiers cylindres, autre-
ment dit, les 500 premiers Mo de l'espace disque. Voici une liste des chiers qui
devraient se trouver sous cette limite :
1. /boot/vmlinuz
2. divers chiers de lilo de type /boot/*.b
3. tout secteur d'amorage de partition non-Linux sur lequel vous voulez
lancer un amorage.
A contrario, une partition racine de Linux peut rsider n'importe o parce que
le programme du secteur d'amorage ne lit jamais cette partition sauf pour les
chiers mentionns ci-dessus. Un scnario classique pour l'administrateur : le
rpertoire /boot sur une petite partition de moins de 500 Mo avec la partition
/ situe au-del de la limite des 500 Mo. Reportez-vous la page 198.
Notez que les nouveaux BIOS LBA supportent plus que 512 Mo (en fait,
jusqu' 8 Go). L'auteur prcise qu'il ne compte pas sur cette caractristique.
boot=/dev/hda
prompt
timeout = 50
compact
vga = extended
lock
password = jAN])Wo
restricted
append = ether=9,0x300 ; 0xd0000, 0xd4000, eth0 hisax=1,3,5, 0xd8000, 0xd80,
HiSax
CHAPITRE 32. DMARRAGE, LILO ET INITRD. 360
image = /boot/vwlinuz-2.2.17
label = linux
root = /dev/hda5
read-only
image = /boot/vmlinuz-2.0.38
label = linux-old
root = /dev/hda6
read-only
other = /dev/hda2
label = win
table = /dev/hda
[root@cericon]# lilo
Added linux *
Added linux-old
Added win
Il en rsulte une sauvegarde du MBR existant, si cela n'a pas t fait prc-
demment, dans le chier /boot/boot.0300 (o 0300 correspond aux numros
majeur et mineur).
A prsent, parcourons les options :
boot priphrique d'amorage. Il s'agit soit de /dev/hda soit /dev/sda, le plus
souvent.
prompt ache une invite derrire laquelle l'utilisateur peut entrer le systme
d'exploitation initialiser ;
timeout le nombre de dizimes de seconde d'achage de l'invite (ce dlai pass,
la premire image est initialise).
compact regroupe des secteurs adjacents, ce qui permet un chargement beau-
coup plus rapide du noyau.
vga supposons qu'on veuille un mode texte 80x50. Vos scripts de dmarrage
peuvent remetttre ceci la valeur 80x25. vga recherche rcursivement
dans /etc/rc.d tout chier contenant textmode.
lock xe le systme d'exploitation amorcer par dfaut [il s'agit d'une fonc-
tionnalit qui est souvent utilise].
password requiert un mot de passe pour lancer l'initialisation.
restricted requiert un mot de passe seulement si quelqu'un essaie d'entrer des
options spciales l'invite LILO :.
append il s'agit d'une option d'amorage du noyau . Les options d'amorage
du noyau sont importantes pour lilo et les modules du noyau. Elles sont
discutes la section 43.5. Elles ne sont pratiquement jamais ncessaires
dans les installations simples.
image un noyau Linux amorcer.
CHAPITRE 32. DMARRAGE, LILO ET INITRD. 361
dd if=/boot/vmlinuz-2.2.17 of=/dev/fd0
rdev /dev/fd0 /dev/hda5
# !/bin/sash
aliasall
boot=/dev/sda
prompt
timeout = 50
compact
vga = extended
linear
image = /boot/vmlinuz-2.2.17
initrd = /boot/initrd-2.2.17
label = linux
root = /dev/sda1
read-only
0 Halt.
1 Mode mono-utilisateur.
2 Mode multi-utilisateur, sans systme de chiers
rseau (NFS).
3 Mode multi-utilisateur complet.
4 Non-utilis.
5 Station de travail X-Window (identique 3 +
cran graphique).
6 R-amorage (reboot).
7 Non-dni.
365
CHAPITRE 33. INIT, ?GETTY ET NIVEAUX D'EXCUTION UNIX. 366
8 Non-dni.
9 Non-dni.
L'ide sous-jacente est qu'init commence un niveau d'excution donn qui
peut tre modi de manire manuelle par le super-utilisateur. init utilise une
liste de scripts pour dmarrer et arrter chacun des nombreux services asso-
cis chaque niveau d'excution. Ces scripts sont /etc/rc ?.d/KNNservice ou
/etc/rc ?.d/SNNservice [Sur certains sytmes, il s'agit de /etc/rc.d/rc ?.d/-
...] o NN , K ou S est un prxe forant l'ordre d'excution (en eet, les chiers
sont ordinairement excuts selon l'ordre alphabtique).
Tous ces scripts prsentent start et stop comme options de la ligne de
commandes, et ce pour initier ou arrter un service.
Par exemple, lorsque init passe du niveau 3 au niveau 5 (disons), il excute
les scripts particuliers de /etc/rc3.d/ et /etc/rc5.d pour activer et dsactiver
les services idoines. Par exemple, ceci peut impliquer :
/etc/rc3.d/S20exim stop
33.2 /etc/inittab.
Le chier de conguration d' init s'appelle /etc/inittab et il est lu
chaque amorage.
id :3 :initdefault
si : :sysinit :/etc/rc.d/rc.sysinit
10 :0 :wait :/etc/rc.d/rc 0
11 :1 :wait :/etc/rc.d/rc 1
12 :2 :wait :/etc/rc.d/rc 2
13 :3 :wait :/etc/rc.d/rc 3
14 :4 :wait :/etc/rc.d/rc 4
15 :5 :wait :/etc/rc.d/rc 5
16 :6 :wait :/etc/rc.d/rc 6
ud : :once :/sbin/update
Les lignes sont constitues de champs spars par des doubles-points. En voici
la signication (voir inittab(5)) :
id :3 :initdefault : cette directive indique que le niveau d'excution par dfaut
est 3. C'est le niveau dans lequel on arrive aprs l'tape d'initialisation (il
s'agit du mode console). Ce champ est habituellement 3 ou 5 (5 permet
d'accder au mode graphique).
si : :sysinit :/etc/rc.d/rc.sysinit cette directive indique d'excuter un script
l'amorage pour initialiser le systme. Si vous analysez le chier /etc/-
rc.d/sysinit, vous y verrez un long script qui permet d'eectuer les
oprations suivantes : montage du systme de chiers proc ; initialisation
du clavier, des polices de caractres des consoles, du domaine NIS, du
nom d'hte et de la partition swap ; excution d'isapnp et de depmod
-a ; nettoyage du chier utmp et d'autres chiers. Sur Debian, il y a
un script /etc/init.d/rcS qui eectue chacune de ces oprations sous
/etc/rcS.d/ [comme d'habitude, Debian s'organise autour de la solution
la plus ecace, la plus nette et la plus lgante].
13 :3 :wait :/etc/rc.d/rc 3 Le premier champ est un descripteur (sa valeur
importe peu). Le second est une liste des niveaux d'excution sous lesquels
le script dcrit dans le dernier champ doit tre invoqu : dans le cas pr-
sent, /etc/rc.d/rc 3 doit tre excut chaque fois qu'on entre dans le
niveau 3. Le terme wait signie qu'il faut faire une pause jusqu' ce que
/etc/rc.d/rc ait ni son excution. Le contenu du chier /etc/rc.d/rc
indique que ce dernier excute simplement les scripts sous /etc/rc ?.d/
de manire approprie pour un changement de niveau d'excution.
ud : :once :/sbin/update cette instruction vide le cache du disque chaque
changement de niveau d'excution.
1 :2345 :respawn :/sbin/getty 38400 tty1 cette ligne permet d'excuter la
commande /sbin/getty 38400 tty1 lorsqu'on entre dans les niveaux al-
lant de 2 5. Le terme respawn indique de recommencer l'excution de
cette commande si le processus meurt.
x :5 :respawn :/usr/bin/X11/xdm -nodaemon cette instruction indique
qu'il faut excuter la commande /usr/bin/X11/xdm -nodaemon quand
on entre dans le niveau 5. Il s'agit du programme de connexion en mode
graphique du systme X-Window.
telinit q
telinit q
shutdown -h now
shutdown -r now
linux 1
ou
linux single
pour entrer en mode mono-utilisateur lorsque vous initialisez votre systme. Sur
un systme en cours de fonctionnement, vous passez en mode mono-utilisateur
de cette manire :
telinit S
telinit <N>
Notez que getty, agetty, fgetty et mingetty sont divers mises en oeuvre
de getty. La trace la plus visible de l'excution d'init est qu'elle engendre une
CHAPITRE 33. INIT, ?GETTY ET NIVEAUX D'EXCUTION UNIX. 369
invite de connexion sur les consoles virtuelles de Linux. C'est getty (ou parfois
mingetty) tel que spci dans inittab qui ache cette invite. Une fois
l'identiant introduit, getty invoque le programme /bin/login, qui prsente
une invite saisir le mot de passe.
Le programme login (abord la sous-section 12.7.1) lance un shell. Quand
ce shell meurt (du fait que l'utilisateur quitte sa session en utilisant la commande
exit), getty engendre nouveau une invite de connexion.
sera capable d'ouvrir une connexion sur un terminal connect un port srie sur
/dev/ttyS4. Voir la page 43.6.12 pour toute information sur la conguration
des cartes srie multiports.
(Les priphriques Linux de /dev/tty1 /dev/tty12 tels qu'utiliss par
getty mulent des terminaux classiques de cette faon.)
CHAPITRE 33. INIT, ?GETTY ET NIVEAUX D'EXCUTION UNIX. 370
[root@cericon]# dip -t
DIP : Dialup IP protocol Driver version 3.3.7o-uri (8 Feb 96)
Written by Fred N. van Kempen, MicroWalt Corporation.
remote.dialup.private login :
Notez que ceci est une session de connexion qui n'a rien voir avec une com-
munication PPP.
debug 4
rings 3
speed 57600
fax-id 27 21 7654321
agit avec :
/etc/mgetty+sendfax/nouveau_fax
qui est un script que mgetty applique discrtement lorsqu'une nouvelle tlcopie
arrive. Cela peut tre utilis pour convertir des tlcopies en un chier (comme
les chiers .gif [les chiers .png sont meilleurs]) lisible par des programmes de
bureautique. Le script /etc/mgetty+sendfax/nouveau_fax transfre les tlco-
pies dans /home/fax/ sous forme de chiers .gif auxquels tous les utilisateurs
peuvent accder [il s'agit d'une variante de ce qu'ont crit les contributeurs de
mgetty]. Remarquez comment le script tire parti du programme convert ap-
partenant au paquet logiciel Imagemagic :
# !/bin/sh
# you must have pbm tools and they must be in your PATH
PATH=/usr/bin :/bin :/usr/X11R6/bin :/usr/local/bin
HUP=$1
SENDER=$2
PAGES=$3
shift 3
P=1
CHAPITRE 33. INIT, ?GETTY ET NIVEAUX D'EXCUTION UNIX. 372
exit 0
Chapitre 34
Envoi de tlcopies.
verbose y
debug 5
fax-devices ttyS0
fax-id 27 21 7654321
max-tries 3
max-tries-continue y
373
CHAPITRE 34. ENVOI DE TLCOPIES. 374
travail d'impression via le tlcopieur cible aprs avoir demand son numro
tlphonique grce la commande gdialog. [gdialog est une partie du paquet
gnome-utils]. Une entre idoine dans /etc/printcap est :
fax :\
:sd=/var/spool/lpd/fax :\
:mx#0 :\
:sh :\
:lp=/dev/null :\
:if=/var/spool/lpd/fax/fax_filter.sh :
# !/bin/sh
echo
echo
echo $@
function error()
{
gdialog --title Send Fax --msgbox $1 10 75 || \
echo 'Huh ? no gdialog on this machine'
cd /
rm -Rf /tmp/$$fax || \
gdialog \
--title Send Fax \
--msgbox rm -Rf /tmp/$$fax failed \
10 75
exit 1
}
if /usr/bin/gdialog \
-- title Send Fax \
CHAPITRE 34. ENVOI DE TLCOPIES. 375
TEL=`< TEL`
test -z $TEL && error 'no telephone number given'
cat fax.ps | gs -r204x98 -sOutputFile=- -sDEVICE=faxg3 -dBATCH -q - \
1>fax.ps.g3 || error 'gs failed'
ls -al /var/lock/
/usr/sbin/sendfax -x 5 -n -l ttyS0 STEL fax.ps.g3 || \
error sendfax failed
rm -Rf /tmp/$$fax
exit 0
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
exit (1) ;
}
/* execute sendfax */
a[0] = /usr/sbin/sendfax ;
execvp (a[0], a) ;
/* exit on failure */
perror (sendfax_wrapper : failed to execute /usr/sbin/sendfax) ;
exit (1) ;
}
uucp et uux.
uucp est une commande permettant de copier un chier d'un systme Unix
sur un autre systme Unix. Le programme uux excute une commande sur une
autre machine Unix, mme si cette commande est en train de recevoir des don-
nes de stdin sur le systme local. uux est extrmement utile pour automatiser
de nombreuses fonctions distribues, comme le courriel ou les nouvelles (news ).
Les commandes uucp et uux proviennent du paquet uucp (Unix-to-Unix
Copy ). L'intrt d'uucp peut sembler mineur par rapport aux commandes mo-
dernes telles que ssh, scp et mme les programmes de transfert FTP. Cepen-
dant, uucp quoiqu'tant un peu ancien possde des caractristiques essen-
tielles, comme celle d'excuter un travail en dir, en plaant ce dernier dans
une le d'attente et en recontactant la machine distante durant la nuit par
exemple pour terminer l'opration.
uucp est antrieur l'internet ; il a t initialement utilis pour mettre en
oeuvre un systme de courriel exclusivement bas sur les lignes tlphoniques et
les modems. Par consquent, ce programme possde des protocoles labors pour
assurer que votre chier et/ou votre commande excute(nt) bien ce pourquoi il
(elle) est destin(e), avec une tolrance maximale quant au nombre d'erreurs et
un nombre minimum de transmissions. C'est pourquoi, uucp devrait toujours
tre utilis pour des tches automatises lorsque des connexions non-ables (par
modems) sont mises en jeu. La version d'uucp associe aux distributionx Linux
est appele Taylor UUCP.
Il est trs important de se rappeler que lors d'une connexion interrompue
par un problme de ligne, uucp n'limine pas les donnes dj transmises. Donc,
quels que soient la lenteur ou les erreurs de communication, le travail progresse
sans reprendre zro. Comparez cela aux protocoles SMTP ou POP3/IMAP :
toute coupure de transmission exige de recommencer l'opration depuis le dbut.
377
CHAPITRE 35. UUCP ET UUX. 378
ce qui excute rmail sur le systme distant appel cericon et alimente la com-
mande rmail avec un petit texte. Notez bien que vous devez placer le signe !
entre guillemets simples pour en viter l'interprtation par le shell. Ces com-
mandes choueront presque toujours avec un message permission denied by
remote. L'erreur sera rapporte dans un message de courriel l'utilisateur qui
excute la commande.
35.2 Conguration.
La documentation d'uucp est au format HTML sur RedHat (/usr/doc/-
uucp/version/uucp.html ou /usr/share/...), et au format info sur Debian
et RedHat. Voyons prsent une conguration typique de base.
Le paquet uucp a t l'objet de nombreuses rvisions depuis l'apparition
des premiers rseaux communiquant par modems. Les dernires ditions GNU
incluses dans Linux ont un format de chier de conguration qui dire trs
certainement des premires versions d'uucp. Les rseaux de communications
actuels combinent l'usage d'uucp et des communications PPP (point--point)
classiques. De ce fait, ils n'exploitent pas toutes les facilits de communication
propres uucp. Par exemple, si vous dployez un rseau d'htes distants qui
utilisent des modems, ces htes devraient toujours utiliser uucp pour charger
(upload ) et rceptionner le courriel, plutt que POP3/IMAP ou SMTP, ceci,
en raison des problmes de transmission voqus plus haut. En d'autres mots,
uucp fonctionne comme un service TCP ordinaire tout en tant plus tolrant
aux erreurs de communication.
Pour congurer uucp comme un service TCP, modiez /etc/inetd.conf
comme suit :
service uucp
{
only_from = 127.0.0.1 192.168.0.0/16
socket_type = stream
wait = no
user = uucp
server = /usr/lib/uucp/uucico
server_args = -l
disable = no
}
machine1login pAsSwOrD123
system machine1
call-login *
call-password *
commands rmail
protocol t
Toutefois, il peut y avoir autant d'entre qu'il est jug utile. Les seules in-
formations que server1 doit connatre propos de machine1 sont l'utilisateur
et son mot de passe, et aussi le protocole. Le caractre * indique qu'il faut ex-
traire de /etc/uucp/passwd le nom d'utilisateur et son mot de passe. Le terme
protocol t indique qu'il faut utiliser un protocole de correction (comme c'est
aussi le cas pour TCP). L'option commands prend une liste (avec sparation par
un espace) de commandes permises. Pour des raisons de scurit, les commandes
non-rpertories dans cette liste ne sont pas excutes, d'o l'origine du signal
permission denied by remote mentionn la section 35.1.
Le chier /etc/uucp/sys sur machine1 contient :
system server1
call-login *
call-password *
time any
port TCP
address 192.168.3.2
CHAPITRE 35. UUCP ET UUX. 380
protocol t
port TCP
type tcp
uucico
Bien que nous ayons mis un travail en attente, rien ne sera transfr tant que
le programme uucico ne sera excut (uucico est un acronyme d'Unix-to-Unix
copy in copy out ). Le principe est qu' la fois server1 et machine1 peuvent
avoir mis en attente une certaine quantit de travaux, si bien que quand uucico
est en cours sur les deux ordinateurs et en ngociation avec chacune d'elles,
les travaux des deux machines sont traits un un, et cela quelle que soit la
machine qui ait initi la connexion.
D'ordinaire, uucico est lanc par le dmon crond (voir le chapitre 38) toutes
les heures.1 Vous pouvez lancer tail -f /var/uucp/Log lorsque vous venez
d'excuter uucico manuellement de cette manire :
Plus le degr de dbogage est lv, plus le contenu de Log est charg. La com-
mande ci-dessus communique de manire --forcee avec le --systeme server1
tout moment aprs qu'ait eu lieu la dernire communication. Usuellement, il
1 NdT : crond est un dmon qui lance rcurremment des commandes ou des scripts des
heures, des jours, etc. donns. Il est distinguer d'at qui eectue une opration une seule fois
(voir le chapitre 38).
CHAPITRE 35. UUCP ET UUX. 381
et aussi la ligne :
port ACU
type modem
device /dev/ttyS0
dialer mon_modem
speed 57600
ACU est une terminologie ancienne qui dsigne l'unit d'appel automatique (c'est
dire le modem : Automatic Calling Unit ). Nous devons apporter des prcisions
supplmentaires pour les ports srie, telles que le priphrique (/dev/ttyS0
pour un modem sur COM1) et la vitesse de transfert sur la ligne srie. Il est
galement ncessaire de prciser un moyen d'initialiser le modem : d'o l'option
dialer mon_modem. Un chier /etc/uucp/dial devrait contenir une entre cor-
respondant mon_modem comme ceci [cet exemple suppose qu'une initialisation
AT&F1 est susante] :
dialer mon_modem
chat AT&F1\r\d\c OK\r ATDT\D CONNECT
chat-fail RING
chat-fail NO\sCARRIER
CHAPITRE 35. UUCP ET UUX. 382
chat-fail ERROR
chat-fail NO\sDIALTONE
chat-fail BUSY
chat-fail NO\sANSWER
chat-fail VOICE
complete \d\d+++\d\dATH\r\c
abort \d\d+++\d\dATH\r\c
Nous verrons davantage de dtails sur les modems lors de l'analyse de pppd
au chapitre 42. Une fois le modem correctement spci, nous pouvons modier
l'entre dans le chier sys en :
system server1
call-login *
call-password *
time any
port ACU
phone 555-6789
protocol g
Les mmes commandes uux devraient maintenant fonctionner lors des commu-
nications.
exim_group = mail
end
#################### TRANSPORTS CONFIGURATION #####################
uucp :
driver = pipe
user = nobody
command = /usr/bin/uux - --nouucico ${host} !rmail \
${local_part}@${domain}
return_fail_output = true
local_delivery :
driver = appendfile
file = /var/spool/mail/${local_part}
delivery_date_add
envelope_to_add
return_path_add
group = mail
mode_fail_narrower =
mode = 0660
end
#################### DIRECTORS CONFIGURATION ####################
localuser :
driver = localuser
transport = local_delivery
end
#################### ROUTERS CONFIGURATION ######################
touucp :
driver = domainlist
route_list = * server1
transport = uucp
end
#################### RETRY CONFIGURATION ########################
* * F,2m,1m
end
Sur la machine appele server1, exim doit tre excut comme serveur de
courriel vritable de manire acheminer correctement le message vers sa des-
tination. Naturellement, sur server1, rmail est l'expditeur ; par consquent,
du point de vue d'exim, le message semble lui venir de la machine locale. Ceci
signie qu'il n'y a pas de conguration supplmentaire requise pour supporter
le courriel provenant de la commande uux.
Notez que vous pouvez ajouter d'autres domaines votre route_list de
faon que vos communications aient lieu directement sur la machine rceptrice.
Par exemple :
system machine2
call-login *
call-passwd *
time any
port ACU
phone 555-6789
protocol g
system machine3
call-login *
call-passwd *
time any
port ACU
phone 554-3210
protocol g
L'option --master indique uucico d'eectuer une boucle parmi les travaux
en attente et d'appeler toutes les machines pour lesquelles des travaux sont en
attente. Cela se fait toutes les heures. La seconde ligne eectue une commande
vide trois fois par jour en ce qui concerne la machine server1. Ceci force uucico
contacter server1 au moins trois fois par jour comme s'il y avait un travail
raliser. L'ide est de trouver les travaux qui proviendraient d'autres sources.
Ce processus est connu sous le nom de cration de poll le.
De ce que nous venons de voir, il ressort clairement que vous pouvez utiliser
uucp sur TCP grce une liaison initie par le dmon pppd. Si la communication
est tablie la demande, un appel uucp sera dclench et il en rsultera une
connexion TCP directe vers l'hte distant. C'est communment le cas quand
des systmes satellites contactent un fournisseur de services internet qui n'a pas
d'quipement uucp. Pour satisfaire la demande, un serveur uucp est dploy. Le
serveur a une connexion internet permanente et coute sur TCP tout transfert
uucp.
Chapitre 36
Le systme de chiers
LINUX.
Ce chapitre est une traduction du texte original intitul Filesystem Hierarchy
Standard. Un reformatage mineur et une modication de la numrotation ont
t raliss (adaptation au prsent document). L'original peut tre obtenu
l'adresse http ://www.pathname.com/fhs/.
Si vous vous tes dj pos les questions O doit se trouver le chier xxx
dans mon systme de chiers ? ou Que contient le rpertoire yyy ?, lisez ce do-
cument. Vous pouvez le considrer comme le n mot en matire d'organisation
du systme de chiers Linux. Bien qu'il constitue une rfrence pour les per-
sonnes construisant des distributions Linux, tous les administrateurs pourront
tirer avantage des rgles et des explications fournies par le document.
Sommaire
387
CHAPITRE 36. LE SYSTME DE FICHIERS LINUX. 388
Tous les marques dposes et copyright sont la proprit de leurs auteurs, sauf indication.
L'utilisation d'un terme dans ce document ne devrait pas tre considre comme
susceptible d'aecter la validit d'une ou l'autre marque dpose.
.
Copyright (C) 1994-2000 Daniel Quinlan
Copyright (C) 2001 Paul 'Rusty' Russell
La permission est accorde de raliser et de distribuer des copies in extenso du prsent
texte condition que les droits d'auteurs et la notice de droits gurent telles qu'elles sur
toutes les copies.
La permission est accorde de copier et de distribuer des versions modies du prsent
texte sous les mmes conditions que celles s'adressant aux copies in extenso , pourvu que
la page du titre contiennne l'indication qu'il s'agit d'un texte modi, tout en incluant une
rfrence l'dition originale et, pourvu que le rsultat en entier des modications soit
distribu avec une notice de droits identiques au texte original.
La permission est accorde de copier et de distribuer des traductions du prsent texte dans
une autre langue, sous couvert des conditions prcdemment dcrites pour les versions
modies, sauf si la notice des droits peut tre tablie dans une traduction approuve par
le propritaire des droits d'auteur.
CHAPITRE 36. LE SYSTME DE FICHIERS LINUX. 389
36.1 Introduction.
36.1.1 Objectifs.
Cette norme permet :
aux logiciels de localiser des chiers et rpertoires installs, et
aux utilisateurs de localiser des chiers et rpertoires installs.
Nous pratiquons de cette manire en :
indiquant les principes de base pour chaque zone du systme de chiers,
indiquant les chiers et rpertoires minimaux ncessaires,
numrant les exceptions ces principes,
numrant les cas spciaux pour lesquels il y a des conits historiques.
Le document Systme de chiers normalis est utilis par :1
les fournisseurs de logiciels indpendants crant des applications conformes
au SFN, et qui travaillent avec des distributions non-conformes ce der-
nier,
aux dveloppeurs de systmes d'exploitation conformes au SFN,
aux utilisateurs an qu'ils maintiennent un systme conforme au SFN.
36.1.2 Conventions.
La police Courier est utilise pour les noms de chiers et de rpertoires.
Les composants variables des noms de chiers sont reprsents en tant en-
tours des caractres "<" et ">", <ainsi>. Les adresses de courrier lectronique
sont aussi entoures de "<" et ">" mais sont crites dans la police trandition-
nelle.
Les composants optionnels des noms de chiers sont entours entre les ca-
ractres "[" et "]" et peuvent tre combins avec la convention "<" et ">".
Par exemple, si un chier existant pouvait tre trouv avec ou sans extension,
il pourrait tre reprsent par <nomfichier>[.<extension>].
36.3.2 Conditions.
Il est requis que les rpertoires suivants, ou les liens symboliques pointant
vers ces rpertoires se trouvent dans / :
36.3.4.2 Conditions.
Il ne peut y avoir de sous-rpertoires dans /bin. Les commandes suivantes
ou les liens symboliques pointant vers ces commandes doivent se trouver dans
le rpertoire /bin.
36.3.7.2 Conditions.
Aucun binaire ne peut tre plac sous /etc. Les rpertoires suivants, ou les
liens symboliques vers ces rpertoires, doivent se trouver dans /etc :
4 Sur certaines machines de type i386, il peut s'avrer ncessaire que /boot soit plac sur une
partition spare se trouvant sous le 1024eme cylindre du priphrique d'amorage en raison
de contrainte matrielle.
Certains systmes MIPS exigent une partition /boot monte avec un systme de chiers MS-
DOS ou quelqu'autre systme de chiers accessible par un progiciel (rmware ). Ceci peut
conduire des restrictions par rapport aux noms de chiers utilisables l'intrieur de /boot
( ne vaut que pour les systmes concerns).
5 L'ensemble des scripts invoqus pendant le dmarrage peut tre de type System V, BSD
ou autre. Des spcications ultrieures dans ce domaine peuvent tre ajoutes aux versions
future de la prsente norme.
CHAPITRE 36. LE SYSTME DE FICHIERS LINUX. 397
Conditions. Les chiers suivants, ou les liens symboliques vers ces chiers,
doivent tre logs dans /etc/X11 si le sous-systme correspondant est install :8
Xconfig chier de conguration des pre-
mires versions d'XFree86 (op-
tionnel)
XF86Config chiers de conguration pour les
versions 3 et 4 d'XFree86 (op-
tionnel)
Xmodmap chier de modications du cla-
vier d'X11 (optionnel)
Les sous-rpertoires de /etc/X11 peuvent inclure ceux d'xdm et de tous les
autres programmes qui les requirent (certains gestionnaires de fentres, par
exemple).9
Nous recommandons que ces gestionnaires de fentres avec un seul chier
de conguration intitul .*wmrc nomment ce dernier : system.*wmrc ( moins
qu'il n'y ait une dnomination trs largement rpandue). Nous recommandons
de ne pas utiliser de sous-rpertoire. Tous les sous-rpertoires des gestionnaires
de fentres doivent tre nomms de manire identique au binaire du gestionnaire
utilis rellement.
ment peut dir. Donc, aucun programme ne devrait se trouver cet endroit.12
36.3.9.2 Conditions.
Au minimum, les modles suivant de noms de chiers sont ncessaires (il
peut s'agir des chiers ou des liens symboliques pointant sur les noms) :
36.3.10.2 Conditions.
Si un ou plusieurs de ces rpertoires existe(nt), les conditions s'appliquant
leur contenu sont les mmes que celles pour le rpertoire /lib, sauf que
/lib<qual>/cpp n'est pas requise.16
36.3.12.2 Conditions.
Les rpertoires /opt/bin, /opt/doc, /opt/include, /opt/info, /opt/lib
et /opt/man sont rservs l'usage de l'administrateur d'un systme local.
Principe. L'utilisation de /opt pour les logiciels supplmentaires est une pra-
tique bien tablie dans la communaut Unix. L'interface d'applications binaires
de System V [AT&T 1990], base sur System V Interface Denition (Third
Edition), fournit une structure /opt trs similaire celle dnie dans ce docu-
ment.
Le standard intitul Intel Binary Compatibilty Standard v. 2 (iBCS2) four-
nit galement une structure analogue celle de /opt.
Gnralement, toute donne requise pour supporter un paquet sur un sys-
tme doit se trouver dans /opt/<paquet>, en ce compris les chiers prvus pour
tre copis dans /etc/opt/<paquet> et /var/opt/<paquet> aussi bien que les
rpertoires rservs dans /opt.
Les restrictions mineures sur les distributions utilisant /opt sont ncessaires
car des conits sont possibles entre les logiciels installs en mode local et ceux
de la distribution, en particulier dans le cas des noms de chemins tablis de
certaines bibliothques binaires.
36.3.14.2 Conditions.
La commande suivante, ou le lien symbolique vers cette commande, doit se
trouver dans /sbin.
doit tre crit. Toute information variable dans le temps ou qui est spcique
de la machine doit tre crite ailleurs.
Les paquets logiciels ne doivent pas utiliser un sous-rpertoire direct de l'ar-
borescence de /usr.
36.4.2 Conditions.
Les rpertoires suivants, ou les liens vers ces rpertoires, sont requis dans
/usr :
Lorsqu'un des liens sus-mentionns n'est plus ncessaire, il peut tre supprim.
CHAPITRE 36. LE SYSTME DE FICHIERS LINUX. 406
En gnral, les logiciels ne doivent pas tre installs ou grs via les liens symbo-
liques. Ces derniers sont destins aux utilisateurs seulement. La dicult est lie
aux versions antrieures du systme X-Window. Dans les priodes de transition,
il est impossible de dterminer quelle version est utilise.
Les chiers suivants, ou les liens symboliques pointant vers ces chiers,
doivent se trouver dans /usr/bin, si le sous-systme correspondant est install :
36.4.9.2 Conditions.
Les rpertoires suivants, ou les liens symboliques pointant vers ces rper-
toires, doivent se trouver dans /usr/local :
/usr/share n'est gnralement pas prvu pour tre partag entre des systmes
d'exploitation dirents ni par des versions direntes du mme systme d'ex-
ploitation.
Tout programme ou paquet qui contient ou requiert des donnes qui ne
doivent pas tre modies devrait enregistrer ces donnes dans /usr/share (ou
/usr/local/share, si ce programme ou ce paquet est install localement). A
cet gard, il est recommand qu'un sous-rpertoire soit utilis dans /usr/share.
Les donnes des jeux enregistres dans /usr/share/games doivent tre pu-
rement statiques. Tous les chiers modiables, tels que les chiers de rsultats,
les journaux des parties, etc., devraient tre placs dans /var/games.
36.4.11.2 Conditions.
Les rpertoires suivants, ou les liens symboliques vers ces rpertoires, doivent
se trouver dans /usr/share :
Options spciques. Les chiers suivants, ou les liens symboliques vers ces
chiers, doivent tre prsents dans /usr/share/dict, si le sous-systme corres-
pondant est install :
Les sites qui requirent la fois les orthographes anglaise et amricaine si-
multanment peuvent lier words /usr/share/dict/american-english ou
/usr/share/dict/british-english.
Les dictionnaires associs aux autres langues peuvent tre ajouts en substi-
tuant le mot english comme ceci : /usr/share/dict/french ou /usr/share/-
dict/danish, etc. Si possible, ces dictionnaires devraient utiliser un jeu de ca-
ractres ISO-8859 appropri aux langues en question. Si possible (mais cela ne
l'est pas toujours), le jeu de caractre Latin1 (ISO-8859-1) devrait tre utilis.
Les autres dictionnaires, s'il y a en a, doivent se retrouver dans ce rpertoire-
ci.
stockage et les rfrences ces pages de manuel. Les facteurs pertinents com-
prennent la langue (y compris les dirences de nature gographique) et le jeu
de code de caractres.
La dnomination des sous-rpertoires de langues de /usr/share/man est
base sur l'appendice E de la norme POSIX 1003.1 qui dcrit les chanes d'iden-
tication locales ; il s'agit de la mthode la plus largement accepte pour dcrire
un environnement culturel linguistique. La chane <string> est :
Le champ <langue> doit tre extrait de la norme ISO 639 (un code de re-
prsentation des noms de langues). Il doit tre constitu de deux caractres et
de lettres minuscules, exclusivement.
Le champ <pays> doit tre constitu de deux lettres du code ISO 3166 (un
code dsignant les pays), si possible. (La plupart des personnes connaissent les
codes deux lettres dsignant les pays dans les adresses de courriel).31 Ce champ
doit comprendre deux caractres et des lettres majuscules, exclusivement.
Le champ <jeu_de_caractre> doit tre conforme la norme dcrivant
le jeu de caractres. Si le champ <jeu_de_caractre> n'est constitu que de
chires, le nombre qu'ils forment appartient au code international dcrivant le
jeu de caractres. Il est recommand d'utiliser une reprsentation numrique
autant que faire se peut (normes ISO, en particulier), sans inclure de symboles
de ponctuation ni de lettres minuscules.
Un paramtre indiquant la <version> peut tre plac aprs le champ <jeu_-
de_caractre>, le dlimiteur tant une virgule. Ceci peut tre employ pour
faire une distinction linguistique ; par exemple, dans le cas de dictionnaires.
Cette norme recommande de ne pas utiliser le champ <version>, sauf si cela
est rellement ncessaire.
Les systmes qui utilisent une seule langue et un seul code pour toutes les
pages du manuel peuvent ne pas avoir de sous-chane <locale> et stocker toutes
les pages de manuel dans <mandir>. Ainsi, les systmes qui ont seulement des
pages de manuel en anglais, codes en ASCII peuvent stocker ces pages (rper-
toires man<section>) directement dans /usr/share/man. En fait, il s'agit l du
cas et de l'arragnement classiques.
Dans les pays pour lesquels existe un code de caractres standard accept,
les systmes peuvent ne pas utiliser le champ <jeu_de_caractre>, mais il
est fortement recommand de l'inclure, notamment dans le cas des pays avec
plusieurs standards.
Divers exemples sont donn le tableau des langues.
Options spciques. Les chiers suivants, ou les liens symboliques vers ces
chiers, doivent se trouver dans /usr/share/misc, si le sous-systme corres-
pondant est install :
36.5.2 Conditions.
Les rpertoires suivants, ou les liens symboliques vers ces rpertoires, sont
ncessaires dans /var :
Plusieurs rpertoires sont mis en rserve dans la mesure o ils ne doivent pas
tre utiliss arbitrairement, vu qu'il pourrait y avoir un conit d des pra-
tiques locales ou historiques. Il s'agit de :
/var/backups
/var/cron
/var/msgs
/var/preserve
36.5.8.2 Conditions.
Les rpertoires suivants, ou les liens symboliques vers ces rpertoires, sont
requis dans /var/lib :
36.5.13.2 Conditions.
Le format interne des chiers de PID reste inchang. Les chiers doivent
consister en une reprsentation ASCII dcimale, suivie d'un caractre de nou-
velle ligne. Par exemple, si crond est le processus de PID 25, /var/run/-
crond.pid devrait contenir trois caractres : deux, cinq, et une nouvelle ligne.
Les programmes qui lisent les chiers de PID devraient montrer un peu
de souplesse : c'est--dire qu'ils devraient tre capables d'ignorer les espaces
excdentaires, les zros placs au dbut, l'absence de mise la ligne ou les lignes
supplmentaires du chier de PID. Les programmes qui crent les chiers de PID
devraient utiliser la spcication unique dcrite dans le paragraphe ci-avant.
Le chier utmp, qui enregistre de l'information propos des utilisateurs em-
ployant le systme, est localis dans ce rpertoire-ci.
40 /var/run ne devrait pas tre activ en criture pour les utilisateurs non-privilgis (root
ou les utilisateurs excutant des dmons). Il y a un problme de scurit majeur ds que tout
utilisateur peut crire dans ce rpertoire.
CHAPITRE 36. LE SYSTME DE FICHIERS LINUX. 424
Le binaire ldconfig est optionnel dans /sbin vu qu'une machine peut ex-
cuter ldconfig lors de son amorage plutt qu'exclusivement lors des mises
jour des bibliothques partages. (Il n'est cependant pas sr qu'il soit ou non
avantageux d'excuter ldconfig l'amorage du systme.) Quoiqu'il en soit,
certains administrateurs prfrent utiliser ldconfig dans les situations suivantes
(trs courantes) :
1. L'administrateur doit supprimer lib/<fichier>,
2. L'administrateur ne retrouve pas le nom de la bibliothque parce que ls
est li dynamiquement ; il est en train d'utiliser un shell qui n'a pas la
commande interne ls et et il ne sait pas utiliser echo * la place,
3. L'adminsitrateur constate qu'il y a un lien statique sln, mais il ne sait
pas comment faire appel au lien.
Divers :
{ ctrlaltdel, kbdrate }
Pour faire face au fait que certains claviers sont caractriss par une vitesse de
rptition trs haute qui les rend inutilisables, kbdrate peut tre install dans
/sbin sur certains systmes.
Etant donn que l'action, par dfaut sur le noyau, de la combinaison Ctrl-
Atl-Del engendre un ramorage instantan et brutal, il est gnralement re-
command de dsactiver ce comportement avant que ne soit mont le systme
de chiers racine en mode lecture-criture. Certaines congurations d'init per-
mettent de dsactiver Ctrl-Alt-Del, mais d'autres exigent d'employer le pro-
gramme ctrlaltdel, qui peut tre install dans /sbin.
/usr/src/linux/include/asm-<arch>
/usr/src/linux/include/linux
36.7 Annexe.
36.7.1 Liste de diusion du SFN.
La liste de diusion du Systme de Fichiers Nomaliss (Filesystem Hierarchy
Standard ou FHS) est accessible sur <fhs-discuss@uscd.edu>. Pour souscrire
la liste, envoyez un courriel <listserv@ucsd.edu> avec pour message ADD
fhs-discuss.
Nous remercions Network Operations l'Universit de Californie San
Diego, qui nous a autoriss utiliser leur excellent serveur de listes de diu-
sion.
Comme not dans l'introduction, n'envoyez pas de courriel la liste de dif-
fusion avant d'avoir au pralable contact l'diteur du SFN ou un contributeur
rpertori.
36.7.4 Perspectives.
Le prsent document dcrit une norme pour le systme de chiers en in-
diquant l'emplacement des chiers et des rpertoires et aussi, le contenu de
certains chiers.
La norme a t construite par des personnes laborant des distributions,
des dveloppeurs de paquets logiciels et des administrateurs systmes impli-
qus dans l'laboration et la gestion de systmes de chiers conformes au SFN.
Elle est initialement prvue pour constituer une rfrence et non pour tre une
introduction la gestion d'un systme de chiers conforme.
Le SFN s'est dvelopp sur base d'un travail antrieur appel FSSTND, une
organisation normalise du systme de chiers bas sur le systme d'exploitation
Linux. Elle s'appuie sur le FSSTND pour traiter des problmes d'interoprabilit
non seulement pour la communaut Linux mais aussi pour une communaut
plus large incluant les personnes utilisant les systmes base de BSD-4.4. Elle
tire parti d'enseignements provenant du monde BSD et d'ailleurs, propos
des supports multi-architectures et des demandes associes l'exploitation de
rseaux htrognes.
Bien que cette norme soit plus tendue que les tentatives antrieures de nor-
malisation des systmes de chiers, les mises--jour priodiques peuvent devenir
ncessaires en fonction des exigences technologiques nouvelles. Il est galement
possible que des solutions meilleures aux problmes traits prsentement soient
dcouvertes de sorte que les solutions avances ici ne soient plus optimales. Ce-
pendant, la rtro-compatibilit sur un sujet spcique est garantie d'une version
l'autre.
Les commentaires associs cette norme sont bienvenus. Tout commentaire
ou suggestion pour des modications peut tre adress l'diteur original (Da-
niel Quinlan <quinlan@pathname.com>) ou la liste de diusion du SFN/FHS.
Les commentaires relatifs la grammaire et l'orthographe devraient tre adres-
ss l'diteur du SFN/FHS.
Avant d'envoyer un courriel la liste de diusion, veuillez contacter en tout
premier lieu l'diteur du SFN/FHS de manire viter la rediscussion d'anciens
sujets.
Les questions relatives l'interprtation de certains points de ce document
peuvent surgir. Si vous en ressentez la ncessit, contactez l'diteur du SFN
/ FHS. Si vous ressentez la ncessit d'une quelconque clarication, contactez
l'diteur. Etant donn que la norme reprsente un consensus entre de nombreux
participants, il est important de s'assurer que toute interprtation reprsente
leur opinion collective. Pour cette raison, il se peut qu'il ne soit pas possible
d'obtenir de rponse immdiate sauf si la demande de renseignement a dj fait
l'objet d'une discussion.
CHAPITRE 36. LE SYSTME DE FICHIERS LINUX. 430
36.7.5 Remerciements.
Les dveloppeurs du SFN/FHS souhaitent remercier les dveloppeurs, les
administrateurs systme et les utilisateurs dont les contributions furent essen-
tielles l'laboration de la norme. Nous souhaitons adresser nos remerciements
chaque contributeur qui a aid rdiger, compiler et composer cette norme.
Le Groupe de Normalisation souhaite remercier les dveloppeurs de Linux
qui ont aid l'laboration du FSSTND, le prdcesseur de la prsente norme.
S'ils n'avaient pas montr que le FSSTND tait essentiel, le SFN/FHS n'aurait
jamais volu.
36.7.6 Contributeurs.
Brandon S. Allbery <bsa@kf8nh.wariat.org>
Keith Bostic <bostic@cs.berkeley.edu>
Drew Eckhardt <drew@colorado.edu>
Rik Faith <faith@cs.unc.edu>
Stephen Harris <sweh@spuddy.mew.co.uk>
Ian Jackson <ijackson@cus.cam.co.uk>
John A. Martin <jmartin@acm.org>
Ian McCloghrie <ian@uscd.edu>
Chris Metclaf <metclaf@lcs.mit.edu>
Ian Murdock <imurdock@debian.org>
David C. Niemi <niemidc@clark.net>
Daniel Quinlan <quinlan@pathname.com>
Eric S. Raymond <esr@thyrsus.com>
Rusty Russell <rusty@rustcorp.com.au>
Mike Sangrey <mike@sojurn.lns.pa.us>
David H. Silber <dhs@glowworm.firefly.ac.uk>
Thomas Sippel-Dau <t.sippel-dau@ic.ac.uk>
Theodore Ts'o <tytso@athena.mit.edu>
Stephen Tweedie <sct@dcs.ed.ac.uk>
Fred N. van Kempen <waltje@infomagic.com>
Bernd Warken <bwarken@mayn.de>
Chapitre 37
dans votre chier /etc/inetd.conf. Si vous excutez xinetd, vous devrez plu-
tt ajouter un chier contenant :
service www
{
socket_type = stream
wait = no
user = nobody
server = /usr/local/sbin/sh-httpd
}
dans votre rpertoire /etc/xinetd.d/. Ensuite, vous pourrez arrter tous les
serveurs web dj en cours et redmarrer inetd (ou xinetd). Vous devrez ga-
1 NdT : l'heure o la traduction tait entreprise, Apache version 2 pouvait dj tre
install. D'autre part, la exibilit du langage dynamique PHP concurrence dsormais trs
fortement le langage CGI.
431
CHAPITRE 37. HTTPD : SERVEUR WEB APACHE. 432
<HTML>
<HEAD>
<TITLE>Mon premier document</TITLE>
</HEAD>
<BODY bgcolor=#CCCCCC text=#000000>
Ceci est mon premier document<P>
Visitez-le.
<A HREF=http ://rute.sourceforge.net/
The Rute Home Page
</A>
pour plus d'information.</P>
</BODY>
</HTML>
Notez que le serveur fonctionne sous l'utilisateur nobody, si bien que le chier
de journalisation doit tre en criture pour cet utilisateur ; le chier index.html
doit tre en lecture. Notez galement l'utilisation de la commande getpeername,
qui peut tre modie en PEER= si vous n'avez pas install le paquet netpipes.
[Il n'est possible que les autres commandes utilises soient disponibles sur d'autres
systmes Unix].
# !/bin/sh
VERSION=0.1
NAME=ShellHTTPD
DEFCONTENT=text/html
DOCROOT=/usr/local/var/sh-www
DEFINDEX=index.html
LOGFILE=/usr/local/var/log/sh-httpd.log
log() {
local REMOTE_HOST=$1
local REFERRER=$2
local CODE=$3
local SIZE=$4
print_header() {
echo -e HTTP/1.0 200 OK\r
echo -e Server : ${NAME}/${VERSION}\r
echo -e Date : `date`\r
}
CHAPITRE 37. HTTPD : SERVEUR WEB APACHE. 433
print_error() {
echo -e HTTP/1.0 $1 $2\r
echo -e Content-type : $DEFCONTENT\r
echo -e Connection : close\r
echo -e Date : `date`\r
echo -e \r
echo -e $2\r
exit 1
}
guess_content_type() {
local FILE=$1
local CONTENT
case ${FILE##*.} in
html) CONTENT=$DEFCONTENT ; ;
gz) CONTENT=application/x-gzip ; ;
*) CONTENT=application/octet-stream ; ;
esac
do_get() {
local DIR
local NURL
local LEN
if [ ! -d $DOCROOT ] ; then
log ${PEER} - 404 0
print_error 404 No such file or directory
fi
if [ -z ${RL##*/} ] ; then
URL=${URL}${DEFINDEX}
fi
DIR=`dirname $URL`
if [ ! -d ${DOCROOT}/${DIR} ] ; then
log ${PEER} - 404 0
print_error 404 Directory not found
else
cd ${DOCROOT}/${DIR}
NURL=`pwd`/`basename ${URL}`
URL=${NURL}
fi
if [ ! -f ${URL} ] ; then
log ${PEER} - 404 0
print_error 404 Document not found
fi
CHAPITRE 37. HTTPD : SERVEUR WEB APACHE. 434
print_header
guess_content_type ${URL}
LEN=`ls -l ${URL} | tr -s ' ' | cut -d ' ' -f 5`
echo -e Content-length : $LEN\r\n\r
log ${PEER} - 200 ${LEN}
cat ${URL}
sleep 3
}
read_request() {
local DIRT
local COMMAND
read REQUEST
read DIRT
case $COMMAND in
HEAD)
print_error 501 Not implemented (yet)
;;
GET)
do_get
;;
*)
print_error 501 Not implemented
;;
esac
}
#
# It was supposed to be clean -- without any non-standard utilities
# but I want some logging where the connexions come from, so
# I use just this one utility to get the peer address
#
# This is from the netpipes package
PEER=`getpeername | cut -d ' ' -f 1`
read_request
exit0
37.2.1 httpd.conf.
Apache possde plusieurs chiers de conguration hrits des premiers d-
veloppements : access.conf et srm.conf en sont deux exemples. Ces chiers
sont dsormais obsoltes et devraient rester vides. Un chier de conguration
lmentaire /opt/apache/conf/httpd.conf devrait contenir au minimum :
ServerType standalone
ServerRoot /opt/apache
PidFile /opt/apache/logs/httpd.pid
ScoreBoardFile /opt/apache/logs/httpd.scoreboard
Port 80
User nobody
Group nobody
HostnameLookups Off
ServerAdmin webmaster@cranzgot.co.za
UseCanonicalName On
ServerSignature On
DefaultType text/plain
ErrorLog /opt/apache/logs/error_log
LogLevel warn
LogFormat %h %l %u %t \%r\ %>s %b common
CustomLog /opt/apache/logs/access_log common
DocumentRoot /opt/apache/htdocs
DirectoryIndex index.html
AccessFileName .htaccess
<Directory />
Options FollowSymLinks
AllowOverride None
Order Deny,Allow
CHAPITRE 37. HTTPD : SERVEUR WEB APACHE. 436
Une fois le chier de conguration prt, vous pouvez dplacer le chier index.ht-
ml dans /opt/apache/htdocs/. Vous verrez qu'il y a un manuel complet d'Apa-
che et une page de dmonstration dj installe. A prsent, vous pouvez les d-
placer dans un autre rpertoire et excutez :
/opt/apache/bin/httpd -X
Port Ceci est le port TCP d'coute des serveurs fonctionnant en mode auto-
nome (standalone ).
User, Group Cette option est importante en terme de scurit. Elle force
httpd utiliser les privilges de l'utilisateur nobody. Si le serveur web ve-
nait tre craqu, l'attaque ne pourrait permettre d'accder d'autres
privilges que ceux de nobody.
HostNameLookups Pour forcer une requte inverse de DNS sur chaque hte
se connectant, activez cette directive avec on. Pour forcer une requte
directe sur chaque requte inverse, activez cette directive avec double.
Cette option concerne les connexions vu que le contrle de l'accs eectue
une requte inverse et directe si cela est requis. Si vous voulez rduire le
temps de latence, mettez off.
ServerAdmin Les messages d'erreur incluront cette adresse de courriel.
UseCanonicalName Si Apache doit retourner une URL pour quelque raison
que ce soit, il s'agira normalement du nom complet du serveur. Le fait de
mettre off permet d'utiliser le propre nom d'hte envoy par le client.
ServerSignature Tous les chiers retourns au client ont un champ spciant
la manire dont le chier devrait tre ach. Si Apache ne peut en dduire
le type, il supposera que le type MIME est text/plain. Voir la sous-
section 13.6.2 pour une discussion sur les types MIME.
ErrorLog Cette directive indique o les erreurs doivent tre consignes ; usuel-
lement, il s'agit de /var/log/httpd/error_log.
Loglevel dnit la quantit d'information journaliser.
Logformat dnit un nouveau format de journal. En l'occurrence, nous d-
nissons et appelons le format de journal common. Les lignes multiples
sont autorises. De nombreuses informations peuvent tre consignes :
voir /opt/apache/htdocs/manual/mod/mod_log_config.html pour une
description complte.
CustomLog Le nom du chier de journalisation et son format (tel que dnit
dans la directive prcdente).
DocumentRoot Cette directive spcie le rpertoire de plus haut niveau au-
quel un client peut accder. La chane /opt/apache/htdocs est d'oce la
cible des requtes, et donc, une URL comme http ://localhost/manual/in-
dex.html.en retournera le chier /opt/apache/htdocs/manual/index.ht-
ml.en.
DirectoryIndex Cette directive donne le chier par dfaut pour essayer de
rpondre des URLs qui contiennent seulement un nom de rpertoire. Si
le chier index.html n'existe pas sous ce rpertoire, un index des rper-
toires est transmis au client. D'autres congurations usuelles employent
index.htm ou default.html.
AccessFileName Avant de fournir un chier un client, Apache lit des di-
rectives supplmentaires partir du chier .htaccess se trouvant dans le
mme rpertoire que le chier demand. Si le rpertoire parent contient un
chier .htaccess, ce dernier a la priorit. Le chier .htaccess contient
des directives limitant l'accs au rpertoire (voir ci-dessous).
CHAPITRE 37. HTTPD : SERVEUR WEB APACHE. 438
<Directory />
Options FollowSymLinks
Deny from All
Order Deny,Allow
AllowOverride None
</Directory>
Deny Les htes qui ne sont pas autoriss se connecter. Vous pouvez indiquer
un nom d'hte particulier ou une adresse IP, par exemple, comme ceci :
Ceci aura pour eet de refuser l'accs 10.1.2.3, toutes les machines
dont les IP commencent par 192.168.5. et toutes les machines dont
l'adresse se termine par cranzgot.co.za, ce qui inclut aussi l'hte cranz-
got.co.za.
Allow Les htes autoriss se connecter. Cette directive utilise la mme syn-
taxe que Deny.
Order si Order a pour valeur Deny,Allow, les directives Deny sont d'abord
consultes. Tout client qui n'est pas rpertori sous Deny et correspond
la directive Allow est autoris accder au serveur.
Si Order a pour valeur Allow,Deny, les directives Allow sont d'abord
consultes et tout client qui n'y correspond pas et correspond une direc-
tive Deny verra son accs au serveur refus.
AllowOverride En plus des directives indiques ici, d'autres seront lues depuis
le chier spci par AccessFileName, usuellement appel .htaccess.
Habituellement, ce chier est prsent parmi vos chiers .html ou, dfaut,
dans le rpertoire parent. Si ce chier existe, son contenu est lu dans
la directive <Directory ...>. L'option AllowOverride indique quelles
directives le chier .htaccess peut craser. La liste complte peut tre
trouve dans /opt/apache/htdocs/manual/mod/core/html.
Vous pouvez remarquer que nous donnons des Options trs restrictives sur le
rpertoire racine ainsi que des accs trs restreints. La seule caractristique du
serveur que nous autorisons est FollowSymLinks, nous refusons (Deny) tout
accs et nous tons au chier .htaccess la possibilit de passer outre nos res-
trictions.
La directive <Files ...> pose des restrictions sur tous les chiers corres-
pondants une expression rationnelle particulire. En terme de mesures de
scurit, nous l'utilisons pour empcher l'accs tous les chiers .htaccess de
la manire suivante :
<Files ~ ^\.ht>
Order allow,deny
Deny from all
</Files>
Nous sommes nalement prt ajouter nos rpertoires contenant les vraies
pages web. Sur ce sujet, il y a moins de restrictions quant l'accs :
CHAPITRE 37. HTTPD : SERVEUR WEB APACHE. 440
<Directory /opt/apache/htdocs>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<Directory /opt/apache/htdocs/home/*/www
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
UserDir /opt/apache/htdocs/home/*/www
Pour que cette fonctionnalit soit active, vous devez faire pointer un lien sym-
bolique /opt/apache/htdocs/home vers /home, et crer un rpertoire www/ dans
chacun des rpertoire personnel (home ) de chaque utilisateur. Le fait d'entrer
l'URL http ://localhost/~jacques/index.html permet de retrouver le -
chier /opt/apache/htdocs/home/jacques/www/index.html. Si Apache met
un message d'erreur intitul Forbidden lorsque vous essayez cela, c'est proba-
blement parce que les droits sur le rpertoire home appel jacques sont trop
restrictifs. A prsent, vous devez choisir une politique entre deux extrmes :
rendre l'accs au rpertoire jacques moins restrictif ou largir les droits sur
Apache. Excutez Apache sous le groupe www en utilisant Group www, et excu-
tez :
groupadd -g 65 www
chown jacques :www /home/jacques /home/jacques/www
chmod 0750 /home/jacques /home/jacques/www
<Directory /opt/apache/icons
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>
IndexOptions FancyIndexing
Ceci ncessite aussi que la directive Alias dcrite ci-dessus soit prsente. La
conguration par dfaut d'Apache contient une liste bien plus grande de types
de chiers que ce qui est dcrit ici.
AddEncoding x-compress Z
AddEncoding x-gzip gz
d'Apache et les pages qui ne sont pas en anglais s'achent correctement dans
la langue du navigateur. Dans ce cas aussi, l'option MultiViews doit tre active.
AddLanguage en .en
AddLanguage da .dk
AddLanguage nl .nl
AddLanguage et .ee
AddLanguage fr .fr
AddLanguage de .de
AddLanguage el .el
AddLanguage ja .ja
AddLanguage ru .ru
LanguagePriority en da nl et fr de el ja ru
seront interprtes, et leur rsultat sera inclus dans l'HTML d'o le nom de
server-side includes (portions de code incluses) pour dsigner des commandes
de scripts excutes en interne par le serveur. Ces SSI sont idaux pour les
pages HTML qui contiennent principalement de l'HTML statique avec peu de
contenu dynamique. Pour se rendre compte de cela, ajoutez ce qui suit votre
chier http.conf :
CHAPITRE 37. HTTPD : SERVEUR WEB APACHE. 443
<HTML>
The date today is < !--#echo var=DATE_LOCAL -->.<P>
Here is a directory listing :<br>
<PRE>
< !--#exec cmd=ls -al -->
</PRE>
< !--#include virtual=footer.html -->
</HTML>
<HTML>
<PRE>
< !--#printenv-->
</PRE>
</HTML>
# !/bin/bash
Rendez ce script excutable avec chmod a+g test.cgi et testez son rsultat
en l'excutant en ligne de commandes. Ajoutez la ligne :
<Directory /opt/apache/htdocs>
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Aprs avoir redmarrer Apache, vous devriez pouvoir visiter l'URL http ://lo-
calhost/test.cgi. Si des problmes apparaissent, n'oubliez pas de lancer tail
/opt/apache/logs/error_log de manire obtenir un rapport complet.
Pour obtenir une liste exhaustive des variables d'environnement disponibles
pour vos programmes CGI, essayez le script suivant :
# !/bin/sh
# !/bin/sh
# !/bin/bash
Ce script videra la liste des tables de la base de donnes template1 si cette dernire
existe. Apache devra fonctionner en tant qu'utilisateur pouvant accder la base de
donnes, ce qui signie qu'il faudra changer User nobody en User postgres [notez
que pour des raisons de scurit, nous devriez vraiment limiter les utilisateurs
pouvant se connecter la base de donnes postgres. Voir la section 39.4].
<HTML>
<FORM name=myform action=test.cgi method=get>
<TABLE>
<TR>
<TD colspan=2 align=center>
Please enter your personnal details :
</TD>
</TR>
<TR>
<TD>Name :</TD><TD><INPUT type=text name=name></TD>
</TR>
<TR>
<TD>Email :</TD><TD><INPUT type=text name=email></TD>
</TR>
<TR>
<TD>Tel :</TD><TD><INPUT type=text name=tel></TD>
</TR>
<TR>
<TD colspan=2 align=center>
<INPUT type=submit value=Submit
</TD>
</TR>
</TABLE>
</FORM>
</HTML>
devrait donner :
# !/bin/sh
opts=`echo $QUERY_STRING` | \
sed -e 's/[^A-Za-a0-9 %&+,.\/ :=@_~-]//g' -e 's/&/ /g' -e q`
if psql -d template1 -H -c \
INSERT INTO people (name, email, tel) \
VALUES ('$name', '$email', '$tel') 2>&1 | grep -q '^INSERT ' ; then
echo <HTML>Your details \$name\, \$email\ and \$tel\<BR>
echo have been successfully recorded.</HTML>
else
echo <HTML>Database error, please contact our webmaster.</HTML>
fi
exit 0
Remarquez comment les premires lignes du script liminent tous les carac-
tres non-dsirs de QUERY_STRING. Un tel traitement est obligatoire pour des
raisons de scurit parce que les scripts de shell peuvent aisment excuter des
commandes si des caractres comme $ et ` sont prsent dans une chane.
Pour utiliser la mthode POST alternative, modiez le marqueur FORM en :
opts=`cat | \
sed -e 's/[^A-Za-z0-9 %&+,.\/ :=@_~-]//g' -e 's/&/ /g' -e q`
CHAPITRE 37. HTTPD : SERVEUR WEB APACHE. 448
#include <unistd.h>
Tout paquet source qui cre un module Apache peut, prsent, exploiter l'utili-
taire /opt/apache/bin/apxs, ce qui fait que vous devriez vous assurer que cet
excutable est dans votre PATH.
Ds maintenant, vous pouvez suivre les instructions pour installer PHP, en
commenant par ./configure --prefix=/opt/php --with-paws=/opt/apa-
che/bin/apxs --with-pgsql=/usr. (Ceci suppose que vous souhaitiez per-
mettre le support pour la base de donnes postgres SQL et que postgres
a t install au pralable sous /usr.) Enn, vriez qu'un chier libphp4.so
a bien abouti dans /opt/apache/libexec/.2
Votre chier httpd.conf doit contenir une information sur la prsence des
scripts PHP. Ajoutez les lignes suivantes :
<html>
<head>
<title>Example</title>
</head>
<body>
< ?php echo Hi, I'm a PHP script ! ; ?>
</body>
</html>
NameVirtualHost 196.123.45.1
<VirtualHost 196.123.45.1>
ServerName www.domaine1.com
DocumentRoot /opt/apache/htdocs/www.domaine1.com/
</VirtualHost>
<VirtualHost 196.123.45.1>
ServerName www.domaine2.com
DocumentRoot /opt/apache/htdocs/www.domaine2.com/
</VirtualHost>
<VirtualHost 196.123.45.2>
ServerName www.domaine3.com
DocumentRoot /opt/apache/htdocs/www.domaine3.com/
</VirtualHost>
Il ne reste plus qu' congurer une zone DNS correcte pour chaque domaine de
sorte que les requtes sur www.domaine1.com et www.domaine2.com retournent
CHAPITRE 37. HTTPD : SERVEUR WEB APACHE. 451
crond et atd.
crond et atd sont deux services la fois trs simples et trs importants
qui devraient tre familiers tout un chacun. Le dmon crond eectue des
travaux en excutant des commandes de manire priodique (quotidiennement,
hebdomadairement, mensuellement) alors qu'atd prsente la caractristique de
n'eectuer ultrieurement une commande qu'une seule fois.
Ces deux services sont si simples que nous n'irons pas dans le dtail du
contenu de leurs paquets.
452
CHAPITRE 38. CROND ET ATD. 453
jouera (play) le chier theetone.wav chaque samedi 13 :50 :00. Notez aussi
que la ligne :
# Time specs
30 20 * * * root /etc/cron-alarm.sh
35 19 * * * root /etc/cron-alarm.sh
58 18 * * * root /etc/cron-alarm.sh
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
Notez que le caractre # est utilis pour les commentaires comme d'habitude.
crond permet aussi de spcier des variables d'environnement sous lesquels les
commandes sont excutes.
N'oubliez pas d'entrer les trois commandes qui vous permettront, comme ici,
d'tre averti des trois derniers mtros du jour.
Les quatre dernires entres appellent des scripts tout faits. La commande
run-parts est un script simple pour eectuer toutes les commandes listes sous
CHAPITRE 38. CROND ET ATD. 454
total 14 . .
drwxr-xr-x 2 root root 1024 Sep 2 13 :22 .
drwr-xr-x 59 root root 6144 Aug 31 13 :11 ..
-rwxr-xr-x 1 root root 140 Aug 13 16 :16 backup
-rwxr-xr-x 1 root root 51 Jun 16 1999 logrotate
-rwxr-xr-x 1 root root 390 Sep 14 1999 makewhatis.cron
-rwxr-xr-x 1 root root 459 Mar 25 1999 radiusd.cron.daily
-rwxr-xr-x 1 root root 99 Jul 23 23 :48 slocate.cron
-rwxr-xr-x 1 root root 103 Sep 25 1999 tetex.cron
-rwxr-xr-x 1 root root 104 Aug 30 1999 tmpwatch
Il est conseill de vrier chacun des scripts de manire savoir ce que le systme
fait.
Vous pouvez taper atq pour obtenir une liste des travaux en cours :
3 2000-09-02 14 :19 a
3 2000-09-02 14 :19 =
39.2 postgres.
postgres (PostGreSQL) est un serveur SQL libre crit sous la licence BSD.
postgres est bas sur SQL92 [le standard dnitif]. Il eectue des oprations
trs astucieuses qu'apparemment d'autres bases ne ralisent pas. Le seul qui-
valent commercial capable de concurrencer postgres est un trs coteux logiciel
provenant d'une industrie de pointe en la matire.
456
CHAPITRE 39. SERVEUR POSTGRES SQL. 457
et en paquets serveurs :
Chacun de ces programmes possde une page de man que vous devriez consulter.
D'autres pages de man fournissent des rfrences relatives aux commandes
SQL proprement-dites. Essayez man 1 select (expliqu un peu plus loin) :
NAME
SYNOPSIS
SELECT [ ALL ] DISTINCT [ ON ( expression [, ...] ) ] ]
expression [ AS name ] [, ...]
[ INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table ]
[ FROM table [ alias ] [, ...] ]
[ WHERE condition ]
[ GROUP BY column [, ...] ]
CHAPITRE 39. SERVEUR POSTGRES SQL. 458
/etc/rc.d/init.d/postgres stop
( /etc/init.d/postgresql stop )
Modiez le script init.d pour le support des requtes TCP. Vous devez trouver
une ligne comme suit, laquelle il faut ajouter l'option -i. Elle peut ressembler
:
Dans les deux cas, vous devrez vrier que ce chier garantit que seuls les
htes autoriss peuvent se connecter votre base de donnes. Sinon, enlevez
tout--fait l'option -i si vous vous connectez seulement en local sur la machine.
Jusqu' un certain point, vous pouvez aussi restreindre les utilisateurs pouvant
se connecter ce chier.
Il serait intressant que la connexion (socket ) de domaine Unix que postgres
coute (c'est--dire /tmp/.s.PGSQL.5432) ait pour droits 0770 au lieu de 0777.
De cette manire, vous pourriez restreindre les connexions aux groupes d'utili-
sateurs appartenant au groupe postgres. Vous pouvez ajouter cette caractris-
tique en recherchant la commande C chmod dans /src/backend/libpq/pgcom-
CHAPITRE 39. SERVEUR POSTGRES SQL. 459
m.c l'intrieur des sources de postgres-7.0. Il se peut que les versions ult-
rieures aient dj adapt les droits 0770.
Pour excuter postgres, vous devez avoir un utilisateur ayant ce nom. Si ce
n'est dj fait, entrez :
/usr/sbin/useradd postgres
/etc/rc.d/init.d/postgresql restart
pg_database | postgres | f | f | f
pg_variable | postgres | f | f | f
pg_log | postgres | f | f | f
pg_xactlock | postgres | f | f | f
pg_attrdef | postgres | t | f | f
pg_relcheck | postgres | t | f | f
pg_trigger | postgres | t | f | f
pg_inherits | postgres | t | f | f
pg_index | postgres | t | f | f
pg_statistic | postgres | t | f | f
pg_operator | postgres | t | f | f
pg_opclass | postgres | t | f | f
pg_am | postgres | t | f | f
pg_amop | postgres | t | f | f
pg_amproc | postgres | f | f | f
pg_language | postgres | t | f | f
pg_aggregate | postgres | t | f | f
pg_ipl | postgres | f | f | f
pg_inheritproc | postgres | f | f | f
pg_rewrite | postgres | t | f | f
pg_listener | postgres | t | f | f
pg_description | postgres | t | f | f
pg_shadow | postgres | f | f | f
(28 rows)
Les ranges (rows ) qui prcdent dsignent des tables internes de postgres.
Certaines d'entre elles sont des tables strictement parler, d'autres sont des
vues de tables [c'est--dire une reprsentation d'une table relle.]
Pour obtenir une liste des bases de donnes, essayez :
La table ainsi cre intitule les colonnes : name, gender et address. Ces co-
lonnes sont caractrises par un type. Ceci signie que seul le type de donnes
qui a t spci lors de la cration de la table peut tre accept. Dans le cas de
gender, le type est boolen et les valeurs ne peuvent valoir que true ou false,
ce qui indique que le genre des personnes est soit homme ou femme. Il n'y a
pas de raisons formelles utiliser le type boolen ; l'usage d'un entier ou d'un
champ texte est souvent plus vocateur. Dans le cas de name et address, le
type est text, ce qui veut dire que ces colonnes peuvent abriter des donnes trs
variables (text est un type trs gnral englobant la majorit des autres types).
Notez que dans la documentation relative postgres , une colonne est
appele un attribut (et ce, pour des raisons historiques).
Vous devriez essayer de choisir des types selon le genre de recherche que vous
ferez et non selon la nature des donnes qu'une colonne contient. Le tableau 39.1
ache une liste des types utiles et de leur quivalent SQL92. Les types qui sont
crits en gras doivent tre utiliss prfrentiellement d'autres types similaires
pour une meilleure prcision.
question. Ceci deviendra simple raliser lorsque vous aurez pris connaissance
de la sous-section 39.6.9.
La valeur retourne est l'oid (Object ID ) de la range. postgres est une base de
donnes relationnelle objet (Object Relational DB ). Ce terme signie que chaque
table a une colonne cache appele colonne oid qui stocke un numro d'identit
unique pour chaque range. Le numro d'identit est unique dans toute la base
de donnes. Du fait qu'il identie de manire non-ambigu chaque range parmi
toutes les tables, vous qualiez les ranges, d'objets. La caractristique oid
est trs utile aux programmeurs.
finance=# CREATE TABLE sitings (person text, place text, siting text) ;
CREATE
finance=# INSERT INTO sitings (person, place) SELECT name, address FROM
people ;
INSERT 20324 1
39.6.11 Recherches.
La recherche la plus simple que vous pouvez raliser avec postgres est :
La commande :
transfre la table people vers /tmp/people.txt, avec des virgules comme dli-
miteurs, des ranges termines par une mise la ligne et l'indication (null) l
o il peut y avoir un octet zro.
De manire analogue, la commande
467
CHAPITRE 40. SMBD LE PROJET NT SAMBA. 468
pour permettre aux E/S des disques d'tre rediriges vers l'interface NetBIOS, ce qui
rend l'espace disque partageable sur le rseau. A l'poque, le protocole de partage de
chiers utilis par Microsoft reoit le nom de SMB puis devient CIFS.
De nombreux autres logiciels sont crits an d'utiliser l'interface de programmation
d'applications du NetBIOS (Application Programmer's Interface), ce qui signie que
tous ces dveloppements n'auraient jamais au grand jamais d disparatre. Cepen-
dant, au l du temps, les mcanismes sous-jacents l'API sont habilement trips et
remplacs. NetBEUI (NetB IOS E nhanced U ser I nterface ), introduit par IBM, four-
nit alors un mcanisme pour passer des paquets NetBIOS sur Token Ring et Ethernet.
D'autres dveloppent une mulation NetBIOS LAN incluant des protocoles de haut-
niveau comprenant DECnet, IPX/SPX et, bien sr, TCP/IP.
NetBIOS et TCP/IP constituent un tandem intressant. TCP/IP peut tre rout entre
divers rseaux interconnects (internetworks ), mais NetBIOS a, ds le dpart, t la-
bor pour les LANs isols. L'astuce consiste donc convertir les noms 16 octets
de NetBIOS en adresses IP de telle sorte que les messages puissent vraiment trouver
leur chemin dans un rseau IP rout. Les documents RFC1001 et RFC1002 relatent
le mcanisme en dtail. A mesure que Windows volue, Microsoft ajoute deux l-
ments au paquet SMB. Il s'agit du browsing ainsi que du service d'authentication
et d'autorisation centralises, connu sous le nom de Windows NT Domain Control .
important de toute cette aaire, c'est qu'Andrew peut toujours partager l'imprimante
de son pouse.
IP au serveur NBNS qui conserve l'information dans une base de donnes. Quand un
client veut entrer en communication avec un autre, il envoie le nom de ce dernier au
serveur NBNS. Si ce nom est dans la base, le serveur NBNS renvoie une adresse IP.
Les clients situs sur divers sous-rseaux peuvent aussi partager le serveur NBNS ;
aussi, sans diusion, le mcanisme point--point n'est-il pas restreint au rseau local
LAN. Par de nombreux aspects, le serveur NBNS prsente des similitudes avec un
DNS. Toutefois, la liste de noms de NBNS est presque totalement dynamique et, il y a
peu de contrle quant au fait que seuls les clients autoriss peuvent s'enregistrer. Des
conits peuvent et, de fait, doivent invitablement se produire.
Enn, il y a la navigation (browsing ). [...] Samba gre cet aspect. Naturellement, il ne
s'agit pas de la navigation web que nous connaissons bien, mais d'une liste de services
(chiers et imprimantes) qui peut tre parcourue, et qui est fournie par les ordinateurs
sur le rseau.
Sur un rseau local (LAN), les ordinateurs participants sont l'objet d'une lection
pour dterminer lequel sera le navigateur-matre, Local Master Browser (LMB). L'lu
s'identie en indiquant aux autres un nom de NetBIOS spcial (en plus d'autres noms
qu'il peut ventuellement avoir). Le travail de ce LMB est de conserver une liste
des services disponibles. C'est cette liste qui apparat lorsqu'on clique sur l'icne de
Windows appele Network Neighborhood (voisinage rseau).
En plus du LMB, il y a des navigateurs-matres de domaine, Domain Master Brow-
sers (DMBs). Les DMBs coordonnent les listes de navigateur dans les domaines NT,
mme sur des rseaux avec routage. En utilisant les DMBs, le LMB localise son DMB
pour changer et combiner les listes de navigateurs. Donc, la liste se propage sur tous
les htes du domaine NT. Malheureusement, les dures de synchronisation sont cri-
tiques. Il arrive que cela prenne plus d'une heure pour qu'une modiaction sur un
sous-rseau distant soit prise en considration dans le voisinage rseau.
F ile S ystem ) permet Linux de rpartir les partages SMB distants dans une structure
propre de rpertoires. Ainsi, par exemple, le rpertoire /mnt/zarquon pourrait tre un
partage SMB. Dans ce rpertoire, vous pourriez lire, crire, modier, supprimer et
copier des chiers de la mme manire que vous le faites avec des chiers locaux.
Le systme de chiers smbfs est asticieux, mais il ne fonctionne qu'avec Linux. En
fait, il ne fait pas partie de la suite Samba et est distribu gratieusement mais seule-
ment comme une fonctionnalit supplmentaire. Le nouveau paquet smbsh constitue
une solution plus gnerale (SMB sh ell tait encore en dveloppement lors de la pr-
paration de ce texte version anglaise originale). C'est un paquet trs intressant. Il
fonctionne comme un shell Unix mais il eectue des oprations subtiles avec des ap-
pels des bibliothques Unix. En interceptant ces appels, smbsh donne l'impression
que les partages SMB sont monts. Toutes les oprations d'criture, lecture, etc. sont
disponibles pour l'utilisateur smbsh. Une autre caractristique de smbsh est qu'il fonc-
tionne sur une base utilisateur ou shell alors que le montage d'un systme de chiers
concerne le systme dans son ensemble. Ds lors, avec smbsh, le contrle des accs est
plus n.
40.1.7.1 Samba-2.0.
La version Samba-2.0 est sortie en janvier 1999. Une des caractristiques majeures
tait l'amlioration de la vitesse de traitement. Zi-Davis Publishing a ralis un test
comparatif Samba/Linux Windows NT4 sur le mme matriel PC. Les rsultats
montraient que la rapidit de traitement par Samba sous charge, t amliore d'un
facteur deux au moins par rapport celle de NT4. Samba tait dj fourni avec toutes
les distributions Linux majeures et Zi-Davis en avait test trois.
Une autre tape a t franchie lorsque Silicon Graphics (SGI) est devenu le premier
CHAPITRE 40. SMBD LE PROJET NT SAMBA. 472
vendeur d'Unix supportant Samba. [...], SGI armait que les serveurs de la srie Origin
excutant Samba 2.0 constituaient la ligne de serveurs disponible la plus puissance pour
les clients Windows. Depuis, SGI ore un support commercial Samba comme le font
d'autres fournisseurs (voir le site Samba http ://samba.org/ ). Le support traditionnel
est naturellemement rest disponible via comp.protocols.smb et la liste de diusion
samba@samba.org.
L'quipe de Samba a continu son travail avec l'inclusion des listes d'accs, NT
ACL (Access C ontrol Lists ), le support de LDAP (Lightweith D irectory Access
P rotocol ), le contrle de domaine NT (NT Domain Control ) et le systme de chiers
distribus de Microsoft (DSF, D istributed F ile S ystem ).
Ensuite, Windows 2000 sortit. En raison de sa domination sur les ordinateurs
de bureau, Microsoft dt dcider de l'avenir de CIFS. En fonction des informations
relatives aux versions beta et des commentaires de Microsoft, voici une liste d'lmnts
qui ft prise en considration l'poque :
CIFS sans NetBIOS Microsoft essaie de dcoupler CIFS et NetBIOS. NetBIOS ne
sera pas cart mais il ne sera plus rquis pour le rseau CIFS. Le protocole
SMB sera fourni nativement sur TCP/IP. Les requtes de noms se feront via le
DNS.
DNS dynamique Microsoft mettra en oeuvre le DNS Dynamique, un systme encore
en cours d'laboration par l'IETF (I nternet E ngineering T ask F orce ). Le DNS
dynamique permet aux noms d'tre ajouts la vole sur un serveur DNS.
Kerberos V Microsoft a l'intention d'utiliser Kerberos V avec un PAC (P rivilege
Attribute C erticate ) : http ://www.unsenix.org/publications/login/1997-11/em-
braces.html, qui comprendra une information ID de groupe et d'utilisateur dans
le rpertoire actif (Active Directory ). Les serveurs rechercheront ce PAC lors-
qu'ils autoriseront l'accs aux services qu'ils fournissent. Kerberos servira pour
l'authentication et les autorisations.
Rpertoire actif Le rpertoire actif (Active Directory) semble tre au coeur du r-
seau Windows 2000. Il est vraisemblable que les services NetBIOS enregistreront
leurs noms dans le rpertoire actif.
Domaines_NT_hirarchiques Au lieu des contrleurs de domaines isols, le sys-
tme NT Domain deviendra hirarchique. Le systme d'attribution de nom sera
modi en un systme remarquablement similaire DNS.
40.1.7.2 Samba-2.2.
Dans la version 2.2, Samba prsente davantage de support pour la gestion rseau
de Windows y compris la capacit de raliser des tches plus lourdes pour agir dans un
domaine NT. En outre, Samba-2.2 prsente un support amlior pour les technologies
que Microsoft a introduit avec Windows 2000, bien que l'quipe de Samba ait sauv
le support de rpertoire actif (Active Directory) pour la version 3.0.
Support PDC pour client Windows 2000/XP. Samba pouvait jusqu'ici tre
considr comme un PDC (contrleur de domaine principal ou P rimary D omain
C ontroller ) capable d'authentier des sytmes Windows 95/98/Me et NT 4. Cette
fonctionnalit a t tendue de manire inclure les systmes Windows 2000 et XP.
Il est donc possible de disposer d'un serveur Samba fonctionnant avec tout l'ventail
de clients Windows. Ceci assure une grande stabilit, une grande performance et un
rseau plus scuris. Cela vous procure donc les avantages associs aux systmes plus
rcents sans devoir se procurer la licence d'accs client de Windows (C lient Access
Licence ou CAL, qui donne le droit une machine d'accder aux services de chiers
et d'impression d'un serveur NT).
CHAPITRE 40. SMBD LE PROJET NT SAMBA. 473
Support Dfs de Microsoft. Le support Dfs permet de recueillir (an de les par-
tager) des ressources disperses parmi un certain nombre de serveurs du rseau. Il
permet de les faire apparatre un utilisateur comme si elles taient regroupes dans
une arborescence unique sur un seul serveur. Cette technique rend l'utilisation des
ressources plus conviviale. Au lieu de devoir naviguer dans le rseau la recherche de
la ressource localiser, les utilisateurs peuvent directement aller sur le serveur Dfs et
y collecter ce qu'ils recherchent. Samba 2.2 ore un serveur Dfs, si bien qu'un serveur
Dfs Windows n'est plus ncessaire.
ACLs. Dsormais, Samba supporte les ACLs (Access C ontrol Lists ) de l'hte Unix,
du moins pour les variantes Unix qui en ore le support. Ceci comprend Solaris 2.6,
2.7 et 2.8, Irix, AIX, Linux (soit via le correctif ACL des systmes de chiers ext2
et ext3 [http ://acl.bestbits.at], soit via le systme de chiers XFS) et FreeBSD 5.0
(et versions suprieures). Quand le support ACL est utilis, Samba traduit les ACLs
Windows NT/2000/XP en ACLs Unix, ce qui rapproche encore davantage du point
de vue d'un client Windows le serveur Samba d'un serveur Windows.
Intgration avec Winbind. Winbind est une fonctionnalit permettant aux utili-
sateurs dont le compte est enregistr dans une base de donnes d'un domaine Windows
d'authentier un systme Unix. Ceci conduit un environnement relativement uni
dans lequel un compte utilisateur peut tre conserv soit sur un systme Unix, soit
sur un contrleur de domaine Windows NT/2000/XP. Il en rsulte une plus grande
facilit de gestion des comptes car les administrateurs ne doivent plus faire attention
la synchronisation des systmes. Par ailleurs, il devient ainsi possible aux utilisateurs
dont le compte est conserv sur un domaine Windows de s'authentier lors de leurs
accs aux partages Samba.
Extension CIFS d'Unix. Les extensions CIFS d'Unix ont t dveloppes par
Hewlett-Packard et introduite dans Samba-2.2.4. Elles permettent aux serveurs Samba
de supporter les attributs des systmes de chiers Unix. Samba peut donc tre utilis
comme alternative au partage de chiers NFS ayant lieu entre machines Unix. En
l'occurrence, l'avantage de Samba est qu'il authentie de manire individuelle les uti-
lisateurs alors que NFS n'authentie que les clients sur base de leur adresse IP (ce qui
est faible en terme de scurit). De plus, la haute congurabilit de Samba lui permet
de jouer un rle important en terme de scurit, les systmes Unix pouvant donc tre
des clients Samba.
1 NdT : il s'agit d'une technique utilise dans un cadre client-serveur. Le client appelle
des procdures qui sont excutes sur un ordinateur distant grce un serveur d'applications.
Le protocole RPC gre les interactions entre le client et le serveur.
CHAPITRE 40. SMBD LE PROJET NT SAMBA. 474
40.1.7.3 Samba-3.0.
La dirence majeure de cette version est qu'elle comprend le support pour l'au-
thentication par Kerberos 5 et LDAP (Lightweigth D irectory Access P rotocol :
protocole d'annuaire sur TCP/IP) qui sont ncessaires pour agir en tant que clients
dans un domaine du rpertoire actif. On trouve aussi le support pour l'Unicode qui
simplie grandement l'accs aux langages internationaux.
Dans les versions ultrieures de type 3.0.x, l'quipe de dveloppement projette de
dveloppper la rplication de WINS ce qui permettra Samba d'agir comme serveur
WINS secondaire ou comme serveur WINS primaire avec des serveurs WINS Win-
dows ou Samba secondaires. Il est aussi envisag de faire agir Samba comme BDC de
Windows NT et de supporter les rapports de conance dans un domaine Windows
NT.
[global]
workgroup = MYGROUP
server string = Samba Server
hosts allow = 192.168.127.
printcap name = /etc/printcap
load printers = yes
printing = bsd
log file = /var/log/samba/%m.log
max log size = 0
security = user
socket options = TCP_NODELAY SO_RCVBUF=8192 + SO_SNDBUF=8192
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
[homes]
comment = Home Directories
browseable = no
writable = yes
[printers]
comment = All Printers
path = /var/spool/samba
CHAPITRE 40. SMBD LE PROJET NT SAMBA. 475
browseable = no
guest ok = no
printable = yes
Le protocole SMB enregistre les mots de passe de manire dirente que sous
Unix. Il requiert donc un chier de mots de passe, usuellement /etc/samba/-
smbpasswd. Il y a aussi une table de correspondance des noms de connexion
Unix et Samba dans /etc/samba/smbusers, mais pour des raisons de simpli-
cit, nous utiliserons les mmes login sous Samba et Unix. Nous ajoutons un
nouvel utilisateur Unix et Samba et, crons les mots de passe de cette manire :
/etc/init.d/smbd start
( /etc/rc.d/init.d/smbd start )
( /etc/init.d/samba start )
Pour faire bonne mesure, la conguration DNS devrait tre correctement faite
avec des requtes inverses et directes sur toutes les machines clientes.
A ce stade, vous pouvez tester votre serveur Samba depuis un site Unix. Li-
nux possde un support natif pour les partages SMB avec le systme de chiers
smbfs. Essayez maintenant de monter un partage servi par la machine locale :
mkdir -p /mnt/smb
mount -t smbfs -o username=psheer,passwd=12345 //cericon/psheer /mnt/smb
cericon (192.168.3.2) connect to service psheer as user psheer (uid=500, gid=500) (pid
942)
o le terme service dsigne soit une partie de rpertoire soit un partage d'im-
primante.
L'utilitaire smbclient est un outil gnrique pour lancer des requtes SMB,
mais il est principalement utile pour les impressions. Assurez-vous que le dmon
d'impression est en cours d'excution (et fonctionnel) et, ensuite lancez :
ce qui crera une entre sur la le d'impression. A votre chier de journali-
sation s'ajoutera le commentaire :
CHAPITRE 40. SMBD LE PROJET NT SAMBA. 476
cericon (192.168.3.2) connect to service lp as user psheer (uid=500, gid=500) (pid 1014)
Ensuite, il faut que vous vous dconnectiez depuis le menu Start et que
vous vous connectiez nouveau en tant qu'utilisateur Samba :
CHAPITRE 40. SMBD LE PROJET NT SAMBA. 477
Soyez trs attentif propos des utilisateurs que vous autorisez se connecter.
Si vous utilisez xinetd, crez un chier /etc/xinetd.d/swat :
CHAPITRE 40. SMBD LE PROJET NT SAMBA. 478
service swat
{
port = 901
socket_type = stream
wait = no
only_from = localhost 192.168.0.0/16
user = root
server = /usr/sbin/swat
server_args = -s /etc/samba/smb.conf
log_on_failure += USERID
disable = no
}
Aprs avoir redmarr inetd (ou xinetd), vous pouvez pointer votre navigateur
web vers http ://cericon :901/. Netscape vous demandera un nom d'utilisateur
et le mot de passe correspondant. Vous devriez vous connecter en tant que root
(swat n'utilise pas smbpasswd pour authentier cet utilisateur). L'interface de
la page web est intuitive :
Comme elle a t crite par les dveloppeurs mmes de Samba, vous pouvez
l'utiliser en toute conance pour eectuer des congurations de manire routi-
nire. La page web fournit aussi une interface d'accs la documentation. Notez
que la conguration ralise via cette interface crasera toute conguration dj
existante.
480
CHAPITRE 41. NAMED SERVEUR DE NOMS DE DOMAINE. 481
tail -f /var/log/messages
( tail -f /var/log/syslog )
41.1 Documentation.
Les pages de man relatives named sont hostname(7), named-xfer(8), named-
(8) et ndc(8). Ces pages se rapportent un document intitul Guide des op-
rations du serveur de noms BIND sous forme d'un chier Postscript intitul
/usr/[share/]doc/bind-<version>/bog/file.psf (ou /usr/share/doc/bi-
nd/bog.ps).
Le problme avec une partie de cette documentation est qu'elle est encore
base sur le chier de conguration dsormais obsolte named.boot. Il existe un
script /usr/doc/bind-<version>/named-bootconf/named-bootconf (ou en-
core /usr/sbin/named-bootconf) qui lit named.boot depuis stdin et crit un
chier name.conf vers stdout. Il est utile d'eectuer un echo old config
line | named-bootconf pour voir en quoi consiste l'quivalent sous le nou-
veau style.
Le rpertoire /usr/[share/]doc/bind[-version>]/html/ contient l'infor-
mation caractre gnral la plus importante. Il s'agit d'une rfrence complte
relative la conguration de bind. Les rpertoires en parallle contiennent aussi
des documents de type FAQ et diverses discussions sur la scurit. Un chier
nomm style.txt contient la disposition recommande des chiers de congu-
ration, en termes de abilit et de lisibilit. Enn, le rpertoire rfc/ contient
les RFCs d'intrt (voir la section 14.6).
domain localdomain
nameserver 127.0.0.1
.
Fichier de conguration de haut-niveau : /etc/named.conf
/*
* The directory line tells named that any further file name's
* given are under the /var/named/ directory
*/
options {
directory /var/named ;
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53 ;
};
zone cranzgot.co.za {
/* Forward lookups of hosts in my domain : */
zone cranzgot.co.za {
type master ;
file named.cranzgot.co.za ;
};
.
Liste de noms de serveur root : /var/named/named.ca
.
Recherche directe locale : /var/named/named/localdomain
$TTL 259200
@ IN SOA localhost.localdomain. dns-admin.localhost.localdomain. (
IN NS localhost.localdomain.
localhost IN A 127.0.0.1
.
Recherche inverse locale : /var/named/named.127.0.0.1
$TTL 259200
@ IN SOA localhost. dns-admin.localhost. (
200012101 ; Serial number
10800 ; Refresh every 3 hours
3600 ; Retry every hour
3600000 ; Expires after 42 days
259200 ) ; Minimum Time to Live (TTL) of 3 days
IN NS localhost.
IN PTR localhost.
.
Fichier de domaine autoritaire : /var/named/named/cranzgot.co.za
$TTL 259200
@ IN SOA nsl.cranzgot.co.za. dns-admin.nsl.cranzgot.co.za (
2000012101 ; Serial number
10800 ; Refresh every 3 hours
CHAPITRE 41. NAMED SERVEUR DE NOMS DE DOMAINE. 485
IN NS ns1.cranzgot.co.za.
IN NS ns2.cranzgot.co.za.
IN A 160.123.181.44
IN MX 10 mail1.cranzgot.co.za.
IN MX 20 mail2.cranzgot.co.za.
; We will use the first IP address for the name server itself :
ns1 IN A 196.28.144.16
;
: FTP server :
ftp IN A 196.28.144.17
; Aliases :
www IN CNAME cranzgot.co.za.
mail1 IN CNAME ns1.cranzgot.co.za.
mail2 IN CNAME ns2.cranzgot.co.za.
gopher IN CNAME ftp.cranzgot.co.za.
pop IN CNAME mail1.cranzgot.co.za.
proxy IN CNAME ftp.cranzgot.co.za.
; local LAN :
pc1 IN A 192.168.2.1
pc2 IN A 192.168.2.2
pc3 IN A 192.168.2.3
pc4 IN A 192.168.2.4
; and so on... to 192.168.2.255
.
Recherche inverse de LAN : /var/named/named/192.168.2
$TTL 259200
@ IN SOA nsl.cranzgot.co.za.
dns-admin.nsl.cranzgot.co.za. (
CHAPITRE 41. NAMED SERVEUR DE NOMS DE DOMAINE. 486
IN NS nsl.cranzgot.co.za.
1 IN A pc1.cranzgot.co.za.
2 IN A pc2.cranzgot.co.za.
3 IN A pc3.cranzgot.co.za.
4 IN A pc4.cranzgot.co.za.
; and so on... to 255
.
Recherche inverse autoritaire(1) : /var/named/named.196.28.144
$TTL 259200
@ IN SOA nsl.cranzgot.co.za. dns-admin.nsl.cranzgot.co.za. (
2000012101 ; Serial number
10800 ; Refresh every 3 hours
3600 ; Retry every hour
3600000 ; Expire after 42 days
259200 ) ; Minimum Time to Live (TTL) of 3 days
IN NS dns.big-isp.net.
0 IN NS dns.big-isp.net.
1 IN NS dns.big-isp.net.
2 IN NS dns.big-isp.net.
3 IN NS dns.big-isp.net.
4 IN NS dns.big-isp.net.
5 IN NS dns.big-isp.net.
6 IN NS dns.big-isp.net.
7 IN NS dns.big-isp.net.
8 IN NS dns.big-isp.net.
9 IN NS dns.big-isp.net.
10 IN NS dns.big-isp.net.
11 IN NS dns.big-isp.net.
12 IN NS dns.big-isp.net.
13 IN NS dns.big-isp.net.
14 IN NS dns.big-isp.net.
15 IN NS dns.big-isp.net.
16 IN PTR ns1.cranzgot.co.za.
17 IN PTR ftp.cranzgot.co.za.
18 IN PTR unused18.cranzgot.co.za.
19 IN PTR unused19.cranzgot.co.za.
20 IN PTR unused20.cranzgot.co.za.
21 IN PTR unused21.cranzgot.co.za.
22 IN PTR unused22.cranzgot.co.za.
23 IN PTR unused23.cranzgot.co.za.
24 IN NS dns.big-isp.net.
25 IN NS dns.big-isp.net.
26 IN NS dns.big-isp.net.
; and so on... up to 255
.
CHAPITRE 41. NAMED SERVEUR DE NOMS DE DOMAINE. 487
$TTL 259200
@ IN SOA nsl.cranzgot.co.za. dns-admin.nsl.cranzgot.co.za. (
2000012101 ; Serial number
10800 ; Refresh every 3 hours
3600 ; Retry every hour
3600000 ; Expire after 42 days
259200 ) ; Minimum Time to Live (TTL) of 3 days
IN NS nsl1.cranzgot.co.za.
IN NS nsl2.cranzgot.co.za.
IN PTR cranzgot.co.za
/etc/rc.d/init.d/named start
( /etc/init.d/named start )
( /etc/init.d/bind start )
/etc/rc.d/init.d/named stop
/etc/rc.d/init.d/named restart
/etc/rc.d/init.d/named status
Jul 8 15 :45 :23 ns1 named[17656] : status. named 8.2.2-P5 sat Aug 5 13 :21 :24 DET 2000 ^I
Jul 8 15 :45 :23 ns1 named[17656] : hint zone (IN) loaded (serial 0)
Jul 8 15 :45 :23 ns1 named[17656] : master zone localhost (IN) loaded (serial 2000012101)
Jul 8 15 :45 :23 ns1 named[17656] : master zone 1.0.0.127.in-addr.arpa (IN) loaded (serial
Jul 8 15 :45 :23 ns1 named[17656] : master zone cranzgot.co.za (IN) loaded (serial 20000121
Jul 8 15 :45 :23 ns1 named[17656] : master zone myisp.co.za (IN- loaded (serial 200012101
Jul 8 15 :45 :23 ns1 named[17656] : master zone 2.168.192.in-addr.arpa (IN) loaded (serial
Jul 8 15 :45 :23 ns1 named[17656] : master zone 144.28.196.in-addr.arpa (IN) loaded (serial
Jul 8 15 :45 :23 ns1 named[17656] : master zone 44.181.123.160.in-addr.arpa (IN) loaded (se
Si vous avez commis des erreurs de typographie ou nomm des chiers incorrec-
CHAPITRE 41. NAMED SERVEUR DE NOMS DE DOMAINE. 488
41.2.3.1 named.conf.
Le chier de conguration de haut-niveau /etc/named.conf a un format de
type C. Les commentaires sont entours par /* */ ou prcds de //.
Dans notre cas, la section intitule options indique un seul paramtre : le
rpertoire de localisation des chiers. Le chier options.html sous les rper-
toires de la documentation de bind renferme une liste d'options. Certaines sont
sotriques tandis que d'autres sont d'usage courant.
Les lignes zone . {... seront prsentes dans toutes les congurations des
serveurs de noms. Elles indiquent named qu'Internet, dans son ensemble, est
gouvern par le chier named.ca. De son ct, named.ca contient une liste des
serveurs de noms principaux (ou root ).
Les lignes zone localdomain {... sont usuelles. Elle indiquent que les
requtes directes pour host.localdomain sont contenues dans le chier /var/-
named/named.localdomain. Ce chier donne un rsultat correct dans le cas des
requtes relatives localhost. Beaucoup d'applications recherchent ce nom
auprs du serveur de noms et une conguration approprie doit ncessairement
le retourner. Notez qu'une telle recherche fonctionne toujours avec resolv.conf.
Ce chier prsente une ligne search localdomain, de sorte qu'une requte pour
localhost donne le mme rsultat qu'une requte pour localhost.localdo-
main.
Les lignes zone 1.0.0.127.in-addr.arpa {... resolvent les requtes in-
verses pour l'adresse IP 127.0.0.1 (enregistre dans le chier named.127.0.0.-
1). Notez que 1.0.0.127, c'est 127.0.0.1 crit dans l'ordre inverse. En fait, les
requtes inverses sont juste des requtes directes sous le domaine .in-addr.arpa.
De nombreuses applications eectuent une requte inverse sur les connexions re-
ues pour vrier leur authenticit, mme concernant localhost. Ds lors, vous
souhaiterez certainement que ces lignes soient prsentes an d'empcher ces
applications de bloquer.
La suite du chier correspond la conguration spcique notre domaine.
Les lignes zone cranzgot.co.za {... indiquent que l'information rela-
tive aux requtes inverses se trouve dans le chier named.cranzgot.co.za.
Les lignes zone 1.168.192.in-addr.arpa {... indiquent que l'informa-
tion pour les requtes inverses sur la gamme d'adresses IP 192.168.1.0-255 se
trouve dans le chier named.192.168.1.
Les lignes zone 44.182.124.160.in-addr.arpa {... indiquent que l'in-
formation propos des requtes inverses sur l'adresse 160.124.182.44 se trouve
dans le chier named.160.124.182.44.
CHAPITRE 41. NAMED SERVEUR DE NOMS DE DOMAINE. 489
ftp IN A 196.28.144.17
ftp.cranzgot.co.za. IN A 196.28.144.17
Soyez toujours attentif bien terminer les noms d'htes qualis avec un point,
sinon cela conduira named ajouter un domaine.
IN NS ns1.cranzgot.co.za.
cranzgot.co.za. IN NS ns1.cranzgot.co.za.
ns1 IN A 196.28.144.1
mail1 IN CNAME ns1.cranzgot.co.za
au lieu de :
ns1 IN A 196.28.144.1
mail1 IN A 196.28.144.1
<domain> IN NS <serveur_de_noms>
<domain> IN MX <serveur_courriel>
5 IN NS dns.big-isp.net.
$TTL 259200
@ IN SOA dns.dns.big-isp.net. dns-admin.dns.big-isp.net. (
2000012101 ; Serial number
10800 ; Refresh every 3
hours
3600 ; Retry every hour
3600000 ; Expire after 42 days
259200 ) ; Minimum Time to Live (TTL) of 3 days
IN NS dns.big-isp.net.
0 IN NS ns1.dali.co.za.
1 IN NS ns1.dali.co.za.
2 IN NS ns1.dali.co.za.
3 IN NS ns1.dali.co.za.
4 IN NS ns1.dali.co.za.
5 IN NS ns1.dali.co.za.
6 IN NS ns1.dali.co.za.
7 IN NS ns1.dali.co.za.
8 IN NS ns1.picasso.co.za.
9 IN NS ns1.picasso.co.za.
10 IN NS ns1.picasso.co.za.
11 IN NS ns1.picasso.co.za.
12 IN NS ns1.picasso.co.za.
13 IN NS ns1.picasso.co.za.
14 IN NS ns1.picasso.co.za.
15 IN NS ns1.picasso.co.za.
16 IN PTR ns1.cranzgot.co.za.
17 IN PTR ns1.cranzgot.co.za.
18 IN PTR ns1.cranzgot.co.za.
19 IN PTR ns1.cranzgot.co.za.
20 IN PTR ns1.cranzgot.co.za.
21 IN PTR ns1.cranzgot.co.za.
22 IN PTR ns1.cranzgot.co.za.
23 IN PTR ns1.cranzgot.co.za.
24 IN NS ns1.matisse.co.za.
25 IN NS ns1.matisse.co.za.
26 IN NS ns1.matisse.co.za.
27 IN NS ns1.matisse.co.za.
CHAPITRE 41. NAMED SERVEUR DE NOMS DE DOMAINE. 492
28 IN NS ns1.matisse.co.za.
29 IN NS ns1.matisse.co.za.
30 IN NS ns1.matisse.co.za.
31 IN NS ns1.matisse.co.za.
; and so on... up to 255
cnn.com IN A 207.25.71.5
cnn.com IN A 207.25.71.6
.
.
.
cnn.com IN A 207.25.71.29
cnn.com IN A 207.25.71.30
options {
forwarders {
<nameserver> ;
};
directory /var/named ;
};
$TTL 259200
@ IN SOA cericon.priv.ate. root.cericon.priv.ate.
( 2000012101 10800 3600 3600000 259200 )
IN NS cericon.priv.ate.
cericon IN A 192.168.1.1
news IN A 192.168.1.2
$TTL 259200
@ IN SOA localhost. root.localhost.
( 2000012101 10800 3600 3600000 259200 )
IN NS localhost.
1.1 IN PTR cericon.priv.ate.
Les chiers complmentaires sont identiques ceux repris plus haut. De plus,
vriez bien que votre nom d'hte ait t congur comme indiqu au chapitre
28.
options {
directory /var/named ;
};
zone . {
type hint ;
file named.ca ;
};
zone localdomain {
type master ;
file named.localdomain ;
};
zone 1.0.0.127.in-addr.arpa {
type master ;
file named.127.0.0.1 ;
};
zone cranzgot.co.za {
type slave ;
file named.cranzgot.co.za ;
masters {
196.28.144.16 ;
};
};
zone 2.168.192.in-addr.arpa {
type slave ;
file named.192.168.2 ;
masters {
196.28.144.16 ;
};
};
CHAPITRE 41. NAMED SERVEUR DE NOMS DE DOMAINE. 495
zone 144.28.196.in-addr.arpa {
type slave ;
file named.196.28.144 ;
masters {
196.28.144.16 ;
};
};
zone 44.181.123.160.in-addr.arpa {
type slave ;
file named.160.123.181.44 ;
masters {
196.28.144.16 ;
};
};
Quand une entre contient master, vous devez fournir le chier appropri.
Quand une entre contient slave, named tlcharge automatiquement le -
chier depuis 196.28.144.12 (c'est--dire ns1.cranzgot.co.za), la premire
fois qu'une requte est ncessaire pour ce domaine.
Protocole Point--Point -
Rseau dialup.
L'exploitation du rseau tlphonique aux moyen de connexions intermit-
tentes n'est pas able et entrane des dicults de conguration. Ceci est d au
fait que les tlphones n'ont pas t conus pour le transfert de donnes (au sens
informatique du terme). Cependant, tant donn que le rseau tlphonique est
le plus dvelopp des rseaux lectroniques au monde, il est logique de vouloir
en tirer parti. C'est pour cela que les modems ont t crs. En revanche, le
RNIS n'est que lgrement plus coteux et constitue un bien meilleur choix.1
Voir la section 42.7 pour davantage d'informations.
<nom_utilisateur> * <mot_de_passe> *
1 NdT : RNIS signie Rseau Numrique Intgration de Services. ISDN en est le terme
quivalent anglais (Integrated Services Digital Network ). Il s'agit d'un rseau permettant de
transporter la fois de la voix, des images, des donnes, l'aide d'un tlphone, d'un fax,
d'un PABX (Private Automatic Branch eXchange ; il s'agit d'un botier lectronique auxquels
sont relis tous les postes tlphoniques d'une entreprise et toutes les lignes tlphoniques
extrieures. Le terme franais est autocommutateur). Le terme RNIS est oppos RTC
(Rseau Tlphonique Commut, appel PSTN en anglais pour Public Switched Telephone
Network ).
496
CHAPITRE 42. PROTOCOLE POINT--POINT - RSEAU DIALUP. 497
ppd connect \
chat -S -s -v \
'AT&F1' \
OK ATDT<tel-number> CONNECT \
name : <nom_utilisateur> assword : '\q<mot_de_passe>' \
con : ppp \
/dev/<modem> 57600 debug crtscts modem lock nodetach \
hide-password defaultroute \
user <nom_utilisateur> \
noauth
dip -t
[root@cericon]# dip -t
DIP : Dialup IP Protocol Driver version 3.3.7o-uri (8 Feb 96)
Written by Fred N. van Kempen, MicroWalt Corporation.
c2-ctn-icon :ppp
Entering PPP mode.
Async interface address is unnumbered (FastEthernet0)
Your IP address is 196.34.157.148. MTU is 1500 bytes
A prsent, vous pouvez modier le script chat ci-dessus votre guise. Les chan-
gements sont lmentaires. Par exemple, vous pouvez indiquer login : au lieu
de name :. Certains systmes vous demanderont aussi de saisir d'autres infor-
mations que ppp, tandis que d'autres ne vous demanderont plus rien aprs le
mot de passe. Il arrive que certains systmes ne requirent pas de donnes aprs
tre entrs en mode PPP.
Notez que dip cre aussi des chiers de verrouillage UUCP comme c'est
expliqu la section 35.4.
send (ATDT4068500^M)
expect (CONNECT)
^M
ATDT4068500^M^M
CONNECT
--got it
send(^M)
expect (name)
^M
ATDT4068500^M^M
CONNECT
--got it
send(^M)
expect (name)
45333/ARQ/V90/LAPM/V42BIS^M
Checking authorization, Please wait...^M
username :
-- got it
send (psheer^M)
expect (assword :)
psheer^M
password :
-- got it
CHAPITRE 42. PROTOCOLE POINT--POINT - RSEAU DIALUP. 500
send ( ? ? ? ? ? ?)
expect (con :)
^M
^M
c2-ctn-icon :
-- got it
send (ppp^M)
Serial connection established.
Using interface ppp0
Connect : ppp0 <--> /dev/ttyS0
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x88c5a54f> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x3d <asyncmap 0x0a0000> <magic 0x3435476c> <pcomp> <accomp>]
sent [LCP ConfAck id=0x3d <asyncmap 0xa0000> <magic 0x3435476c> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x88c5a54f> <pcomp> <accomp>]
sent [IPCP ConfReq id=0x1 <addr 192.168.3.9> <compress VJ Of 01>]
sent [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
rcvd [IPCP ConfReq id=0x45 <addr 168.209.2.67>]
sent [IPCP ConfAck id=0x45 <addr 168.209.2.67>]
rcvd [IPCP ConfRej id=0x1 <compress VJ Of O1>]
sent [IPCP ConfRej id=0x2 <addr 192.168.3.9>]
rcvd [IPCP ProtRej od=0x3e 80 fd 01 01 00 0f 1a 04 78 00 18 04 78 00 15 03 2f]
rcvd [IPCP ConfNak id=Ox2 <addr 196.34.157.131>]
sent [IPCP ConfReq id=0x3 <addr 196.34.157.131>]
rcvd [IPCP ConfAck id=0x3 <addr 196.34.157.131>]
local IP address 196.34.25.95
remote IP addres 168.209.2.67
Script /etc/ppp/ip-up started (pid 671)
Script /etc/ppp/ip-up finished (pid 671), status =0x0
Terminating on signal 2.
Script /etc/ppp/ip-down started (pid 701)
sent [LCP TermRep id=0x2 User request]
rcvd [LCP TermAck id=0x2]
Vous pouvez voir fonctionner les squences interactives, si bien qu'il est ais
de les corriger si vous faites des erreurs quelque part.
A ce stade, vous voudrez peut-tre obtenir le rsultat de route -n et ifconfig
dans un autre terminal :
[root@cericon]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
168.209.2.67 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 168.209.2.69 0.0.0.0 UG 0 0 0 ppp0
[root@cericon]# ifconfig
lo Link encap :Local Loopback
inet addr :127.0.0.1 Mask :255.0.0.0
UP LOOPBACK RUNNING MTU :3924 Metric :1
CHAPITRE 42. PROTOCOLE POINT--POINT - RSEAU DIALUP. 501
Fig. 42.1 Schma d'un rseau domestique (ou d'une petite entreprise) de classe
C (192.168.0.0/24) avec une passerelle connecte l'internet par un modem
(via ppp0). Le modem peut tre de type cble ou ADSL.
sortants (output) et sur les paquets transmis (forward). Pour chacune des
trois chanes, il existe trois politiques : acceptation du paquet (ACCEPT), rejet
du paquet en prvenant la source du paquet que ce dernier est rejet (REJECT)3
et limination du paquet (DENY).
CONFIG_PACKET
CONFIG_NETFILTER
CONFIG_IP_NF_CONNTRACK
CONFIG_IP_NF_FTP
CONFIG_IP_NF_IRC
CONFIG_IP_NF_IPTABLES
CONFIG_IP_NF_NAT
CONFIG_IP_NF_MATCH_STATE
CONFIG_IP_NF_TARGET_LOG
CONFIG_IP_NF_MATCH_LIMIT
CONFIG_IP_NF_TARGET_MASQUERADE
CONFIG_IP_NF_COMPAT_IPFWADM
CONFIG_IP_NF_COMPAT_IPCHAINS
CONFIG_IP_NF_TARGET_REDIRECT
CONFIG_IP_NF_MATCH_MAC
Cette tape prcde la compilation du noyau (voir la section 43.11 pour les
3 Il est conseill de toujours utiliser DENY de manire ne pas alerter l'expditeur qui pourrait
tre un pirate.
CHAPITRE 42. PROTOCOLE POINT--POINT - RSEAU DIALUP. 504
42.2.2.3 Tables.
Grce aux cinq points d'accrochage, Netlter est capable :
d'eectuer des ltrages de paquets (fonction de pare-feu) de manire, par
exemple, interdire tous les paquets venant d'internet mais autoriser
les paquets s'adressant au port 80 (HTTP),
d'eectuer de la traduction d'adresses rseau ou NAT (Network Address
Translation ), ce qui est utile quand on veut faire communiquer avec l'in-
ternet un rseau priv prsentant des adresses du type 192.168.x.y.,
de marquer des paquets de manire leur appliquer un traitement spcial.
4 Pour complter l'information prsente ici, le lecteur devrait consulter le projet
Netfilter/Iptables l'adresse : http ://www.netlter.org.
CHAPITRE 42. PROTOCOLE POINT--POINT - RSEAU DIALUP. 505
Netlter peut agir ainsi grce la commande iptables qui crit dans trois
tables : FILTER, NAT et MANGLE.
La table FILTER contient les rgles de ltrage des paquets ; il y a trois
chanes :
INPUT qui dcide du sort des paquets entrant en local sur l'hte,
OUTPUT qui traite les paquets sortants,
FORWARD qui ltre les paquets allant d'une interface une autre, selon les
routes existantes.
La table NAT eectue toutes les traductions d'adresses ncessaires :
PREROUTING est une chane de traduction d'adresses IP (IP translation ),
POSTROUTING permet la traduction de l'adresse de la source,
OUTPUT permet de modier la destination des paquets produits localement
(c'est--dire par la passerelle).
La table MANGLE opre des marquages de paquets entrants (PREROUTING) et
produits localement (OUTPUT). Le marquage de paquets dans leur en-tte sert
autoriser un traitement spcial des paquets dans la table de routage.
Deux cas peuvent se prsenter sur un pare-feu. Quelle que soit l'interface
sur laquelle arrive un message, ce dernier passe par la fonction de dcision de
routage. Celle-ci dtermine si le paquet est destin un processus local l'hte
ou une machine d'un autre rseau :
soit le paquet est destin l'hte local, alors il traverse la chane INPUT,
soit le paquet est destin un autre hte : il traverse la chane FORWARD.
Dans le premier cas de gure, si le paquet n'est pas rejet, il est transmis au
processus auquel il s'adresse. Le processus le traite et met, le cas chant, un
nouveau paquet en rponse. Ce nouveau paquet traverse la chane OUTPUT. S'il
n'est pas rejet, il est dirig vers la sortie.
CHAPITRE 42. PROTOCOLE POINT--POINT - RSEAU DIALUP. 506
Dans le second cas de gure, si le paquet n'est pas rejet, il poursuit sa route.
42.2.2.4 Syntaxe.
Il est bien entendu ncessaire de visiter iptables(8), mais nous allons voir
quelques lments essentiels.
Les comportements adresss l'endroit d'un paquet sont :
ACCEPT : paquet autoris,
REJECT : le paquet est rejet et il y a envoi d'un message l'expditeur,
DROP : le paquet est ignor,
LOG : le paquet est journalis.
Les principales options de manipulation des chanes sont :
A : ajoute une rgle une chane,
D : supprime une rgle une chane,
F : supprime les rgles une une (ush ),
I : insertion d'une rgle une position donne dans une chane,
L : achage des rgles,
N : cration d'une nouvelle chane par un utilisateur,
P : politique par dfaut l'endroit d'une chane,
R : remplacement d'une chane donne par une autre,
X : suppression d'une chane vide.
Les paramtres principaux sont :
c : permet d'initialiser le compteur de paquets et d'octets d'une rgle,
d : spcie la destination (voir le paramtre -s),
i : le smaphore -i dsigne l'interface d'entre et n'est fonctionnel que
dans les chanes INPUT et OUTPUT,
j : le smaphore -j signie : que faut-il faire du paquet ?. Il est typique-
ment suivi des termes ACCEPT, DROP ou REJECT,
o : le smaphore -o dsigne l'interface de sortie et n'est fonctionnel que
dans les chanes FORWARD et OUTPUT.
p : il s'agit du protocole (tcp, udp, icmp ou all),
s : indique la source (nom de rseau, nom d'hte, adresse d'un rseau ou
adresse IP),
[ !] : un paquet auquel ce smaphore s'applique ne correspondra aucune
des rgles spcies.
Notez encore que :
les ports TCP et UDP doivent tre mentionns avec les options --source/-
port/--sport (ou --destination-port/--dport). Ils doivent tre pla-
cs aprs les options -p tcp ou -p udp. Ceci permet de charger les ex-
tensions TCP et UDP, respectivement. Peut suivre : (i) le numro du
port (iptables -A INPUT -p tcp --dport 110 -j DENY), (ii) une s-
rie de ports dcrits un un (iptables -A INPUT -p tcp -m multiport
-dport 110,4242,119 -j DROP) ou (iii) une srie de ports sous forme
d'une plage (iptables -A INPUT -p tcp -sport 4925 :4633 -j ACCEPT),
grce --tcp-flags, la possibilit existe de spcier une correspondance
sur un smaphore tcp (SYN, ACK, FIN, RST, URG, PSH, ALL, NONE) comme
dans iptables -A INPUT -p tcp --dport 42 --tcp-flags SYN,ACK -j
ACCEPT,
grce --icmp-type, on peut indiquer une action conduire sur un pa-
quet icmp (8 pour ping) : par exemple, iptables -A INPUT -p icmp
CHAPITRE 42. PROTOCOLE POINT--POINT - RSEAU DIALUP. 507
--icmp-type 8 -j ACCEPT,
grce --mac-address, il est possible d'tablir une rgle pour une adresse
MAC comme dans iptables -A INPUT --mac-source 42.42.AA.42.AA
-j DROP.
/etc/init.d/iptables save
/etc/init.d/iptables restart
iptables -t mangle -X
# tablissement du NAT :
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Pour l'instant, les pings du rseau local vers l'internet ne sont pas fonction-
nels car FORWARD eectue toujours un DROP sur tous les paquets. Nous allons
donc accorder des autorisations sur le FORWARD. Pour raliser cette opration,
nous utilisons le mcanisme de conntrack (ou suivi de connexions). Quoiqu'un
peu consommateur de ressources sur la passerelle, le suivi de connexion permet
d'obtenir des informations sur toute connexion en cours :
NEW paquet demandant une nouvelle connexion,
ESTABLISHED paquet associ une connexion dj tablie,
RELATED nouvelle connexion lie une connexion tablie (par exemple, dans
le cas d'une connexion FTP active),
INVALID paquet associ une connexion inconnue.
Il est possible de n'accepter et ce dans les deux sens (depuis et vers l'internet)
que les connexions dj tablies ou en relation avec des connexions dj tablies
et, de n'accepter de nouvelles connexions que depuis votre rseau vers l'internet.
Avec cette manire de procder, votre rseau local peut se connecter sur tout
serveur de l'internet, mais aucune nouvelle connexion ne peut tre tablie depuis
l'internet vers votre rseau.
Nous allons donc faire en sorte que toutes les connexions nouvelles, tablies
et associes une connexion dj tablie qui entrent par eth0 (rseau local) et
qui veulent sortir par ppp0 (vers l'internet) puissent passer. Nous allons aussi
permettre que toutes les connexions tablies ou associes une connexion dj
tablie qui entrent par ppp0 et veulent aller vers eth0 puissent passer.
5 Notez que le NAT peut tre restreint une plage d'adresses IP de votre rseau LAN :
iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -o ppp0
-j MASQUERADE
ou une liste d'adresses dnies :
iptables -t nat -A POSTROUTING -s 192.168.0.10 -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.11 -o ppp0 -j MASQUERADE
CHAPITRE 42. PROTOCOLE POINT--POINT - RSEAU DIALUP. 509
tcp 6 14 CLOSE_WAIT
src=192.168.0.10 dst=213.186.35.33 sport=1102 dport=80
src=213.186.35.33 dst=80.8.130.97 sport=80 dport=1102 [ASSURED] use=1
tcp 6 73 TIME_WAIT
src=192.168.0.10 dst=213.186.35.33 sport=1104 dport=80
src=213.186.35.33 dst=80.8.130.97 sport=80 dport=1104 [ASSURED] use=1
tcp 6 82 SYN_SENT
src=192.168.0.10 dst=213.186.35.33 sport=1105 dport=80 [UNREPLIED]
src=213.186.35.33 dst=80.8.130.97 sport=80 dport=1105 use=1
tcp 6 51 CLOSE_WAIT
src=192.168.0.10 dst=213.186.35.33 sport=1106 dport=80
src=213.186.35.33 dst=80.8.130.97 sport=80 dport=1106 [ASSURED] use=1
Pour comprendre ces informations, il faut savoir qu'une des machines du LAN
possde l'adresse IP 192.168.0.10 et que la passerelle a pour adresse IP sur le
LAN : 192.168.0.255. L'adresse IP de la passerelle sur l'internet est 80.8.193.-
97. Le client navigue sur un serveur HTTP (sport=80) dont l'adresse IP est
213.186.35.33. Le troisime champ de chaque nouvelle entre est un timer.
L'entre est eace de la table /proc/ip_conntrack lorsque le nombre atteint
zro. Cette table tant en mmoire (sur le chier virtuel /proc), son contenu vo-
CHAPITRE 42. PROTOCOLE POINT--POINT - RSEAU DIALUP. 510
Notez l'utilisation de ! qui ressemble l'oprateur logique NON (qui veut dire
en l'occurrence : sauf) et de dport signiant port de destination.
A prsent, concernant le serveur SMTP, nous savons qu'il coute sur le port
25 et utilise TCP :
Enn, pour que vous puissiez accder votre passerelle depuis l'internet (en
supposant que vous puissiez relever son adresse IP tout instant), il faut garder
l'esprit qu'SSH coute le port 22 et utilise TCP :
/etc/init.d/iptables save
6 Bien qu'il ne soit pas ncessaire, le service auth peut tre ouvert de manire que les
services se connectant reoivent un message d'chec au lieu d'attendre le dlai d'interrup-
tion. Cependant, pour des raisons de scurit, vous devriez commentez la ligne auth dans
/etc/inetd.conf.
CHAPITRE 42. PROTOCOLE POINT--POINT - RSEAU DIALUP. 511
/etc/init.d/iptables start
Ensuite, vriez que les ports devant rester ouverts le sont bel et bien.
Pour verrouiller le parefeu de sorte ce que plus rien ne passe :
/etc/init.d/iptables panic
ppd connect \
chat -S -s -v \
'AT&F1' \
OK ATDT<tel-number> CONNECT \
name : <nom_utilisateur> assword : '\q<mot_de_passe>' \
con : ppp \
/dev/ttyS0 57600 debug crtscts modem lock nodetach \
hide-password defaultroute \
user <nom_utilisateur> \
demand \
:10.112.112.112 \
idle 180 \
holdoff 30
options {
forwarders { 196.7.173.2 ; /* exemple only */ } ;
listen-on { 192.168.2.254 ; } ;
directory /var/cache/bind ;
dialup yes ; notify no ; forward only ;
};
L'option dialup yes ; notify no ; forward only ; indique dans l'ordre bind
(i) d'utiliser la ligne aussi peu que possible, (ii) de ne pas envoyer de messages
d'annonce (il n'y a pas de serveur esclave sur notre LAN pour faire des an-
nonces) et (iii) de rediriger les requtes vers 192.168.2.254 plutt que d'essayer
de leur rpondre. L'option listen-on force le serveur de noms se connecter
l'interface rseau 192.168.2.254, exclusivement. Dans le prsent exemple,
l'interface 192.168.2.254 est notre carte Ethernet qui route les paquets depuis
7 NdT : au moment de la traduction, la version la plus rcente tait ppp-2.4.x.
CHAPITRE 42. PROTOCOLE POINT--POINT - RSEAU DIALUP. 512
le rseau LAN. Ceci est important pour la scurit, parce qu'on empche ainsi
toute connexion entrante tente depuis l'extrieur du rseau.
Il existe aussi un paquet DNS crit spciquement pour utiliser des serveurs
connexions intermittentes. Ce paquet, appel dnrd, est beaucoup plus facile
congurer que bind.
et ensuite la ligne :
Notez que nous nous passons des options relatives la ligne srie (c'est--dire
le contrle et la vitesse de ux) parce que mgetty a dj initialis la ligne srie.
<nom_hte> reprsente le nom de la machine locale. La conguration de proxy-
arp ajoute le client distant aux tables ARP.8 Ceci permet votre client de se
connecter l'internet, de l'autre ct de la ligne sans ajouter de route suppl-
mentaire. Le chier /etc/ppp/chap-secrets peut tre complt par cette ligne :
8 NdT : ARP est l'acronyme d'Address Resolution Protocol. Ce protocole permet de traduire
des adresses IP 32 bits en adresses Ethernet 48 bits. Il est dni par la RFC 826.
CHAPITRE 42. PROTOCOLE POINT--POINT - RSEAU DIALUP. 513
dialup * <mot_de_passe> *
pppd \
connect chat -S -s -v 'AT&F1' OK ATDT<telephone> CONNECT .
/dev/<modem> 57600 debug crtscts modem lock nodetach
hide-password defaultroute \
user dialup \
noauth
Vous devriez tre trs attentif disposer d'une conguration DNS irrprochable
pour les requtes directes et inverses de vos adresses IP associes pppd. Le but
est qu'aucun service ne bloque en induisant de longs dlais d'attente et aussi,
pour que les autres machines de l'internet se comportent amicalement avec
vos connexions d'utilisateur.
Notez que ce qui prcde devrait fonctionner avec les tlcopies, les connex-
ions distantes, la voix et uucp (voir la section 35.3) sur le mme modem puisque
mgetty dmarre seulement pppd au cas o il dtecte une requtes LCP (Link
Control Protocol ; il s'agit d'une partie du protocole PPP).9
Si vous voulez seulement employer PPP, lisez le chier de conguration dans
/etc/mgetty+sendfax (ou /etc/mgetty sur Debian) pour dsactiver les autres
services.
tcpdump -n -N -f -i ppp0
classiques en tout point il sut de brancher son tlphone pour pouvoir eec-
tuer des appels. Les canaux digitaux supportent la transmission de donnes
raison de 64 Kbits/s. Seul l'quipement RNIS peut tre branch sur ces canaux
et la facturation est la mme que pour les communications tlphoniques. Pour
communiquer via les canaux digitaux, vous devez avoir un fournisseur d'accs
internet (comme c'est le cas pour la ligne tlphonique classique). PPP fonc-
tionne sur RNIS de la mme manire qu'avec un modem. Il ft un temps o
seuls de coteux routeurs RNIS pouvaient fontionner avec le rseau numrique,
mais les modems RNIS et les cartes RNIS ISA/PCI sont dsormais bon march
an de permettre tout le monde d'utiliser le rseau numrique. Gnralement,
les compagnies de tlphonie installent une ligne RNIS aussi rapidement qu'une
ligne tlphonique classique. Aussi, la question surgit de savoir ce que le RNIS
apporte de plus ? On a probablement imagin que le transfert de donnes simul-
tanment l'usage d'un tlphone normal pouvait tre la rponse au service
des communications. Il reste dterminer, cependant, si la video-confrence sur
des lignes 64 Kb deviendra un outil usuel.
Le RNIS n'est pas couvert de manire plus approfondie dans ce livre. Un
HOWTO lui est consacr. Soyez tout de mme attentif au fait que le RNIS
communique de manire trs rapide, en eectuant des milliers de communica-
tions en quelques minutes, ce qui peut s'avrer plutt coteux.
Chapitre 43
515
CHAPITRE 43. SOURCES DU NOYAU LINUX, MODULES ET SUPPORT MATRIEL.516
insmod /lib/modules/<version>/fs/fat.o
lsmod
insmod fat
lsmod
1 NdT : Openmosix est une extension du noyau Linux. Le lecteur se rfrera au projet
Openmosix l'adresse : http ://openmosix.sourceforge.net/
CHAPITRE 43. SOURCES DU NOYAU LINUX, MODULES ET SUPPORT MATRIEL.517
insmod /lib/modules/<version>/kernel/fs/fat/fat.o
Pour les noyaux 2.6, les commandes sont (la commande entre parenthse per-
met la recherche des modules ; remarquez l'extension .ko de ceux associs
2.6) :
Cependant, modprobe s'appuie sur une table de dpendance des modules. Celle-
ci rside dans un chier /lib/modules/<version>/modules.dep et est cre
automatiquement par vos scripts de dmarrage via la commande :
/sbin/depmod -a
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
01f0-01f7 : ide0
0220-022f : soundblaster
02f8-022f : serial (auto)
0330-0333 : MPU-401 UART
0376-0376 : ide1
0378-037a : parport0
0388-038b : OPL3/OPL2
03c0-O3df : vga+
03c0-03f5 : floppy
03f6-03f6 : ide0
03f7-03f7 : floppy DIR
03f8-e47f : serial (auto)
e400-e47f : DC21140 (eth0)
f000-f007 : ide0
f008-f00f : ide1
CPUO
0 : 8409034 XT-PIC timer
1 : 157231 XT-PIC keyboard
2 : 0 XT-PIC cascade
3 : 104347 XT-PIC serial
5 : 2 XT-PIC soundblaster
6 : 82 XT-PIC floppy
7 : 2 XT-PIC parport0
8 : 1 XT-PIC rtc
11 : 8 XT-PIC DC21140 (eth0)
13 : 1 XT-PIC fpu
14 : 237337 XT-PIC ide0
15 : 16919 XT-PIC ide1
NMI 0
CHAPITRE 43. SOURCES DU NOYAU LINUX, MODULES ET SUPPORT MATRIEL.519
1 : SoundBlaster8
2 : floppy
4 : cascade
5 : SoundBlater16
ce qui montre que plusieurs centaines d'interruptions ont t reues. Une autre
entre utile consiste en /proc/devices, qui rpertorie les numros majeurs al-
lous et ceux eectivement utiliss. Ce chier s'avre extrmement utile pour
prendre connaissance des priphriques en activit sur votre systme.
linux aha1542=<portbase>[,<buson>,<busoff>[,<dmaspeed>]]
an d'initialiser le pilote SCSI Adaptec 1542. Que reprsentent ces op-
tions ? La rponse peut tre obtenue en consultant le chier /usr/src/li-
nux/`uname -r`/drivers/scsi/aha1542.c. Les commentaires explicitant
la signication de ces options se trouvent au dbut du chier.
2. Si vous utilisez LOADLIN.EXE, ou d'autres chargeurs de noyau DOS ou MS-
Windows, vous pouvez aussi passer des options. Toutefois, nous n'irons pas
plus loin pour ce cas.
3. /etc/lilo.conf peut prendre une option append =, tel que cela a t dis-
cut la page 359. Cette mthode permet de passer des options au noyau
CHAPITRE 43. SOURCES DU NOYAU LINUX, MODULES ET SUPPORT MATRIEL.520
append = aha1542=<portbase>[,<buson>,<busoff>[,<dmaspeed>]]
append = ether=9,0x300,0xd0000,0xd4000,eth0
append = ether=0,0,eth1
alias eth0 wd
alias eth1 de4x5
options wd irq=9 io=0x300 mem=0dx0000 mem_end=0xd4000
ment dynamique des modules. Ceci signie que le noyau charge automati-
quement les modules ncessaires au cas o le pilote est requis (de la mme
manire que lorsqu'ifconfig est utilis pour les priphriques Ether-
net). Le noyau essaie simplement /sbin/modprobe eth0, et la ligne alias
informe modprobe d'excuter /sbin/modprobe wd. Par ailleurs, la ligne
options signie qu'il faut excuter /sbin/modprobe wd irq=9 io=0x300
mem=0xd0000 mem_end=0xd4000. De cette manire, /etc/modules.conf
consiste en une table de correspondances priphriques pilotes.
ce qui permet de n'utiliser que deux commandes pour congurer toutes les cartes
PnP ISA. Notez que le chier /etc/isapnp.gone peut tre employ pour faire
en sorte que pnpdump vite d'utiliser certains ports E/S et IRQ. Voici un exemple
de ce chier :
IO 0x378,2
IRQ 7
qui permet d'viter les conits avec le port parallle. La commande isapnp
/etc/isapnp.conf doit tre excute chaque amorage et devrait normale-
ment tre prte pour une utilisation par les scripts de dmarrage.
A prsent que votre carte ISA est identie, vous allez installer les modules
ncessaires. Lisez le chier /etc/isapnp.conf et la sortie d'isapnp ci-dessus de
manire rfrencer les ports d'E/S comme options :
alias sound-slot-0 sb
alias sound-service-0-0 sb
alias sound-service-0-1 sb
alias sound-service-0-2 sb
alias sound-service-0-3 sb
alias sound-service-0-4 sb
alias sound-synth-0 sb
post-install sb /sbin/modprobe -k adlib_card
options sb io=0x220 irq=5 dma=1 dma16=5 mpu_io=0x330
options adlib_card io=0x388 # FM synthesizer
depmod -a
modprobe sb
CHAPITRE 43. SOURCES DU NOYAU LINUX, MODULES ET SUPPORT MATRIEL.523
Si vous ne recevez pas d'erreur provenant du noyau (ou tout autre type d'erreur),
vos priphriques sont dsormais fonctionnels.
Maintenant, il est souhaitable que le chargement du module se fasse de ma-
nire dynamique. Enlevez tous les modules son avec rmmod -a (ventuellement,
faites cette opration manuellement) et, ensuite, essayez :
aumix
playmidi <un_fichier>.mid
Si vous devez dcommenter les lignes alias, un message tel que modprobe :
Can't locate module sound-slot-0 : devrait tre mis. Ceci indique que le
noyau essaye la commande /sbin/modprobe sound-slot-0, une procdure des-
tine insrer une ligne alias. En ralit, sound-service-0-0,1,2,3,4 repr-
sente les priphriques /dev/mixer,sequencer,midi,dsp,audio, respectivement.
Le terme sound-slot-0 dsigne une carte qui devrait fournir tous ces services.
L'option post-install indique qu'il faut raliser une commande supplmen-
taire aprs l'installation du module, ceci pour prendre en compte le pilote du
squenceur Adlib. [...]
modinfo -p ne
modprobe ne io=0x300 irq=9
alias eth0 ne
options ne io=0x300 irq=9
Il arrivera peut-tre que vous disposiez d'une carte (type PnP) congurable
de manire logicielle mais seulement l'aide d'un utilitaire DOS. Dans ce cas,
la compilation du module dans le noyau entranera son auto-dtection lors du
dmarrage sans qu'il soit ncessaire d'en faire la conguration.
Le pire scnario est celui d'une carte dont la fabrication est inconnue et dont
vous ne connaissez pas les IRQ et E/S. Le numro de la puce peut parfois livrer
une indication (faites un grep sur les sources du noyau avec ce numro) mais ce
n'est pas garanti. Pour qu'une telle carte puisse fonctionner, compilez plusieurs
modules qui vous semblent correspondre la carte. L'exprience permet de
s'amliorer rapidement ce petit jeu. Si vos dductions sont correctes, votre
carte sera trs certainement dcouverte lors du ramorage. Vous pouvez trouver
les valeurs d'IRQ et E/S dans /proc/ ou alors, vous pouvez lancer la commande
dmesg pour dterminer la ou les ligne(s) se rapportant votre priphrique. S'il
s'agit d'une carte Ethernet, une des lignes doit dbuter avec eth0 :... et le
rsultat de dmesg devrait fournir de l'information propos du pilote.
Les priphriques PCI ne requirent presque jamais que les IRQ ou les ports
E/S soient fournis comme options. Tant que votre module est correct, une simple
commande :
modprobe <module>
. . .
pci bus 0x0 cardnum 0x09 function 0x0000 : vendor 0x1011 device 0x0009
Digital DC21140 10/100 Mb/s Ethernet
CHAPITRE 43. SOURCES DU NOYAU LINUX, MODULES ET SUPPORT MATRIEL.525
pci bus 0x0 cardnum 0x0b function 0x0000 : vendor 0x8086 device 0x1229
Intel 82557/8/9 10/100MBit network controller
pci bus 0x0 cardnum 0x0c function 0x0000 : vendor 0x1274 device 0x1371
Ensoniq es1371
lspci est un autre utilitaire provenant du paquet pciutils. Il donne une in-
formation complte l o scanpci n'en fournit parfois aucune. Ainsi un petit
script (donn entre parenthses pour les noyaux 2.4) tel que :
( for i in /lib/modules/<version>/kernel/drivers/net* \
; do strings $i | grep -q -i 21140 && echo $i ; done )
( for i in /lib/modules/<version>/drivers/net/* \
; do strings $i | grep -q -i 8255 && echo $i ; done )
.
.
.
00 :08 :0 Ethernet controller : Macronix, Inc. [MXIC] MX987x5 (rev 20)
00 :0a :0 Ethernet controller : Accton Technology Corporation SMC2-1211TX (rev
10)
utilise pour localiser les modules PCI corrects partir des donnes /proc/pci
du noyau. Le format du chier est facile comprendre. A titre d'exercice, vous
devriez essayer d'crire un script de shell pour raliser une recherche de manire
automatique.
amne les cartes eth0, eth1 et eth2 tre sondes. Par ailleurs, le rempla-
cement des 0 par les valeurs relles peut forcer certaines interfaces tre lies
aux cartes physiques. Si toutes les cartes sont de type PCI, vous devrez absolu-
ment obtenir leur ordre d'attribution par ttonnements.
Si vous avez deux cartes identiques, votre noyau pourrait mettre un aver-
tissement lors du double chargement du mme module. L'option -o d'insmod
permet d'utiliser une astuce de chargement faisant croire au noyau que le pre-
mier module n'est pas encore charg :
Nanmoins, avec les deux cartes PCI suivantes, il n'y aura pas de problmes :
cd /dev
./MAKEDEV -v sd
./MAKEDEV -v st0 st1 st2 st3
./MAKEDEV -v scd0 scd1 scd2 scd3
./MAKEDEV -v sg
Il est recommand que vous compiliez en dur le support des cartes SCSI (aussi
appel SCSI Host Adapter ) ainsi que le support pour les lecteurs de bandes, les
CHAPITRE 43. SOURCES DU NOYAU LINUX, MODULES ET SUPPORT MATRIEL.528
CD-ROMs, etc. Lorsque votre systme sera ramorc, chacun des priphriques
sera autodtect. Voici un exemple de message produit au ramorage et qui
concerne un disque et un lecteur de bandes SCSI :
(scsi0) <Adaptec AIC-7895 Ultra SCSI host adapter> found at PCI 0/12/0
(scsi0) Wide Channel A, SCSI ID=7, 32/255 SCBs
(scsi0) Cables present (Int-50 YES, Int-68 YES, Ext-68 YES)
(scsi0) Illegal cable configuration ! ! Only two
(scsi0) connectors on the SCSI Controller may be in use at a time !
(scsi0) Downloading sequencer code... 384 instructions dowloaded
(scsi1) <Adaptec AIC-7895 Ultra SCSI host adapter> found at PCI 0/12/1
(scsi1) Wide Channel B, SCSI ID=7, 32/255 SCBs
(scsi1) Downloading sequencer code... 384 instructions dowloaded
scsi0 : Adaptec AHA274x/284x/294x (EISA/VLB/PCI-Fast SCSI) 5.1.28/3.2.4
<Adaptec AIC-7895 Ultra SCSI host adapter>
scsi1 : Adaptec AHA274x/284x/294x (EISA/VLB/PCI-Fast SCSI) 5.1.28/3.2.4
<Adaptec AIC-7895 Ultra SCSI host adapter>
scsi : 2 hosts.
(scsi0 :0 :0 :0) Synchronous at 40.0 Mbyte/sec, offset 8.
Vendor : FUJITSU Model : MAE3091LP Rev : 0112
Type : Direct-Access ANSI SCSI revision : 02
Detected scsi disk sda at scsi0, channel 0, id 0, lun 0
(scsi0 :0 :0 :0) Synchronous at 10.0 Mbyte/sec, offset 15.
Vendor : HP Model : C1533A Rev : A708
Type : Sequential-Access ANSI SCSI revision : 02
Detected scsi tape st0 at scsi0, channel 0, id 3, lun 0
scsi : detected 1 SCSI tape 1 SCSI disk total.
SCSI device sda : hdwr sector= 512 bytes. Sectors= 17826240 [8704 MB] [8.7 GB]
.
.
.
Partition check :
sda : sda1
hda : hda1 hda2 hda3 hda4
hdb : hdb1
Vous devriez consulter la section 32.5 pour dterminer comment amorcer sur
un disque SCSI quand le module requis se trouve dans un systme de chiers
qui est sur le disque SCSI qui, son tour, ncessite le module.
Pour utiliser un lecteur de bandes, revoyez la discussion la page 174.
SCSI d'tre connects une seule d'entre elles. Fermer le circuit signie qu'il
faut placer soit des cavaliers, soit un commutateur sur le dernier priphrique
de la nappe. Cela implique aussi de brancher le connecteur du dernier cble
dans une prise adquate. La documentation de votre adaptateur et de votre
disque devrait vous expliquer comment procder techniquement. Si votre circuit
n'est pas lectriquement ferm, votre systme pourra fonctionner mais avec des
erreurs de disque(s) durant la vie de la machine. Notez que les priphriques
SCSI les plus rcents possdent d'oce une terminaison lectrique.
Le refroidissement est un autre problme prendre en considration. Quand
la documentation relative un priphrique disque recommande d'utiliser de
l'air puls, respectez cette consigne. Les priphriques SCSI montent considra-
blement en temprature et peuvent se dgrader s'ils ne sont pas correctement
refroidis. Le fait de pulser de l'air signiera le plus souvent se procurer un petit
ventilateur et le disposer de manire correcte. N'hsitez pas vous munir d'un
botier susamment large avec quelques centimtres de sparation entre les p-
riphriques. Quiconque a dj ouvert un serveur de haute de gamme se rend
compte de l'attention porte au refroidissement.
Ces priphriques devraient fournir ces messages avant que n'apparaisse l'in-
vite LILO : et ce, pour indiquer qu'ils sont fonctionnels.
Les lignes de /etc/modules.conf permettant l'auto-dtection sont :
La ligne alias scd0 doit tre enleve si sr_mod est compil en dur dans le
noyau. Eectuez une recherche dans le rpertoire /lib/modules/<version>/.
Notez que le noyau ne supporte pas directement les graveurs CD-ROMs ATAPI.
Le module ide-scsi mule l'adapteur SCSI au nom du CD-ROM ATAPI.2 Le
logiciel de gravure de CD s'attend communiquer avec /dev/scd ?, et le mo-
dule ide-scsi permet ce priphrique d'tre vu comme un graveur CD SCSI.
[Les vritables graveurs CD SCSI sont plus chers.] Un avertissement, toutefois :
votre pilote de CD-ROM IDE ordinaire, ide-cd, cherchera aussi communiquer
avec votre graveur CD comme s'il tait un lecteur CD-ROM normal. L'option
ignore permet au module ide-cd de passer au-dessus de tout priphrique qui
ne devrait pas tre sond sur votre systme. Il peut s'agir de disques durs, de
graveurs CD, ou d'un second matre non-existant. Cependant, il n'existe pas de
mthode pour donner une option ignore un module ide-cd compil en dur
2 NdT : depuis le noyau 2.6, il en va autrement.
CHAPITRE 43. SOURCES DU NOYAU LINUX, MODULES ET SUPPORT MATRIEL.530
cdrecord --scanbus
cd /dev
./MAKEDEV -v ttyS4
./MAKEDEV -v ttyS5
./MAKEDEV -v ttyS6
./MAKEDEV -v ttyS7
./MAKEDEV -v ttyS8
./MAKEDEV -v ttyS9
./MAKEDEV -v ttyS10
./MAKEDEV -v ttyS11
/bin/setserial -v /dev/ttyS4 irq 5 port 0x0180 uart 16550A skip_test
/bin/setserial -v /dev/ttyS5 irq 5 port 0x0188 uart 16550A skip_test
/bin/setserial -v /dev/ttyS6 irq 5 port 0x0190 uart 16550A skip_test
/bin/setserial -v /dev/ttyS7 irq 5 port 0x0198 uart 16550A skip_test
/bin/setserial -v /dev/ttyS8 irq 5 port 0x01A0 uart 16550A skip_test
/bin/setserial -v /dev/ttyS9 irq 5 port 0x01A8 uart 16550A skip_test
CHAPITRE 43. SOURCES DU NOYAU LINUX, MODULES ET SUPPORT MATRIEL.532
Vous devriez tre en mesure d'utiliser des priphriques en tant que ports nor-
maux. Notez que vous devriez vous attendre voir les interruptions en cours sous
/proc/interrupts. Concernant les priphriques srie, ceci n'est vrai qu'aprs
que les donnes aient commencs uer. Nanmoins, vous pouvez vrier le
chier /proc/tty/driver/serial pour obtenir davantage d'information sur
l'tat des priphriques. La page de man de setserial nous en dit plus long
sur les dirents UARTs et les problmes de compatibilit. Elle dcrit aussi la
technique d'auto-dtection de l'UART, des IRQ et des ports E/S (ceci dit il
est prfrable de toujours d'tre sr des proprits de votre carte et de ne pas
utiliser l'auto-dtection).
Les priphriques srie engendrent d'innombrables problmes. Le Serial--
HOWTO est d'ailleurs trs long. Il vous aidera trs certainement rsoudre d'ven-
tuels problmes car il contient de nombreuses donnes techniques et discute en
profondeur du support spcial du noyau dans le cas de nombreuses cartes non-
standards.
cd /usr/src/linux
make mrproper
CHAPITRE 43. SOURCES DU NOYAU LINUX, MODULES ET SUPPORT MATRIEL.533
make menuconfig
make dep
make clean
make bzImage
make modules
make modules_install
cp /usr/src/linux/arch/i386/boot/bzImange /boot/vmlinuz-<version>
cp /usr/src/linux/System.map /boot/System.map-<version>
make
make modules_install
cd /usr/src
mv linux linux-OLD
tar -xzf linux-2. ?. ?-test ?.tar.gz
mv linux linux-2. ?. ?-test ?
ln -s linux-2. ?. ?-test ? linux
cd linux
43.9.2 Congurer.
Une arborescence qui a dj subi de nombreuses modications pourrait re-
qurir un nettoyage :
make mrproper
avant de poursuivre. Ceci permet de retrouver un systme tel que vous l'ob-
tiendriez juste aprs la dcompression d'un nouveau noyau.
Il existe trois interfaces de conguration (mais l'interface traditionnelle en
mode texte y/n est particulirement fastidieuse employer). La commande :
make menuconfig
make xconfig
cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-<version>
cp /usr/src/linux/System.map/ boot/System.map-<version>
ln -sf System.map-<version> /boot/System.map
ln -sf /boot/vmlinuz-<version> vmlinuz
CHAPITRE 43. SOURCES DU NOYAU LINUX, MODULES ET SUPPORT MATRIEL.536
Enn, lilo.conf devra tre modi, comme dcrit au chapitre 32. A ce stade,
beaucoup oublie d'excuter lilo, ce qui rend le systme non-amorable. Ex-
cutez lilo, et assurez-vous que vous y avez laiss votre noyau prcdent en
tant qu'option, au cas o vous devriez y revenir. N'oubliez pas de raliser une
disquette de dmarrage, comme cela a t dcrit la section 32.4.
Chapitre 44
Le systme X-Window.
44.1 Le protocole X.
X est un protocole de commandes changes entre une application et un
terminal graphique spcial appel serveur X (dsormais, nous l'appelerons le
serveur). [En l'occurence, le terme serveur est ambig, parce qu'il y a de nom-
breux serveurs X sur chaque machine cliente, et que l'utilisateur se trouve du
ct serveur. Classiquement, c'est l'inverse.] Concernant la manire avec laquelle
537
CHAPITRE 44. LE SYSTME X-WINDOW. 538
le serveur eectue des tracs graphiques sur une unit matrielle,1 l'applica-
tion doit juste savoir que, si elle envoye une squence particulire d'octets par
TCP/IP, le serveur interprtera ces octets de sorte qu'une ligne, un cercle, une
bote, une police de caractres ou toute autre objet graphique soit ach
l'cran. En retour, l'application doit savoir qu'aux squences particulires d'oc-
tets correspond l'enfoncement d'une touche d'un clavier ou le dplacement d'une
souris. Cette communication TCP est appele protocole X.
Quand vous utilisez X, nous ne ralisez pas forcment que l'intraction d-
crite ci-dessus a lieu. Le serveur et l'application peuvent se trouver sur la mme
machine. La puissance relle d'X ressort lorsque l'application et le serveur ne
fonctionnent pas sur la mme machine. Supposons, par exemple, que 20 utilisa-
teurs soient connects un mme ordinateur et qu'ils employent des programmes
dirents dont l'achage est ralis sur 20 serveurs X. Tout se passe comme si
une machine unique permettait l'usage d'crans et de claviers multiples. C'est
pour cette raison qu'X est dni comme un systme de fentrage transparent en
mode rseau.
Les dveloppeurs d'applications graphiques sont donc dispenss de connatre
les proprits graphiques du matriel (comparons cela avec les applications DOS
o chacun doit construire le support de nombreuses cartes graphiques) ; ils ne
doivent pas connatre le type de machines sur lesquelles l'application graphique
sera ache.
Le programme qui ralise cette opration miraculeuse se trouve dans /usr/-
X11/bin/X. La squence typique des vnements qui permettent un pro-
gramme graphique d'tre excut est donne ci-dessous. Il s'agit d'une descrip-
tion simplie car, en pratique, de nombreux utilitaires sont mis contribution.
1. Le programme /usr/X11R6/bin/X est dmarr et excut en tche de
fond. En lisant les chiers de conguration (/etc/XF86Config ou /etc/-
X11/XF86Config sur Linux), X dtecte le matriel graphique disponible
(par exemple, le type de carte graphique). Il initialise ce matriel en mode
graphique.
2. X ouvre une connexion socket pour couter les appels entrants sur un
port spcique (gnralement, le port TCP 6000) et s'apprte interprter
toute connexion comme un ux de commandes graphiques.
3. Une application est lance sur la machine locale ou sur une machine dis-
tante. Tous les programmes X possdent une option de conguration via
laquelle vous pouvez indiquer (grce une adresse IP ou un nom d'hte)
o vous souhaitez que le programme se connecte, c'est--dire le serveur o
vous aimeriez que le rsultat soit ach.
4. L'application ouvre une connexion socket un serveur donn sur le rseau.
C'est lors de cette tape que la plupart des erreurs ont lieu. Il peut y
avoir chec si le serveur n'est pas en cours d'excution, s'il a t indiqu
incorrectement ou si le serveur refuse une connexion un hte qui n'est
pas de conance.
5. L'application commence envoyer des requtes de protocole X, en atten-
dant qu'elles soient traites. Aprs rception, les rponses du protocole X
sont traites leur tour. Aux yeux de l'utilisateur, l'application semble
fonctionner sur l'cran du serveur.
1 Les dveloppeurs d'applications graphiques ne doivent pas se proccuper de la manire
dont le serveur X interprte les graphiques.
CHAPITRE 44. LE SYSTME X-WINDOW. 539
enfonce ou qu'un clic de souris ait lieu pour se terminer. Vous pouvez le compi-
ler avec gcc -o splash splash.c -lX11 -L/usr/X11R6/lib. Vous verrez de
suite pourquoi il y a peu d'applications crites directement avec X. Notez que
toutes les fonctions des bibliothques X sont prxes avec un X.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <X11/Xlib.h>
/* XPM */
static char *graham_splash[] = {
28 32 16 1
c #34262e, . c #4c3236, X c #673a39, o c #543b44,
O c #724e4e, + c #6a5459, @ c #6c463c, # c #92706c,
$ c #92685f, % c #987e84, & c #aa857b, n c #b2938f,
= c #bca39b, - c #a89391, ; c #c4a49e, : c #c4a8a4,
/* pixels */
--%#%%nnnn#-nnnnnn===== ; ;= ; :, --------n-nnnnnn=n== ;== ;= : ; :,
----n--n--n-n-n-nn=== : : : : : : :, -----&------nn-n=n==== : : : : : :,
----------------n=== ;= : : : : : :, ----%&-%--%##%---n=== : : : : : : :,
------%#%+++o+++----= : : : : : : :, --#-%%#+++oo. oo+#--= : : : : : : :,
-%%%%++++o.. .++&-== : : : : :, ---%#+#+++o. oo+&n= : : : :,
--%###+$+++Oo. o+#- := : :, -&%########++Oo @$-== :,
####$$$+###$++OX .O+&==, &##$O+OXo+++$#+Oo. ..O&&-,
&##+OX..... .oOO@@... o@+&&, &###$Oo.o++ ..oX@oo@O$&-,
n###$$$$O$o ...X.. .XXX@$$$&, nnn##$$#$00. .XX+@ .XXX@$$#&,
nnn&&####$OX.X$$@. XX$$$$&, nnnnn&&###$$$OX$$X..XXX@O$&n,
nnnnnn&&%###$$$$@XXXXX@O$&&n, ;n= ;nnnn&&&#$$$$$@@@@@@O$&n ;,
;n ;=nn ;nnnn#&$$$@X@O$@@$$&n ;, =n= ; ; ;n ; ;nn&&&$$$$OO$$$$$& ; ;,
n ;=n ; ;=nn&n&&&&&&$$$$$##&&n ;, n ;= ; ; ; ; ; ; ; ;&&&n&&&&&&&&#&n= ;,
;n ;n ; ;=n ;& ;& ;&n&&&&&&&#nn ; ; ;, n ;= ; ; ; ; ; ; ; ;n ;&&n&&&n&n&nnnn ;,
n= ; ; : ; ;= ; ;nn ;&n ;&n&nnnnnnn= ;, nn ; ; ; ; ; ; ; ; ; ; ; ; ; ;n&nnnnnn=== ;,
=nn ; ; : ;n ; ; ; ;&&&&n&&nnnnnn ;= ;, n==== ; ; ; ;&&&&&&&nnnnnnnnnn ; ;
};
Pixmap pixmap ;
XImage *image ;
Colormap colormap ;
GC gc ;
int bytes_per_pixel ;
unsigned long colors[256] ;
unsigned char **p, *q ;
for (i=1 ; i < argc -1 ; i++)
if (argv[i])
if ( !strcmp (argv[i], -display))
display_name = argv[i+1] ;
display = XOpenDisplay (display_name) ;
if ( !display) {
printf (splash : cannot open display\n) ;
exit(1) ;
}
depth = DefaultDepth (display, DefaultScreen (display)) ;
visual = DefaultVisual (display, DefaultScreen (display)) ;
p = (unsigned char **) graham_splash ;
q = p[0] ;
width = atoi ((const char *) q) ;
q = (unsigned char *) strchr (q, ' ') ;
height = atoi ((const char *) ++q) ;
q = (unsigned char *) strchr (q, ' ') ;
n_colors = atoi ((const char *) ++q) ;
c.green |=
((unsigned long) strchr (h, *x++) -
((unsigned long) h) < < 8 ;
c.blue =
((unsigned long) strchr (h, *x++) -
(unsigned long) h) < < 12 ;
c.blue |=
((unsigned long) strchr (h, *x++) -
((unsigned long) h) < < 8 ;
if ( !XAllocColor (display, colormap, &c))
printf (splash : could not allocate color cell\n) ;
} else {
if ( !XAllocNamedColor (display, colormap, (char *) x, &c, &c1))
printf (splash : could not allocate color cell\n)
}
colors[(*p)[0]] = c.pixel ;
}
break ;
case 1 :
for (i = 0 ; i < width ; i++)
*q++ = colors[*r++] ;
break ;
}
} else {
switch (bytes_per_pixel) {
case 4 :
for (i = 0 ; i < width ; i++) {
c = colors[*r++] ;
*q++ = c ;
*q++ = c > > 8 ;
*q++ = c > > 16 ;
*q++ = c > > 24 ;
}
break ;
case 3 :
for (i = 0 ; i < width ; i++) {
c = colors[*r++] ;
*q++ = c ;
*q++ = c > > 8 ;
*q++ = c > > 16 ;
}
break ;
case 2 :
for (i = 0 ; i < width ; i++) {
c = colors[*r++] ;
*q++ = c ;
*q++ = c > > 8 ;
}
break ;
case 1 :
for (i = 0 ; i < width ; i++)
*q++ = colors[*r++] ;
break ;
}
}
}
xswa.colormap = colormap ;
xswa.background_pixmap = pixmap ;
window =
XCreateWindow (display, DefaultRootWindow (display), x, y, width,
height, 0, depth, InputOutput, visual,
CHAPITRE 44. LE SYSTME X-WINDOW. 544
while (1) {
XEvent event ;
XNextEvent (display, &event) ;
if (event.xany.type == KeyPress || event.xany.type == ButtonPressMask)
break ;
}
XUnmapWindow (display, window),
XCloseDisplay (display) ;
return 0 ;
}
44.2.2 Qt.
A cette poque, une nouvelle bibliothque GUI (Graphic User Interface ) a
t labore. Nomme Qt, elle tait (et est toujours) developpe par Troll Tech.
Initialement, non-libre, elle constituait une prouesse technique remarquable du
fait qu'elle fonctionnait ecacement et proprement sur diverses plate-formes.
Elle a t ignore par quelques groupes de la communaut du Libre car elle tait
crite en C++. Ce langage n'est pas considr comme la norme en matire de
dveloppement par la Free Software Foundation du fait qu'il n'est pas totalement
portable (peut-tre, existe-t-il d'autres raisons). En ralit, cette bibliothque
n'tait libre que pour des applications non-commerciales.
Nanmoins, les partisans de Qt ont commenc dvelopper le remarquable
projet KDE (K Desktop Environment ) qui comprend un jeu de bibliothques
de dveloppement de plus haut niveau, un gestionnaire de fentrage, et beau-
coup d'autres applications fondamentales qui constituent le bureau KDE. Les
problmes de licences associs Qt se sont dissips et, actuellement, cette bi-
bliothque est sous licence GPL et sous license propritaire.
44.2.3 Gtk.
Avant que KDE ne soit susamment dvelopp, les programmeurs oppo-
ss Qt avanaient qu'tant donn qu'il y avait plus de lignes de codes de Qt
que de KDE, il serait pertinent de dvelopper une bibliothque ex nihilo. La
bibliothque de widgets GTK, crite spcialement pour le Gimp (GNU Image
Manupilation Program ) est sous GPL, entirement en C avec des appels de bas-
niveau X (donc, sans X Toolkit), oriente-objet, rapide, propre, extensible et
proposant une grande gamme de proprits. Elle incorpore (i) Glib, une biblio-
thque destine tendre le C standard, fournir des fonctions de haut niveau
usuellement apparentes aux langages de scripts (comme les tables associatives
ou hash tables et, les listes), (ii) Gdk, une interface de la bibliothque brute
de X pour donner des conventions d'attribution de nom GNU X et aussi
pour fournir une interface de plus haut niveau X et (iii) Gtk, la bibliothque
elle-mme.
Le projet Gnome (GNU Network Object Model Environment) bas sur
Gtk s'est dvelopp similairement KDE, mais en tant entirement crit en
C.
CHAPITRE 44. LE SYSTME X-WINDOW. 546
44.2.4 GNUStep.
OpenStep (bas sur NeXTStep) est une spcication d'interface utilisateur
graphique publie en 1994 par Sun Microsystems et NeXT Computers, destine
construire des applications graphiques. Elle utilise le langage Objective-C,
extension oriente-objet du C. Cela en fait un langage plus adapt ce type de
dveloppements que le C++.
Open Step requiert un moteur d'achage PostScript semblable au protocole
X, mais considr comme suprieur X parce que tous les graphiques sont
indpendants de la rsolution d'cran. En d'autres termes, les crans haute
rsolution permet d'amliorer la qualit des images sans que les graphiques ne
rapetissent.
Le projet GNUStep prsente un moteur d'achage PostScript oprationnel
et, en tant que logiciel libre, il est destine remplacer OpenStep.
44.3 XFree86.
X a t dvelopp par le Consortium X en tant que norme et comme impl-
mentation de cette norme. Il y a des portages pour chaque plate-forme qui
supporte le mode graphique. La version courante de cette norme est 11, sous-
version 6 (d'o le rpertoire /usr/X11R6/). Il n'y aura probablement pas d'autre
version.
XFree86 sur http ://www.xfree86.org/ est un portage libre d'X qui comprend
les machines Intel Linux parmi les matriels supports. X possde certaines
caractristiques dignes d'intrt pour l'utilisateur Windows, XFree86 en reprend
certaines. XFree86 possde son propre systme de versions en plus de la notation
X11R6 comme expliqu ci-dessous.
Note de traduction : au cours de 2004, une modication de la licence sous
laquelle XFree86 tait publi, a entran son abandon par la plupart des dis-
tributions GNU/ Linux. Le paquet XFree86 est remplac par le logiciel libre
Xorg-x11. La X.Org Foundation fournit dsormais une mise en oeuvre libre
du Systme X-Window. Au moment de la traduction, le dernier paquet stable
d' xorg-x11 tait la version 6.8.0 . D'un point de vue pratique, le chier /etc/-
X11/XF86Config (ou /etc/X11/XF86Config-4 ) est remplac par /etc/X11/-
xorg.conf . La mme structure de chier est conserve.
pour dmarrer X, pourvu qu'il ne fonctionne pas dj. Si vous avez une con-
guration adquate (et que notamment /usr/X11R6/bin est dans votre PATH),
la commande qui prcde initiera le matriel graphique et une grille ne en noir
et blanc apparatra avec un X comme curseur central. Contrairement ce que
suggre l'intuition, cela signie qu'X est oprationnel.
pour tuer X, utilisez la squence de touche - - .
CHAPITRE 44. LE SYSTME X-WINDOW. 547
obtenus avec - - et - - .
DISPLAY=localhost :0.0
export DISPLAY
/usr/X11R6/bin/X :1
lance une deuxime session X dans la console virtuelle 8. Vous pouvez vous
y rendre en pressant : - - ou - .
Il est galement possible de dmarrer un second serveur X dans votre X
courant :
/usr/X11R6/bin/Xnest :1 &
Un serveur sera lanc ; il sera de plus petite taille et utilisera une sous-fentre
comme acheur. Naturellement, il est possible de poursuivre avec un troisime
serveur X et ainsi de suite.
Pour obtenir une application qui s'ache sur ce second serveur, utilisez
comme prcdemment :
DISPLAY=localhost :1.0
export DISPLAY
xterm
ou
44.5.1 Programmation.
Tous les livres qui s'attachent dcrire la programmation des interfaces
de programmation d'applications (API Application Programming Interface )
sont incluses dans la distribution d'X. Pour la plupart, elles sont trs spcia-
lises et ne devraient pas tre incorpores par dfaut dans votre distribution
Linux ou Unix. Elles sont accessibles par le tlchargement des sources d'X.
Pour apprendre programmer avec X, consultez xc/doc/specs (en particulier,
xc/doc/specs/X11).
Debian contient aussi le paquet xbooks, et RedHat, les paquets XFree86doc.
CHAPITRE 44. LE SYSTME X-WINDOW. 551
Section Files
RgbPath /usr/X11R6/lib/rgb
FontPath /usr/X11R6/lib/X11/fonts/misc
EndSection
Section ServerFlags
EndSection
Section Keyboard
Protocol Standard
Autorepeat 500 5
XkbDisable
XkbKeymap xfree86(us)
EndSection
Section Pointer
# Protocol Busmouse
# Protocol Intellimouse
# Protocol Logitech
Protocol Microsoft
# Protocol MMHitTab
# Protocol MMSeries
# Protocol MouseMan
# Protocol MouseSystems
# Protocol PS/2
Device /dev/ttyS0
# Device /dev/psaux
Emulate3Buttons
Emulate3Timeout 150
EndSection
Section Monitor
Identifier My Monitor
VendorName Unknown
ModelName Unknown
HorizSync 31.5-57.0
VertRefresh 50-90
# Modeline 640x480 28.32 640 664 760 800 480 491 493 525
3 NdT : avec Xorg, il est possible de crer un chier de conguration de base selon trois m-
thodes. (1) Manuellement, en se servant du chier de rfrence /etc/X11/xorg.conf.exemple.
(2) A l'aide de la commande Xorg -configure. En supposant que le chier de base ait bien
t cr, Xorg devrait acher qu'il a cr un chier de conguration /root/xorg.conf.new.
Pour tester si la conguration est correcte, il faut excuter : X -config /root/xorg.conf.new
ce qui permet de dmarrer le gestionnaire de fentres minimaliste twm. (3) Xorg contient un
outil de conguration semi-automatique : xorgconfig qui pose des questions sur le matriel
et cre un chier de base /etc/X11/xorg.conf. Dans la dernire tape, les modications du
chier xorg.conf doivent tre ralises la main pour amliorer les paramtres.
CHAPITRE 44. LE SYSTME X-WINDOW. 553
Modeline 640x480 25.175 640 664 760 800 480 491 493 525
EndSection
Section Device
Identifier Generic VGA
VendorName Unknown
Boardname Unknown
Chipset generic
# Driver vga
Driver vga
EndSection
Section Screen
Driver vga16
Device Generic VGA
Monitor My monitor
SubSection Display
Depth 4
Modes 640x480
Virtual 640 480
EndSubSection
EndSection
Vous pouvez alors dmarrer X. Pour ce qui concerne la version XFree86 3.3,
lancez :
/usr/X11R6/bin/XF86_VGA16 -cc 0
/usr/X11R6/bin/XFree86 -cc 0
Ces deux commandes achent une ligne d'tat contenant clocks : ... qui
conrme que votre choix de la valeur 25.175 est le bon. Il s'agit de la frquence
en MHz laquelle l'information relative aux pixels transite depuis votre carte
graphique. C'est la seule variable pour congurer un cran 16 couleurs.
A prsent, vous devriez avoir une cran niveau de gris qui est quasiment uti-
lisable. Il prsente l'avantage de toujours fonctionner.
/usr/X11R6/bin/Xfree86 -configure
Section <nom_section>
<ligne_configuration>
<ligne_configuration>
<ligne_configuration>
EndSection
Cherchez la section Monitor. Un peu plus bas, vous verrez ces lignes :
Section Monitor
Identifier My Monitor
VendorName Unknown
ModelName Unknown
HorizSynx 30-40
VertRefresh 50-90
Modeline 320x200 12.588 320 336 384 400 200 204 205 255 Doublescan
Modeline 400x300 18 400 416 448 512 300 301 302 312 Doublescan
Modeline 512x384 20.160 512 528 592 640 384 385 388 404 _HSync -VSync
Modeline 640x480 25.175 640 664 760 800 480 491 493 525
Modeline 800x600 36 800 824 896 1024 600 601 603 625
Modeline 1024x768 44.9 1024 1048 1208 1264 768 776 784 817 Interlace
EndSection
6. Modiez votre section Device. Vous pouvez faire cela comme suit pour
la version XFree86 3.3. Il ne devrait y avoir qu'une seule section Device :
Section Device
Identifier My Video Card
VendorName Unknown
BoardName Unknown
VideoRam 4096
EndSection
Section Device
Identifier My Video Card
Driver ati
VendorName Unknown
BoardName Unknown
VideoRam 4096
EndSection
Option no_accel
Option sw_cursor
Option no_pixmap cache
CHAPITRE 44. LE SYSTME X-WINDOW. 556
Section Screen
Identifier My Screen
Device My Video Card
Monitor My monitor
DefaultDepth 16
SubSection Display
ViewPort 0 0
Virtual 1024 768
Depth 16
Modes 1024x768 800x600 640x480 512x384 400x300 320x240
EndSubSection
SubSection Display
ViewPort 0 0
Virtual 1024 768
Depth 24
Modes 1024x768 800x600 640x480 512x384 400x300 320x240
EndSubSection
SubSection Display
ViewPort 0 0
Virtual 1024 768
Depth 8
Modes 1024x768 800x600 640x480 512x384 400x300 320x240
EndSubSection
EndSection
4 NdT : pixmap est une dnition d'image selon un tableau 3D (2 dimensions pour l'image
et 1 dimension pour la profondeur de chaque pixel).
CHAPITRE 44. LE SYSTME X-WINDOW. 557
/usr/X11R6/bin/XFree86-<carte> -bpp 16
/usr/X11R6/bin/XFree86
# !/bin/sh
exec /usr/X11R6/bin/<serveur> -bpp 16
44.7 Visuels.
44.7.1 RGB et XCMS.
Le texte original a t modi sur base du document acessible l'adresse
http ://www.liafa.jussieu.fr/~carton/Enseignement/InterfacesGraphiques/Licence-
Info/Cours/X/couleurs.html .
Le Systme X Window utilise deux modes pour reprsenter les couleurs. Le
premier est le format RGB, non portable dans la mesure o la mme couleur
peut tre rendue de manire assez dirente par deux crans. Pour pallier cet
inconvnient, le systme XCMS (X Colors Management System ) a t introduit
depuis la version X11R5. Ce dernier systme utilise plusieurs modles de couleurs
indpendants des crans.
Dans le format RGB, une couleur est reprsente par ses trois composantes
en rouge (Red ), vert (Green ) et bleu (Blue ). Une couleur peut tre utilise par
ses trois composantes ou en donnant un nom qui lui est attribu dans le chier
rgb.txt. Ce dernier se trouve gnralement dans le rpertoire /usr/X11R6/lib-
/X11/. Ce chier contient une correspondance entre des noms de couleurs et des
triplets de composantes RGB en dcimal.
CHAPITRE 44. LE SYSTME X-WINDOW. 558
Le systme XCMS est nettement plus compliqu. Une couleur peut tre
exprime dans plusieurs modles (par exemple : TeKHVC, CIEXYZ, CIEuvY) et
dans le modle RGB. Une couleur est alors crite en mettant le modle en prxe,
le caractre : puis les valeurs spares par le caractre / (par exemple :
CIEuvY :0.152/0.405/0.443, TeKHVC :223.93/72.45/29.67 ou RGB :6a/bb/d8).
44.7.2 Visuels.
La notion de visuel (visual en anglais) a t introduite dans X. Dans la m-
moire du serveur X, la couleur de chaque pixel de l'cran est reprsente par un
nombre entier. Le nombre de bits allous cet entier reprsente la profondeur.
Celle-ci est souvent exprime en nombre de plans et elle dtermine le nombre de
couleurs possibles l'cran. L'entier associ un pixel ne reprsente pas la cou-
leur directement. En fait, il est utilis comme une (ou plusieurs) entre(s) dans
une table des couleurs (colormap ). Cette indirection est utilise pour augmen-
ter le nombre de couleurs tout en occupant une place raisonnable en mmoire,
ncessaire pour tous les pixels de l'cran. Un mme serveur X prsente plu-
sieurs mthodes pour interprter l'entier associ une couleur. Chacune de ces
mthodes est un visuel, une mthode (matrielle) qui dcrit la manire dont
les pixels reprsentent les couleurs. Les visuels disponibles sur un serveur X
peuvent tre achs grce l'utilitaire xdpyinfo. Chacun des visuels est carac-
tris par sa profondeur et sa classe. Pour les crans noir et blanc, les classes
possibles sont StaticGray et GrayScale. Pour les crans couleur, les classes
possibles sont StaticColor, TrueColor, PseudoColor et DirectColor. Ces
direntes classes se distinguent par le fait d'tre en lecture seulement ou en
lecture/criture et par le fait que la table des couleurs soit dcompose ou non.
A chaque pixel de l'cran est associ une zone mmoire o est enregistr le
niveau de gris du pixel ou la couleur. Le nombre de plans donne le nombre de
bits consacrs chaque pixel. Il dtermine aussi le nombre maximal de couleurs
qui peuvent tre prsentes simultanment l'cran. Si le nombre de plan est 1,
la couleur d'un pixel ne peut prendre que deux valeurs. C'est le cas d'un cran
noir et blanc sans niveau de gris. Au contraire, si le nombre de plans est 24, le
nombre de couleurs possibles pour un pixel est 224 = 16.777.216.
Ce n'est pas directement la couleur qui est mmorise dans la zone mmoire
associe chaque pixel. En fait, il s'agit d'un point d'entre dans une table des
couleurs o sont vraiment mmorises les coordonnes (ou valeurs RGB) de la
couleur. Ncessaire pour gagner de l'espace mmoire, cette indirection est faite
de faon dirente selon que la table est dcompose ou non.
Lorsque la table des couleurs n'est pas dcompose, l'entier en mmoire cran
donne directement le numro de l'entre dans la table des couleurs. Cette entre
est appele une cellule. La cellule donne alors les valeurs des trois composantes
RGB de la couleur (gure 44.1).
CHAPITRE 44. LE SYSTME X-WINDOW. 559
Qu'un table soit dcompose ou non, les coordonnes des couleurs sont
mmorises avec un nombre de bits plus importants, gnralement 12 ou 16.
Lorsque la table est dcompose et que les coordonnes sont mmorises avec
12 bits, on obtient 236 = 68.719.476.736 couleurs possibles mme si toutes ne
peuvent pas tre aches simultanment l'cran.
CHAPITRE 44. LE SYSTME X-WINDOW. 560
A prsent, vriez les visuels que votre cran supporte avec la commande
xdpyinfo. Vous noterez qu'il y a en plus d'un, car X peut eectivement sup-
porter un visuel simple StaticColor avec PseudoColor, ou un visuel DirectColor
avec TrueColor. Le visuel par dfaut est ach en premier lieu et peut tre
install avec l'option -cc telle que nous l'avons employe ci-dessus dans le cas
d'un serveur 16 couleurs. L'argument de l'option -cc est le numro de code
entre parenthses.
Notez que les bonnes applications X vrient la liste des visuels disponibles
et y slectionnent un visuel appropri. Il existe aussi des applications qui nces-
sitent un visuel particulier, et d'autres qui prennent l'option -visual en ligne
de commandes.
startx
qui est un script excutant xinit aprs avoir x diverses variables d'envi-
ronnement. Cette commande appelle indirectement plusieurs scripts de congu-
ration dans /etc/X11/xinit/ et dans le rpertoire de l'utilisateur, o ce dernier
peut spcier son gestionnaire de fentres et les applications de dmarrage. Voir
xinit(1) et startx(1).
id :5 :initdefault :
et
qui tablissent que le niveau d'excution (runlevel ) par dfaut est 5 et qu'xdm
doit tre dmarr au niveau d'excution 5.5 Ceci ne devrait tre tent que lorsque
vous tes sr qu'X est fonctionnel (en excutant X en ligne de commande). La
5 NdT : sur la distribution Gentoo-Linux, le dmarrage en mode graphique est obtenu (1)
en modiant le chier /etc/rc.conf de manire ajuster les variables DISPLAYMANAGER="xdm"
(ou DISPLAYMANAGER="kdm" ou encore DISPLAYMANAGER="gdm") et XSESSION="<gestionnaire>"
(o <gestionnaire> est par exemple : Gnome, kde-<version> ou Xsession) et (2) en excutant
la commande rc-update add xdm default. Voir rc-update(8).
CHAPITRE 44. LE SYSTME X-WINDOW. 561
12 reprsente la taille des pixels. Un zro indique que la taille d'une police de
caratres peut tre choisie toute valeur. La plus grande taille est de 40
points.
120 reprsente la taille (en dizime) des points d'une imprimante. Usuellement,
c'est 10 fois la taille d'un pixel.
75-75 reprsente la rsolution horizontale et verticale avec laquelle la police de
caractres a t labore. Pour la plupart, les moniteurs actuel sont en 75
pixels par pouce. Les autres valeurs possibles sont 72-72 et 100-100.
m dtermine l'espace entre caractres. Les valeurs sont m pour monoespace, p
pour proportionel ou c pour condens.
60 il s'agit de la largeur moyenne de tous les caractres de la fonte en dizimes
de pixel.
iso8859-1 dsigne le jeu de caractres ISO. Dans ce cas, 1 indique qu'il s'agit
d'ISO Latin 1, un mta-jeu de caractres ASCII. Le dernier bit reprsente
la caractristique locale.
A titre d'exemple, dmarrez cooledit avec :
Vous pouvez excuter nouveau cette commande tout moment pour faire
bonne mesure.
An d'indiquer X d'utiliser ces rpertoires, ajoutez les lignes suivantes
la section Files de /etc/X11/XF86Config, /etc/X11/XF86Config-4 ou
/etc/X11/xorg.conf. Typiquement, cette section devrait ressembler ceci :
CHAPITRE 44. LE SYSTME X-WINDOW. 563
Section Files
RgbPath /usr/X11R6/lib/X11/rgb
FontPath /usr/X11R6/lib/X11/fonts/misc/ :unscaled
FontPath /usr/X11R6/lib/X11/fonts/75dpi/ :unscaled
FontPath /usr/X11R6/lib/X11/fonts/Speedo/
FontPath /usr/X11R6/lib/X11/fonts/Type1/
FontPath /usr/X11R6/lib/X11/fonts/misc
FontPath /usr/X11R6/lib/X11/fonts/75dpi/
EndSection
xset fp default
r
pour conduire X relire les rpertoires de polices.
La commande chkfontpath ache les paramtres du chemin courant des
polices. Notez aussi qu'XFree86, version 4, possde un moteur TrueType. Les
polices TrueType (.ttf) sont frquentes sous Windows. Il s'agit de polices de
taille variable et de haute qualit, destines aux crans graphiques. Vous pouvez
ajouter un rpertoire TrueType ct des autres rpertoires cits ci-dessus et
excuter :
ttmkdir fonts.scale
mkfontdir -e /usr/X11R6/lib/X11/fonts/encodings -e /usr/X11R6/X11/lib/fonts/encodings/large
dans chacun des rpertoires. Notez que ttmkfdir est requis pour cataloguer
les polices de caractres en tant que polices variables.
CHAPITRE 44. LE SYSTME X-WINDOW. 564
client-limit = 10
clone-self = on
catalogue = /usr/X11R6/lib/X11/fonts/misc :unscaled,
/usr/X11R6/lib/X11/fonts/75dpi :unscaled,
/usr/X11R6/lib/X11/fonts/ttf,
/usr/X11R6/lib/X11/fonts/Speedo,
/usr/X11R6/lib/X11/fonts/Type1,
/usr/X11R6/lib/X11/fonts/misc,
/usr/X11R6/lib/X11/fonts/75dpi
default-point-size = 120
default-resolutions = 75,75,100,100
deferglyphs = 16
use-syslog = on
no-listen = tcp
/etc/init.d/xfs start
( /etc/rc.d/init.d/xfs start )
Section Files
RgbPath /usr/X11R6/lib/X11/rgb
FontPath /usr/X11R6/lib/X11/fonts/misc/ :unscaled
FontPath unix/ :7100
EndSection
ce qui implique d'avoir une connexion TCP ouverte sur votre serveur de po-
lices, avec les problmes de scurit que cela entrane. Les machines distantes
peuvent utiliser la mme conguration aprs que l'adresse IP 127.0.0.1 ait t
change en votre adresse IP.
Enn, notez que, concernant la version 3.3 d'XFree86 (qui n'a pas de support
pour TrueType), le serveur xfstt est disponible sur Fresh Meat l'adresse
http ://freshmeat.net/.
Chapitre 45
UNIX et la scurit.
Ce chapitre est sans doute le plus important de tout le livre.1
Linux a t dcrit la fois comme le systme d'exploitation le plus scuris
et le plus inscuris. Ces deux points de vue sont vrais. Si vous ne prtez aucune
attention aux conseils de la communaut Linux, votre serveur sera l'objet d'une
attaque. En revanche, si vous adoptez quelques prcautions lmentaires, il sera
sr durant de nombreuses annes sans maintenance assidue.
L'attitude de la plupart des administrateurs novices est souvent :Etant
donn que Unix est un systme si vaste et si complexe et qu'il y a des mil-
lions de systmes Unix sur l'internet, il est peu vraisemblable que ma propre
machine soit l'objet d'une attaque. Bien sr, vous n'aurez pratiquement jamais
faire une personne ciblant l'entreprise pour laquelle vous travaillez. Il sut
d'un pirate ayant crit un scanneur automatique qui essaie de craquer chaque
ordinateur de votre ville. Il pourrait aussi s'agir de quelqu'un qui, tout en n'tant
pas pirate informatique, a simplement tlcharg un utilitaire de piratage. De
nombreux experts chevronns crivent de tels utilitaires et les distribuent au
grand jour. De petits morveux, seulement capables d'excuter des scripts crits
par d'autres (et qui se vantent d'tre hackers) utilisent ces programmes et font
des dgts considrables. [Il faut absolument distinguer un hacker d'un cra-
cker ; les premiers sont de vritables programmeurs qui eectuent un travail de
programmation ou d'administration de manire positive et avec enthousiasme.
Les autres sont des personnes qui, pensant appartenir la premire catgorie,
s'ingnient accder des machines sur lesquelles ils n'ont aucun droit.]
Dans le prsent chapitre, nous allons dcrire une srie de mthodes de pira-
tage d'un systme Unix. Ainsi, vous aurez une ide de la manire avec laquelle
ragir au mieux pour minimiser les risques d'attaques.
566
CHAPITRE 45. UNIX ET LA SCURIT. 567
# include <stdio.h>
service mon_echod
{
flags = REUSE
socker_type = stream
wait = no
user = root
server = root
log_on_failure += USERID
}
Bien sr, le service mon_echod n'existe pas. Il faut donc ajouter la ligne sui-
vante votre chier /etc/services :
volumineux et complexe.
(Cet aspect est d'une importance d'autant plus grande que le nombre d'uti-
lisateurs du systme est grand).
45.3 Contre-mesures.
Une bonne scurit commence par l'limination des risques connus, puis des
risques potentiels. Ensuite, il faut rendre la vie dicile aux pirates en cumu-
CHAPITRE 45. UNIX ET LA SCURIT. 571
Les chiers sans propritaire donnent une indication d'une mauvaise gestion
ou d'une compromission de votre systme. Utilisez la commande find :
Dsactivez tous les services en cours qui ne s'avrent pas utiles. Ensuite, es-
sayez d'valuer si les services restants sont absolument ncessaires. Par exemple,
avez-vous besoin d'IMAP ou POP3 sut-il ? IMAP a eu bien davantage d'alertes
de scurti que POP3, car il s'agit d'un programme plus complexe. Est-il utile
de courir le risque de l'employer ?
xinetd (ou inetd) excutent de nombreux services, dont seule une par-
tie est rellement ncessaire. Vous devrez donc rvisiter /etc/xinetd.d (ou
/etc/inetd.conf) pour y laisser un minimum de services. Concernant xinetd,
vous pouvez ajouter la ligne disable = yes dans le (ou les) chier(s) ad-
quat(s). Il ne devrait rester que quelques chiers fonctionnels. /etc/inetd.conf
, quant lui, ne devrait contenir qu'un minimum de lignes. Voici un exemple
rel :
Ce conseil devrait tre pris au pied de la lettre. Le principe de base est que
si vous ne savez pas le rle jou par un service, vous devez dsactiver ce dernier.
Voir aussi la section 30.6.
Dans le cas cit dans l'encadr (et qui est un cas rel), les services ont t
restreints an de n'autoriser que certains rseaux se connecter (voir les pages
334 et 338).
xinetd (ou inetd) ne constitue pas le seul problme. Il y a de nombreux
autres services, sources de problmes potentiels. Si vous saisissez la commande
netstat -npl vous obtiendrez quelque chose comme ceci :
Cependant, cela ne vous indique pas que le PID 446 correspond lpd. Pour
obtenir cette information, tapez ls -al /proc/446/.
Du tableau, vous pouvez dduire que sont ouverts les ports 1, 6, 21, 22,
25, 53, 400, 515, 1045 et 6000. Les ports de 1 6 sont des ports du noyau,
21 et 400 correspondent, respectivement, FTP et notre dmon echo (voir
CHAPITRE 45. UNIX ET LA SCURIT. 574
chmod -s /bin/ping
tre congurs pour tre monts en lecture-seule car ils utilisent des micro-
interrupteurs DIP ou DIP switches (Dual In-line Pin Switch ).3 La parti-
tion /usr peut tre construite comme une partition ISO9660 (systme de
chiers CD-ROM) qui, par dnition, est en lecture-seule. Vous pouvez
d'ailleurs monter vos CD-ROMs comme une partition /usr. L'accs sera
ralenti, mais la partition sera absolument inmodiable. Finalement, il vous
est possible de modier le code noyau pour faire chouer les tentatives de
montage en criture de /usr.
Attributs en lecture seule : Linux possde des attributs spciaux de chiers
pour rendre un chier non-modiable quels que soient les droits usuels. Ces
attributs sont contrls par les commandes lsattr et chattr. Vous pouvez
aussi crer un chier de journalisation en mode ajout-seul (append-only)
avec chatter +a /var/log/messages /var/log/syslog ou rendre les -
chiers immuables l'aide de chatter +i /bin/login. Il s'agit l de deux
bonnes ides suivre. La commande :
recherche tous les chiers qui ont t modis durant les deux derniers
jours.
Paquets non-standards : lorsque vous notez beaucoup d'alertes de scurit
pour un paquet donn, passez un paquet concurrent. Il y a des alterna-
tives bind, wu-ftpd, sendmail (toutes ont t vues au chapitre 31). Il
en est de mme pour chaque service, pratiquement. Passez compltement
FreeBSD, OpenBSD ou NetBSD rduit aussi les risques.
Messages non-standards : de nombreux services fournissent des messages
d'information qui donnent la version de votre logiciel. Par exemple, les
serveurs de courriel ont des rponses, par dfaut, HELO qu'ils utilisent
pour eux-mmes. Les connexions et les bannires FTP achent souvent
le type de systme d'exploitation d'un serveur. N'hsitez pas modier
ces messages pour qu'ils en disent le moins possible car un attaquant
tire toujours des conclusions de ces donnes. Commencez par modier
/etc/motd.
3 NdT : Il s'agt de micro-interrupteurs (ou micro-commutateurs) permettant de paramtrer
la conguration d'un appareil : carte mre, carte d'extension (vido, modem, imprimante, etc),
disques, etc. Ces dispositifs ne sont pratiquement plus utiliss de nos jours car la conguration
des priphriques se fait par voie logicielle.
CHAPITRE 45. UNIX ET LA SCURIT. 576
Programme de cours.
Nous reproduisons ici la mthode de cours utilise par Paul Sheer en Afrique
du Sud.
Les sections constituant cette annexe dcrivent un programme de cours de 36
heures sous forme de 12 sances de 3 heures. A raison de 2 sances par semaines,
le cours s'tend sur 6 semaines. Les cours sont donns en suivant le texte de ce
livre de trs prs, mais certains chapitres font l'objet d'un travail personnel
domicile.
580
CHAPITRE 46. PROGRAMME DE COURS. 581
46.4 Leon 1.
Un historique d'Unix et de Linux est donn de manire dcrire les per-
sonnes et les organismes faisant autorit. Les diverses formes de licences sont
expliques avec une attention tout particulire la GPL.
Le chapitre 5 (Les commandes de base ) occupe le reste des trois premires
heures.
Travail domicile : Les chapitres 49 (FAQ-Linux ) et 50 (La licence publique
GPL) seront lus. Les tudiants installeront leur distribution Linux. Le
chapitre 7 devrait tre vu pour apprendre les bases de vi.
46.5 Leon 2.
Le chapitre 6 (Les expressions rationnelles ) occupe la premire heure, le cha-
pitre 8 (Les scripts du shell ) le reste de la leon. L'enseignant devrait s'apen-
sentir sur l'importance qu'il y a bien comprendre les expressions rationnelles
et leur usage dans le monde Unix.
Travail domicile : rechercher direntes congurations du bureau et des
applications pour l'utilisateur. Les tudiants devraient devenir coutumiers
des dirents types de bureaux et des applications majeures qu'ils orent.
CHAPITRE 46. PROGRAMME DE COURS. 582
46.6 Leon 3.
La premire heure est consacre au chapitre 9 (Flux et sed comme diteur
de ux ). La deuxime traite des chapitres 10 (Processus et variables d'environ-
nement ) et 11 (Courriel ). Le chapitre 12 (Comptes d'utilisateurs et droits ) est
vu dans la troisime heure.
Travail domicile : rechercher Linux sur internet. Toutes les ressources men-
tionnes aux chapitres 14 (Ressources Linux) et 17 (Documentation pr-
installe ) devraient tre parcourues.
46.7 Leon 4.
Les deux premires heures traitent des chapitres 13 (Utilisation des services
internet ), 14 (Ressources Linux), 15 (Droits et types de temps ) et 16 (Liens
symboliques et physiques ). Durant la troisime heure, les chapitres 17 (Docu-
mentation pr-installe ) et 18 (Survol de la structure des rpertoires Unix) sont
vus.
Travail domicile : Les chapitres 19 22 (c'est-dire, dans l'ordre : Les p-
riphriques d' Unix ; Partitions, systmes de chiers, formatage et mon-
tage ; Script de shell avancs ; Services du systme et lpd ) seront lus. Les
tudiants ne seront pas mme de modier leur partition sur la machine
sur laquelle les cours sont suivis et les imprimantes ne seront pas dispon-
biles, donc ces aspects seront vus domicile. Le chapitre 21 (Scripts de
shell avanc s) n'est pas considr comme tant essentiel. Les tudiants
essayeront de congurer leur(s) imprimate(s) personnelles et discuteront
au cours des problmes rencontrs.
46.8 Leon 5.
Durant la premire heure, le chapitre 23 (Elments de programmation en C )
sera vu. La deuxime heure sera consacre au chapitre 25 (Paquets sources et
binaires ). Durant la troisime heure, les tudiants se consacreront la lecture
des chapitres 26 et 27 (soit : Introduction IP ; TCP et UDP ). Ils poseront des
question sur les points qui ne leur semblent pas clairs.
Travail domicile : le chapitre 24 (Bibliothques partages ) est optionnel.
Nous conseillons la relecture des chapitres 26 et 27 (Introduction IP ;
TCP et UDP ).
46.9 Leon 6.
La leon 6 couvre les chapitres 26 et 27 (Introduction IP ; TCP et UDP ).
On y dmontre un exemple de dtection de mots de passe utiliss par telnet
grce l'utilisation de tcpdump. La mme opration est ralise mais telnet
est remplac par ssh.
Travail domicile : lecture des chapitres 28 30 (c'est--dire : DNS et rsolu-
tion de noms, Systmes de chiers en rseau NFS et Les services excuts
sous inetd ) en prparation la leon 7.
CHAPITRE 46. PROGRAMME DE COURS. 583
46.10 Leon 7.
Les chapitres 28 30 (c'est--dire : DNS et rsolution de noms, Systmes de
chiers en rseau NFS et Les services excuts sous inetd ) sont vus durant les
deux premires heures. Un serveur DNS aura t install an que les tudiants
puissent l'utiliser. Durant la dernire heure, on explique comment le courriel est
distribu sur l'internet (aspects thoriques) et quelle est la structure du chier
de conguration d'exim.
Travail domicile : lecture du chapitre 31 (exim et sendmail ) an de prpa-
rer la leon 8.
46.11 Leon 8.
Les deux premires heures sont consacres au chapitre 31 (exim et sendmail ).
Les tudiants congurent leur propre serveur de courriel. Un serveur DNS aura
t activ de manire eectuer des enregistrements MX pour leur domaine. La
dernire heure est consacre aux chapitres 32 et 33 (Dmarrage, lilo et initrd ;
init, ?getty et niveaux d'excution Unix) sauf ce qui concerne les modems.
Travail domicile : excuter les commandes du chapitre 33 (init, ?getty et
niveaux d'excution Unix). Le chapitre 35 (uucp et uux ) ne doit pas tre
vu. Le chapitre 36 (Le systme de chiers Linux) doit tre tudi en
profondeur. Les tudiants installeront et congureront un serveur web
partir des instructions du chapitre 37 (httpd : serveur web Apache ) et
rapporteront les dicults rencontres. Apache en soi ne sera pas vu
durant les leons.
46.12 Leon 9.
Durant la premire heure, le chapitre 38 (crond et atd ) est trait. Les deux
autres heures permettent de voir la chapitre 41 (named serveur de noms de
domaine ). Les tudiants congurent leur propre serveur de noms pour eec-
tuer des requtes directes et inverses. Notez que Samba n'est pas vu s'il n'y
a pas de machines ou d'imprimantes Windows correctement congures pour
faire une dmonstration. Une possibilit pourrait tre de monter un partage
d'imprimante(s) et de chiers en utilisant smbmount.
Travail domicile : Les tudiants verront le chapitre 42 (Protocole point--
point Rseau dialup ) de manire congurer un rseau connexion in-
termittente, et ce d'eux-mmes. Lecture du chapitre 43 (Sources du noyau
Linux, modules et support matriel ) pour la prparation de la leon 10.
Poids de l'objectif : 4
Interagir avec les shells et les commandes depuis la ligne de commande (chapitre
5). Ceci comprend : taper des commandes et des squences de commandes valides
(chapitre 5) ; dclarer, dnir et exporter des variables d'environnement (chapitre 10) ;
utiliser l'historique des commandes et les facilits d'dition (section 3.6) ; invoquer des
commandes dans le chemin et hors du chemin (section 5.6) ; utiliser des substitutions
de commandes ; appliquer des commandes rcursivement sur une arborescence (section
21.7.5).
585
CHAPITRE 47. CERTIFICATION LPI RFRENCES CROISES. 586
Obj 4 : Utilisation des ux Unix, des tubes, et des redirections Poids
de l'objectif : 3
Passer des chiers des commandes et des commandes d'autres commandes
pour traiter ecacement des donnes en mode texte. Ceci comprend les redirections
d'entre, de sortie et d'erreur standards ainsi que l'utilisation des tubes pour utiliser
la sortie d'une commande en tant qu'entre ou argument (avec xargs) d'une autre
commande, et l'envoi d'une sortie vers la sortie standard et dans un chier (avec tee)
(chapitre 10).
Poids de l'objectif : 3
Crer des expressions rationnelles simples et utiliser des outils
comme grep ou sed pour eectuer les recherches (chapitres 5 et 8).
Obj 5 : Utiliser les droits des chiers pour en contrler l'accs Poids
de l'objectif : 3
Changer les droits des chiers, rpertoires et chiers spciaux, utiliser les modes de
droits spciaux comme les bits suid et sticky, utiliser le champ groupe pour permettre
l'accs au chier un groupe de travail, changer les droits par dfaut lors des crations
de chiers. Ceci suppose la connaissance des commandes chmod et umask et ncessite
la comprhension des modes de droits symboliques et numriques (chapitre 15).
Obj 8 : Trouver les chiers systme et placer les chiers au bon endroit
Poids de l'objectif : 2
Comprendre la hirarchie standard du systme de chiers, connatre l'emplacement
des chiers standards, connatre l'utilit des dirents rpertoires systmes, trouver
des commandes et des chiers. Ceci met en jeu les commandes : nd, locate, which,
updatedb et la modication de /etc/updatedb.conf (section 5.14 ainsi que les chapitres
18 et 36).
CHAPITRE 47. CERTIFICATION LPI RFRENCES CROISES. 588
les ports y compris les ports sries et parallles ; noter les IRQ ; tre au courant des
problmes relatifs aux disques qui ont plus de 1024 cylindres (chapitres 5 et 43).
Obj 2 : nant.
les problmes associs. Ceci peut faire entrer en compte la conguration et l'tude
des chiers et rpertoires : /etc/hostname, /etc/hosts, /etc/networks, /etc/host.conf,
/etc/resolv.conf, et d'autres chiers de conguration rseau propres votre distribu-
tion. Ceci suppose l'utilisation des commandes et programmes suivants : dhcpd, host,
hostname (domainname, dnsdomainname), ifcong, netstat, ping, route, traceroute et
des scripts rseau lancs durant l'initialisation (chapitres 26 et 28).
Certication RHCE -
Rfrences croises.
L'acronyme RHCE signie RedHat Certied Engineer .
RedHat a developp un grand nombre de cours qui se chevauchent, certains tant
moins lourds que d'autres, avec des documents plus accessibles. Ces cours, centrs au-
tour de RedHat, ne sont pas toujours applicables d'autres distributions. Dans certains
secteurs, les habilitations RedHat sont plus exigentes que ce n'est le cas avec le LPI.
Donc, il est pertinent de raliser un contrle de vos connaissances vis--vis de ce qui
est demand pour les habilitations RedHat. L'information contenue dans les sections
qui suivent provient de discussions avec des personnes ayant suivi les cours RedHat.
Il est trs possible que les donnes prsentes ici doivent tre adaptes. En aucun
cas, vous ne devriez les considrer comme dnitives. Ds lors, visitez http ://red-
hat.com/training/rhce/courses/ pour un guide ociel.
Pour chaque objectif, le(s) chapitre(s) ou la (les) section(s) du livre sont indiqus entre
parenthses.
48.2 RH300.
Cette certication concerne les administrateurs non-Linux qui souhaitent largir
leur champ d'administration au systme Linux. Les pr-requis de cette habilitation
penchent vers la comprhension des alternatives et des caractristiques propres Linux,
plutt que vers des congurations Linux complexes. Notez que dans ce qui suit le terme
Guide d'Installation RedHat a t contract en GIRH. Il se rapport l'aide associe
l'installeur RedHat (ce qui pour les systmes RedHat 6.2 correspond au guide HTML
596
CHAPITRE 48. CERTIFICATION RHCE - RFRENCES CROISES. 597
Foire-aux-questions Linux.
Les capacits de Linux sont en progrs constants. Aussi, prenez la peine de consul-
ter les direntes ressources internet cites dans le livre pour obtenir une information
jour.
603
CHAPITRE 49. FOIRE-AUX-QUESTIONS LINUX. 604
49.1.2 Que sont les systmes Unix ? Que peut faire Li-
nux ?
Les systmes Unix forment la colonne vertbrale de l'internet. L'industrie lourde,
les missions applications critiques, les universits utilisent Unix. Les serveurs de
haut-de-gamme, les ordinateurs centraux et les super-ordinateurs utilisent Unix. Ces
systmes sont utiliss par les grandes socits fournissant des accs internet aussi bien
que par de petits entreprises. Unix est un standard pour le matriel neuf et les nou-
velles plate-formes car ce systme est le plus portable. Les systmes Unix sont utiliss
pour supporter de grandes bases de donnes, de chiers, et comme serveurs Internet.
Unix est aussi utilis pour la visualisation et les rendus graphiques haut de gamme
(ce systme d'exploitation est utilis par l'industrie cinmatographique d'Hollywood).
Les industries et les universits l'employent pour des simulations caractre scien-
tique et pour le calcul haute charge dans des grappes de machines. Le march
des systmes d'exploitation embarqus (de petits ordinateurs sans oprateur qui sont
implants dans des appareils) s'est rcemment tourn vers Linux, ces systmes sont
utiliss par millions.
En soi, Linux peut fonctionner comme serveur web, serveur de chiers, serveur
SMB (WinNT), serveur Novell, serveur d'impression, serveur FTP, serveur de courriel,
serveur SQL, serveur POP, pare-feu, serveur de masquarade d'adresses, routeur, etc.
Il fait ce que d'autres serveurs font, mais plus ecacement et de manire plus sre.
Les interfaces graphiques pour les utilisateurs sont agrables et sont les plus fonction-
nelles lorsqu'il faut travailler en rseau. Linux est dsormais prt pour le bureau de
l'utilisateur particulier.
C'est grce ces personnes qu'une licence libre, complte, lgale et applicable aux
logiciels libres existe. Du fait que de nombreux composants d'une distribution Linux
proviennent des outils GNU dvelopps avant le noyau Linux lui-mme, il serait injuste
de rduire l'appelation d'une distribution Linux. Le terme GNU/Linux est la fois
plus juste et plus respectueux de tout le travail accompli.
MIT licence du consortium MIT (similaire aux licences BSD mais sans publicit sur
les conditions),
BSD droits d'auteurs des Rgents de Berkeley (utiliss sur le code de BSD),
Artistic License identique la licence artistique Perl,
FRS droits d'auteurs, redistribution libre, possibilit de restrictions sur la redistribu-
tion de sources modies,
GPL GNU General Public License,
GPL+LGPL GNU GPL et GPL sur les bibliothques,
restricted moins libre que toutes les licences cites ci-dessus.
Le lecteur trouvera plus d'informations sur ces licenses sur le site Metalab License List
l'adresse ftp ://metalab.unc.edu/pub/linux/LICENSES.
Les partisans des logiciels libres militent en faveur d'une responsabilit morale
permettant au code source s'tre disponible et redistribuable de manire ce que ceux
qui en bncient perptuent le mouvement.
Le terme shareware ou partagiciel dsigne un logiciel sous forme binaire totalement
non-libre mais redistribuable. Il ne s'agit en aucune manire d'un logiciel libre .
paquets (ou bien une mthode d'installation mieux adapte) ont t incluses. Parfois,
les changement sont trs subtils.
L'implmentation de la bibliothque C Linux est appele glibc. Lorsque RedHat
a sorti sa version 5.0 (en 1998), il y a eu un changement de l'ancienne bibilothque
libc5 vers glibc. Etant donn que tous les paquets dpendent de cette bibliothque,
certains auraient pu penser que cela introduisait des incompatibilits. Cependant, plu-
sieurs versions d'une mme bibliothque peuvent co-exister sur un mme systme.
Cette transition n'a en ralit pas introduit d'incompatibilits. Du coup, d'autres dis-
tributeurs ont eectu le passage glibc (en fait : libc6).
La communaut Linux a aussi dit un document appel le systme de chiers
normaliss (SFN ou, FHS en anglais). La majorit des vendeurs essayent de se confor-
mer cette norme, ce qui fait que les systmes Linux sont trs proches les uns des
autres. Il n'y a donc pas de problmes rhdibitoires de compatibilit entre distributions
Linux.
Slackware C'est la premire distribution Linux. Elle est considre comme celle
qui intgre les paquets les plus rcents. Dicile installer et grer, elle est
apprcie des connaisseurs. Paquets sources .tar.gz.
Gentoo Trs avance techniquement par son systme de gestion de paquets appel
Portage, Gentoo combine les avantages de Debian et de BSD. Son installation
est assez dicile (quoique richement documente), car chaque tape demande
une intervention en ligne de commandes. La responsabilit de l'administrateur
est mise contribution pour personnaliser le systme chaque niveau (d'o
une grande exibilit : compilation des paquets, optimisation selon l'architec-
ture matrielle, contrle des smaphores de la variable USE, etc). Elle permet
une matrise trs pousse de tout le systme. Systme de paquets .ebuild qui
appellent les sources par tlchargements sur l'internet pour les compiler en
fonction des smaphores xs par l'administrateur.
Les distributions paquets RPM (RedHat, Mandriva, etc.) ont ceci d'intressant que
presque tous les dveloppeurs fournissent des paquets .rpm (le type de chiers bi-
naires fournit par RedHat). Les paquets Debian (.deb) sont gnralement fournis mais
moins souvent que les .rpm. En revanche, les paquets Debian sont principalement cres
par des personnes appartenant l'quipe de dveloppement de Debian et donc elles
adhrent aux hauts standards de qualit de cette distribution.
TurboLinux, SuSE (dsormais sous la houlette de Novell) et quelques autres distri-
butions sont galement trs apprcies. Il existe des analyses de toutes ces distributions
(benchmarks ) sur l'internet.
Beaucoup d'autres distributions mritent d'tre installes [...].
ouvrage. Si vous naviguez parmi les chiers des CDs ou du DVD, vous trouverez de
la documentation. Par ailleurs, le site web de votre distribution vous propose une
documentation complte.
Essayez aussi de voir ce que vous restitue l'internet lorsque vous faites une recherche
sur installation linux. Lisez le guide d'installation en dtail. Il dcrit chaque aspect
du partitionnement, du dual-boot , et de bien d'autres points.
Soyez attentif au fait que chaque distribution possde sa propre mthode d'instal-
lation.
beaucoup plus convivial et dvelopp que celui de tous les autres Unix. Les interfaces
utilisateurs et les commandes sont mieux construites.
Le rsultat est qu'en dpit d'un fonctionnement aussi bon que celui de Linux, les
Unix sont plus exigeants entretenir.
Les systmes Unix qui fonctionnent sur du matriel spcialis ne vous permettent
jamais d'avoir un bon retour sur investissement (rapport cot/performance).
Linux accepte autant de mmoire swap que vous le souhaitez depuis les noyaux
2.4.
Les applications Unix de l'entreprise qui sont bien crites (en ce compris les ap-
plications graphiques) tolrent un portage ais sous Linux et, bien sr, sous d'autres
Unix.
taille qui exploitent l'ingnirie sociale, la logistique et la facilit qu'ont les ordinateurs
eectuer aveuglment des tches indsirables.
Du fait qu'un systme Unix ne possdent pas l'origine cette facilit d'excution,
les virus adresss Unix ou Linux ne peuvent pas tre excuts inconsciemment par
les utilisateurs (et encore, s'il staient excuts, seraient-ils conns la session du
dit-utilisateur sans endommager le systme dans son ensemble). Ainsi, de manire in-
trinsque, Unix restreint les droits d'accs aux chiers en dehors de l'espace utilisateur,
de sorte qu'un virus n'a rien infecter.
Cependant, bien que Linux ne puisse excuter de lui-mme un virus, il peut tre
capable de passer un virus destin une machine Windows si la machine Linux agit
comme serveur de courriels ou de chiers. Pour viter ce type de problme, de nom-
breux programmes de dtection de virus sont disponibles. Ceci dsigne donc les anti-
virus pour Linux.
En revanche, la mauvaise conguration d'une machine permet parfois un cra-
cker intelligent d'attaquer cette machine et d'ventuellement y gagner des droits im-
portants. Ce cracker essayera donc d'attaquer d'autres machines en utilisant des pro-
grammes particuliers. Le cracker peut aller plus loin en forant les machines compro-
mises excuter des programmes indsirables. A ce stade, les programmes indsirables
seront des vers, des programmes contrecarrant la scurit et capables d'exploiter un
trou de scurit rcursivement sur un rseau. Voir ci-dessous.
Ultrieurement l'attaque dont nous venons de parler, des utilisateurs en grand
nombre peuvent utiliser la mme application de bureau propritaire qui prsente par-
tout la mme vulnrabilit. Si vous utilisez Linux, seul l'espace utilisateur sera touch ;
pas Linux en soi.
Rappelez-vous qu'avec une comprhension minimale de Linux, il est facile de d-
tecter et rparer un systme corrompu sans avoir eectuer une opration comme la
rinstallation d'un systme complet ou l'achat et la mise--jour d'antivirus.
Vous pouvez scuriser trs fortement votre systme en suivant des rgles simples,
comme par exemple, en tant attentif aux services en cours, en ne permettant pas aux
mots de passe d'tre compromis et en installant des utilitaires pour fermer la porte
d'ventuelles vulnrabilits.
En raison du caractre communautaire associs la mthode Linux, il existe
une franchise et une honntet naturelles vis--vis des problmes de scurit. Il n'y a
pas de cas o des mainteneurs de logiciels puissent fermer les yeux sur des problmes
de scurit pour des raisons commerciales. C'est pourquoi vous pouvez faire davan-
tage conance Linux qu' toute autre institution commerciale qui pense qu'il y a
beaucoup perdre par la rvlation des vulnrabilits de leurs logiciels.
Chapitre 50
Copyright c Free Software Foundation, Inc. 59 Temple Place, Suite 330, Bos-
ton, MA 02111-1307 tats-Unis, 1989, 1991. La copie et la distribution de copies
exactes de ce document sont autorises, mais aucune modication n'est permise.
50.1 Preambule.
Les licences d'utilisation de la plupart des programmes sont dnies pour
limiter ou supprimer toute libert l'utilisateur. l'inverse, la Licence Publique
Gnrale (General Public License ) est destine vous garantir la libert de
partager et de modier les logiciels libres, et de s'assurer que ces logiciels sont
eectivement accessibles tout utilisateur.
Cette Licence Publique Gnrale s'applique la plupart des programmes
de la Free Software Foundation, comme tout autre programme dont l'auteur
l'aura dcid (d'autres logiciels de la FSF sont couverts pour leur part par
la Licence Publique Gnrale pour Bibliothques GNU (LGPL)). Vous pouvez
aussi appliquer les termes de cette Licence vos propres programmes, si vous
le dsirez.
Libert des logiciels ne signie pas ncessairement gratuit. Notre Licence
est conue pour vous assurer la libert de distribuer des copies des programmes,
gratuitement ou non, de recevoir le code source ou de pouvoir l'obtenir, de modi-
er les programmes ou d'en utiliser des lments dans de nouveaux programmes
libres, en sachant que vous y tes autoris.
An de garantir ces droits, nous avons d introduire des restrictions inter-
disant quiconque de vous les refuser ou de vous demander d'y renoncer. Ces
restrictions vous imposent en retour certaines obligations si vous distribuez ou
624
CHAPITRE 50. LA LICENCE PUBLIQUE GNRALE GNU. 625
moyennant nances.
Article 2. Vous pouvez modier votre copie ou vos copies du Programme ou
partie de celui-ci, ou d'un travail bas sur ce Programme, et copier et
distribuer ces modications selon les termes de l'article 1, condition de
Vous conformer galement aux conditions suivantes :
a) Ajouter aux chiers modis l'indication trs claire des modications
eectues, ainsi que la date de chaque changement.
b) Distribuer sous les termes de la Licence Publique Gnrale l'ensemble
de toute ralisation contenant tout ou partie du Programme, avec ou
sans modications.
c) Si le Programme modi lit des commandes de manire interactive
lors de son excution, faire en sorte qu'il ache, lors d'une invocation
ordinaire, le copyright appropri en indiquant clairement la limitation
de garantie (ou la garantie que Vous Vous engagez fournir Vous-
mme), qu'il stipule que tout utilisateur peut librement redistribuer le
Programme selon les conditions de la Licence Publique Gnrale GNU,
et qu'il montre tout utilisateur comment lire une copie de celle-ci (ex-
ception : si le Programme original est interactif mais n'ache pas un tel
message en temps normal, tout travail driv de ce Programme ne sera
pas non plus contraint de l'acher).
Toutes ces conditions s'appliquent l'ensemble des modications. Si des l-
ments identiables de ce travail ne sont pas drivs du Programme et peuvent
tre raisonnablement considrs comme indpendants, la prsente Licence ne
s'applique pas ces lments lorsque Vous les distribuez seuls. Mais, si Vous
distribuez ces mmes lments comme partie d'un ensemble cohrent dont le
reste est bas sur un Programme soumis la Licence, ils lui sont galement sou-
mis, et la Licence s'tend ainsi l'ensemble du produit, quel qu'en soit l'auteur.
Cet article n'a pas pour but de s'approprier ou de contester vos droits sur un
travail entirement ralis par Vous, mais plutt d'ouvrir droit un contrle de
la libre distribution de tout travail driv ou collectif bas sur le Programme.
En outre, toute fusion d'un autre travail, non bas sur le Programme, avec le
Programme (ou avec un travail driv de ce dernier), eectue sur un support de
stockage ou de distribution, ne fait pas tomber cet autre travail sous le contrle
de la Licence.
Article 3. Vous pouvez copier et distribuer le Programme (ou tout travail d-
riv selon les conditions nonces dans l'article 1) sous forme de code objet
ou excutable, selon les termes des articles 0 et 1, condition de respecter
l'une des clauses suivantes :
a) Fournir le code source complet du Programme, sous une forme lisible
par un ordinateur et selon les termes des articles 0 et 1, sur un support
habituellement utilis pour l'change de donnes ; ou, *
b) Faire une ore crite, valable pendant au moins trois ans, prvoyant
de donner tout tiers qui en fera la demande une copie, sous forme
lisible par un ordinateur, du code source correspondant, pour un tarif
n'excdant pas le cot de la copie, selon les termes des articles 0 et 1, sur
un support couramment utilis pour l'change de donnes informatiques
ou,
c) Informer le destinataire de l'endroit o le code source peut tre obtenu
(cette solution n'est recevable que dans le cas d'une distribution non
CHAPITRE 50. LA LICENCE PUBLIQUE GNRALE GNU. 627
630
INDEX 631
.tgz, 64 :, 217
.ti, 64 :, touche, 86
.ttf, 64 ;, 250, 263
.txt, 64 =, oprateur aectation, 254
.voc, 64 ==, oprateur galit, 254
.wav, 64 [, 221
.xpm, 65 #, 264
.y, 65 $
.zip, 65 *, 214
/, 200 -, 214
/*, 263 ?, 214
/bin, 79, 111 #, 214
/bin/login, 368, 369 $, 214
/bin/sash, 363 _, 214
/bin/sh, 92 0, 214
/boot, 200 %, 113
/boot/, 515 ?, 124
/boot/boot.0300, 360 CPU, 118
/boot/map, 358, 360 d, 250
/boot/vmlinuz, 358, 360 e, 251
/etc/prole, 229 f, 251
/var, 163 MEM, 118
/var/lock, 375, 382 diteur de texte
/var/lock/LCK..tty ? ?, 382 cooledit, 90
/var/log, 240 emacs, 90
/var/log/, 240 gedit, 91
/var/log/fax, 374 jed, 90, 91
/var/log/lastlog, 134 joe, 91
/var/log/maillog, 240 nano, 91
/var/log/messages, 134, 240, 322, 481, nedit, 91
488, 575 pico, 91
/var/log/mgetty.log.ttyS, 370 vi, 85, 90
/var/log/samba, 474 vim, 90
/var/log/syslog, 240, 481, 488, 522, 575
/var/log/uucp/Debug, 383 +, 215
/var/log/uucp/Log, 383 -, 215
/var/log/uucp/Stats, 383 0.0.0.0, 291
/var/named, 481 0x8086, 525
/var/named/named.127.0.0.1, 484 1, port, 573
/var/named/named.ca, 483 10.0.0.0, 292
/var/named/named/localdomain, 484 1024 cylindres, /boot, 396
/var/run/httpd.pid, 436 1024 cylindres, BIOS, 359
/var/spool, 239 1024 cylindres, limite, 198
/var/spool/, 125 1024, octets, 69
/var/spool/exim/input, 340 1024, port, 307, 310, 312
/var/spool/fax/incoming, 371 1045, port, 573
/var/spool/lpd, 239 110, port, 314, 342
/var/spool/mqueue, 340 11x17, 243
/var/spool/uucp/, 383 127.0.0.0, 292, 295
/var/spool/uucppublic, 380 127.0.0.1, 292, 338
INDEX 632
webalizer, 602
Windows, 90
wrappers, 599, 602
xauth, 601
Xclients, 599
Xcongurator, 597
xdm, 599
xenix, 207
XF86Cong, 599
xf86cong, 599
XF86Setup, 599
xfs, 599
XFS, systme de chiers, 204
xhost, 599, 601
xiafs, 207
xinit, 599
xload, 601
xosview, 601
xsession, 599
xsysinfo, 601
yacc, 65
Yellow Pages, voir Network Informa-
tion Services, 425
ypbind, 599
yppasswd, 599
yppasswdd, 599
yppush, 599
ypserv, 599
zcat, 74
zless, 75
zone, DNS, 488