Vous êtes sur la page 1sur 415

M.

Elie Degny Raphael

COURS DE LINUX
. Introduction L'installation de Linux est une opration relativement complique, qui n'est pas la porte de tout le monde. Mme si la qualit des distributions actuellement disponibles s'est grandement accrue ces derniers temps, au point que n'importe qui peut installer un systme Linux viable sans trop de problme, la configuration du systme pour obtenir un fonctionnement correct exige un travail assez important. En particulier, les distributions actuelles prouvent encore quelques difficults pour optimiser les priphriques exotiques, et souvent seules les fonctionnalits de base sont correctement configures aprs une installation classique. Par ailleurs, la plupart des applications sont dveloppes par des groupes de programmeurs indpendants, et bien que ce soit justement le rle des distributions de raliser l'intgration de tous ces composants dans un environnement homogne, celle-ci n'est pas forcment parfaite. Les outils de configuration des distributions vous permettront sans doute de configurer votre systme de base simplement, mais pour aller au-del, il faudra sans doute intervenir manuellement. Nanmoins, il faut reconnatre que celui qui installe Linux partir d'une distribution sur un ordinateur assez vieux (c'est--dire un ordinateur qui ne dispose pas des derniers priphriques et cartes graphiques la mode), ou dont les constituants sont de marque courante, obtient rapidement un systme fonctionnel et capable de raliser la plupart des oprations qu'il dsire. En particulier, celui qui utilise son ordinateur pour travailler (j'entends par l crire des lettres, les imprimer, naviguer sur Internet pour rcuprer des informations, ou programmer) peut parfaitement se contenter de l'installation par dfaut. Ce type de situation ne convient pas tout le monde : la plupart des gens disposent de cartes graphiques rcentes (surtout depuis l'avnement des jeux 3D) ou de priphriques spcifiques. Tout le monde ne se place pas uniquement dans le cadre d'une utilisation professionnelle, et il est absurde de disposer d'une carte son et de ne pas pouvoir l'utiliser. Et c'est l que le bt blesse ! Si l'on dsire que Linux reconnaisse ces matriels exotiques, il va falloir mettre les mains dans le cambouis et avoir une bonne dose de patience. Ce problme de configuration apparat malheureusement principalement pour les particuliers, qui souvent disposent de machines htroclites et absolument non standards. Dans le cadre d'une entreprise, il existe des personnes qualifies pour rsoudre ce type de problme, mais ce sont des informaticiens et, de plus, les machines sont souvent homognes, ce qui permet d'apporter des solutions gnriques. En conclusion, il faut tre informaticien ou amateur trs clair pour installer Linux sur une machine de particulier et pour le configurer de manire optimale. La situation est d'autant plus grave que la plupart des gens ne connaissent pas Linux, et qu'il est toujours difficile d'apprendre et de prendre de nouvelles habitudes. Je veux dire par l que mme une tche trs simple raliser peut prendre un certain temps, car tout simplement on ne l'a jamais faite. Celui qui a install trois fois MS Windows sait parfaitement le faire prsent, et il pense que c'est relativement facile. Et pourtant, il ralise souvent des tches d'une complexit qui dpasse, l aussi, le commun des mortels.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

M. Elie Degny Raphael

Heureusement, et c'est l la force de Linux, ces oprations ne doivent tre effectues qu'une seule fois. On n'a absolument pas besoin de changer la configuration chaque instant, comme c'est le cas sous MS Windows, parce que le systme est globalement beaucoup plus stable. Il ne plante quasiment jamais, les applications ne peuvent pas le corrompre, et sa qualit supprime le besoin permanent de mettre jour une partie du systme. En clair, quand on en a un qui fonctionne, on le garde, non pas parce que c'est un enfer installer et configurer, mais tout simplement parce que ce n'est pas ncessaire de le changer. En rsum, on peut affirmer que :

Linux est un systme simple installer sur des machines standards ; sa configuration sur une machine plus exotique requiert parfois une intervention manuelle ; dans la plupart des cas, cette intervention n'est pas trs difficile raliser ; cependant, elle peut drouter les personnes qui ne l'ont jamais effectue ; mais le jeu en vaut la chandelle, parce que le systme est rellement solide.

L'objet de ce document est de donner les connaissances de base ncessaires l'installation de Linux sur un ordinateur de particulier ou un petit serveur. Il est suppos que l'utilisateur a dj utilis un autre systme d'exploitation, par exemple MS Windows. Cependant, aucune notion avance d'informatique n'est ncessaire. Tout sera expliqu au fur et mesure des besoins, et si ncessit est, des complments d'informations seront donns pour permettre la comprhension des oprations effectuer. Nanmoins, les notions qui seront abordes ici ne seront pas simples, et il est possible que la plupart des personnes qui n'ont pas une grande habitude de l'informatique aient quelques difficults les assimiler. Cela dit, vaincre sans peine, on triomphe sans gloire, et l'installation de Linux vous procurera le plaisir d'apprendre. Ce document est structur en huit parties distinctes, qui correspondent essentiellement aux grandes tapes que vous suivrez pour installer Linux. La premire partie a pour but de clarifier un peu les notions ayant trait aux logiciels libres. Elle tente d'expliquer pourquoi ces logiciels existent, et pourquoi ils font partie des meilleurs logiciels actuels. La deuxime partie dcrit les concepts de base de la plupart des systmes d'exploitation Unix. Elle ne traite pas de l'installation proprement parler, mais sa lecture est recommande pour tous ceux qui n'ont jamais vu un tel systme. La troisime partie dcrit l'installation du systme de base de Linux. l'issue de cette partie, vous devez disposer d'un systme fonctionnel, utilisable mais non optimis et ne permettant pas forcment d'utiliser tous vos priphriques. La quatrime partie constitue un petit cours d'Unix pour les nouveaux utilisateurs de ce type de systme. Bien que, comme les deux premires parties, elle ne traite pas de l'installation proprement parler, sa lecture est vivement recommande. En effet, vous aurez utiliser les commandes dcrites dans ce chapitre pour raliser la configuration de votre nouveau systme. La cinquime partie dcrit les oprations de configuration du systme de base. Cette partie est en relation troite avec la huitime partie, qui traite des fonctionnalits du noyau. Elle pourra tre relue avec bnfice lorsque vous aurez configur une premire fois votre noyau. La sixime partie traite de la configuration du rseau sous Linux. Le rseau est
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 2

M. Elie Degny Raphael

rellement l'un des aspects les plus importants de Linux, et ncessite donc une attention toute particulire. La septime partie donne les notions de base sur les mcanismes de compilation, qui seront utilises dans la huitime partie. Elle dcrit galement la manire de faire pour compiler la dernire version de GCC, le compilateur C/C++ de GNU. La huitime partie dcrit la compilation du noyau du systme, opration indispensable pour obtenir un systme qui colle la machine et aux fonctionnalits dsires. Enfin, la neuvime et dernire partie vous dcrit la procdure d'installation de XWindows, l'environnement graphique de Linux. L'installation des polices TrueType y est aussi prsente.

Chapitre 1. GNU, LINUX ET LES LOGICIELS LIBRES


Vous entendrez souvent parler de la licence GNU et de la Free Software Foundation dans le monde de Linux. Pour bien comprendre ce qu'est la Free Software Foundation et ce que signifie la licence GNU, il est ncessaire d'en faire une brve prsentation. La Free Software Foundation est une organisation dont le but est de dvelopper des logiciels libres. Le terme de libre signifie clairement que chacun peut faire ce qu'il veut du logiciel, y compris le modifier. La vente n'est absolument pas interdite, et il faut donc faire la distinction entre libre et gratuit. Cela tant dit, les logiciels libres sont de facto gratuits, car ils sont librement redistribuables par quiconque en possde une copie. Afin de protger les logiciels libres, la Free Software Foundation a rdig la licence GNU (en fait, cette licence a originellement t rdige pour le projet GNU, qui sera dcrit plus loin). Cette licence stipule que le logiciel libre peut tre redistribu, utilis, modifi librement, pourvu que celui qui en bnficie accorde les mmes droits ceux qui il fournit les copies du logiciel, qu'il l'ait modifi ou non. Cette licence empche donc l'alination du logiciel et sa transformation en logiciel propritaire, de quelque manire que ce soit. Cela implique que tout logiciel libre modifi par une autre personne que son auteur reste libre, et le restera jamais. Ainsi, il est impossible qu'une socit commerciale puisse un jour s'approprier un logiciel libre, mme si elle l'amliore. Afin de garantir la libert de modification des logiciels libres, la licence GNU impose aux distributeurs de fournir leur code source, c'est--dire tous les fichiers utiliss pour crer le logiciel. Vous trouverez de plus amples informations sur la notion de code source dans le Chapitre 8. Si vous dsirez lire la licence GNU, vous pouvez en trouver une copie dans le fichier /usr/src/linux/COPYING une fois que vous aurez install Linux. Les programmes distribus sous la licence GNU ont souvent t crits par des passionns d'informatique, et ont t amliors au fil du temps par les diffrentes personnes qui les ont utiliss. Il est mme courant de voir des entreprises participer au dveloppement des logiciels libres, pour diverses raisons. On peut se demander quel est l'intrt pour une entreprise de dvelopper un logiciel libre dont elle ne tirera aucun profit. En gnral, plusieurs critres peuvent entrer en ligne de compte. Ce peut tre la publicit, le parrainage, ou tout simplement parce que le logiciel est utilis en interne et requiert une amlioration. D'autres socits fournissent un support et un service aprs-

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

M. Elie Degny Raphael

vente payant sur les logiciels libres qu'elles distribuent (c'est notamment le cas pour les distributions de Linux). Quoi qu'il en soit, cette participation collective a toujours pour but d'amliorer le logiciel. De plus, les gens qui dveloppent un logiciel libre sont souvent des spcialistes de ce type de logiciel, ou des utilisateurs avertis. Il est donc logique qu'au bout d'un certain temps, les logiciels libres fassent partie des meilleurs logiciels dans leur catgorie. Une autre caractristique de ce modle de dveloppement est l'accessibilit au code source des programmes et la libert de le modifier. Cette facilit est la source de la rapidit avec laquelle les bogues et les erreurs sont identifis, et de la ractivit du monde des logiciels libres en gnral. On peut considrer qu'un logiciel utilis par un grand nombre de personnes est virtuellement sans bogue connu, puisque si tel tait le cas il serait immdiatement corrig. Ce modle de dveloppement est donc certainement celui qui conduit l'une des plus grandes qualits logicielles qui soient. Comme on l'a dj dit, la licence GNU a t cre par la Free Software Foundation dans le cadre du projet GNU. Ce projet, toujours en cours de ralisation, a pour but d'crire un systme Unix libre et indpendant des Unix commerciaux. Prcisons ici que le terme Unix caractrise un ensemble de systmes d'exploitation, qui disposent tous peu prs des mmes fonctionnalits et proposent d'y accder de la mme manire. La Free Software Foundation a dj crit la plupart des utilitaires Unix dans le cadre du projet GNU, mais le cur du systme (ce que l'on appelle le noyau est toujours en cours de ralisation. Pour information, ce noyau se nomme Hurd . Cependant, d'autres noyaux sont disponibles, avec lesquels les commandes GNU peuvent tre utilises. Parmi ces noyaux, il existe bien entendu Linux, qui a t crit par le Finlandais Linus Torvalds lorsqu'il tait tudiant, et amlior par des programmeurs du monde entier sur Internet. Linux est un noyau parmi tant d'autres, ceci prs qu'il est, lui aussi, distribu sous la licence GNU, bien que n'ayant rien avoir avec la Free Software Foundation. Cela signifie qu'il serait en fait plus exact de parler du systme GNU/Linux que de Linux . Sous cette dnomination, il est clair que ce systme est constitu des outils GNU fonctionnant sous le noyau Linux. C'est donc un ensemble de logiciels libres provenant de plusieurs sources distinctes. Cependant, il est trs courant d'entendre parler de Linux tout court, par abus de langage et par souci de simplicit. Bien entendu, cette dnomination est proscrite sur les sites Internet de la Free Software Foundation. Prcisons que la licence GNU n'est pas la seule licence permettant de distribuer des logiciels libres. Il existe d'autres licences, dont les termes sont peu prs similaires. Par exemple, la licence FreeBSD (un autre systme Unix libre) exige galement la distribution des sources, mais interdit l'exploitation commerciale des logiciels. Cela explique l'absence de distribution de FreeBSD et le fait qu'il est quasiment inconnu du grand public bien qu'il soit techniquement meilleur que Linux. Quelques outils fournis avec Linux sont distribus sous cette licence. Enfin, pour information, le terme GNU est l'abrviation de l'anglais GNU's Not Unix . Cette curieuse phrase rappelle que le projet GNU est de raliser un systme
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 4

M. Elie Degny Raphael

Unix diffrent des autres. Vous remarquerez que cette dfinition est rcursive, c'est-dire qu'elle utilise le mot GNU elle-mme. Cela doit tre attribu au got des dveloppeurs de la Free Software Foundation pour ce genre de dfinitions infiniment rcursives. Vous ne saurez sans doute jamais les raisons qui les ont pousss choisir la lettre 'G' dans leur dfinition. Cela tant, GNU se prononce gnou en anglais, et vous trouverez donc souvent la reprsentation d'un gnou sur les sites Internet de GNU.

Le systme dexploitation Linux Linux est le systme qui connat actuellement le plus grand dveloppement sur lInternet.Principalement pour les raisons suivantes : Linux est le systme de prdilection pour linstallation de trois logiciels serveurs leaders sur lInternet : Apache en serveur Web (60% avec ses drivs selon Netcraft), Sendmail en serveur courrier et Bind en serveur DNS ;

Le logiciel Samba qui lui permet dtre serveur de fichier et dimpression en environnement Microsoft ; La stabilit et la scurit que lui confre le dveloppement de son architecture et de ses modules au sein de la communaut Open Source. Le large choix dapplications dans de trs nombreux domaines. Par exemple, la dernire distribution Debian donne accs plus de 2000 logiciels diffrents. Moins dinterruptions de service grce une gestion intelligente de linstallation des logiciels. Une serveur sous Linux ne doit tre redmarr que lors dune modification matrielle comme lajout dun disque ou dune carte. Logiciel Libre. Linux est gratuit et librement recopiage. Cela signifie que lon peut tlcharger une version de Linux ou lemprunter et linstaller sur nimporte quel nombre dordinateur. Accs aux sources des logiciels. Tous les utilisateurs peuvent modifier le fonctionnement des programmes ou engager un programmeur pour le faire. Linux est plus efficace et consomme moins de ressources CPU et mmoire que Windows. On peut par exemple faire un serveur dimpression avec un vieux 486. SERVEUR = COUTS REDUITS, SECURITE ET

LINUX COMME PERFORMANCE !

Chapitre 2. Concepts de base


Ce chapitre dcrit les principes de base qu'il faut connatre pour bien comprendre Linux. Les informations qui sont donnes ici ne sont pas rellement spcifiques Linux. Elles s'appliquent souvent aux systmes Unix en gnral. Il est donc recommand de lire ce
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 5

M. Elie Degny Raphael

chapitre, surtout si l'on n'a jamais vu ni utilis un systme Unix. En particulier, les utilisateurs chevronns de Windows risquent d'tre lgrement drouts. L'architecture du systme sera prsente, ainsi que la scurit et la notion d'utilisateur. Viendront ensuite les descriptions des principales fonctionnalits du systme de fichiers et de sa structure. Architecture du systme Comme tout logiciel d'une certaine taille, Linux est d'une grande complexit. Tous les systmes d'exploitation rcents sont constitus d'un grand ensemble de composants qui interagissent et dont la mise en place peut tre soit indispensable au bon fonctionnement du systme, soit facultative, soit tout simplement inutile tant donns la configuration matrielle et les besoins des utilisateurs. Cette complexit implique un grand nombre d'erreurs, d'anomalies et de dysfonctionnement possibles. En effet, pour qu'un systme informatique fonctionne correctement, il faut tout prvoir pour donner une action approprie tous les vnements possibles. Cela n'est pas humainement ralisable quand le systme devient trop complexe. Pour rsoudre ce problme, il est courant de subdiviser le systme en composants indpendants, dont le mauvais fonctionnement potentiel ne peut perturber que partiellement les autres parties du systme. Des points de synchronisation partir desquels le systme peut reprendre un fonctionnement normal aprs une erreur sont prvus. Ces points de synchronisation permettent simplement d'assurer la viabilit du systme, mme en cas d'erreur inopine. Pour quelques systmes, le seul point de synchronisation est le point de dpart, savoir le dmarrage de l'ordinateur. De tels systmes doivent donc souvent tre redmarrs, parfois pour une cause mineure (erreur d'un logiciel, modification de la configuration du systme, ajout d'un composant au systme). Ce n'est pas le cas de Linux, qui dans le pire des cas dtruit le composant qui a gnr l'erreur sans toucher aux autres parties du systme. Le point de synchronisation de Linux est donc le redmarrage d'une partie du systme uniquement, ce qui assure ainsi une grande stabilit du systme complet. Il va de soi que, lorsqu'un composant se plante, ceux qui l'utilisent risquent fort de se retrouver dans un tat d'erreur assez difficile grer. Cela peut souvent provoquer leur propre perte. Par consquent, plus un composant est utilis, plus il doit tre fiable. Or il est un composant la base de tout dans Linux : le noyau ( kernel en anglais). C'est le cur du systme, et en fait c'est prcisment le systme Linux. Heureusement, ce composant est d'une trs, trs grande fiabilit, et il n'est pas rare de voir un systme Linux fonctionner plusieurs mois ou annes sur des serveurs. Cette fiabilit provient du modle de dveloppement de Linux, qui est ouvert tout le monde (chacun peut rcuprer, lire, modifier, complter ou corriger le noyau condition de savoir bien programmer). partir d'une taille critique en terme de nombre d'utilisateurs, taille que Linux a atteinte, il existe suffisamment de dveloppeurs pour dtecter et corriger les erreurs. Ainsi, ds qu'une erreur est dtecte, elle est souvent corrige dans les jours qui suivent, ce qui assure une grande qualit.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

M. Elie Degny Raphael

Le noyau gre quasiment tout (mmoire, disques, systmes de fichiers, rseau, clavier, droits des utilisateurs, etc.), mais il n'est pas exploitable tel quel. Il n'est par exemple pas capable d'offrir une interface utilisateur permettant de lui donner les commandes qu'il doit excuter. Ces oprations sont du ressort d'autres modules dvelopps par la Free Software Foundation. Parmi ces modules, on trouve le shell (ce qui signifie grosso modo environnement utilisateur ). Le shell est capable de lire des commandes saisies au clavier, de les excuter et d'afficher leurs rsultats l'cran. En gnral, les programmes capables de raliser ces oprations sont appels des interprteurs de commandes. Mais le shell est bien plus que cela, car il peut tre programm, et il peut grer les processus (en arrter un, en lancer un autre, etc.). En fait, les commandes que le shell peut excuter sont en nombre trs rduit. La plupart des commandes sont tout simplement d'autres programmes. Les programmes que l'on peut utiliser dans le shell sont des programmes dits en ligne de commande , parce qu'ils sont propres tre utiliss dans les lignes de commandes que l'on saisit au clavier dans le shell. Ces programmes sont, encore une fois, dvelopps soit par la Free Software Foundation, soit par des bnvoles, toujours sous la licence GNU. Toutes ces commandes sont des commandes compatibles Unix. Ces commandes sont absolument essentielles pour pouvoir utiliser le systme, mais elles sont assez rbarbatives et peu d'utilisateurs acceptent de s'en contenter. C'est pour cela qu'une couche graphique a t dveloppe, pour introduire une interface graphique plus conviviale (mais cependant lgrement moins puissante en termes de fonctionnalits) : XWindow. Encore une fois, cette couche logicielle est constitue de plusieurs composants, dont la base est le serveur X. Le serveur X est un programme capable de fournir les services graphiques (d'o le nom de serveur) aux autres applications. Plusieurs implmentations concurrentes existent. L'une d'elles est particulirement utilise sous Linux, puisqu'elle est libre (comme tout le reste) : XFree86. vrai dire, un serveur X ne fait pas grand chose d'autre que de raliser des affichages sous les ordres d'autres programmes. D'autres composants permettent donc d'obtenir des fonctionnalits de plus haut niveau. Le gestionnaire de fentre ( Window Manager en anglais) est le composant qui se place juste au-dessus du serveur X. Il est en charge, comme son nom l'indique, de grer les fentres des applications graphiques sous X. C'est le gestionnaire de fentres qui prend en charge la gestion des dcorations des fentres de premier niveau (c'est--dire des fentres principales des programmes). Par exemple, il s'occupe d'afficher les bords, la barre de titre, les boutons de rduction et de restauration, etc. des fentres. C'est galement lui qui s'occupe du positionnement des fentres, et qui donc permet l'utilisateur de dplacer et de rduire les fentres des applications graphiques. L'utilisateur est libre d'utiliser le gestionnaire de fentre qu'il dsire, selon ses propres gots et ses dsirs, la diffrence est souvent une pure question de style. Il existe des environnements graphiques complets qui, en plus d'un gestionnaire de fentre souvent extrmement puissant, fournissent la plupart des outils classiques que l'on est en droit d'attendre d'un systme graphique moderne. Ainsi, ces environnements comprennent des diteurs, des outils de configuration, des navigateurs Internet, des
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 7

M. Elie Degny Raphael

logiciels multimdia... En plus de ces applications, ils fournissent un cadre standard pour les applications graphiques qui savent communiquer avec eux. Ce cadre permet d'amliorer l'intgration des diverses applications entre elles, et c'est la raison pour laquelle on appelle souvent ces environnements des gestionnaires de bureau. KDE et Gnome sont des exemples de tels environnements de travail. Enfin, au-dessus de toutes ces couches logicielles, on trouve les applications X, qui sont aussi diverses que varies (traitement de texte, tableurs, logiciels de dessin...). Quelquesunes de ces applications sont simplement des front-end d'applications en ligne de commande, c'est--dire des interfaces graphiques des programmes non graphiques existants. Ce concept permet d'avoir un composant unique, et plusieurs interfaces diffrentes pour ce composant, et en plus de rendre indpendante la fonctionnalit de l'interface utilisateur. Encore une fois, la stabilit en est d'autant plus accrue. Bon nombre d'applications pour XWindow sont libres, ou utilisables librement des fins non commerciales. Cela signifie qu'un particulier a le droit de les utiliser tant qu'il ne s'en sert pas pour un travail qu'il revendra. Comme c'est le cas de la plupart des particuliers, on peut considrer qu'il est actuellement possible, avec Linux, d'avoir un environnement logiciel complet, fiable et performant... pour un prix de revient minime. En rsum, un systme GNU/Linux est structur de la manire suivante :

le noyau Linux ; le shell ; les programmes en ligne de commande, dont le serveur XWindow ; le gestionnaire de fentre ; le gestionnaire de bureau ; les applications XWindow.

Il n'est pas vident d'tablir un parallle avec MS Windows, puisque ce systme est rellement monolithique. Cependant, on peut considrer que le noyau Linux correspond aux modules KERNEL ou IO.SYS de Windows, que le shell correspond aux interprteurs de commandes COMMAND.COM ou CMD.EXE, que les programmes en ligne de commande correspondent aux programmes DOS ou console classiques (xcopy, fdisk, format...), que le serveur X correspond au couple pilote de carte graphique - GDI, que le gestionnaire de fentre correspond au module USER, et le gestionnaire de bureau l'explorateur, les fonctionnalits d'OLE et aux programmes fournis avec Windows. La diffrence essentielle vient du fait que le shell est peine programmable sous Windows, que les commandes DOS ont tendance accder aux ressources de la machine directement, sans passer par le noyau, que le driver de carte graphique, la GDI et le module USER sont tous intgrs dans le systme au lieu d'en tre spars (ce qui multiplie les chances de crash du systme complet), et que la plupart des applications Windows ne peuvent fonctionner que dans l'environnement graphique. Elles sont donc entranes par le systme lorsque les modules graphiques de Windows plantent (je n'ai d'ailleurs jamais vu un processus DOS survivre un crash de l'interface graphique de Windows).

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

M. Elie Degny Raphael

En conclusion :

les systmes Unix, donc Linux, sont trs structurs, plus simples utiliser, configurer, maintenir et dvelopper ; ils sont trs stables, car les composants de haut niveau n'interfrent pas sur les composants de bas niveau ; ils sont faciles personnaliser, puisque l'utilisateur a le choix des outils chaque niveau ; Linux a de plus la particularit d'tre parfaitement modifiable, puisque si l'on sait programmer, on peut personnaliser les composants du systme ou en rajouter ; et il n'est pas propritaire, c'est--dire que l'on n'est pas dpendant d'une socit ditrice de logiciel pour rsoudre un problme donn.

En bref, c'est la voie de la vrit. Scurit et utilisateurs Linux est un systme multi-utilisateurs. Cela signifie que plusieurs personnes peuvent utiliser l'ordinateur simultanment (et pas uniquement les unes la suite des autres), et que le systme se charge de faire respecter la loi entre elles. Les ressources de la machine sont ainsi partages quitablement, tant au niveau de la puissance de calcul qu'au niveau de la mmoire, du disque, des imprimantes... videmment, une question se pose : comment plusieurs utilisateurs peuvent-ils se partager le clavier et l'cran ? La rponse est simple : ils ne le peuvent pas. Par consquent, il n'y a que trois solutions possibles : soit on connecte l'ordinateur d'autres claviers et d'autres crans (on appelle un couple clavier/cran un terminal ), soit on accde au systme par l'intermdiaire d'un autre ordinateur via le rseau, soit les utilisateurs lancent tour tour leurs programmes. La dernire solution ncessite que les programmes ne soient pas interactifs : ils doivent tre capable de fonctionner sans intervention de celui qui les a lancs. La premire hypothse n'est pas srieuse pour un particulier, il est d'ailleurs assez difficile de connecter un terminal supplmentaire sur un PC (c'est ralisable, par l'intermdiaire des ports srie, mais ce n'est pas recommand). La deuxime solution, en revanche, est nettement plus envisageable. Il est parfaitement possible qu'un particulier dispose de deux PC connects en rseau, et que deux membres de la mme famille cherchent utiliser des ressources de la mme machine (par exemple, une imprimante ou tout autre priphrique, un programme install sur un seul ordinateur, des fichiers personnels, etc.). Quant la troisime solution, elle est du domaine du quotidien, mme pour un ordinateur sans rseau et avec un seul utilisateur. En effet, certains programmes sont lancs par le systme pour effectuer des tches de maintenance, et fonctionnent au nom de l'administrateur de la machine. Il va de soi que pour tre multi-utilisateurs, le systme doit satisfaire certains critres :

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

M. Elie Degny Raphael

il doit tre multitche, c'est--dire qu'il doit tre capable de faire fonctionner plusieurs programmes simultanment sur la mme machine, en partageant les ressources de celle-ci ; il doit tre fiable, car un arrt du systme peut dranger un nombre arbitraire de personnes, y compris celles qui ne sont pas proximit de l'ordinateur ; il doit tre sr, car il ne faut pas que les erreurs ou les malveillances d'un utilisateur ne puissent dranger les autres.

Le multitche est assur au niveau du noyau. Chaque programme en cours d'excution (on les appelle processus ) fonctionne dans sa propre zone de mmoire, qui est compltement contrle par le noyau. Les ressources du processeur sont partages entre les processus, et il est impossible l'un d'entre eux de monopoliser la mmoire, le disque ou quoi que ce soit. Les processus doivent toujours passer par le noyau pour effectuer une opration, ce qui permet un contrle absolu. La fiabilit est galement assure au niveau du noyau. Les zones de mmoire utilises par chaque processus (encore appeles espaces d'adressage ) sont bien distinctes et bien identifies par le noyau. Cela implique qu'il est impossible un processus de perturber le fonctionnement d'un autre processus. Ainsi, si un processus fait une faute, il est purement et simplement termin par le noyau. Cela est sans appel : le noyau est le seul matre bord. Enfin, la scurit est assure par le noyau et par le systme de fichiers. Au niveau du noyau, chaque utilisateur est identifi de manire unique par un numro dans le systme. Ce numro est utilis pour vrifier les droits de l'utilisateur, ou, autrement dit, ce qu'il peut faire. Les droits des utilisateurs comprennent la possibilit de lire ou crire un fichier, d'accder ou non une ressource ou d'excuter un programme. Il est galement possible de crer un ou plusieurs groupes d'utilisateurs, et de donner des droits particuliers ces groupes. Tous les utilisateurs qui font partie de ce groupe recevront les droits du groupe. Ainsi, des classes d'utilisateurs peuvent tre facilement dfinies, et ces classes peuvent se voir attribuer un peu plus de privilges que les utilisateurs normaux selon les ncessits. Il existe toutefois un utilisateur spcial, qui a tous les droits : l'administrateur du systme ( root en anglais). Aucune restriction ne s'applique cet utilisateur, car il doit tre capable de grer le systme, l'installer, l'arrter, le mettre jour si ncessaire, et de dfinir les utilisateurs et leurs droits. Au niveau du systme de fichiers, la scurit est assure par le stockage d'informations additionnelles pour chaque fichier ou rpertoire. Ces informations permettent de connatre :

le numro de l'utilisateur qui possde le fichier ou le rpertoire. En gnral, le propritaire est simplement celui qui l'a cr. Cependant, l'administrateur peut changer le propritaire d'un fichier tout moment ; le numro du groupe auquel appartient le fichier ou le rpertoire. Tout fichier ou rpertoire appartient un groupe unique, qui est utilis pour calculer les droits des utilisateurs faisant partie de ce groupe. Par dfaut, un fichier nouvellement cr par un utilisateur appartient au groupe des utilisateurs users , ce qui
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 10

M. Elie Degny Raphael

convient dans la majorit des cas (attention, ce comportement varie selon les systmes). L'utilisateur peut toutefois donner ses fichiers n'importe quel groupe dont il fait partie ; les droits d'accs au fichier ou au rpertoire pour le propritaire, pour les utilisateurs faisant partie du groupe auquel appartient le fichier ou le rpertoire, et pour tous les utilisateurs en gnral. Ces droits comprennent le droit de lecture (reprsent par la lettre 'r', pour Read only ), le droit d'criture (reprsent par la lettre 'w', pour Writeable ), le droit d'excution (reprsent par la lettre 'x', pour eXecutable ) et quelques attributs supplmentaires (qui seront dtaills plus loin).

Il n'est sans doute pas inutile de prciser un peu le fonctionnement des droits dans le systme de fichiers. Le droit de lecture correspond la possibilit d'ouvrir et de consulter un fichier, ou de lister le contenu d'un rpertoire. Le droit d'criture correspond la possibilit de modifier un fichier, ou de crer ou supprimer un fichier d'un rpertoire. Enfin, le droit d'excution correspond la possibilit d'excuter un fichier contenant un programme, ou d'entrer dans un rpertoire. On notera par exemple qu'il est possible d'obtenir la liste des fichiers d'un rpertoire sans pouvoir s'y dplacer, ou encore de modifier un fichier sans pouvoir le lire. On prendra garde galement que le fait d'avoir le droit d'criture sur un fichier ne donne pas le droit de le supprimer (cependant, on peut le vider !). Pour cela, il faut avoir le droit d'criture sur le rpertoire contenant ce fichier. Comme on le voit, les droits d'accs aux fichiers et aux rpertoires sont trs souples. Ces droits sont attribus sparment pour le propritaire, le groupe et les autres utilisateurs (c'est--dire les utilisateurs qui ne font pas partie du groupe auquel appartient le fichier). Il est donc possible de donner par exemple tous les droits au propritaire d'un fichier, et seulement le droit de lecture aux autres utilisateurs. Cette configuration est celle qui est choisie par dfaut lors de la cration d'un fichier, elle assure que seul le propritaire peut modifier ou excuter ce fichier, tout en laissant la possibilit aux autres de le lire. Ce choix privilgie la scurit des donnes de chacun en laissant le maximum de libert aux autres. Si plusieurs personnes doivent travailler sur les mmes fichiers, il suffit de les regrouper dans un groupe, de donner les fichiers sur lesquels ils doivent travailler ce groupe, et de donner les droits d'criture aux membres de ce groupe sur ces fichiers. La scurit du systme est transitive, cela signifie que tout programme lanc par un utilisateur s'excute en son nom et reoit donc les droits de cet utilisateur. Le processus correspondant se voit donc attribuer les mmes restrictions que l'utilisateur qui l'a lanc. Il dispose galement des droits du groupe auquel le fichier du programme appartient. Il existe toutefois quelques exceptions cette rgle, pour les programmes dont le comportement est bien connu et qu'il est impossible de dtourner de leur fonction initiale. C'est notamment le cas de quelques commandes systmes (comme passwd, qui permet de changer de mot de passe), qui peuvent tre lances par les utilisateurs et qui s'excutent toutefois au nom du systme (dans le compte root). Il est donc impossible un utilisateur de violer les rgles de scurit du systme. Pour parvenir ce

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

11

M. Elie Degny Raphael

comportement, il faut utiliser des attributs spciaux sur les fichiers de ces programmes. Les attributs spciaux sont dcrits ci-dessous. Le premier attribut spcial est le bit setuid (qui est l'abrviation de l'anglais SET User IDentifier ). Il ne peut tre plac qu'au niveau des droits du propritaire sur le fichier. Il permet d'indiquer que le fichier est excutable, et que lorsque le programme qu'il contient est lanc par un utilisateur, le processus correspondant s'excute avec les droits du propritaire du fichier et non pas avec ceux de l'utilisateur qui l'a lanc. Cependant, le systme conserve tout de mme le numro de l'utilisateur rel qui a lanc le processus, ce qui fait que le programme peut savoir par qui il a t lanc et au nom de qui il s'excute. Un processus dispose donc toujours de deux numros d'utilisateur :

le numro de l'utilisateur rel ( real user id en anglais), qui est le numro de l'utilisateur qui a lanc le programme ; le numro de l'utilisateur effectif ( effective user id en anglais), qui est le numro de l'utilisateur avec les droits duquel le processus fonctionne.

Le bit setuid permet donc simplement d'affecter le numro du propritaire du fichier au numro d'utilisateur effectif du processus lorsqu'il est lanc. Le fait de conserver le numro de l'utilisateur rel permet au programme de raliser des vrifications de scurit additionnelles. Par exemple, la commande passwd, qui permet de changer le mot de passe d'un utilisateur, a besoin des droits de l'utilisateur root pour enregistrer le nouveau mot de passe. Il dispose donc du bit setuid pour que tous les utilisateurs puissent l'utiliser. Cependant, mme s'il s'excute au nom de l'utilisateur root, il ne doit pas permettre n'importe qui de changer le mot de passe des autres utilisateurs : seul l'utilisateur root a le droit de faire cette opration. Il utilise donc le numro de l'utilisateur rel qui a lanc la commande pour savoir si c'est bien l'utilisateur root qui l'a lanc. Le bit setuid est l'attribut le plus couramment utilis, essentiellement pour certaines commandes systmes. Il est reprsent par la lettre 's' (comme Setuid ), et il remplace le droit d'excution ('x') des fichiers pour le propritaire des fichiers (rappelons que le bit setuid implique que le fichier est excutable). Il n'a aucune signification pour les rpertoires. Le deuxime attribut spcial est le bit setgid (qui est l'abrviation de l'anglais SET Group IDentifier ). Ce bit fonctionne un peu de la mme manire que le bit setuid, ceci prs qu'il fixe le numro de groupe effectif du processus lanc celui de son fichier excutable. Cet attribut est galement reprsent par la lettre 's', et remplace le droit d'excution ('x') pour les utilisateurs du groupe auquel appartient le fichier excutable. Contrairement au bit setuid cependant, il a une signification pour les rpertoires. Un rpertoire disposant du bit setgid permet de faire en sorte que tous les fichiers qui sont crs dans ce rpertoire se voient automatiquement attribus le mme groupe que le rpertoire. Ce bit est relativement peu utilis. Enfin, le troisime et dernier attribut spcial est le bit sticky . Cet attribut remplace l'attribut excutable pour les autres utilisateurs que le propritaire du fichier ou du
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 12

M. Elie Degny Raphael

rpertoire et les membres du groupe auquel il appartient. Contrairement aux bits setuid et setgid, il est reprsent par la lettre 't' (pour sTickky ). Sa signification est assez spciale : elle permet de faire en sorte que les programmes restent chargs en mmoire aprs leur terminaison, ce qui permet de les relancer plus rapidement. Afin de ne pas consommer la mmoire de manire permanente, le code du programme est plac automatiquement dans le swap s'il n'est toujours pas relanc aprs un certain temps, mais mme dans ce cas, tous les calculs de chargement sont dj effectus. Le lancement des programmes marqus de ce bit sera donc toujours acclr. Sachez cependant ne pas abuser du bit sticky car la mmoire (mme virtuelle) est encore une ressource rare. Pour les rpertoires, sa signification est totalement diffrente : elle permet de restreindre les droits des utilisateurs sur les rpertoires ayant ce bit positionn. Ce bit fait en sorte que mme si un utilisateur dispose des droits d'criture sur le rpertoire, il ne peut pas supprimer tous les fichiers de ce rpertoire. Les seuls fichiers qu'il est autoris supprimer sont ses propres fichiers. Bien entendu, il est toujours possible d'ajouter des fichiers dans le rpertoire en question. En pratique, les utilisateurs n'ont pas se soucier des attributs des fichiers, et en fait mme l'administrateur laisse souvent les attributs par dfaut, car ils correspondent la majorit des besoins de scurit. L'administrateur a cependant le contrle total sur les droits d'accs aux fichiers, sur le propritaire et le groupe de chaque fichier. Il est galement le seul utilisateur capable de crer un autre utilisateur ou un groupe, ainsi que de les dtruire. Les questions qui se posent videmment sont les suivantes. Est-ce qu'un particulier a besoin de tout cela ? Ces fonctionnalits ne sont-elles pas rserves aux serveurs ? Estce qu'on ne risque pas de perdre beaucoup de temps pour dfinir les droits pour chaque utilisateur et pour chaque ressource du systme ? La gestion de la scurit ne consomme-t-elle pas trop de ressources ? Ces questions sont lgitimes, mais en fait, il est trs intressant mme pour un particulier de disposer de ces fonctionnalits. En effet, la scurit permet tout simplement de protger le systme contre ses propres erreurs. Qui n'a pas effac un jour un fichier important ou dplac le rpertoire Windows en bougeant lgrement la souris lors d'un double clic effectu trop lentement ? Avec Linux, on peut faire n'importe quoi, on est certain que le systme restera intact. D'ailleurs la rgle essentielle, mme pour un ordinateur utilis par une seule personne, est de toujours crer un compte utilisateur normal et de ne jamais travailler sous le compte root. Cette scurit est telle que Linux est le systme d'exploitation idal pour apprendre l'informatique quelqu'un : savoir que le systme protge tout ce qui est important permet aux dbutants de prendre des initiatives sans crainte. Quant aux ventuels revers de mdaille, ils sont absents : la gestion de la scurit ne consomme quasiment aucune ressource, et sa configuration est lmentaire. Toutes les distributions s'installent de telle sorte que le systme se protge des utilisateurs, et que ceux-ci soient indpendants les uns des autres. En rsum :

le multitche est un confort indniable. Il est apprciable de pouvoir utiliser son ordinateur mme lorsqu'il est en train de faire une tche longue en arrire-plan ;
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 13

M. Elie Degny Raphael

la fiabilit est videmment indispensable. Il est rassurant de se dire que mme si un processus trs gourmand en ressources fonctionne en arrire-plan, il ne perturbera pas les autres processus ; la scurit permet de se protger de ses propres erreurs, pour un cot minimal. Il suffit de conserver les paramtres par dfaut du systme et de ne plus s'en soucier ! Fonctionnalits du systme de fichiers

Les systmes de fichiers des systmes Unix sont trs puissants. Ils assurent la fois fonctionnalits, performances, et fiabilit. Il est srement bon de revenir sur les fonctionnalits fournies par les systmes de fichiers Unix. En effet, peu d'utilisateurs savent exactement quels sont les services qu'ils peuvent fournir en gnral, et beaucoup croient que les systmes de fichiers savent juste stocker des donnes dans des fichiers organiss dans une hirarchie de rpertoire. Heureusement, ils permettent de faire beaucoup mieux que cela ! Pour commencer, il faut prciser que Linux ne travaille pas directement avec les systmes de fichiers physiques. En effet, il interpose systmatiquement un systme de fichiers intermdiaire, nomm Virtual File System ( VFS en abrg), qui permet aux applications d'accder diffrents systmes de fichiers de manire indpendante de leur nature et de leur structure interne. Le systme de fichiers virtuel ne fait pas grand chose en soi : il se contente de transfrer les requtes des applications vers les systmes de fichiers rels. Il fournit donc une interface bien dfinie pour les applications, que celles-ci doivent utiliser. Les systmes de fichiers rels, quant eux, doivent simplement fournir les services dont le systme de fichiers virtuel a besoin. Tous les systmes de fichiers rels ne disposent pas de toutes les fonctionnalits demandes par le systme de fichiers virtuel, dans ce cas, la requte de l'application dsirant effectuer cette opration chouera tout simplement. Comme on peut le constater, cette architecture est modulaire. Et comme on l'a vu pour l'architecture du systme en gnral, cela apporte beaucoup de bnfices. Les plus vidents sont indiqus ci-dessous : Linux est capable de grer plusieurs systmes de fichiers rels. La seule condition est qu'ils doivent tous fournir les services de base exigs par le systme de fichiers virtuel ; les applications peuvent utiliser plusieurs de ces systmes de fichiers rels de manire uniforme, puisqu'elles n'utilisent que le systme de fichiers virtuel. Cela simplifie leur programmation, et permet d'viter autant de bogues potentiels ; chaque systme de fichiers rel tant indpendant des autres, il ne perturbe pas leur fonctionnement. En particulier, un systme de fichiers corrompu ne corrompt pas les autres.

Avec cette architecture, un grand nombre de systmes de fichiers ont t dvelopps pour Linux. Parmi ces systmes de fichiers, on retrouve les plus connus, savoir :
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 14

M. Elie Degny Raphael

le systme de fichiers EXT2, qui est le systme de fichiers natif de Linux ; les systmes de fichiers FAT, FAT32 et FAT32X (utiliss par les systmes DOS et Windows) ; le systme de fichiers NTFS en lecture seule pour l'instant (utilis par Windows NT) ; le systme de fichiers ISO9660, qui est utilis par tous les CDROM. Les extensions permettant de grer les noms longs sont galement gres. Ces extensions comprennent en particulier le systme de fichiers Joliet (extension de Microsoft pour Windows 95) et Rock Ridge (extension de tous les systmes Unix) ; le systme de fichiers NFS (utilis pour distribuer sur un rseau un systme de fichiers) ; le systme de fichiers ReiserFS, qui supprime la notion de bloc disque et qui est journalis (c'est--dire qu'il supporte les arrts intempestifs du systme suite une panne de courant ou tout autre vnement contre lequel le systme ne peut rien faire).

Linux gre galement d'autres systmes de fichiers, utiliss par d'autres systmes d'exploitation (Unix ou non). Il permet mme d'intgrer un pseudo systme de fichiers gnr par le noyau. Ce systme de fichiers est compltement fictif : sa structure et ses fichiers sont gnrs dynamiquement par le noyau lorsqu'une application y accde. Il est principalement utilis par les applications pour lire des informations que le noyau met leur disposition, ainsi que pour changer dynamiquement certains paramtres du noyau en les crivant simplement dans les fichiers. Le systme de fichiers natif de Linux EXT2 est de loin le systme de fichiers le plus fonctionnel et le plus performant, car il a t hautement optimis. Les principales fonctionnalits de EXT2 sont les suivantes : les accs aux fichiers sont rapides, mme plus rapides que les systmes de fichiers bass sur la FAT sous Windows, qui pourtant ne grent pas les droits des utilisateurs ni les autres fonctionnalits avances des systmes de fichiers Unix ; la fragmentation des fichiers est quasiment inexistante. En fait, la fragmentation des fichiers est si faible que l'on peut l'ignorer en pratique. Cela provient de l'algorithme que EXT2 utilise pour allouer les blocs du disque dur lors de l'criture dans un fichier : il cherche tout simplement donner systmatiquement les blocs les plus proches. Pour donner un ordre de grandeur de la fragmentation des fichiers sur une partition de 800 Mo, aprs installation, suppression, manipulation d'un grand nombre d'applications et de petits fichiers, le tout ralis par plusieurs processus fonctionnant en mme temps, elle reste infrieure 1% sur 57571 fichiers (sur un total de 249856 fichiers que le systme de fichiers pourrait contenir) ; quant la fiabilit, elle est gre grce un stockage redondant des principales structures de donnes internes. Ainsi, si une erreur apparat

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

15

M. Elie Degny Raphael

dans le systme de fichiers, les parties dfectueuses peuvent tre reconstitues partir des informations sauvegardes. Cette rparation est ralise automatiquement chaque redmarrage de la machine si ncessaire. Nous allons maintenant voir les quelques fonctionnalits additionnelles que EXT2 supporte. Notez bien ici que d'autres systmes de fichiers Unix peuvent fournir ces fonctionnalits, mais qu'il ne sera question ici que de EXT2 par souci de simplification. La premire fonctionnalit intressante est le support des droits d'accs aux fichiers pour les utilisateurs et pour les groupes. La gestion de ces droits est un impratif sous Unix. Comme on l'a dj vu, ces droits comprennent les droits d'accs en lecture, en criture et en excution, plus les attributs spciaux des fichiers. Ces droits sont fixs indpendamment pour l'utilisateur propritaire du fichier, le groupe d'utilisateur propritaire du fichier, et tous les autres utilisateurs. Une autre fonctionnalit intressante est la possibilit de raliser des liens sur des fichiers ou des rpertoires. Un lien est une rfrence un fichier ou un rpertoire existant, qui peut tre manipul exactement comme sa cible. Il existe deux sortes de liens : les liens physiques, qui sont rellement une rfrence sur les donnes du fichier, au niveau de la structure mme du systme de fichiers, et les liens symboliques, qui ne sont rien d'autre qu'un fichier additionnel contenant les informations ncessaires pour retrouver la cible. Les liens physiques prsentent les inconvnients de ne pas pouvoir rfrencer des rpertoires, et de ne pouvoir rfrencer que des objets du mme systme de fichiers que celui dans lequel ils sont crs. La limitation sur les rpertoires permet d'viter de construire des cycles dans la structure du systme de fichiers. Quant la limitation la frontire des systmes de fichiers, elle est obligatoire puisque les liens physiques sont grs directement au niveau de la structure du systme de fichiers. En revanche, ils prsentent des avantages certains : le dplacement des cibles ne les perturbe pas si celles-ci restent dans le mme systme de fichiers, parce que dans ce cas les donnes ne sont pas dplaces sur le disque ; la suppression de la cible ne dtruit pas le lien physique. Tous les liens physiques sur un fichier partagent la mme structure de donnes du systme de fichiers, et celle-ci n'est rellement dtruite qu' la destruction du dernier lien physique.

En fait, toute entre de rpertoire est un lien physique sur le contenu du fichier. Le fait d'avoir plusieurs liens physiques sur les mmes donnes correspond disposer de plusieurs entres de rpertoires donnant accs aux mmes donnes dans le systme de fichiers. Il serait possible de crer des liens physiques dans un systme de fichiers FAT, mais ils seraient interprts comme des rfrences croises par les outils de vrification de disque. Le systme de fichiers FAT de Linux interdit donc la cration des liens physiques, tout comme le font DOS et Windows.
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 16

M. Elie Degny Raphael

Les liens symboliques, quant eux, permettent de rfrencer des fichiers ou des rpertoires se trouvant dans d'autres systmes de fichiers que le leur. C'est pour cette raison qu'ils sont trs couramment utiliss (en fait, les liens physiques ne sont quasiment pas utiliss, parce qu'il est trs courant de faire un lien sur un rpertoire, ce que seuls les liens symboliques savent faire). En revanche, ils sont extrmement dpendants de leur cible : si elle est supprime ou dplace, tous les liens symboliques qui s'y rfrent deviennent invalides. La rfrence sur le fichier ou le rpertoire cible contenue dans les liens symboliques peut tre soit relative l'emplacement de la cible, soit absolue dans le systme de fichiers. Chacune de ces mthodes a ses avantages et ses inconvnients : les liens symboliques qui contiennent des rfrences relatives ne sont pas briss lors d'un dplacement de la cible, pourvu qu'ils soient dplacs galement et restent la mme position relative par rapport celle-ci dans la hirarchie du systme de fichiers. En revanche, ils sont briss s'ils sont dplacs et que la cible ne l'est pas. Les liens symboliques utilisant des rfrences absolues sont systmatiquement briss lorsque la cible est dplace, mais ils restent valides lorsqu'ils sont eux-mmes dplacs. Comme en gnral c'est le comportement que l'on recherche, les liens symboliques sont toujours crs avec des rfrences absolues, mais vous tes libres de faire autrement si vous en ressentez le besoin. Sachez cependant que dplacer une source de donnes n'est jamais une bonne ide. Le tableau suivant rcapitule les avantages et les inconvnients des diffrents types de liens : Tableau 3-1. Caractristiques des liens physiques et symboliques Fonctionnalit Liens physiques Liens symboliques Rfrence Rfrence absolue relative Avec la cible Oui Si dplacs avec Non elle Non Non Oui Oui

Peuvent tre dplacs Suivent la cible

Oui Oui

Grent la suppression de la Oui cible Peuvent rfrencer des cibles Non sur un autre systme de fichiers Peuvent rfrencer des Non rpertoires

Oui

Oui

Le systme de fichiers EXT2 donne galement la possibilit de grer des fichiers presque vides ( sparse files en anglais) et les quotas. Ces deux fonctionnalits sont relativement peu utilises par les particuliers, elles ne sont mentionnes ici qu'afin d'tre complet. Les fichiers presque vides sont des fichiers contenant des donnes spares par de grands espaces vides. Il est inutile de stocker ces espaces vides sur le disque, aussi

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

17

M. Elie Degny Raphael

EXT2 signale-t-il simplement que ce fichier contient des trous, et il ne stocke que les donnes relles et la position des trous avec leur taille. Cela constitue une conomie de place non ngligeable. Les applications classiques des fichiers presque vides sont les bases de donnes, qui utilisent souvent des fichiers structurs contenant relativement peu de donnes effectives. Les quotas quant eux permettent d'attribuer un espace disque fixe chaque utilisateur. Ce n'est rellement utile que pour les serveurs. Structure du systme de fichiers Il est ncessaire de dfinir un peu les termes qui vont tre utiliss dans cette section, car les systmes de fichiers Unix sont trs diffrents des systmes de fichiers du DOS et de Windows. La connaissance de ce vocabulaire est ncessaire pour la comprhension de la structure du systme de fichiers de Linux. Comme la plupart des systmes de fichiers, les systmes de fichiers Unix sont structurs hirarchiquement, et regroupent les fichiers dans des rpertoires. Il existe un rpertoire racine, qui contient tous les fichiers, soit directement, soit indirectement dans ses sousrpertoires. C'est de ce rpertoire que dbutent tous les chemins possibles dans le systme de fichiers. Chaque fichier ou rpertoire a un nom qui permet aux utilisateurs du systme de l'identifier. Le seul rpertoire qui n'a pas de nom est le rpertoire racine. Les systmes de fichiers Unix n'ont pas les mmes limitations sur les noms que les systmes de fichiers FAT et FAT32. Les noms des fichiers et des rpertoires peuvent tre trs longs (jusqu' 256 caractres par nom), et ils prennent en compte la casse des lettres. Les fichiers contiennent des donnes au sens large, ce peut tre des documents (texte, image, film, son), des programmes, des donnes utilises par le systme ou tout autre type de donnes imaginable. En fait, les rpertoires sont eux-mmes des fichiers spciaux, interprts par le systme diffremment des autres fichiers. Les donnes stockes dans les rpertoires sont simplement les entres de rpertoires, qui caractrisent et permettent d'avoir accs aux autres fichiers et aux autres rpertoires. Les noms de rpertoires et de fichiers sont spars par un caractre spcial. Ce caractre est traditionnellement, sous Unix, la barre oblique de division (nomme slash en anglais) : '/'. Les utilisateurs du DOS et de Windows prendront garde ici au fait que Microsoft a prfr la barre oblique inverse (nomme backslash en anglais) '\', rendant ainsi tous ses systmes incompatibles avec les systmes Unix, et gnrant ainsi beaucoup de problmes supplmentaires l o il n'tait pas ncessaire d'en avoir (sincrement, le cot de cette nerie, ainsi que celle des marqueurs de fin de ligne dans les fichiers textes, doit atteindre des sommes astronomiques dans tous les projets de portage ou de dveloppement d'applications portables). Comme le rpertoire racine n'a pas de nom, il peut tre accd directement avec un simple slash : / La qualification complte d'un fichier se fait en prcisant le nom du rpertoire chaque niveau et en sparant par des slashs chacun de ces noms. Cette qualification porte le nom

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

18

M. Elie Degny Raphael

de chemin d'accs ( path en anglais). L'exemple suivant vous montre l'allure d'un chemin d'accs typique sous Unix : / home/dupond.jean/lettres/professionnelles/marketing/ventes1 999.sdw La longueur maximale d'un chemin d'accs est de 4 ko dans le systme de fichiers EXT2. Les utilisateurs du DOS et de Windows constateront ici que les chemins d'accs Unix ne comportent pas de spcification de lecteurs. Les systmes de fichiers Unix sont dits mono-tte, ce qui signifie qu'ils n'ont qu'un seul point de dpart : le rpertoire racine (alors que les systmes Microsoft sont multi-ttes, puisqu'ils ont un point de dpart par lecteur). Le fait de n'avoir qu'un seul point de dpart est beaucoup plus simple, et permet, encore une fois, d'crire les programmes plus simplement et donc avec moins de bogues potentiels. Je sens tout de suite venir la question de la part des habitus du DOS : Mais alors, comment spcifie-t-on le lecteur que l'on veut utiliser ? . Cette question a deux rponses. Premirement, on n'accde pas aux lecteurs, mais aux systmes de fichiers. Les utilisateurs du DOS devront donc rapprendre qu'un lecteur reprsente un priphrique physique, et qu'il est possible qu'il contienne plusieurs systmes de fichiers. Ils devront galement se rendre compte qu'un systme de fichiers n'est pas ncessairement stock sur un lecteur : il peut tre stock dans un fichier (c'est le cas par exemple pour les images disques de CD-ROM), accessible par le rseau (c'est le cas des systmes de fichiers rseau, Network File System en anglais), ou encore gnr par un composant du systme (c'est le cas des systmes de fichiers virtuels du noyau). La question n'a donc pas beaucoup de sens telle quelle. Cependant, le problme de l'accs aux systmes de fichiers se pose malgr tout. La rponse ce problme-ci est cette fois la suivante : pour accder un systme de fichiers, il faut raliser une opration que l'on nomme le montage . Cette opration associe le rpertoire racine de ce systme de fichiers l'un des rpertoires de l'arborescence existante. Ce rpertoire est couramment appel point de montage . Par exemple, il est courant de monter le lecteur de disquette dans le rpertoire /floppy/. Ainsi, si la disquette contient le fichier ventes1999.sdw, ce fichier sera accessible grce au chemin suivant : /floppy/ventes1999.sdw Cette solution permet d'accder tous les systmes de fichiers de la mme manire, partir d'un seul rpertoire racine, que ces systmes de fichiers soient EXT2, FAT, ISO9660, NTFS ou Amiga... En pratique, c'est nettement plus simple. L'opration de montage peut raliser bien plus d'opration qu'une simple association d'un systme de fichiers un point de montage. En effet, elle peut gnrer les oprations suivantes :

chargement des pilotes pour ce systme de fichiers ; allocation des zones de mmoire pour les entres/sorties en mmoire ;

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

19

M. Elie Degny Raphael

masquage des fichiers et des rpertoires ventuellement prsents avant le montage dans le rpertoire utilis comme point de montage.

On prendra en particulier garde toujours dmonter les systmes de fichiers pour les lecteurs amovibles. Linux utilise en effet des zones de la mmoire que l'on appelle les tampons ( buffers en anglais), pour y stocker des donnes des systmes de fichiers monts, et il n'crit ces donnes que lorsque c'est ncessaire. Ce mcanisme permet d'acclrer les lectures et les critures sur les disques, mais a l'inconvnient de ncessiter une requte de vidange des tampons (opration que l'on appelle sync ) avant de retirer le lecteur ou avant d'teindre le systme. Si on ne le fait pas, des donnes seront certainement perdues. Le systme effectue le sync lorsqu'il s'arrte (par l'une des commandes halt, shutdown ou reboot), mais il ne le fait pas si on coupe le courant brutalement. C'est pour cela qu'il faut toujours arrter le systme proprement. De manire similaire, Linux empche l'jection des CD-ROM tant qu'ils sont monts. En revanche, il ne peut rien faire pour les lecteurs de disquettes, c'est l'utilisateur de prendre garde les dmonter avant de retirer la disquette. Deux derniers points auxquels les utilisateurs de DOS et Windows devront faire attention :

les fichiers ne sont pas identifis par leur extension. Un nom de fichier peut contenir un ou plusieurs points, et une extension peut tre arbitrairement longue. En particulier, un nom de fichier peut commencer par un point. Dans ce cas, ce fichier sera considr comme cach par les programmes, et on ne les verra que si on le demande explicitement ; les systmes de fichiers Unix font la distinction entre les majuscules et les minuscules. Il faut donc prendre garde la manire dont on crit les noms de fichiers et de rpertoires. Cependant, la plupart des rpertoires et des fichiers ont un nom crit compltement en minuscules.

Nous allons prsent nous intresser l'organisation du systme de fichiers de Linux. Ce systme de fichiers contient un certain nombre de rpertoires et de fichiers standards, qui ont chacun une fonction bien dfinie. Cette structure standard permet de grer tous les systmes Linux de manire homogne : les programmes savent o trouver ce dont ils ont besoin. Ils sont donc portables d'un systme un autre, et les utilisateurs ne sont pas dpayss lorsqu'ils changent de machine (en fait, cette structure est peu prs la mme pour tous les systmes Unix, ce qui donne encore plus de poids l'argument prcdent). Cette organisation standard du systme de fichiers a t conue de telle manire que les donnes et les programmes sont placs chacun leur place, et qu'ils puissent tre facilement intgrs dans un rseau. L'intgration dans un rseau sous-entend que les fichiers des programmes peuvent tre partags par les diffrentes machines de ce rseau, ce qui permet d'conomiser beaucoup de place. De plus, il est possible d'accder la plupart des ressources du systme grce une interface uniforme. En particulier, il est possible d'accder tous les priphriques installs sur l'ordinateur par l'intermdiaire de fichiers spciaux, et on peut rcuprer des informations sur le systme mises disposition par le noyau simplement en lisant des fichiers gnrs par un pseudo systme
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 20

M. Elie Degny Raphael

de fichiers. Le tableau suivant dcrit les principaux lments de l'arborescence du systme de fichiers de Linux. Tableau 3-2. Hirarchie standard du systme de fichiers Rpertoire / Signification Rpertoire racine. Point de dpart de toute la hirarchie du systme de fichiers. Le systme de fichiers contenant ce rpertoire est mont automatiquement par le noyau pendant l'amorage du systme. Ce systme de fichiers est appel systme de fichiers racine ( root en anglais). /boot/ Rpertoire contenant le noyau de Linux et ses informations de symboles. Ce rpertoire est souvent le point de montage d'un systme de fichiers de trs petite taille, ddi au noyau. Dans ce cas, il est recommand que le systme de fichiers correspondant soit mont en lecture seule. On notera que sur certains systmes, le noyau reste plac dans le rpertoire racine. Cette technique n'est pas recommande, car on ne peut pas monter en lecture seule la partition racine en utilisation normale du systme. /boot/vmlinuz Noyau comprim de Linux. Les noyaux comprims se dcompriment automatiquement lors de l'amorage du systme. Sur certains systmes, le noyau est encore plac dans le rpertoire racine de la partition root. / Fichier systme contenant la liste des symboles du noyau. Ce boot/System.ma fichier est utilis par certains programmes donnant des renseignements sur le systme. En particulier, il est utilis par le p programme top (programme qui indique la liste des principaux processus actifs) afin de donner le nom de la fonction du noyau dans lequel un processus bloqu se trouve. /dev/ Rpertoire contenant tous les fichiers spciaux permettant d'accder aux priphriques. Sous Linux, la plupart des priphriques sont accessibles au travers de fichiers spciaux, grce auxquels l'envoi et la rception des donnes vers les priphriques peuvent tre raliss de manire uniforme. Il existe un tel fichier pour chaque priphrique, et ils sont tous placs dans ce rpertoire. Les distributions installent souvent dans ce rpertoire les fichiers spciaux pour la plupart des priphriques, mme s'ils ne sont pas physiquement prsents dans la machine. Dans ce cas, les oprations sur les fichiers spciaux des priphriques non installs seront tout simplement refuses par le noyau. Une autre possibilit est d'utiliser un systme de fichiers virtuels, gr directement par le noyau. Le rpertoire /dev/ ne contient dans ce cas que les fichiers spciaux des priphriques pour lesquels le noyau dispose d'un gestionnaire intgr ou charg dynamiquement. Quelle que soit la technique utilise, ce rpertoire doit tre imprativement plac dans
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 21

M. Elie Degny Raphael

Rpertoire /sbin/

/bin/

/lib/

/lib/modules/

/etc/

/etc/X11/ /etc/opt/ /tmp/

/usr/ /usr/bin/ /usr/sbin/

/usr/lib/

Signification le systme de fichiers racine. Rpertoire contenant les commandes systmes ncessaires l'amorage et rserves l'administrateur. Ce rpertoire doit tre imprativement plac dans le systme de fichiers racine. En gnral, seul l'administrateur utilise ces commandes. Rpertoire contenant les commandes systmes gnrales ncessaires l'amorage. Ce rpertoire doit tre imprativement plac dans le systme de fichiers racine. Tous les utilisateurs peuvent utiliser les commandes de ce rpertoire. Rpertoire contenant les bibliothques partages ( DLL en anglais, pour Dynamic Link Library ) utilises par les commandes du systme des rpertoires /bin/ et /sbin/. Ce rpertoire doit tre imprativement plac dans le systme de fichiers racine. Rpertoire contenant les modules du noyau. Ce rpertoire contient les modules additionnels du noyau. Ces modules sont des composants logiciels du noyau, mais ne sont pas chargs immdiatement pendant l'amorage. Ils peuvent en revanche tre chargs et dchargs dynamiquement, lorsque le systme est en fonctionnement. Il est fortement recommand que ce rpertoire soit plac dans le systme de fichiers racine. Rpertoire contenant tous les fichiers de configuration du systme. Ce rpertoire doit tre imprativement plac dans le systme de fichiers racine. Dans certaines distributions, les fichiers de configuration de XWindow sont placs directement dans le rpertoire /etc/X11/. Rpertoire contenant les fichiers de configuration des applications. Rpertoire permettant de stocker des donnes temporaires. En gnral, /tmp/ ne contient que des donnes trs phmres. Il est prfrable d'utiliser le rpertoire /var/tmp/. En effet, le rpertoire /tmp/ ne dispose pas ncessairement de beaucoup de place disponible. Rpertoire contenant les fichiers du systme partageables en rseau et en lecture seule. Rpertoire contenant la plupart des commandes des utilisateurs. Rpertoire contenant les commandes systmes non ncessaires l'amorage. Ces commandes ne sont normalement utilises que par l'administrateur systme. Rpertoire contenant les bibliothques partages de tous les programmes de /usr/bin/ et /usr/sbin/ et les bibliothques statiques pour la cration de programmes.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

22

M. Elie Degny Raphael

Rpertoire /usr/include/

/usr/X11R6/

/usr/src/

/usr/src/linux/

/usr/local/

/var/

/var/tmp/ /var/opt/ /var/log/

/var/spool/

Signification Rpertoire contenant les fichiers d'en-ttes du systme pour le compilateur C/C++. Les fichiers de ce rpertoire sont utiliss pour raliser des programmes dans les langages de programmation C et C++. Rpertoire contenant X11R6 et ses applications. Ce rpertoire contient des sous-rpertoires bin/, lib/ et include/, o se trouvent les excutables de XWindow, les bibliothques et les fichiers d'en-ttes pour crer des programmes pour XWindow en C et C++. Rpertoire contenant les fichiers sources du noyau et des applications de la distribution. Normalement, ce rpertoire ne doit contenir que le code source des applications dpendantes de la distribution que vous utilisez. Sources du noyau de Linux. Il est vivement recommand de conserver les sources du noyau de Linux sur son disque, afin de pouvoir changer la configuration du systme tout moment. Rpertoire contenant les programmes d'extension du systme indpendants de la distribution. Ce n'est pas le rpertoire d'installation des applications. local ne signifie pas ici que les programmes qui se trouvent dans ce rpertoire ne peuvent pas tre partags sur le rseau, mais plutt que ce sont des extensions du systme qu'on ne trouve donc que localement sur un site donn. Ce sont donc les extensions qui ne font pas partie de la distribution de Linux utilise, et qui doivent tre conserves lors des mises jour ultrieures de cette distribution. Ce rpertoire contient les sousrpertoires bin/, lib/, include/ et src/, qui ont la mme signification que les rpertoires du mme nom de /usr/, ceci prs qu'ils ne concernent que les extensions locales du systme, donc indpendantes de la distribution. Rpertoire contenant toutes les donnes variables du systme. Ce rpertoire contient les donnes variables qui ne pouvaient pas tre places dans le rpertoire /usr/, puisque celui-ci est normalement accessible en lecture seule. Rpertoire contenant les fichiers temporaires. Il est prfrable d'utiliser ce rpertoire plutt que le rpertoire /tmp/. Rpertoire contenant les donnes variables des applications. Rpertoire contenant les traces de tous les messages systme. C'est dans ce rpertoire que l'on peut consulter les messages d'erreurs du systme et des applications. Rpertoire contenant les donnes en attente de traitement. Les travaux d'impression en cours, les mails et les fax en attente d'mission, les travaux programms en attente d'excution sont

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

23

M. Elie Degny Raphael

Rpertoire /var/locks/

/var/cache/

/opt/

/home/

/root/

/mnt/

/proc/

Signification tous stocks dans ce rpertoire. Rpertoire contenant les verrous sur les ressources systme. Certaines ressources ne peuvent tre utilises que par une seule application (par exemple, un modem). Les applications qui utilisent de telles ressources le signalent en crant un fichier de verrou dans ce rpertoire. Rpertoire contenant les donnes de rsultats intermdiaires des applications. Les applications qui doivent stocker des rsultats intermdiaires doivent les placer dans ce rpertoire. Rpertoire contenant les applications. C'est dans ce rpertoire que les applications qui ne font pas rellement partie du systme doivent tre installes. Les applications graphiques devraient tre installes dans ce rpertoire. C'est en particulier le cas des gestionnaires de bureau. Les seules applications graphiques considres comme faisant partie du systme sont les applications de X11, qui sont donc stockes dans /usr/X11R6/. Il est recommand que ce rpertoire soit plac sur un systme de fichiers en lecture seule, et que les applications utilisent le rpertoire /var/opt/ pour travailler. Rpertoire contenant les rpertoires personnels des utilisateurs. Il est bon de placer ce rpertoire dans un systme de fichiers indpendant de ceux utiliss par le systme. Rpertoire contenant le rpertoire personnel de l'administrateur. Il est donc recommand que le rpertoire personnel de l'administrateur soit plac en dehors de /home/ pour viter qu'un problme sur le systme de fichiers des utilisateurs ne l'empche de travailler. Toutefois, il est important que l'administrateur puisse travailler mme si les rpertoires /root/ et /home/root/ ne sont pas prsents. Dans ce cas, son rpertoire personnel devra tre le rpertoire racine. Rpertoire rserv au montage des systmes de fichiers nonpermanents (CD-ROM, disquettes, etc.). Ce rpertoire peut contenir plusieurs sous-rpertoires pour chaque priphrique amovible, afin de permettre d'en monter plusieurs simultanment. Notez qu'il est assez courant de disposer de liens symboliques dans la racine rfrenant les principaux systmes de fichiers, afin d'en simplifier l'accs. Par exemple, il est courant d'avoir un rpertoire /floppy/ rfrenant le lecteur de disquette et un rpertoire /cdrom/ rfrenant le lecteur de CD-ROM. Rpertoire contenant le pseudo systme de fichiers du noyau. Ce pseudo systme de fichiers contient des fichiers permettant d'accder aux informations sur le matriel, la configuration du noyau et sur les processus en cours d'excution.
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 24

M. Elie Degny Raphael

Note : Les informations donnes ici peuvent ne pas tre correctes pour votre distribution. En effet, certaines distributions utilisent une structure lgrement diffrente. Les informations donnes ici sont conformes la norme de hirarchie de systmes de fichiers version 2.0 ( FHS en anglais). Vous pouvez consulter ce document pour une description exhaustive du systme de fichiers de Linux. Vous avez pu constater que les rpertoires bin/, lib/, include/ et src/ apparaissent rgulirement dans la hirarchie du systme de fichiers. Cela est normal : les rpertoires sont classs par catgories d'applications et par importance. Les rpertoires bin/ contiennent en gnral les programmes, et les rpertoires lib/ les bibliothques partages par ces binaires. Cependant, les rpertoires lib/ peuvent aussi contenir des blibliothques statiques, qui sont utilises lors de la cration de programmes. En gnral, tous les systmes Unix fournissent en standard un compilateur pour raliser ces programmes. Dans le cas de Linux, ce compilateur est gcc (pour GNU C Compiler ). La cration d'un programme ncessite que l'on dispose des fichiers sources, qui contiennent le programme crit dans un langage de programmation, des fichiers d'en-ttes, qui contiennent les dclarations de toutes les fonctions utilisables, et des fichiers de bibliothques statiques, contenant ces fonctions. Ces diffrents fichiers sont stocks respectivement dans les rpertoires src/, include/ et lib/. Les notions de sources et de compilation seront dcrites en dtail dans le Chapitre 8.

Chapitre 3. Installation du systme de base


Maintenant que vous connaissez tout des grands principes de Linux (et de la plupart des systmes Unix), vous devez brler d'impatience de l'installer et de commencer exploiter toutes ses possibilits. Cependant, il faut ne pas tomber dans le travers de ceux qui veulent imprativement utiliser une fonctionnalit sous prtexte qu'elle est disponible. Il se peut que vous ayez envie de les essayer, parce que vous en avez t priv depuis longtemps. Ce comportement est tout fait normal, mais vous allez devoir refrner vos envies, pour deux raisons. La premire est qu'il va falloir installer Linux au pralable, et la deuxime est qu'il ne faut pas faire un sac de nuds avec vos donnes. Vous pourrez exprimenter loisir, mais il faudra rester srieux ds que vous toucherez au systme. Comprenez bien que l'installation et la configuration de Linux doivent se faire pas pas. Griller les tapes peut se rvler tre une erreur, car cela rendrait les choses plus compliques qu'elles ne le sont. Rcupration des informations sur le matriel Avant de commencer quoi que ce soit, vous devriez rcuprer le maximum de donnes concernant votre matriel. En effet, ces informations peuvent tre particulirement utiles pour diagnostiquer la cause des ventuels problmes de configuration du matriel que vous pourriez rencontrer. Vous aurez aussi peut tre spcifier certains paramtres

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

25

M. Elie Degny Raphael

matriels lors de l'installation et, dans le pire des cas, lors du premier dmarrage de Linux. Les informations dont vous aurez certainement besoin sont les suivantes :

type de processeur, avec sa marque et ventuellement sa vitesse ; type de carte mre, avec sa marque et imprativement son chipset ; date et type du BIOS (PnP, PCI, etc.) ; type de souris (srie, PS/2, interface bus propritaire) ; nombre de ports srie, ainsi que leurs paramtres (ports d'entre/sortie, lignes d'interruption) ; nombre de ports parallle, ainsi que leurs paramtres (ports d'entre/sortie, lignes d'interruption) ; types de disques durs (IDE, ATAPI, SCSI), ainsi que leurs taille et gomtrie (ttes, cylindres, secteurs par piste) ; si vous disposez d'un contrleur de disque SCSI, marque et modle de ce contrleur (ou, dfaut, de la carte SCSI) ; sinon, nom du contrleur de disque IDE (regardez sur le chipset de la carte mre !) ; type de lecteur de CD-ROM (IDE, ATAPI, SCSI, connect sur carte son) ; type de carte son (ISA, PCI, PnP), avec son nom et sa marque ; nom, modle et marque de la carte graphique, taille de sa mmoire vido ; nom, modle et marque de l'cran, avec ses frquences de balayage horizontales et verticales.

Il se peut que vous n'ayez pas besoin de ces informations et que l'installation se passe sans problme. Cependant, si d'aventure Linux exige que vous les connaissiez, mieux vaut pouvoir lui rpondre. Sauvegarde des donnes L'installation du systme de base est l'opration la plus dlicate, puisqu'il faut travailler au niveau le plus bas. La moindre erreur peut provoquer une catastrophe, ce qui peut aller jusqu' recommencer compltement l'installation. Si vous installez Linux pour la premire fois sur votre ordinateur, ou s'il n'y a pas d'autre systme d'exploitation install dessus, vous en serez quitte pour quelques heures perdues. Sinon, ce qui est le plus craindre, c'est la perte totale de vos donnes, y compris celles des autres systmes installs ! Donc : IL FAUT DONC FAIRE UNE SAUVEGARDE DE VOS DONNES ! La manire de procder dpend bien entendu des systmes d'exploitation ventuellement dj installs. Gnralement, il s'agit de Microsoft Windows. Si vous disposez d'un lecteur de bande, le problme de la sauvegarde est trs simple : vous n'avez qu' faire une sauvegarde complte. Dans le cas contraire, vous allez sans doute devoir trier vos fichiers afin d'identifier ceux auxquels vous tenez rellement, et les recopier sur un support physique fiable (vitez absolument les disquettes, ils sont lents et n'ont jamais t fiables). Vous pouvez par exemple faire un CD de sauvegarde si cous disposez d'un
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 26

M. Elie Degny Raphael

graveur de CD. En fait, l'idal est tout simplement de disposer d'un autre disque dur, que l'on pourra consacrer compltement l'installation de Linux. Ainsi, vous pourrez exprimenter tout loisir, sans craindre de perdre vos prcieuses donnes. De plus, l'installation de Linux sur un disque vierge est nettement plus facile que sur un disque o Windows est dj install, parce que vous n'avez pas dgager de la place pour son installation. Prenez toutefois garde au fait que Linux restera capable d'accder aux donnes de votre premier disque dur, et que toute erreur de manipulation peut dtruire les donnes qui s'y trouvent. Par exemple, si vous ne spcifiez pas le bon disque dur lors de la cration des systmes de fichiers, vous perdrez nouveau toutes vos donnes. L'achat d'un tiroir peut tre la vraie solution, car vous n'aurez qu'un seul disque un instant donn dans votre ordinateur. Toutefois, cette technique a l'inconvnient de ne pas vous permettre d'accder aux donnes de votre disque Windows partir de Linux. Amorage Pour commencer votre installation, vous devez avant tout dmarrer votre ordinateur sous Linux (sauf si vous ne disposez pas de place libre sur votre disque dur pour crer une partition Linux. Dans ce cas, vous devriez lire tout de suite la section suivante, et ne pas essayer de dmarrer Linux immdiatement. Vous reviendrez cette section lorsque vous aurez russi dgager de la place pour les partitions Linux). La mthode la plus simple est certainement de mettre le CD d'amorage de votre distribution dans le lecteur de CD et de redmarrer l'ordinateur. Il faut que votre BIOS soit configur pour amorcer le systme sur le lecteur de CD pour que cette solution fonctionne. Si votre BIOS ne vous permet pas de le faire, il ne vous reste plus qu' utiliser l'une des disquettes fournies avec votre distribution. Dans tous les cas, Linux doit se lancer, et le programme d'installation doit dmarrer. Suivez les indications fournies avec votre distribution pour cette tape. Le noyau de Linux qui est fourni avec votre distribution est un noyau qui a t spcialement conu pour dmarrer correctement sur le plus grand nombre de machines possibles. Il contient donc les pilotes ( drivers en anglais) pour votre disque dur, ainsi que pour d'autres types de disques. Il se peut mme que plusieurs noyaux vous aient t livrs avec votre distribution. Chacun de ces noyaux permet de dmarrer sur un certain type d'ordinateur. Lorsqu'il se lance, Linux tente de dtecter le matriel de votre ordinateur. Seuls les pilotes correspondant votre matriel s'activent, les autres sont tout simplement ignors. Il se peut cependant que Linux ne dtecte pas vos disques durs. Cela peut arriver surtout pour les disques SCSI. Dans ce cas, soit il faut changer de noyau, soit il faut utiliser des pilotes additionnels, qui peuvent tre chargs la demande. Ces pilotes sont appels des modules du noyau. Ces modules sont en gnral accessibles directement sur le CD-ROM ou la disquette de dmarrage, ou sur une disquette complmentaire. Si Linux ne dtecte pas vos disques durs, vous serez oblig d'indiquer les modules charger au programme d'installation. Si cela ne fonctionne toujours pas, vous devrez ramorcer votre systme avec un noyau plus adapt votre matriel. Pour cela, vous aurez sans doute besoin de crer une disquette d'amorage pour ce noyau, et de l'utiliser la place de votre lecteur de CD. En gnral, les distributions fournissent un petit utilitaire DOS, nomm RAWRITE.EXE, qui permet

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

27

M. Elie Degny Raphael

de crer une disquette d'amorage partir d'un noyau trs simplement. Il s'utilise avec la ligne de commande suivante : Rawrite image lecteur: O image est l'image d'une des disquettes d'amorage (que vous trouverez sur le CD d'amorage de votre distribution), et lecteur est le lecteur de disquette utilis (en gnral, A: ). Vous pouvez aussi consulter la documentation de votre distribution pour savoir comment indiquer au noyau les modules qu'il doit charger, ou comment crer une disquette de dmarrage pour un autre noyau. Dans la majorit des distributions, les outils ncessaires l'installation sont placs sur un disque virtuel en mmoire aprs le dmarrage de Linux. C'est en particulier le cas du programme d'installation. Cela est normal, puisque Linux n'est pas encore install, d'une part, et que ces outils ne tiennent pas facilement sur une disquette, d'autre part. Ces outils sont donc souvent comprims. Vous devez malgr tout avoir dj accs aux priphriques de votre ordinateur, en particulier aux disques, pour poursuivre votre installation. Partitionnement du disque La deuxime opration aprs le dmarrage du systme est le partitionnement du disque dur. Cette tape est de loin la plus dangereuse, mais elle est absolument ncessaire. Elle ne pose pas de problme lorsqu'on installe Linux sur une machine neuve, mais elle peut tre dlicate si un autre systme d'exploitation est dj install. Le problme le plus courant est l'absence de place disponible sur le disque dur pour placer une partition Linux. Ce problme n'a pas de solution : il faut supprimer une autre partition appartenant un autre systme, ou la rduire. Souvent, rduire une partition revient sauvegarder les donnes, la supprimer, la recrer avec une taille infrieure et restaurer les donnes. De toutes faons, dans ce type de situation, il faut faire des sauvegardes. Cependant, il existe une possibilit pour les partitions FAT. On peut dfragmenter la partition afin de placer toutes les donnes au dbut de celle-ci, et modifier la variable qui contient sa taille dans la table des partitions pour la rduire. Cette opration ne reconstruite pas le systme de fichiers FAT, ce qui fait que cette dernire est trop grosse pour la taille de la partition qu'elle gre aprs rduction. Cela n'est pas gnant, et cette technique a l'avantage d'tre rapide. La plupart des distributions de Linux fournissent des utilitaires DOS sur leur CD-ROM d'installation, gnralement dans le rpertoire dosutils du CDROM. Parmi ces utilitaires, vous trouverez l'utilitaire fips, qui permet justement de modifier la taille d'une partition FAT. Attention cependant, les FAT32 et FAT32X ne sont gres qu' partir de la version 2.0 de fips. Note : Attention ! Vrifiez bien les options du dfragmenteur de systme de fichiers que vous utilisez : quelques outils consolident bien l'espace libre mais placent les fichiers les plus couramment accds la fin de la partition FAT pour optimiser les temps d'accs (c'est notamment le cas avec le dfragmenteur de Norton). Il faut imprativement dsactiver ce type d'option avant de rduire la partition, faute de quoi vous perdrez dfinitivement vos principaux fichiers et votre FAT sera dans un tat incohrent.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

28

M. Elie Degny Raphael

En fait, il est possible d'installer Linux sur une partition FAT, l'aide d'une extension de ce systme de fichier nomme UMSDOS . Cependant, cette opration n'est pas prvue par la plupart des distributions en standard, et on commence l sortir des sentiers battus. Autant dire que l'installation risque de se compliquer srieusement. De plus, ce choix est fondamentalement mauvais, parce que :

le systme de fichiers FAT est support par Linux, mais n'est pas optimis. Il est donc environ deux fois plus lent que le systme de fichiers natif ext2 ; le systme de fichiers UMSDOS simule un systme de fichiers Unix sur la FAT en rajoutant des fichiers d'informations complmentaires, ce qui est encore plus lent ; le systme de fichiers FAT n'est intrinsquement pas sr, car il ne prvoit aucun moyen de dupliquer les donnes ; le systme de fichiers ext2 est plus performant qu'un systme de fichiers FAT32, mme sous Windows 95.

Cela dit, il faut se faire une raison, si l'on installe Linux, c'est pour l'utiliser. La solution la plus simple pour ceux qui hsitent encore est peut tre de disposer d'un tiroir et d'un deuxime disque dur. Quoi qu'il en soit, il faut dterminer les tailles de partitions. Il est normal de disposer d'au moins trois partitions :

une partition contenant le noyau, qui doit se trouver dans les 1024 premiers cylindres pour que le BIOS puisse y accder au dmarrage ; une partition de swap, que Linux utilisera pour y stocker temporairement des donnes lorsqu'il aura besoin de rcuprer un peu de place en mmoire ; une partition contenant les programmes et les donnes.

En ralit, il est mme recommand de placer les donnes des utilisateurs sur une partition spare, et les programmes sur une partition accessible en lecture seule, pour minimiser les risques de pertes de donnes. Cela ncessite de disposer d'encore deux autres partitions, ce qui amne le nombre de partition cinq. Si l'on spare galement les applications (places dans /opt/) des programmes d'extensions du systme (placs dans /usr/), il faut mme 6 partitions. Comme les tables de partitions ne contiennent que quatre entres, il faut utiliser des partitions logiques. Linux sait parfaitement grer ce type de partitions, de manire compltement transparente. L'avantage de cette organisation est une trs grande sret du systme. Son inconvnient est videmment qu'il faut connatre l'avance ses besoins en place disque, aussi bien pour les programmes que pour les donnes et le swap. Cependant, d'une manire gnrale, on peut considrer que ce qui est le plus important pour un particulier, ce sont ses donnes, et que le fait de rinstaller le systme en cas de perte totale d'une partition n'est pas le plus gros problme. Cela dit, il est trs rare que le systme de fichiers ext2 soit corrompu, et quand il l'est, il est peut tre rpar facilement. Un particulier peut installer et essayer des programmes trs couramment, il est donc logique de regrouper l'espace de donnes utilisateur avec l'espace d'installation des
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 29

M. Elie Degny Raphael

programmes. En revanche, il reste prudent de continuer placer le noyau sur sa propre partition, ne serait-ce que pour simplifier l'installation. Vous devrez galement prendre en compte l'ventualit d'une rinitialisation complte du systme de fichiers systme pour une nouvelle installation ou une mise jour du systme. Il peut tre agrable dans ce cas de disposer d'une partition indpendante pour les donnes utilisateurs, sur laquelle vous pourrez sauvegarder vos fichiers de configuration... L'une des solutions les plus simples consiste videmment avoir un deuxime disque, auquel cas le problme ne se pose plus. Toutefois, si vous dcidez de placer les programmes et les donnes utilisateurs dans la mme partition, vous pouvez envisager les tailles de partitions suivantes :

partition rserve au noyau pour le dmarrage : 1 cylindre du disque (il faut au moins 2 Mo, ce qui est infrieur la taille d'un cylindre sur la plupart des disques durs rcents). Il est inutile de consacrer plus de 4 Mo pour cette partition, elle ne contiendra au plus que deux noyaux et quelques autres fichiers ; partition de swap : 2 fois la mmoire vive de l'ordinateur, avec pour limite suprieure 128 Mo. Il est inutile de consacrer plus de place que cela, car il est trs rare d'avoir besoin de plus de 192 Mo de mmoire virtuelle (la mmoire virtuelle est la somme de la mmoire libre et de la taille du swap). 128 Mo de swap sont donc largement suffisant pour tout type d'opration. De toutes faons, si un jour il fallait plus de swap, on pourrait crer un fichier de swap temporaire ; partition root, contenant le systme, les programmes et les donnes utilisateurs : 1,5 Go au moins. Il est possible de travailler avec 1 Go, mais on n'est vraiment pas l'aise avec XWindow et si l'on dsire compiler des programmes rcuprs sur Internet (ce qui est assez courant). Il est galement recommand de placer la partition de swap la fin du disque dur. Si jamais le systme se plante, il ne risque pas de dborder et d'crire accidentellement sur les autres partitions. L'ordre recommand pour les partitions est donc partition de dmarrage, partition utilisateur et partition de swap.

Note : La taille de 128 Mo pour le swap n'est plus une limitation partir de la version 2.2 du noyau. En effet, la gestion du swap a t modifie et la nouvelle limite est prsent 2 Go par partition de swap, avec un total de 8 partitions possibles. Si j'indique ici une taille maximale de 128 Mo pour le swap, c'est simplement parce que c'est tout fait suffisant et que si on a besoin de plus, il vaut mieux redimensionner sa configuration et envisager de gonfler la machine en mmoire vive. Le partitionnement peut se faire soit directement l'aide du fdisk de Linux, soit par l'intermdiaire du programme d'installation de la distribution correspondante. Il est recommand d'utiliser ce programme d'installation, qui vous guidera et vous indiquera comment raliser cette opration. Si toutefois vous dsirez utiliser fdisk, il vaut mieux faire attention ce que vous faites. Pour lancer fdisk, il suffit de taper la commande suivante en ligne de commande : Fdisk disque

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

30

M. Elie Degny Raphael

O disque est le fichier spcial de priphrique reprsentant le disque que vous dsirez partitionner. Comme on l'a vu prcdemment, tous les priphriques sont accessibles par l'intermdiaire de fichiers spciaux placs dans le rpertoire /dev/. Le nom des fichiers spciaux correspondant vos disques peut varier, selon leur nature. Ainsi, les disques et les lecteurs de CD IDE sont accessibles par l'intermdiaire des fichiers spciaux /dev/hda, /dev/hdb, /dev/hdc, etc. Ces fichiers permettent d'accder respectivement au disque matre du premier contrleur IDE, au disque esclave de ce mme contrleur, puis au disque matre du deuxime contrleur IDE puis au disque esclave du deuxime contrleur IDE, etc. Ainsi, si vous ne disposez que d'un disque, il doit normalement tre connect sur le premier contrleur IDE et tre matre. Dans ce cas, vous y accderez par le fichier spcial /dev/hda. Pour les disques SCSI, les noms sont lgrement diffrents : ils sont nomms /dev/sda0, /dev/sdb, etc. Donc, si vous voulez partitionner le disque matre du premier contrleur IDE, vous devrez taper : Fdisk /dev/hda Si vous ne spcifiez aucun disque en paramtre fdisk, il prendra par dfaut le disque /dev/sda, ou /dev/hda si aucun disque SCSI n'est install. Note : partir de la version 2.4.0 du noyau de Linux, le rpertoire /dev/ peut tre gnr par le noyau, dans un systme de fichiers virtuel. L'organisation de ce rpertoire est dans ce cas diffrente de l'organisation classique, et les noms de fichiers spciaux correspondants aux disques peuvent tre diffrents de ceux indiqus ci-dessus. Par exemple, le chemin du fichier spcial permettant d'accder au premier disque IDE sera /dev/ide/host0/bus0/target0/disc. Comme vous pouvez le constater, la reprsentation de la machine dans le systme de fichiers virtuels est plus structure, mais galement plus complique. Afin de simplifier ces mcanismes, il est d'usage de placer des liens symboliques dans le rpertoire /dev/ permettant d'accder aux fichiers spciaux de priphriques avec leur ancien nom. Vous n'aurez donc normalement pas vous soucier de savoir si votre noyau utilise ou non le systme de fichiers virtuels /dev/, et les chemins utiliss dans la suite de ce document seront les chemins classiques. Vous devrez faire la traduction vers les chemins du systme de fichiers virtuels vous-mme si vous ne voulez pas utiliser ces liens symboliques. Fdisk est un programme trs peu interactif. Il attend que vous lui communiquiez les commandes excuter en tapant sur une lettre. Les diffrentes commandes possibles peuvent tre affiches avec la commande 'm'. Lorsque vous crez une partition, vous devez utiliser la commande 'n', puis indiquer son type. Il existe deux types de partitions. Les partitions primaires sont dfinies directement dans une petite table enregistre dans le secteur d'amorage principal, encore appel MBR (abrviation de Master Boot Record en anglais). Outre les informations dcrivant les partitions primaires, ce secteur contient un petit programme permettant de
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 31

M. Elie Degny Raphael

charger le systme d'une de ces partitions (on appelle ce programme le bootstrap loader ). Il ne peut y avoir plus de quatre partitions primaires, parce que seulement quatre entres sont dfinies dans la table des partitions du MBR. Les partitions tendues permettent de repousser cette limite 64, en recrant une table des partitions plus grande dans une des partitions primaires. Il ne peut y avoir qu'une seule partition tendue sur un disque donn (mais cela n'empche pas d'avoir des partitions primaires ct de celleci). Lorsque vous aurez choisi le type de partition dsir (avec les commandes 'p' ou 'e', respectivement pour primary et extended ), vous devrez donner son numro dans la table des partitions, puis indiquer le dbut et la fin de la partition. Par dfaut, l'unit utilise par fdisk est le cylindre. Il est recommand de conserver cette unit, surtout si l'on utilise un systme qui ne sait manipuler que les cylindres (DOS et Windows par exemple). Toutefois, on peut changer cette unit grce la commande 'u' et utiliser le secteur comme unit. Si vous avez cr une partition tendue, celle-ci sera utilise pour y stocker des partitions logiques. Pour pouvoir les crer, il faut encore utiliser la commande 'n', et choisir le type de partition logique avec la commande 'l'. Les partitions logiques sont numrotes avec les nombres 5 et suivants. La cration des partitions logiques se fait exactement de la mme manire que les partitions primaires, en spcifiant leur dbut et leur fin, soit en cylindre, soit en secteurs selon l'unit courante. Les partitions primaires et logiques ont toutes un identificateur qui permet d'indiquer quel systme elles appartiennent. Les identificateurs utiliser pour Linux sont 83 pour les partitions en EXT2, et 82 pour les partitions de swap. Cet identificateur peut tre fix l'aide de la commande 't' (pour type ), qui demande successivement le numro de la partition modifier et la valeur de son identificateur en hexadcimal. La liste des valeurs admissibles par fdisk peut tre obtenue l'aide de la commande 'l'. Par dfaut, fdisk cre des partitions Linux natives, de code 83. Lorsque vous aurez cr toutes vos partitions, il ne vous restera plus qu' activer la partition qui contient le secteur d'amorage ( boot sector en anglais). Cela se fait l'aide de la commande 'a'. C'est sur cette partition que le chargeur du MBR ira chercher le systme lancer. En gnral, le lancement du systme consiste excuter le programme enregistr dans le premier secteur de la partition de ce systme. On appelle ce secteur le secteur de boot. On ne peut activer qu'une seule partition, c'est donc sur celle-ci qu'il faudra installer le systme principal, ou plus gnralement le gestionnaire d'amorage de ce systme. Un gestionnaire d'amorage est un petit programme capable de lancer des systmes d'exploitation. Il est en gnral constitu d'une petite partie place sur le secteur de boot de la partition du systme auquel il appartient, et d'un complment enregistr dans des fichiers de cette partition. Le fait de stocker le gestionnaire d'amorage dans le secteur de boot n'est pas gnant, parce que les gestionnaires d'amorages des systmes sont capables d'amorcer d'autres systmes que celui avec lequel ils ont t fournis (ce n'est cependant pas le cas pour DOS et Windows 9x). En fait, il est fortement recommand d'installer les gestionnaires d'amorage sur la

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

32

M. Elie Degny Raphael

partition du systme avec lequel il est fourni, et non pas directement dans le MBR. En effet, certains systmes d'exploitation (ceux de Microsoft) crasent systmatiquement le MBR lorsqu'ils s'installent, dtruisant ainsi les chargeurs des autres systmes qui y seraient installs. Cela implique que si l'on dsire installer un gestionnaire d'amorage autre que celui des systmes Microsoft sur le MBR, il faut le faire aprs l'installation de ces systmes. En pratique, cela veut dire que dans ce cas, on doit installer Linux aprs Windows ou le DOS. Le gestionnaire d'amorage de Linux se nomme LILO (pour LInux LOader ). LILO permet de dmarrer un grand nombre de systmes, dont DOS, Windows et OS/2. Comme nous venons de l'expliquer, il est conseill d'install LILO sur le secteur de boot de la partition Linux, et c'est cette partition qui doit tre marque comme amorable. Il vous est galement parfaitement possible d'installer LILO directement sur le MBR, mme si d'autres systmes d'exploitation que Linux sont dj installs. En revanche, on prendra garde dans ce cas toujours installer les ventuels systmes d'exploitation Microsoft en premier et faire une sauvegarde de son MBR. L'utilitaire fips dcrit cidessus vous permet d'effectuer une telle sauvegarde avant de modifier votre table des partitions. Le nom du fichier contenant l'image de votre MBR sera ROOTBOOT.000. En cas de problme, vous pourrez utiliser l'utilitaire restorrb fourni avec fips pour rinstaller le MBR initial sur votre systme, partir d'une disquette de boot DOS. Vous devriez lire attentivement la documentation fournie avec fips sur le CD-ROM de votre distribution avant de vous lancer dans ces manipulations on ne peut plus techniques (une traduction franaise de l'intgralit de la documentation de fips est disponible sur Internet l'adresse http://www.fips.fr.st. Nous verrons comment installer LILO plus loin. Cration des systmes de fichiers Une fois le disque correctement partitionn, il faut crer les systmes de fichiers. Cette opration n'est pas ncessaire pour les partitions de swap, cependant il faut le faire pour les autres partitions. La cration des systmes de fichiers ne sera dcrite que pour le systme de fichiers natif de Linux, savoir EXT2. Attention ! Dans le monde du DOS et de Windows, la cration d'un systme de fichiers est l'opration de formatage d'une partition. Le terme de formatage est trs mal employ dans ce sens, car il n'y a strictement rien voir entre le formatage d'un disque, qui est l'opration consistant enregistrer des marques sur le support magntique pour dfinir les pistes et les secteurs du disque, et la cration du systme de fichiers d'une partition, qui consiste enregistrer les structures de donnes permettant de retrouver les fichiers dans cette partition. Le formatage est normalement effectu par le fabricant du disque, et a lieu avant le partitionnement. En effet, partitionner un disque suppose qu'il existe dj des pistes et des secteurs sur le disque. C'est pour cette raison que l'on ne parlera ici que de cration de systmes de fichiers. La mthode dcrite ici permet de crer un systme de fichiers EXT2. Cette opration peut tre faite l'aide de la commande mke2fs. La cration des autres systmes de fichiers se fait de manire gnrale de la mme manire que pour EXT2, mais avec des

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

33

M. Elie Degny Raphael

outils diffrents. Par exemple, la cration d'un systme de fichiers ReiserFS se fait l'aide de l'outil mkreiserfs. Ces outils ne seront pas dcrits ici, consultez la documentation de votre distribution et les pages de manuel appropries pour plus de dtails ce sujet. Afin de pouvoir utiliser mke2fs correctement, il est ncessaire de dfinir quelques termes, et d'expliquer quelles notions d'EXT2 ils se rfrent. Premirement, le systme de fichiers EXT2 travaille, comme la plupart des systmes de fichiers, avec des blocs de taille fixe ( clusters en anglais). Cela signifie que l'allocation de l'espace disque se fait par multiples de la taille de ces blocs : il est impossible de demander seulement une partie d'un bloc. Cette technique prsente ses avantages et ses inconvnients. Essentiellement, l'avantage est la rapidit engendre par la simplification des mcanismes d'allocation et de libration d'espace disque. L'inconvnient majeur est videmment qu'on perd de la place pour tous les fichiers qui ne tiennent pas dans un nombre entier de blocs, puisqu'il faut allouer un bloc supplmentaire qui sera partiellement utilis. En moyenne, on perd la moiti d'un bloc par fichier, ce qui ne peut tre rduit qu'en limitant la taille des blocs une valeur relativement faible. Note : EXT2 gre l'allocation et la libration des blocs de manire toujours trouver le meilleur bloc allouer pour crer un fichier. Ainsi, il limite la fragmentation des fichiers son strict minimum, ce qui rend inutiles les programmes de dfragmentation de systmes de fichiers. Deuximement, EXT2 utilise des structures de donnes appeles inodes pour dfinir les fichiers. Un inode contient la plupart des informations d'un fichier, savoir :

son propritaire et son groupe ; ses droits d'accs ; ses dates de cration, modification, accs ; les blocs qu'il utilise ; d'autres informations utilises par EXT2.

Ces inodes sont stocks dans une table du systme de fichiers, ce qui permet d'accder trs rapidement toutes ces informations et de retrouver galement trs simplement le ou les blocs contenant les donnes du fichier. Le problme est ici que cette table a un nombre d'entres limit, ce qui implique un nombre limit de fichiers dans le systme de fichiers. Plus cette table est grande, plus le nombre de fichiers que l'on pourra crer sera grand, et inversement. Il faut donc trouver un compromis entre la taille de cette table et le nombre de fichiers que l'on est susceptible de crer. Il va de soi qu'en gnral, les grandes partitions contiennent plus de fichiers, mais que la table d'inodes peut galement avoir une taille suprieure sans que cela soit drangeant. Par consquent, il est relativement courant de dfinir le taux d'inode par bloc ou, autrement dit, la proportion d'inodes dans la partition par rapport sa taille.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

34

M. Elie Degny Raphael

Toutes ces informations (blocs libres et inodes) sont sauvegardes plusieurs endroits dans la partition, ce qui permet de disposer en permanence de copies de la structure du systme de fichiers. De cette manire, il est relativement simple de rparer un systme de fichiers endommag. Chacune de ces copies s'appelle un groupe de blocs. Chaque groupe de blocs contient un bloc particulier, le super bloc , qui contient la description de son groupe. Lors de la cration du systme de fichiers, il est ncessaire d'indiquer la taille d'un bloc en octets. Cette taille doit imprativement tre un multiple de la taille d'un secteur du support physique de donnes, parce que les blocs ne peuvent contenir qu'un nombre entier de secteurs. Pour un disque dur, la taille des secteurs est fixe 512 octets, ce qui fait que la taille d'un bloc est au moins de 512 octets. De mme, il faut spcifier le nombre d'inodes de la partition. Il est possible de spcifier ce nombre soit directement, ou d'indiquer seulement le nombre d'octets par inode de la partition. Le nombre total d'inodes utilis sera alors calcul partir de ce nombre d'octets et de la taille de la partition. Bien entendu, le nombre maximal d'inodes possible est le nombre total de blocs, puisque tout fichier non vide requiert au moins un bloc et que chaque inode caractrise un fichier. Si vous ne savez pas quelles valeurs prendre, vous pouvez utiliser des blocs de 1024 octets (2 secteurs), et un rapport de 4096 octets par inode (donc de 4 blocs de 1 Ko par inode). La syntaxe de la commande mke2fs est donne ci-dessous : mke2fs fichier o fichier est le nom du fichier spcial de priphrique reprsentant la partition sur laquelle le systme de fichiers doit tre cr. mke2fs prend alors des valeurs par dfaut appropries pour cette partition, mais vous pouvez galement spcifier d'autres valeurs. La taille des blocs peut tre indique en octets avec l'option suivante : mke2fs -b taille fichier o taille reprsente la taille d'un bloc en octets. De mme, le nombre d'octets par inode peut tre prcis avec l'une des options -i : mke2fs -i octets fichier o octets est le rapport de la taille de la partition en octets par le nombre d'inodes crer. Il est possible d'indiquer directement ce nombre avec la commande suivante : mke2fs -N nombre fichier Enfin, sachez que l'option -c permet de demander mke2fs d'effectuer une vrification des secteurs dfectueux du disque dur avant de crer le systme de fichiers. Il est fortement recommand d'utiliser cette option lors de la premire cration d'un systme de fichiers. Cration de la partition de swap En cas de manque de mmoire vive, Linux peut utiliser une partie du disque dur pour y stocker les donnes temporairement inutilises afin de librer de l'espace mmoire. Cette opration permet de continuer travailler, mme si la machine ne dispose pas de

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

35

M. Elie Degny Raphael

suffisamment de mmoire vive pour excuter tous les processus dont elle a la charge. L'inconvnient de cette mthode est videmment la dgradation des performances, mais c'est un bon compromis si l'on considre le prix du mga-octet de mmoire par rapport celui des disques durs d'une part, et le fait qu'il vaut mieux parvenir faire son travail, mme lentement, que de ne pas le faire du tout. L'espace disque consacr par Linux pour ce stockage temporaire est appel swap , du terme anglais to swap qui fait rfrence l'change des donnes de la mmoire vers le disque dur (et inversement, lorsqu'elles sont recharges en mmoire). Linux est capable de grer plusieurs formes de swap. Il est capable d'utiliser des fichiers de swap, qui sont stocks dans un systme de fichiers, ou les partitions de swap. Ces dernires ont l'avantage d'tre bien plus rapides, puisque le noyau n'a pas se proccuper de la structure du systme de fichiers lors des oprations de swap (qui, rappelons-le, constituent dj un ralentissement notable de la machine). En revanche, elles ont l'inconvnient majeur d'tre trs contraignantes, puisqu'elles ncessitent de rserver une partition pour le swap de manire permanente. Cependant, il est tout fait acceptable de nos jours de consacrer 64 ou 128 Mo de disque dur pour une partition de swap. Linux est capable de grer jusqu' 8 partitions de swap, plus les fichiers de swap que l'on peut rajouter ultrieurement. Nous ne dcrirons que la manire de crer une partition de swap, car les fichiers ne constituent plus le meilleur compromis avec les tailles de disques que l'on rencontre prsent. Bien entendu, le programme d'installation de votre distribution prend certainement dj en charge la cration des partitions de swap. Il est donc recommand, encore une fois, d'utiliser ce programme, mme si la description qui suit vous permettra de comprendre ce dont il s'agit. Les partitions de swap peuvent tre cres, comme toutes les partitions, l'aide du programme fdisk. En fait, la seule distinction entre une partition de swap et une partition EXT2 est tout simplement son identificateur. Comme on l'a dj vu lors du partitionnement du disque, l'identificateur utilis pour les partitions de systmes de fichiers est 83, et celui pour les partitions de swap est 82. Vous devrez donc affecter cet identificateur votre partition de swap lorsque vous partitionnerez votre disque dur. Une fois cre, la partition de swap peut tre prpare pour que le noyau puisse l'utiliser. Cette prparation revient peu prs formater un systme de fichiers, ceci prs que les structures de donnes crites dans la partition de swap sont beaucoup plus simples car il ne s'agit plus ici de stocker une arborescence complte de fichiers. La commande mkswap permet de prparer les partitions pour tre utilises en tant que partition de swap. Elle s'utilise selon la syntaxe suivante : Mkswap -c partition O partition est la partition prparer pour le swap. Notez que, en ralit, mkswap peut tout aussi bien travailler sur un fichier que sur une partition. Lorsque la partition aura t prpare pour le swap, il est possible de demander Linux de l'utiliser avec la commande suivante :
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 36

M. Elie Degny Raphael

Swapon partition O partition est la partition de swap utiliser. Cette zone de swap est alors automatiquement prise en compte par le systme. La commande suivante permet d'arrter le swapping sur une partition : Swapoff partition Normalement, vous n'aurez jamais utiliser ces commandes manuellement. Le programme d'installation de votre distribution configure le swap, et fait en sorte que les partitions de swap sont charges automatiquement lors du dmarrage de la machine. Notez cependant que cette mthode de configuration dynamique permet d'ajouter temporairement un peu plus de swap si les besoins s'en font sentir, sans avoir redmarrer la machine. Installation des composants de base Si vous tes arriv jusqu'ici, vous avez fini les oprations les plus risques et sans doute les plus difficiles. Dans les premiers jours de Linux, il fallait installer la main les diffrents composants du systme, voire les recompiler soi-mme. Heureusement, toutes les distributions actuelles disposent aujourd'hui de programmes d'installation du systme de base, qui simplifient beaucoup le travail. Les oprations que vous allez raliser prsent sont donc plus simples, et certainement moins dangereuses. L'ordre logique est videmment de commencer par les couches les plus basses du systme, donc en particulier le noyau. Cependant, il faut galement installer le shell et les outils complmentaires, puisque sans eux on ne peut strictement rien faire de ce noyau. Cet ensemble de programme constitue ce que l'on appelle le systme de base. Je suggre de configurer correctement le systme ce stade, avant de se lancer dans l'aventure XWindow. C'est videmment cette partie qui sera la plus difficile raliser. L'installation de XWindow ne devrait alors pas causer de problme majeur. Une fois ces oprations ralises, vous pourrez installer les applications. En gnral, lorsque le systme est bien configur, l'installation des applications est une tche relativement facile et se fait rapidement. Ce document ne traitera pas en dtail de l'installation des applications, car il y en a trop pour que l'on puisse donner des informations valides pour toutes les applications. Quelques rgles gnrales seront malgr tout donnes, car elles peuvent s'appliquer pour certaines applications. Toutes les distributions organisent les diffrents composants logiciels qu'elles fournissent en paquetages ( package en anglais). Ainsi, l'installation du systme se fait par groupes homognes de fichiers, et le regroupement dans un paquetage est gnralement une dpendance forte (en pratique, ce sont les fichiers d'une mme application). En installant un paquetage, on installe finalement un logiciel particulier. Cependant, certains paquetages dpendent d'autres paquetages, par exemple, les paquetages contenant le systme de base sont videmment utiliss par tous les autres paquetages. Les programmes d'installation grent relativement bien les dpendances et les conflits entre paquetages, si bien que l'installation peut maintenant se faire sans trop de problmes.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

37

M. Elie Degny Raphael

Afin d'organiser un peu tous ces paquetages, les distributions les trient souvent par sries . Une srie n'est rien d'autre qu'un ensemble de paquetages regroups par domaine fonctionnel. Cela signifie que l'on peut facilement retrouver un paquetage donn, en allant le chercher dans la srie contenant tous les paquetages fonctionnellement proches. Le regroupement des paquetages en sries ne signifie absolument pas que tous les paquetages de la srie doivent tre installs pour obtenir une fonctionnalit donne, mais que les logiciels qui s'y trouvent ont plus ou moins trait cette fonctionnalit. En fait, il peut mme y avoir redondance ou conflit entre deux paquetages d'une mme srie. Dans ce cas, il faut choisir l'un ou l'autre, selon ses besoins personnels. Certains paquetages sont indispensables pour le systme, d'autres sont purement optionnels. Mais la plupart des paquetages sont simplement les paquetages des applications, et vous devrez faire le tri et choisir ceux qui vous intressent parce qu'il est impensable d'installer tous les paquetages (une distribution de Linux peut faire 5 ou 6 CD-ROM, en tenant compte du systme, des applications et des sources). Les seuls paquetages qu'il faut imprativement installer sont les paquetages de la srie de base. En gnral, cette srie porte le nom A, ou AAA, ou quelque chose de similaire, afin qu'elle puisse tre toujours en tte de liste dans les programmes d'installation. Cette srie comprend au moins les paquetages des commandes Unix de base, du shell, du programme d'installation et de tous les fichiers ncessaires au fonctionnement du systme (fichiers de configuration, scripts et bibliothques partages). Tant que les programmes de cette srie sont intacts et fonctionnels, le systme est utilisable. S'il en manque, les problmes peuvent survenir tout moment : de l'absence ou l'indisponibilit de la documentation l'impossibilit complte de dmarrer le systme. Le choix des paquetages installer est crucial mais non dfinitif. En effet, si vous avez install un paquetage dont vous n'avez pas ou plus besoin, rien ne vous empche de le supprimer par la suite. De mme, si vous vous apercevez que vous avez oubli d'installer un paquetage dont vous avez besoin, vous pouvez l'installer ultrieurement. Il n'est pas possible de donner ici la liste des paquetages que vous devez installer, car cette liste dpend beaucoup trop de la distribution que vous possdez. Il est conseill de lire le manuel de cette distribution ou de bien lire les crans d'aides du programme d'installation. Cependant, les paquetages dont vous aurez certainement besoin pour poursuivre l'installation sont sans doute les suivants :

paquetage du systme de base ; paquetage du compilateur GCC ; paquetage du rseau ; paquetage de XWindow ; paquetage de documentation ; paquetages susceptibles de faire fonctionner votre matriel (carte son, serveur XWindow appropri votre carte graphique...).

Gardez l'esprit que dans le monde du logiciel libre, les programmes sont souvent distribus sous la forme de fichiers sources et que vous aurez sans doute besoin des
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 38

M. Elie Degny Raphael

outils de dveloppement pour les compiler et les installer. Veillez donc inclure d'office tous ces outils, mme si vous ne dsirez pas programmer personnellement. Bien entendu, vous pourrez revenir ultrieurement dans le programme d'installation et rinstaller un paquetage si vous l'avez oubli pendant la phase d'installation. Lorsque vous aurez install votre systme de base, vous devrez faire en sorte qu'il puisse dmarrer. Pour cela, il existe plusieurs possibilits :

soit vous dmarrez partir d'une disquette ou d'un CD d'amorage ; soit vous lancez Linux partir du DOS grce au LOADLIN.EXE ; soit vous installez le gestionnaire d'amorage LILO.

programme

Il va de soi que c'est la troisime solution qui est recommande. Cependant, les deux premires solutions pourront tre utiles si d'aventure votre MBR se trouvait cras par un systme d'exploitation maladroit (comme DOS ou Windows). L'installation de LILO doit se faire de prfrence dans le programme d'installation ou de configuration de votre distribution. Consultez votre documentation pour plus de dtails ce sujet. Cependant, si vous dsirez installer LILO vous-mme, vous devrez modifier le fichier de configuration /etc/lilo.conf. Ce type d'opration est dcrit en dtail dans la la section intitule Configuration de LILO dans Chapitre 6.

Chapitre 4. Commandes de base d'Unix


Si vous tes parvenu installer les paquetages de la srie de base, vous disposez d'un systme Linux fonctionnel. Flicitations ! Maintenant, il va falloir le configurer... Autant vous prvenir tout de suite : cette opration demande beaucoup de temps et de patience, moins d'avoir une machine vraiment standard et une chance phnomnale. Mais pour cela, il va falloir que vous appreniez les commandes de base d'Unix et la manire d'utiliser un systme Linux en ligne de commande (c'est--dire en mode texte, sans XWindow). Login et dconnexion Comme il l'a dj t dit, Linux est un systme multi-utilisateurs. Il faut donc que chacun s'identifie pour que le systme puisse fonctionner correctement. Cette opration est ralise lors de l'opration dite de login (du verbe anglais to log in , qui signifie s'enregistrer dans le systme). Le login consiste essentiellement taper son nom d'utilisateur, valider, et rpondre ventuellement la demande de mot de passe de la part du systme. Le login doit tre la premire opration effectuer. Il est impossible d'accder au systme d'une autre manire, et la vrification du mot de passe fournit l'authenticit de l'utilisateur qui se logue. Ainsi, le systme sait en permanence au nom de quelle personne il effectue les oprations demandes. Cette opration est la base des mcanismes de scurit et de personnalisation du systme pour chaque utilisateur.
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 39

M. Elie Degny Raphael

Il existe deux types de login. Le plus courant est le login en mode texte, qui peut tre fait directement sur le poste local ou travers un rseau. Le systme vous invite vous identifier avec la ligne suivante : Login: D'autres informations peuvent tre affiches avant le mot login, qui peuvent vous renseigner sur la nature du systme. Quoi qu'il en soit, vous devez taper votre nom d'utilisateur (que l'on appelle simplement login ), ou root si vous dsirez vous connecter en tant qu'administrateur. Le systme vous demande alors le mot de passe avec la ligne suivante : Password: Bien entendu, vous ne devrez jamais oublier votre mot de passe administrateur. Si toutefois cela vous arrive, vous n'aurez plus qu'une seule solution : dmarrer l'ordinateur partir d'une disquette systme, et faire le mnage dans le fichier de mots de passe. Cette opration n'est jamais trs agrable raliser. Conclusion : n'oubliez jamais votre mot de passe. Le deuxime type de login est le login graphique, sous X11. Ce type de login a en gnral lieu sur un terminal X (c'est--dire un terminal graphique). La procdure peut varier selon l'environnement utilis, mais le principe reste toujours le mme : il faut fournir son nom d'utilisateur et son mot de passe. Si, comme la plupart des gens, vous ne cherchez pas utiliser votre ordinateur distance travers un rseau, vous vous connecterez quasiment toujours en local. Linux fournit, pour l'utilisateur local, plusieurs terminaux virtuels. Cela signifie qu'il est possible de se connecter plusieurs fois dans le systme dans des terminaux diffrents. Pour passer d'un terminal virtuel un autre, il suffit de taper les combinaisons de touches ALT+DROITE ou ALT+GAUCHE, o DROITE et GAUCHE sont respectivement les flches du curseur droite et gauche. Il est galement possible d'accder un terminal donn l'aide de la combinaison de touches ALT+Fn, o Fn est l'une des touches de fonction F1, F2, F3, etc. La plupart des distributions utilisent au moins quatre terminaux virtuels, plus un terminal X. Le terminal X est le terminal graphique, qui fonctionne sous XWindow. Vous noterez sans doute que lorsqu'on est sous XWindow, les combinaisons ALT+Fn ont une autre signification. Elles ne peuvent donc pas tre utilises pour basculer vers les terminaux en mode texte. Pour remdier ce problme, une autre combinaison de touches a t dfinie, spcialement pour XWindow : CTRL+ALT+Fn. Il suffit donc simplement d'utiliser la touche CTRL en plus de la touche ALT. L'utilisation des terminaux virtuels est trs pratique, mme pour un seul utilisateur. En effet, ceux-ci permettent de lancer plusieurs programmes simplement, raison d'un par terminal virtuel, et de s'y retrouver ainsi plus facilement. Pour ceux qui ne connaissent pas les systmes Unix, il est recommand de jouer un peu avec les terminaux virtuels

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

40

M. Elie Degny Raphael

afin de simuler la prsence de plusieurs utilisateurs. Ils auront ainsi un aperu de la puissance de ces systmes. Lorsqu'on a fini de travailler, il faut se dconnecter. Cette opration est trs simple pour les terminaux non graphiques, puisqu'il suffit de taper la commande suivante : Logout Si d'aventure cette commande ne fonctionnait pas, vous pourrez utiliser la commande exit ou la combinaison de touches CTRL+d, qui terminent le shell courant (y compris le shell de login). Pour les terminaux X, le processus de dconnexion dpend de l'environnement utilis. Il faut ttonner un peu, et normalement on trouve une option de menu du style logout ou dconnexion . Vous pouvez par exemple cliquer sur le bouton droit de la souris sur le bureau de l'environnement de travail, afin d'appeler un menu contextuel. Dans bien des cas, ce menu contient une option de dconnexion. Il est trs important de se dconnecter et de ne jamais laisser une session ouverte. En effet, cette ngligence peut vous coter cher, car une personne mal intentionne pourrait trs bien utiliser ce terminal vos dpends. Il aurait tous vos droits, et effectuerait ses oprations en votre nom. La scurit du systme garantissant que vous seul pouvez vous connecter sous ce nom, grce au mot de passe, vous seriez donc responsable des agissements de l'intrus. Bien entendu, ce genre de considration n'a pas autant d'importance pour un particulier que dans une entreprise ou une collectivit quelconque. . Arrt et redmarrage du systme Il faut bien comprendre que Linux, tout comme la plupart des systmes d'exploitation modernes, ne peut pas tre arrt en teignant directement l'ordinateur, comme on le faisait autrefois avec le DOS. En effet, la plupart des systmes d'exploitation utilisent une partie de la mmoire de l'ordinateur pour y stocker temporairement les donnes qui ont t lues partir du disque et celles qui doivent y tre crites. Cette zone de mmoire constitue ce qu'on appelle un tampon ( buffer en anglais), et elle sert acclrer les accs aux priphriques plus lents, que sont les disques durs et lecteurs de CD-ROM. Il va de soi qu'une requte de lecture sur des donnes dj situes en mmoire est infiniment plus rapide que si elles ne s'y trouvaient pas. Il est en revanche plus difficile de comprendre pourquoi les requtes d'criture doivent tre diffres. La raison est la suivante : le systme prfre diffrer l'criture physique sur le disque parce qu'une autre requte d'criture dans la mme zone du disque peut trs bien avoir lieu ultrieurement. Si les donnes qui n'ont pas t crites sont ainsi modifies par une requte ultrieure, il n'est plus ncessaire de les crire, et ainsi le systme peut conomiser un temps prcieux en ne le faisant pas. Si les donnes crire sont contigus celles d'une requte prcdente, le systme peut les crire en bloc, ce qui est toujours plus rapide que de faire plusieurs critures partielles (notamment parce que les ttes de lecture du disque n'ont
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 41

M. Elie Degny Raphael

pas tre dplaces). Enfin, si les donnes qui doivent tre crites font l'objet d'une requte de lecture, il va de soi qu'elles sont immdiatement accessibles. On voit que cette stratgie permet de travailler beaucoup plus vite. De facto, Linux utilise toute la mmoire vive libre pour ses tampons d'entres / sorties, ce qui en fait un systme extrmement performant. Le gain en performances peut facilement atteindre un facteur 3 ou 4. Le problme majeur est videmment que si on teint l'ordinateur brutalement, les donnes dont l'criture a t diffre sont perdues. Pire, parmi ces donnes, il est probable qu'il y ait des informations vitales pour le systme de fichiers, ce qui fait qu'il risque fort d'tre endommag. En gnral, le systme effectue un contrle et une rparation si ncessaire lors du redmarrage suivant, mais il est inutile de prendre des risques. Tout cela signifie qu'il est impratif de prvenir le systme avant de l'arrter, pour qu'il puisse crire les donnes situes dans ses tampons. L'arrt du systme est une opration qui est du ressort de l'administrateur. On ne peut donc le raliser que sous le compte root. Plusieurs commandes sont disponibles, les plus simples sont donnes ci-dessous : Halt Permet d'arrter le systme. Reboot Permet de le redmarrer. Ces commandes sont en fait des scripts permettant d'effectuer les oprations d'arrt et de redmarrage du systme rapidement. Si elles ne sont pas disponibles sur votre distribution, vous devrez sans doute utiliser la commande gnrique suivante : Shutdown [-r] now O l'option -r permet de demander un redmarrage et non un arrt simple. Il est galement possible que votre gestionnaire de bureau vous donne le moyen d'arrter l'ordinateur par l'intermdiaire de l'interface graphique de X11. La technique utiliser dpend videmment de l'environnement que vous aurez install, et elle ne sera pas dcrite ici. Consultez la documentation de votre distribution pour plus de dtails ce sujet. De plus, la plupart des distributions provoquent un redmarrage de la machine lorsqu'on appuie sur les touches CTRL+ALT+SUPPR simultanment dans un terminal virtuel Pages de manuel Maintenant que vous savez l'essentiel pour conserver votre systme en bon tat, nous allons traiter des autres commandes Unix. Parmi elles, il en est qui sont certainement fondamentales : ce sont les commandes qui permettent d'obtenir de l'aide !
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 42

M. Elie Degny Raphael

Chaque commande Unix a une page de manuel, qui la dcrit. Ces pages sont trs souvent crites en anglais, mais elles sont trs prcises et fournissent toutes les informations dont on peut avoir besoin. Pour afficher la page de manuel d'une commande, il suffit d'utiliser la commande suivante : Man page O page est la page de manuel de la commande sur laquelle on cherche des informations. En gnral, le nom de la page de manuel est le mme que celui de la commande. Par exemple, pour afficher l'aide sur la commande cp, il suffit de taper : Man cp Lorsqu'une page de man est affiche, il est possible de faire dfiler son texte l'aide des touches du curseur. Pour quitter l'aide, il suffit d'appuyer sur la touche q. Les pages de man sont classes en groupes thmatiques de pages, chaque groupe tant identifi gnralement par un numro ou une lettre. Si la page de man affiche ne correspond pas celle dsire, c'est qu'une page homonyme d'un autre groupe a t utilise. Dans ce cas, il faut prciser l'identificateur du groupe de pages de manuel avant le nom de la page afficher : Man groupe page O goupe est l'identificateur du groupe auquel la page de manuel appartient. Les principaux groupes sont les suivants : Tableau 5-1. Groupes de pages de man Identificateur 1 2 3 4 5 6 7 8 Type de pages de manuel Commandes utilisateur Appels systmes (programmation en C) Fonctions de la librairie C Description des fichiers spciaux Description des fichiers de configuration Jeux et programmes divers Programmes systmes divers Administration systme

Si vous ne savez pas dans quel groupe se trouve une page de manuel, vous pouvez utiliser l'option -k, qui permet d'afficher l'ensemble des pages disponibles portant ce nom : Man -k commande

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

43

M. Elie Degny Raphael

L'identificateur du groupe est en gnral prcis entre parenthses, la suite du nom de la page de manuel. Il se peut galement que vous recherchiez de l'aide sur un sujet donn, mais que vous ne connaissiez pas le nom exact de la page de manuel qui en parle. Pour ce genre de recherche, vous pourrez utiliser le programme apropos, qui recherchera toutes les pages de manuel qui contiennent un mot-cl particulier. Ce programme s'utilise avec la syntaxe suivante : Apropos mot-cl O mot-cl est le mot-cl rechercher dans toutes les pages de manuel. La commande man est la commande d'aide standard sur tous les systmes Unix. Cependant, Linux utilise un grand nombre de commandes crites sous la licence GNU, et qui utilisent un format d'aide spcifique GNU. L'aide pour ces commandes peut tre obtenue par la commande suivante : Info commande Il se peut que les deux mthodes fonctionnent. Dans ce cas, la page de man sera certainement moins rcente que la page d'info, car la commande que vous utilisez est sans aucun doute une commande GNU, qui a t fournie avec sa page d'information. Il est donc recommand de lire plutt la page d'information GNU. Le format d'aide GNU est plus riche que celui de man, puisqu'il permet de naviguer dans le systme d'aide l'aide de liens hypertextes. Ces liens sont organiss hirarchiquement, avec des chapitres et des sous-chapitres. Chaque chapitre dispose d'une forme de table des matires constitue de menus, qui permettent d'accder aux sous-chapitres. Les menus se distinguent du texte normal par un astrisque ( * ) en dbut de ligne dans la table des matires. Les commandes clavier suivantes pourront vous tre utiles pour naviguer dans la hirarchie du systme d'aide de GNU : la touche de tabulation permet de passer au lien hypertexte suivant ; la touche n (pour Next ) permet de passer au chapitre suivant ; la touche p (pour Previous ) permet de revenir au chapitre prcdent ; la touche u (pour Up ) permet de remonter d'un niveau dans le systme d'aide et d'atteindre la table des matires rfrenant le chapitre courant.

Enfin, la commande q permet de quitter le systme d'aide. Oprations de base sur les rpertoires Ce paragraphe va vous dcrire les oprations de base qu'il faut savoir faire pour manipuler les rpertoires du systme de fichiers.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

44

M. Elie Degny Raphael

La premire commande est videmment celle qui permet de lister le contenu d'un rpertoire. Elle dispose d'un grand nombre d'options : Ls [options] [fichier] O fichier est le nom d'un fichier ou d'un rpertoire que l'on dsire lister. Si ce paramtre est absent, ls affichera tous les fichiers du rpertoire courant. Les principales options sont -l, qui permet d'afficher des informations tendues (notamment les propritaires, les groupes, les droits, la taille et ventuellement les liens), et -a, qui permet d'afficher tous les fichiers, y compris les fichiers cachs (ceux dont le nom commence par un point). La deuxime commande est celle qui permet de changer de rpertoire courant. Sa syntaxe est trs simple : Cd [chemin] O chemin est un chemin de rpertoire Unix valide. Ce chemin est constitu des noms des rpertoires et sous-rpertoires successifs, spars par des barres obliques / . Si aucun chemin n'est spcifi, cette commande change le rpertoire courant pour le rpertoire personnel de l'utilisateur. Par exemple, pour aller dans le rpertoire d'installation de XWindow, il faut taper la commande suivante : Cd /usr/local/X11 La notion de chemin sera dtaille dans le paragraphe suivant. cd est l'abrviation de l'anglais Change Directory . La troisime commande permet de crer un rpertoire : mkdir chemin O chemin est le chemin spcifiant le rpertoire crer. Si le chemin ne contient que le nom du rpertoire crer, celui-ci est cr dans le rpertoire courant et devient donc un sous-rpertoire. mkdir est l'abrviation de l'anglais MaKe DIRectory ). La commande pour supprimer un rpertoire est la suivante : rmdir chemin Pour supprimer un rpertoire, il faut qu'il soit vide (c'est--dire qu'il ne contienne ni fichier, ni rpertoire). rmdir est l'abrviation de l'anglais ReMove DIRectory . Enfin, voici une commande dont vous ne vous servirez normalement que trs peu, voire pas du tout. Elle permet d'afficher le rpertoire courant : pwd Cette commande n'est a priori pas trs utile, car le shell affiche toujours le rpertoire courant sur la plupart des distributions. Cependant, le chemin affich par le shell tant relatif au rpertoire personnel de l'utilisateur lorsqu'on se trouve dans un sous-rpertoire
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 45

M. Elie Degny Raphael

de celui-ci, la commande pwd peut tre utile lorsqu'on dsire obtenir un chemin absolu sur le rpertoire courant. pwd est l'abrviation de l'anglais Print Working Directory . Notions de chemins sous Unix Les chemins Unix permettent de qualifier compltement un rpertoire ou un fichier sur le disque. Pour cela, ils utilisent les noms de ces rpertoires et de ces fichiers, et ils les combinent pour indiquer comment atteindre la cible dans le systme de fichiers. Classiquement, les chemins sont spcifis par la squence des rpertoires dans lesquels il faut aller pour trouver cette cible. Cette squence est donne par la suite des noms des rpertoires, spars par un caractre spcial. Sous Unix, ce caractre est la barre oblique ( / ). Le rpertoire racine n'a pas de nom, et peut donc tre rfrenc par une barre oblique seule. Les chemins peuvent tre absolus (c'est--dire qu'ils peuvent partir du rpertoire racine) ou relatifs (c'est--dire qu'il peuvent partir du rpertoire courant). Si l'on utilise un chemin relatif, il faut savoir que le rpertoire courant est dsign par un point ( . ), et que le rpertoire parent du rpertoire courant est dsign par deux points successifs ( .. ). Ainsi, si l'on est dans le rpertoire /usr/local/bin, on peut accder au rpertoire /usr/local/X11/bin avec les deux chemins suivants : /usr/local/X11/bin Ou : ../X11/bin Le premier chemin est absolu, parce qu'il part directement du rpertoire racine. Le deuxime chemin est relatif, car il part du rpertoire courant. Note : Il va de soi que les chemins relatifs ne sont valides, sauf coup de chance, que dans le rpertoire dans lequel ils sont crits, alors que les chemins absolus sont toujours valables. En revanche, si des rpertoires sont dplacs ensemble, les chemins relatifs entre ces rpertoires restent valides, mais les chemins absolus deviennent faux. Toutefois, ces considrations ne concernent pas un utilisateur de base. La plupart des shells sont capables d'effectuer ce que l'on appelle la compltion automatique des noms. La compltion automatique permet de n'crire qu'une partie des noms de fichiers ou de rpertoires et de demander au shell de complter ces noms. Cela peut se faire de deux manires. La premire solution, qui est aussi la plus simple, consiste taper le dbut du nom, puis d'utiliser une touche spciale qui permet de demander au shell de le complter. Si vous utilisez le shell bash (bash est le shell de prdilection sur les systmes Linux), cette touche est la touche de tabulation. Ainsi, si vous tapez : cd /ho Et que vous appuyez sur la touche de tabulation, bash compltera cette ligne de la manire suivante :
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 46

M. Elie Degny Raphael

cd /home Pour cela, il regarde la liste des fichiers et des rpertoires qui commencent par ho dans le rpertoire racine. Normalement, il ne s'y trouve que le rpertoire /home, et c'est ce nom que bash utilise. Il va de soi qu'il ne faut pas qu'il y ait ambigut sur un nom partiel. Par exemple, si vous tapez la commande suivante : cd /usr/l et que vous demandiez au shell de complter le nom, il ne pourra pas choisir quel rpertoire utiliser entre /usr/lib/ et /usr/local/. Dans ce cas, il mettra un petit bip signalant l'erreur. En appuyant une fois de plus sur la touche de tabulation, bash affiche la liste des choix possibles et vous propose de terminer la ligne de commande en saisissant des caractres supplmentaires afin de rsoudre l'ambigut. La deuxime solution est d'utiliser les caractres gnriques du shell. Ces caractres permettent de dsigner n'importe quel caractre, ou n'importe quelle squence de caractres. Ils sont dsigns respectivement par un point d'interrogation ( ? ) et par un astrisque ( * ). Ainsi, si l'on tape la commande suivante : cd /ho* le shell ira directement dans le rpertoire /home/, car le caractre gnrique * peut tre remplac par la squence de caractres me . Il est galement possible d'crire : cd /?ome Et dans ce cas le caractre gnrique ? sera remplac par h . Encore une fois, il ne faut pas qu'il y ait ambigut. Dans le cas contraire, le comportement varie selon le shell. En gnral, il essaie de rsoudre l'ambigut au mieux en analysant la suite du chemin, et s'il ne peut pas, il affiche un message d'erreur. Note : Ces caractres gnriques sont interprts directement par le shell et non par la commande qui les reoit en paramtres. Tout nom de fichier contenant un caractre gnrique est remplac par la liste des fichiers qui correspondent au motif donn. S'il n'existe qu'un seul fichier dans cette liste, il est possible d'utiliser les commandes comme cd, qui ne prennent qu'un seul paramtre. Mais il est possible d'utiliser les commandes acceptant plusieurs paramtres, mme s'il y a plusieurs fichiers dans cette liste. Ainsi, la commande suivante : ls *txt Permet de lister tous les fichiers dont le nom se termine par txt . Il ne peut videment pas y avoir d'ambigut dans ce cas. Si on doit passer un paramtre comprenant l'un des caractres gnriques interprts par le shell une commande particulire, on devra prfixer les caractres gnriques d'un caractre d'chappement pour signaler au shell qu'il ne doit pas l'interprter. Ce caractre d'chappement est la barre oblique inverse ( \ ). Il est galement possible de passer les paramtres entre guillements " , car le shell n'interprte pas les caractres gnriques

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

47

M. Elie Degny Raphael

dans les chanes de caractres. Par exemple, pour crer un rpertoire *, on utilisera la commande suivante : mkdir \* Oprations de base sur les fichiers Vous aurez sans doute afficher le contenu d'un fichier. Pour cela, la commande la plus approprie est certainement la commande less : less fichier Cette commande affiche le contenu du fichier et vous permet de le faire dfiler avec les flches du curseur. Lorsque vous dsirez terminer la visualisation, il suffit de taper la touche q (pour quitter less). Pour information, le nom de la commande less provient d'un trait d'humour sur une commande Unix plus classique, la commande more. Cette commande effectue peu prs le mme travail que less, mais elle n'affiche le texte que page par page. Pour passer la page suivante, il faut appuyer sur la barre d'espace. Quant l'origine du nom de la commande more, c'est qu'elle affiche le mot more au bas de l'cran pour indiquer qu'il y a encore du texte visualiser, et qu'il faut appuyer sur la barre d'espace pour lire la suite. La commande less permet galement d'effectuer une recherche dans le fichier en cours d'dition. Pour cela, il suffit de taper une commande de recherche de less. Cette commande commence par une barre oblique, suivie du texte chercher. Par exemple, pour rechercher la chane de caractres local dans un fichier en cours de visualisation avec less, il suffit de taper : /local Lorsque vous voudrez rechercher l'occurrence suivante du motif de recherche, vous pourrez appuyer sur la touche n (pour Next en anglais). Pour rechercher l'occurrence prcdente, il suffit de taper la touche N (en majuscule, cette fois). Il est encore plus probable que vous aurez diter un fichier. Cette opration peut se faire relativement facilement grce un diteur simplifi, vi. Cet diteur n'est pas franchement ce qui se fait de plus convivial, cependant, il existe sur toutes les platesformes Unix d'une part, et il est suffisamment lger pour pouvoir fonctionner sur un systme minimal. Il est donc recommand de savoir se servir de vi, ne serait-ce que dans le cas o votre systme ne serait pas compltement fonctionnel. En clair, quand tout va mal, on peut compter sur vi ! vi sera dcrit plus loin dans la la section intitule vi, l'diteur de fichiers de base, car il dispose d'un grand nombre de commandes et il ne serait pas opportun de les dcrire ici. En gnral, la cration d'un fichier se fait avec vi, bien que d'autres commandes puissent crer des fichiers. En revanche, pour supprimer un fichier, il n'existe qu'une seule commande :
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 48

M. Elie Degny Raphael

rm chemin O chemin est le chemin complet permettant d'accder au fichier supprimer. Il est possible de spcifier plusieurs fichiers la commande rm, dans ce cas, ils seront tous supprims. rm est galement capable de supprimer tous les fichiers d'un rpertoire, ainsi que ses sous-rpertoires. Dans ce cas, elle dtruit toute une branche de l'arborescence du systme de fichiers. Pour cela, il suffit d'utiliser l'option -r (pour rcursif ) avant le chemin du rpertoire supprimer. Attention ! : La commande rm ne demande aucune confirmation avant de supprimer les fichiers ! D'autre part, les fichiers supprims sont irrmdiablement perdus (il n'y a pas de commande undelete ou autre commande similaire). Vrifiez donc bien ce que vous avez tap avant de valider une commande rm (surtout si vous tes sous le compte root). La copie d'un fichier se fait avec la commande cp, dont la syntaxe est donne cidessous : cp fichiers rpertoire O fichiers est la liste des fichiers copier, et rpertoire est le rpertoire destination dans lequel ces fichiers doivent tre copis. Enfin, le dplacement des fichiers se fait avec la commande mv, comme indiqu cidessous : mv source destination O source est le nom du fichier source et destination est le nom du rpertoire destination. Notez que mv est une commande trs puissante, puisqu'elle permet galement de dplacer des rpertoires et de renommer des fichiers et des rpertoires. Pour renommer un fichier ou un rpertoire, il suffit d'indiquer le nouveau nom de ce fichier ou de ce rpertoire la place de destination. Autres commandes utiles Pour terminer ce petit cours d'Unix, nous allons dcrire quelques-unes des autres commandes d'Unix parmi les plus utiles. Elles sont utilises moins souvent que les commandes vues prcdemment, mais vous apprendrez certainement trs vite vous en servir, car elles sont trs pratiques. Passage en mode superviseur Si vous tes prudent, vous avez sans doute cr un compte utilisateur juste aprs avoir install votre systme de base, et vous ne travaillez plus que sous ce compte. Cette technique est prudente, cependant, elle pose un problme vident : vous ne pouvez pas faire votre travail d'administrateur sous ce compte. C'est pour cela que la commande su a t cre. Cette commande permet de changer son identit dans le systme :

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

49

M. Elie Degny Raphael

su [utilisateur] O utilisateur est l'utilisateur dont on veut prendre l'identit. Par dfaut, si aucun utilisateur n'est spcifi, le changement d'identit se fait vers l'utilisateur root. Bien entendu, il va de soi que la commande sue demande le mot de passe avant d'obtemprer... Changement des droits des fichiers, du propritaire et du groupe La commande permettant de changer les droits d'un fichier ou d'un rpertoire est la suivante : chmod droits fichier O fichier est le fichier ou le rpertoire dont on dsire changer les droits, et droits est une chane de caractres permettant de spcifier les nouveaux droits. Cette chane commence par une lettre indiquant le groupe d'utilisateurs auquel le droit doit tre appliqu, d'un caractre + ou - indiquant si le droit doit tre ajout ou supprim, et d'une lettre indiquant le droit que l'on est en train de manipuler. La premire lettre peut prendre les valeurs suivantes :

u pour le champ utilisateur , c'est--dire le propritaire du fichier ; g pour le champ groupe , c'est--dire tous les utilisateurs faisant partie du groupe du fichier ; o pour le champ other , c'est--dire pour tous les utilisateurs qui ne sont ni propritaires, ni membres du groupe du fichier ; a pour tous les champs sans distinction, donc pour tous les utilisateurs.

Les droits sont identifis par l'un des caractres suivants :


r pour le droit de lecture ; w pour le droit d'criture ; x pour le droit d'excution ; s pour les bits setuid et setguid ; t pour le bit sticky.

Ainsi, la commande suivante : chmod g+w toto Permet de donner le droit d'criture sur le fichier toto tous les membres du groupe auquel ce fichier appartient. Les droits d'accs ont dj t dcrits en dtail ci-dessus dans le chapitre concernant les notions gnrales sur Unix. Le changement de propritaire d'un fichier ne peut tre ralis que par l'administrateur du systme. Cette opration se fait l'aide de la commande suivante : chown utilisateur fichier
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 50

M. Elie Degny Raphael

O utilisateur est le nom de l'utilisateur qui doit devenir propritaire du fichier, et fichier est le fichier devant changer de propritaire. Le changement de groupe peut tre ralis par n'importe quel utilisateur, mais on ne peut donner un fichier qu' l'un des groupes dont on est membre. Cette opration se fait l'aide de la commande suivante : chgrp groupe fichier O groupe est le nom du groupe qui doit tre affect au fichier, et fichier est le fichier devant changer de groupe. Bien entendu, l'administrateur peut affecter un fichier n'importe quel groupe d'utilisateur. Gestion des liens La commande pour crer un lien est ln. Cette commande utilise la syntaxe suivante : ln [-s] source lien O source est le nom du fichier ou du rpertoire source auquel le lien doit se rfrer, et lien est le nom du lien. L'option -s permet de crer un lien symbolique, par dfaut, ce sont des liens physiques qui sont crs. Rappelons qu'il est impossible de crer des liens physiques sur des rpertoires. Lorsqu'on liste des fichiers, on peut demander l'affichage d'informations complmentaires sur les liens. Pour cela, il suffit d'utiliser l'option -l de la commande ls. Ainsi, la commande suivante : ls -l lien Permet d'afficher les informations sur le lien lien, et en particulier le fichier ou le rpertoire cible de ce lien. La suppression des liens se fait exactement comme celle d'un fichier. La destination n'est pas affecte en gnral, sauf si le lien est un lien physique et constitue la dernire rfrence au fichier point par le lien. Les liens symboliques n'ont pas de droits d'accs ni de propritaires, les informations de scurit de la cible sont utilises lorsqu'on accde au lien. Montage et dmontage d'un systme de fichiers Comme il l'a t vu dans le chapitre expliquant les gnralits sur Unix, les systmes de fichiers ne sont pas accessibles directement. Ils doivent subir une opration que l'on nomme le montage. De la mme manire, il faut penser dmonter les systmes de fichiers avant d'teindre la machine ou de retirer le support dans le cas des supports amovibles, faute de quoi les donnes non crites seront dfinitivement perdues. Heureusement, il y a la possibilit d'enregistrer les systmes de fichiers les plus utiliss pour que le systme les monte et les dmonte automatiquement au dmarrage et l'arrt
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 51

M. Elie Degny Raphael

du systme. Cependant, cet automatisme n'est disponible que pour les systmes de fichiers fixes, et il est ncessaire de monter soi-mme les systmes de fichiers sur disques amovibles (comme, par exemple, les disquettes et les CD-ROM). L'opration permettant de monter un disque suit la syntaxe suivante : mount [-t type] fichier base O fichier est le fichier contenant le systme de fichiers monter (en gnral, il s'agit d'un fichier spcial de priphrique, mais ce peut galement tre une image disque), et base est le point de montage, c'est--dire le rpertoire partir duquel le systme de fichiers doit tre accd. L'option -t permet d'indiquer le type du systme de fichiers, mais en gnral, il n'est pas ncessaire de le prciser. En effet, le noyau sait reconnatre la plupart des systmes de fichiers automatiquement. Pour information, les systmes de fichiers les plus utiliss sont les suivants :

ext2 pour les systmes de fichiers EXT2FS ; iso9660 pour les CD-ROM (qu'ils soient avec extensions Joliet ou Rock Ridge ou en mode ISO 9660 pur) ; msdos pour les systmes de fichiers FAT normaux ; vfat pour les systmes de fichiers FAT32 ; umsdos pour les systmes de fichiers UMSDOS (extension au DOS pour permettre les fonctionnalits des systmes de fichiers Unix).

Si le rpertoire de montage n'est pas vide, les fichiers qui s'y trouvent sont masqus par le systme de fichiers mont. Il est donc recommand de ne monter les systmes de fichiers que dans des rpertoires vides. La commande permettant de dmonter un systme de fichiers est beaucoup plus simple : umount fichier Ou : umount base O fichier est le fichier contenant le systme de fichiers dmonter, et base est le rpertoire dans lequel ce systme de fichiers est mont. On peut utiliser l'un ou l'autre de ces paramtres, la commande umount se dbrouillera pour retrouver l'autre automatiquement. On notera qu'il est impossible de dmonter un systme de fichiers qui est en cours d'utilisation par quelqu'un. En particulier, il ne faut pas tre dans le rpertoire servant de point de montage pour pouvoir dmonter un systme de fichiers, car dans ce cas on est en train de l'utiliser. La commande mount peut prendre diverses options pour le montage des systmes de fichiers. Par exemple, elle permet de monter des systmes de fichiers en lecture seule, ou de monter des systmes de fichiers placs dans des images disques. Il est possible d'enregistrer des options par dfaut dans le fichier de configuration /etc/fstab. Ce fichier contient, entre autre, le rpertoire de montage, le type du systme de fichiers et le fichier de priphrique utiliser pour ce systme de fichiers. De cette manire, il est possible d'utiliser la commande mount de manire simplifie, en ne prcisant que le
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 52

M. Elie Degny Raphael

rpertoire servant de point de montage ou le fichier spcial de priphrique. Le fichier /etc/fstab sera dcrit plus en dtail plus loin. Recherche de fichiers Il vous sera sans doute ncessaire de rechercher des fichiers selon un critre donn dans toute une arborescence de rpertoires. Pour cela, vous utiliserez la commande find. Cette commande est trs puissante, mais dispose d'une syntaxe assez complique : find rpertoire -name nom -print O rpertoire est le rpertoire partir duquel la recherche doit commencer et nom est le nom du fichier rechercher. Ce nom peut contenir des caractres gnriques du shell, mais dans ce cas doit tre plac entre guillemets afin d'viter que ce dernier ne les interprte. find accepte d'autre options de recherche que le nom (partie -name de la ligne de commande), et peut effectuer d'autres actions que l'affichage du chemin des fichier trouvs (partie -print ). Consultez les pages de manuel pour plus d'information ce sujet. Recherche d'un texte dans un fichier La recherche d'une chane de caractres dans un ou plusieurs fichiers peut se faire l'aide de la commande grep. Cette commande prend en premier paramtre le texte rechercher, puis la liste des fichiers dans lequel ce texte doit tre trouv : grep texte fichiers Le texte peut tre plac entre guillemets si ncessaire (en particulier, s'il contient des espaces ou des caractres interprts par le shell, comme * et ?). grep accepte un grand nombre d'options, qui ne seront pas dcrites ici. Consulter les pages de manuel pour plus d'information ce sujet. Remplacement de texte dans les fichiers Le remplacement de texte dans un fichier peut tre effectu de manire automatique, c'est--dire sans avoir ouvrir le fichier dans un diteur, grce la commande sed (abrviation de l'anglais Stream Editor ). Cette commande est en fait un utilitaire de manipulation de flux de donnes, qui permet d'effectuer des traitements plus gnraux que le simple remplacement de texte, mais c'est malgr tout pour cette opration qu'elle reste la plus utilise. sed peut travailler la vole sur un flux de donnes textuelles, que ce flux provienne de l'entre standard ou d'un fichier. Par dfaut, il crit le rsultat de son travail sur le flux de sortie standard. Les oprations qu'il doit effectuer sur le flux de donnes peuvent tre spcifies de diffrentes manires, soit en fournissant un fichier script l'aide de l'option

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

53

M. Elie Degny Raphael

-f, soit directement sur la ligne de commande, avec l'option -e. La syntaxe utilise pour appeler sed est donc typiquement la suivante : sed -e "commandes" fichier > rsultat Ou : sed -f script fichier > rsultat O fichier est le fichier sur lequel sed doit travailler, et rsultat est le fichier devant recevoir le flux de donnes modifies. Notez que cette commande utilise une redirection du flux de sortie standard dans un fichier. Ce type de redirection sera dcrit en dtail dans la la section intitule Redirections. sed peut effectuer un grand nombre de commandes diffrentes et est rellement un outil trs puissant. Cependant, nous ne verrons ici que la commande qui permet d'effectuer un remplacement de texte. Cette commande utilise la syntaxe suivante : s/texte/remplacement/options O texte est le texte rechercher, remplacement est le texte de remplacement, et options est un jeu d'options exprimant la manire dont le remplacement doit tre fait. Les options sont spcifies l'aide de simple caractres, les plus utiles tant sans doute g, qui permet d'effectuer un remplacement global (au lieu de ne remplacer que la premire occurrence du texte rencontre), et I, qui permet d'effectuer une recherche sans tenir compte de la casse des caractres. Par exemple, la ligne de commande suivante : sed -e "s/bonjour/bonsoir/g" test.txt > modif.txt permet de remplacer toutes les occurrences de la chane de caractres bonjour par la chane de caractres bonsoir dans le texte du fichier test.txt, et d'enregistrer le rsultat dans le fichier modif.txt. Note : Il ne faut pas utiliser le mme nom de fichier pour le fichier source et le fichier de rsultat. En effet, sed lit le fichier source la vole, et effectuer une redirection sur ce fichier pendant son traitement provoquerait la perte irrmdiable de son contenu. Pour rsoudre ce problme, on pourra utiliser un nom de fichier temporaire, et craser le fichier original par ce fichier une fois la commande sed excute. Compression et dcompression des fichiers Linux fournit un grand nombre de programmes de compression de fichiers. Le meilleur est sans doute bzip2, et le plus compatible sans doute compress. Cependant, le plus utilis et le plus courant, surtout pour la distribution des sources, reste incontestablement gzip. Nous allons dcrire brivement comment comprimer et dcomprimer des fichiers avec gzip et bzip2 dans ce paragraphe. La compression d'un fichier se fait de manire lmentaire : gzip fichier
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 54

M. Elie Degny Raphael

O fichier est le fichier comprimer. Aprs avoir effectu son travail, gzip renomme le fichier comprim en fichier.gz . La compression d'un fichier avec bzip2 utilise exactement la mme syntaxe, ceci prs qu'il faut remplacer gzip par bzip2. De plus, le nom du fichier comprim porte l'extension .bz2 au lieu de .gz. Le fichier obtenu est donc nomm fichier.bz2 . La dcompression d'un fichier se fait l'aide de la commande suivante : gunzip fichier.gz Ou bunzip2 fichier.bz2 Selon qu'il a t comprim avec gzip ou bzip2. Aprs dcompression, l'extension complmentaire .gz ou .bz2 est supprime du nom de fichier. Archivage de fichiers L'archivage de fichiers se fait classiquement sous Unix avec le programme tar (abrviation de l'anglais Tape ARchiver ). Ce programme permet simplement de regrouper tous les fichiers qu'il doit archiver dans un seul fichier structur en blocs. Il a t videmment crit pour permettre des archivages sur bandes ou sur tout autre priphrique de stockage de masse, mais il est galement utilis pour crer des fichiers archives contenant toute une arborescence. La syntaxe de tar est trs simple : tar options archive [fichiers] O options sont les options qui indiquent l'opration effectuer et comment elle doit tre ralise, archive est le nom de l'archive qui doit tre cre ou le nom du fichier de priphrique du priphrique d'archivage, et fichiers est la liste des fichiers archiver. Cette liste ne doit pas tre prcise s'il s'agit d'une restauration. Les options de tar que vous utiliserez le plus souvent sont les suivantes :

cvf pour crer une archive ; tvf pour lister le contenu d'une archive ; xvf pour restaurer le contenu d'une archive.

Par exemple, pour archiver le contenu du rpertoire courant dans le fichier archive.tar, vous utiliserez la ligne de commande suivante : tar cvf archive.tar * De plus, pour extraire le contenu de l'archive archive.tar, vous utiliserez la commande suivante : tar xvf archive.tar

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

55

M. Elie Degny Raphael

Note : L'option z permet d'effectuer une compression des donnes archives ou une dcompression des donnes restaures la vole. tar utilise gzip et gunzip pour la compression et la dcompression. De mme, l'option y permet de comprimer l'archive la vole avec bzip2. Si l'on utilise un signe ngatif ('-') la place du nom de l'archive, tar enverra le rsultat de la compression vers la sortie standard. Cela peut tre utilis pour des oprations avances. Un exemple sera donn dans la la section intitule Redirections. Gestion des paquetages La plupart des distributions actuelles utilisent le format de fichier rpm ( Redhat Package Manager ) pour leurs distributions. Ce format de fichier a t introduit par la distribution Redhat, mais a t licenci sous la licence GNU, ce qui a permis aux autres distributions de l'utiliser. Ces fichiers encapsulent tous les fichiers des paquetages, ainsi que des informations permettant de grer les dpendances entre les paquetages, leurs versions, la manire de les installer dans le systme, de les y supprimer ou de les mettre jour facilement. Les fichiers rpm peuvent tre manipuls l'aide du programme rpm. Il est probable que le programme d'installation de votre distribution vous vite d'avoir manipuler cet outil vous-mme. Cependant, les principales commandes de rpm seront dcrites ici, afin que vous puissiez l'utiliser en cas de besoin. Le programme rpm utilise une syntaxe trs classique : rpm options [paquetage] Les options indiquent les oprations effectuer. La premire option est bien entendu l'option -i, qui permet l'installation d'un paquetage : rpm -i paquetage La mise jour d'un paquetage dj install se fait l'aide de l'option -U : rpm -U paquetage La suppression d'un paquetage se fait l'aide de l'option -e : rpm -e paquetage La commande permettant d'obtenir les informations (auteur, description, version) sur un paquetage contenu dans un fichier rpm est la suivante : rpm -qi -p paquetage

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

56

M. Elie Degny Raphael

Enfin, la commande pour lister tous les fichiers d'un paquetage contenu dans un fichier rpm est la suivante : rpm -ql -p paquetage Cette commande affiche les chemins complets, ce qui permet de savoir dans quel rpertoire chaque fichier sera install. Il existe beaucoup d'autres options disponibles. Cependant, leur description dpasserait le cadre de ce document. Vous pouvez toujours consulter la page de manuel rpm si vous dsirez plus d'informations vi, l'diteur de fichiers de base Vous serez oblig, lorsque vous effectuerez la configuration de votre systme, d'diter les fichiers de configuration (classiquement, ces fichiers sont placs dans le rpertoire /etc/). Ces modifications peuvent tre ralises avec n'importe quel diteur a priori, et il est mme conseill d'utiliser votre diteur favori. Cependant, il faut savoir se servir de vi, parce que c'est le seul diteur qui sera toujours install, et qui fonctionnera en toutes circonstances. Le prix payer pour cette fiabilit est un nombre restreint de fonctionnalits. En fait, vi est trs puissant, mais il ne s'embarrasse pas de superflu, ce qui en fait certainement l'diteur le moins convivial du monde. Ce paragraphe vous donnera la description des principales commandes de vi, qui ne sera pas exhaustive car vous ne l'utiliserez certainement pas dans la vie courante. Pour diter un fichier avec vi, il suffit de passer le nom de ce fichier en ligne de commande : vi fichier Il est possible de passer plusieurs fichiers dans la ligne de commande, et vi les ditera les uns aprs les autres. Cependant, il faut savoir que vi ne permet de travailler que sur deux fichiers la fois, et qu'il n'est pas facile de passer de l'un l'autre. Par consquent, il est conseill de n'diter qu'un seul fichier la fois. vi est un diteur qui fonctionne sur plusieurs modes diffrents : le mode d'dition, dans lequel le texte peut tre modifi, le mode de commande, dans lequel des commandes particulires peuvent tre donnes, et le mode de visualisation, dans lequel le fichier ne peut tre que visualis. Par dfaut, vi est en mode de visualisation, et il faut utiliser une commande d'dition pour passer en mode d'dition. Quand on est en mode d'dition, on peut revenir au mode de visualisation en appuyant sur la touche Echap (ou Esc, selon votre clavier). Cette touche a aussi une signification dans le mode de commande : elle annule la saisie de la commande en cours. Par consquent, lorsqu'on est perdu et que l'on ne sait plus dans quel mode on se trouve (ce qui arrive fatalement un moment donn), il suffit d'appuyer sur cette touche. On sait alors qu'on se trouve en mode de visualisation.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

57

M. Elie Degny Raphael

Le dplacement du curseur en mode de visualisation se fait avec les touches du curseur. Cependant, si votre clavier n'est pas bien configur, ces touches peuvent ne pas fonctionner. C'est pour cette raison que vi fournit un jeu de touches alternatif :

la touche h permet de dplacer le curseur vers la gauche ; la touche l permet de dplacer le curseur vers la droite ; la touche j permet de dplacer le curseur vers le bas ; la touche k permet de dplacer le curseur vers le haut.

Le curseur est bien entendu dplac automatiquement lors de la saisie du texte en mode d'dition. Le passage en mode d'dition peut se faire avec l'une des commandes suivantes : la touche i permet de passer en mode d'insertion (le texte saisi s'insre avant le caractre sur lequel le curseur est positionn) ; la touche a permet de passer en mode d'ajout de caractres (le texte saisi s'insre aprs le caractre sur lequel le curseur est positionn) ; la touche A permet de placer le curseur en fin de ligne et de passer en mode d'ajout de caractres ; la touche o permet de crer une nouvelle ligne aprs la ligne o se trouve le curseur et de passer en mode d'dition sur cette nouvelle ligne ; la touche O permet de crer une nouvelle ligne avant la ligne o se trouve le curseur et de passer en mode d'dition sur cette nouvelle ligne.

La cration d'une nouvelle ligne peut donc tre faite avec les commandes o et O, mais il est possible de couper une ligne en deux, ou de passer la ligne simplement en tapant sur la touche Entre en mode d'dition. Inversement, la commande J permet de supprimer un saut de ligne en fin de ligne et de placer ainsi le texte de la ligne suivante la suite du texte de la ligne courante. La suppression d'un caractre se fait avec la touche Suppr (ou Del, selon le clavier) ou la touche de retour arrire (dite touche Backspace). Cependant, encore une fois, vi fournit un jeu de touches alternatif permettant de travailler avec un clavier mal configur :

la commande x permet d'effacer le caractre situ sous le curseur ; la commande dd permet d'effacer la ligne o se trouve le curseur ; la commande dw permet d'effacer le mot o se trouve le curseur.

Le texte qui a t supprim est plac dans ce que l'on appelle un buffer. Le contenu du buffer peut tre insr n'importe quel endroit du fichier grce la commande p. Ainsi, il est possible de faire un couper/coller en effaant la ligne dsire et en appuyant sur la touche p l'emplacement destination. La commande u permet d'annuler la dernire opration effectue, et la commande U permet de la r-excuter.
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 58

M. Elie Degny Raphael

La commande yy permet de copier la ligne courante dans le buffer. Cette commande est donc utilise pour effectuer des copier/coller, en combinaison avec la commande p. Les commandes de vi peuvent tre rptes un certain nombre de fois, en tapant un nombre avant de les taper. Ainsi, pour supprimer 3 lignes, il suffira de taper la commande suivante : 3dd Dans ce cas, ces trois lignes sont galement places dans le buffer. La mme technique peut tre utilise pour copier/coller plusieurs lignes en une seule opration. Enfin, vi accepte un certain nombre de commandes gnrales lorsqu'il est en mode de commande. Ce mode est activ ds que l'on appuie sur la touche deux points (':') dans le mode de visualisation. Les commandes gnrales les plus utiles sont dcrites cidessous : la commande :q permet de quitter vi. Si le fichier en cours d'dition a t modifi, vi refusera de se terminer sans l'enregistrer. Si l'on veut malgr tout sortir sans l'enregistrer, il faudra utiliser la commande :q! ; la commande :w permet d'enregistrer le fichier courant. Pour enregistrer ce fichier et quitter vi, la commande :wq peut tre utilise ; la commande :help sujet permet d'obtenir de l'aide sur le sujet sujet ; la commande :!commande permet d'excuter la commande du shell commande . Cela peut tre pratique pour effectuer une opration dans le shell sans avoir quitter vi. Cela dit, il sera sans doute plus efficace d'utiliser un autre terminal virtuel.

Comme vous l'avez constat, vi est rellement une horreur utiliser. Malgr tout, il permet de faire tout ce dont on a besoin pour diter un fichier. Il dispose mme de puissantes fonctionnalits que mme les traitements de texte volus ne sont pas capables de faire. Elles ne seront cependant pas dcrites ici, car cela dpasserait le cadre de la simple installation de Linux. Vous pourrez toujours consulter la page de manuel de vi pour de plus amples informations. Utilisation du shell bash Le shell est l'environnement utilisateur en mode texte sous Linux. C'est le programme qui se charge de lire et d'excuter les commandes que l'utilisateur saisit. Classiquement, le shell est utilis de manire interactive, c'est--dire que l'utilisateur dialogue avec le systme par l'intermdiaire du shell. Il saisit les commandes, et le shell les excute et affiche les rsultats. Le shell le plus couramment utilis sous Linux est sans aucun doute bash. En tout cas, c'est le shell par dfaut que la plupart des distributions utilisent. Il est donc conseill de connatre un petit peu ce que ce shell est capable de raliser, et comment. Le shell bash est une volution du shell sh, utilis par quasiment tous les

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

59

M. Elie Degny Raphael

systmes Unix. Son nom provient de l'abrviation de l'anglais Bourne Again SHell , ce qui signifie qu'il s'agit effectivement d'une nouvelle variante du shell sh. Au temps des interfaces graphiques complexes et sophistiques, il peut paratre archaque de vouloir encore utiliser des lignes de commandes pour utiliser un ordinateur. C'est en partie vrai, mais il faut savoir que les shells Unix sont extrmement puissants et que les interfaces graphiques ne permettent toujours pas, mme l'heure actuelle, de raliser toutes les tches faisables avec un shell. D'autre part, il est souvent plus efficace de taper une simple commande dans un shell que de rechercher un outil graphique et de parcourir les divers menus, puis de choisir les options de la commande dsire avant de valider. Des ergonomes ont dmontr, et des graphistes du monde entier le confirmeront, que la souris n'est pas le priphrique d'entre le plus prcis et le plus facile utiliser pour manipuler les objets de l'environnement utilisateur. La plupart des programmeurs utilisent encore bon nombre de ce qu'on appelle des raccourcis clavier pour excuter des commandes, mme dans les environnements utilisateurs graphiques par excellence. Quoi qu'il en soit, le shell est bien plus qu'un interprteur de commande. Il s'agit rellement d'un environnement de programmation, permettant de dfinir des variables, des fonctions, des instructions complexes et des programmes complets, que l'on appelle des scripts shell. Les sections suivantes ont pour objectif de vous montrer les principales caractristiques du shell, sans pour autant prtendre vous apprendre la programmation des scripts shell. La lecture de cette section pourra donc tre diffre dans un premier temps. Toutefois, elle pourra tre bnfique ceux qui dsirent comprendre les scripts de configuration utiliss par leur distribution, ou tout simplement ceux qui sont curieux de nature. Contrle des processus Un des avantages des lignes de commandes par rapport aux environnements graphiques est la facilit avec laquelle elles permettent de contrler les processus. Ce paragraphe dcrit les principales mthodes pour lancer et arrter un processus, ainsi que pour lui fournir les donnes sur lesquelles il doit travailler et rcuprer ses rsultats. Lancement d'un programme en arrire-plan Le lancement normal d'un programme se fait en tapant sa ligne de commande et en appuyant sur la touche de validation. Le shell ne rendra pas la main et ne permettra pas de lancer un autre programme tant que le processus en cours ne sera pas termin. Cependant, vous pouvez fort bien dsirer lancer en arrire-plan une commande dont la dure d'excution peut tre trs longue et continuer travailler. Aprs tout, Linux est multitche... Eh bien, rien de plus facile ! Pour lancer une commande en arrire-plan, il faut :

s'assurer que la commande aura toutes les informations ncessaires pour travailler sans intervention de l'utilisateur (ou, autrement dit, que la commande ne soit pas interactive) ;
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 60

M. Elie Degny Raphael

ajouter une esperluette (caractre & ) la fin de la ligne de commande.

Par exemple, la commande suivante : cp /cdrom/kernel/linux-2.2.10.tar.gz . & copiera l'archive du noyau 2.2.10 du CD-ROM vers le rpertoire courant, et s'excutera en arrire-plan. Lorsqu'une commande est lance en arrire-plan, le shell affiche deux nombres qui permettront de l'identifier par la suite. Le premier nombre, indiqu entre crochets, est le numro de job du shell. Ce numro sert identifier les commandes du shell de manire unique. Un job est donc en ralit une commande du shell, simple ou complexe. Le deuxime numro est le numro de processus ( PID , pour Process IDentifier ) dans le systme du processus matre du job. Le PID est un numro unique dans le systme, qui permet d'identifier de manire unique les processus en cours. Ces deux nombres permettront de manipuler les processus, avec les commandes que l'on verra plus tard. Il ne faut pas confondre les numros de job avec les numros de processus. Premirement, un numro de job n'est unique que dans un shell donn, et n'a aucune signification au niveau du systme complet, alors que le numro de processus est attribu par le systme chaque programme en cours d'excution. Ensuite, une mme commande du shell peut lancer plusieurs processus conjointement. Dans ce cas, il y a bien videmment plusieurs numros de processus, mais un seul et unique job. Ce genre de situation se produit par exemple lors de l'utilisation d'une redirection du flux de sortie standard d'un processus vers le flux d'entre standard d'un autre processus. Le numro de processus affich par le shell lors du lancement d'une ligne de commande complexe reprsente le PID du processus matre de la commande, c'est--dire, en pratique, le dernier processus d'une srie de redirections ou le processus du shell excutant les commandes complexes. Cela signifie que dans tous les cas de configuration, ce PID est celui du processus qui contrle l'ensemble des oprations effectues par la ligne de commande. C'est donc par ce processus que l'on peut manipuler la commande complte, par exemple pour l'interrompre. Il est possible de retrouver le PID du processus matre d'une commande partir du numro de job correspondant du shell. Cela se fait simplement, en utilisant l'expressions suivante : %job O job est le numro du job dont on cherche le PID. Ainsi, dans toutes les commandes dcrites ci-dessous, le PID peut tre utilis directement, ou tre remplac par le numro du job prfix du caractre de pourcentage.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

61

M. Elie Degny Raphael

Listing des processus Il n'est pas ncessaire de retenir tous les numros de jobs et tous les PID des processus en cours d'excution. Il existe en effet des commandes permettant d'obtenir la liste des processus et des jobs. La plus simple utiliser est bien videmment la commande du shell pour obtenir la liste des jobs avec leurs lignes de commandes. Pour obtenir cette liste, il suffit de taper la commande suivante : jobs qui affiche, dans l'ordre, le numro de job, l'tat du processus correspondant, et la ligne de commande. Une autre commande, plus bas niveau, permet d'obtenir des informations plus compltes directement partir du systme. Il s'agit de la commande ps, dont la syntaxe est donne ci-dessous : ps [options] Les options les plus utiles sont sans doute x, qui permet de demander l'affichage de toutes les commandes en cours d'excution et non pas seulement les processus en cours d'excution dans le shell o la commande ps est excute, et a, qui permet d'obtenir l'affichage de toutes les commandes, pour tous les utilisateurs connects. Ces deux options peuvent tre cumules, et la commande suivante : ps ax affiche donc toutes les commandes en cours d'excution sur le systme. Les informations les plus intressantes affiches par ps sont le PID du processus, qui est donn par le premier nombre affich, et la ligne de commande, qui est la dernire information affiche. Pour plus de dtails sur la commande ps, veuillez consulter la page de manuel correspondante. Notion de signal Dans un systme Unix, tous les processus peuvent recevoir des messages, envoys soit par l'utilisateur, soit par un autre processus, soit par le systme. Ces messages sont appels signaux. La plupart des signaux sont envoys par le systme pour indiquer au processus qu'il a fait une faute et qu'il va tre termin. Cependant, ce n'est pas toujours le cas : certains signaux sont envoys uniquement dans le cadre de la communication entre les processus, et certains autres ne peuvent mme pas tre capts par le processus et sont traits directement par le systme. Nous n'entrerons pas en dtail dans la gestion des signaux ici, car cela nous emmnerait trop loin. Cependant, la manire d'envoyer un signal un processus partir du shell sera dcrite. L'envoi d'un signal se fait avec la commande kill, avec la syntaxe suivante : kill [-signal] PID
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 62

M. Elie Degny Raphael

O signal est une option qui permet de prciser le signal qui doit tre envoy, et PID est le numro du processus qui doit le recevoir. Les numros de signaux les plus importants sont dcrits dans le tableau ci-dessous : Tableau 5-2. Principaux signaux Unix Numro signal 15 9 19 18 de Signification Signal de terminaison de processus. Signal de destruction inconditionnelle de processus. Signal de suspension de processus. Signal de reprise d'excution d'un processus suspendu.

Lorsqu'aucun signal n'est spcifi, le signal 15 de terminaison est utilis par dfaut. Ce signal demande au processus en cours d'excution de se terminer immdiatement. Il peut tre capt par le processus, pour lui donner une chance d'enregistrer les donnes sur lesquelles il travaillait et de librer les ressources qu'il utilisait. Pour certains processus, cela ne fonctionne pas, et il faut utiliser le signal de destruction du processus l'aide de la commande suivante : kill -9 PID Attention cependant cette commande : le processus est immdiatement dtruit, sans autre forme de procs. Il peut donc s'ensuivre une perte de donnes, n'en abusez donc pas trop. Arrt d'un processus Tout processus lanc en ligne de commande peut tre arrt immdiatement sous Linux. Pour cela, deux mthodes sont disponibles. La premire consiste taper la combinaison de touches CTRL+C lorsque le processus est en cours d'excution interactive (c'est-dire lorsqu'il n'a pas t lanc en arrire-plan). S'il a t lanc en arrire-plan, on peut soit le ramener en avant-plan (avec la commande fg, que l'on verra plus loin) avant d'utiliser CTRL+C, soit lui envoyer le signal de terminaison l'aide de la commande kill vue prcdemment. Dans le cas d'une ligne de commande, le signal de terminaison est transmis au processus matre de la ligne de commande, et est ensuite propag l'ensemble des processus fils de ce processus. Cela signifie que tous les processus invoqus dans le cadre de cette commande sont galement arrts. Gel d'un processus Il est possible de geler un processus en cours d'excution, c'est--dire de le suspendre, sans pour autant l'arrter dfinitivement. Cela peut tre utilis pour librer un peu les capacits de calcul, lorsque ce processus consomme trop de ressources par exemple. Pour cela, deux mthodes sont possibles :

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

63

M. Elie Degny Raphael


soit on utilise la combinaison de touches CTRL+Z, lorsque le processus est en avant-plan ; soit on envoie le signal 19 au processus (signal STOP ) l'aide de la commande kill.

La premire mthode est recommande pour les processus lancs par une ligne de commande complexe, car le signal STOP est envoy au processus matre de la commande, et est propag l'ensemble des processus fils de ce processus. Cela signifie que tous les processus invoqus dans le cadre de cette commande sont galement gels. La deuxime mthode est plus bas niveau, et permet de geler n'importe quel processus que l'on a lanc. Relancement d'un processus Un processus suspendu peut tre relanc soit en avant-plan, soit en arrire-plan. Pour relancer un processus en avant-plan, il faut utiliser la commande suivante : fg [PID] O PID est le PID du processus relancer en avant-plan. Si ce paramtre n'est pas spcifi, le dernier processus stopp sera relanc en arrire-plan. fg est l'abrviation de l'anglais foreground , ce qui signifie avant-plan . Il faut attendre que ce processus se termine pour entrer de nouvelles commandes. Par consquent, on ne peut lancer en avant-plan qu'un seul processus. De mme, pour lancer un processus en arrire-plan, il faut utiliser la commande bg, qui est l'abrviation de l'anglais background . Cette commande s'utilise de la mme manire que la commande fg : bg [PID] Le relancement d'un processus suspendu peut galement se faire en lui envoyant le signal 18 l'aide de la commande kill. Redirections Pour pouvoir lancer un programme en arrire-plan, il est ncessaire qu'il n'ait pas besoin de demander des donnes l'utilisateur. En effet, lorsqu'il est en arrire-plan, la saisie de ces donnes ne peut pas se faire, puisque le shell les interprterait comme une nouvelle commande. De plus, tout affichage en provenance d'une commande en arrire-plan apparat sur la console tel quel, et risque de se mlanger avec l'affichage des autres programmes ou mme avec la commande en cours d'dition. C'est pour rsoudre ces problmes que le mcanisme des redirections a t introduit. Principe de base Le mcanisme des redirections a pour but de transfrer les donnes provenant d'un flux vers les donnes d'un autre flux. Il se base sur la notion de descripteur de fichier,
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 64

M. Elie Degny Raphael

utilise par la plupart des systmes Unix. Un descripteur de fichier est un numro utilis par les programmes pour identifier les fichiers ouverts. Les descripteurs 0, 1 et 2 sont respectivement affects d'office au flux d'entre standard (nomm stdin ), au flux de sortie standard ( stdout ) et au flux d'erreur standard ( stderr ), qui en gnral apparat galement sur l'cran. Les descripteurs de fichiers d'un processus sont gnralement hrits par tous ses processus fils. Cela signifie que, lors de leur lancement, ces processus peuvent utiliser tous les descripteurs de fichiers mis leur disposition par leur pre. Dans le cas des lignes de commande, les processus fils sont les processus lancs par le shell, et les descripteurs de fichiers hrits sont donc les descripteurs de fichiers du shell. C'est de cette manire que le shell peut manipuler les descripteurs de fichiers des processus qu'il lance : il effectue d'abord les redirections sur ses propres descripteurs de fichiers, puis il lance le processus fils avec ces redirections actives. Le mcanisme est donc compltement transparent pour les processus fils. Le mcanisme des redirections permet en fait d'injecter dans un descripteur de fichier des donnes provenant d'un autre descripteur ou d'un fichier identifi par son nom, et d'envoyer les donnes provenant d'un descripteur de fichier dans un autre descripteur ou dans un fichier identifi par son nom. Si l'on utilise les descripteurs de fichiers des flux d'entre / sortie standards, on peut excuter n'importe quelle commande interactive en arrire-plan. Redirections de donnes en entre Pour injecter des donnes provenant d'un fichier dans le descripteur de fichier n d'un processus, il suffit d'ajouter la ligne suivante la fin de la commande permettant de lancer ce processus : n<fichier O fichier est le nom du fichier dont les donnes doivent tre injectes dans le descripteur n. Dans cette syntaxe, le descripteur peut ne pas tre prcis. Dans ce cas, le shell utilisera le descripteur 0, et les donnes du fichier seront donc envoyes dans le flux d'entre standard du processus. Par exemple, supposons que l'on dsire utiliser une commande nomme search , et que cette commande demande un certain nombre d'informations lors de son excution. Si l'on sait l'avance les rponses aux questions qui vont tre poses, on peut crer un fichier de rponse (nomm par exemple answer.txt et alimenter la commande search avec ce fichier. Pour cela, on utilisera la ligne de commande suivante : search < answer.txt Il est galement possible d'injecter des donnes provenant d'un autre descripteur de fichier dans un descripteur de fichier. On utilisera pour cela la syntaxe suivante : n<&s O n est toujours le descripteur de fichier du processus excuter dans lequel les donnes doivent tre injectes, et s est un descripteur de fichier contenant les donnes
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 65

M. Elie Degny Raphael

sources injecter. Par dfaut, si n n'est pas prcis, le flux d'entre standard du processus sera utilis. Redirection de donnes en sortie Inversement, il est possible d'enregistrer les donnes crites par un processus dans un de ses descripteurs de fichier dans un fichier. Pour cela, on utilisera l'oprateur '>' avec la syntaxe suivante : n>fichier O n est le numro du descripteur de fichier du processus enregistrer, et fichier est le nom du fichier dans lequel les donnes doivent tre stockes. Par dfaut, si n n'est pas spcifi, le descripteur du flux de sortie standard sera utilis (descripteur 1). Par exemple, si la commande prcdente affiche des rsultats et que l'on dsire les stocker dans le fichier result.txt , on utilisera la ligne de commande suivante : search < answer.txt >result.txt Notez que cette commande dtruira systmatiquement le contenu du fichier result.txt et le remplacera par les informations provenant du flux de sortie standard du processus search . Il est possible de ne pas vider le fichier result.txt , et d'ajouter les informations en fin de fichier, en utilisant l'oprateur '>>' la place de l'oprateur '>'. Ainsi, la commande suivante : search < answer.txt >>result.txt aura pour effet d'ajouter la fin du fichier result.txt les informations affiches par le processus search . Le flux d'erreur standard, qui correspond normalement l'cran et qui permet d'afficher les messages d'erreur, peut tre redirig avec l'oprateur '2>', de la mme manire que l'oprateur '>' est utilis pour le flux de sortie standard (puisque c'est le descripteur de fichier utilis par dfaut par l'oprateur '>'). Par exemple, si l'on veut envoyer les messages d'erreurs ventuels de la commande prcdente vers le priphrique nul (c'est-dire le priphrique qui n'en fait rien) pour ignorer ces messages, on utilisera la ligne de commande suivante : search <answer.txt >result.txt 2> /dev/null Une telle ligne de commande est compltement autonome, et peut tre lance en arrireplan, sans aucune intervention de l'utilisateur : search <answer.txt >result.txt 2> /dev/null & Il est galement possible d'effectuer une redirection des donnes provenant d'un descripteur de fichier du processus vers un autre descripteur de fichier de ce processus. On utilisera pour cela la syntaxe suivante : n>&d
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 66

M. Elie Degny Raphael

O n est le descripteur de fichier dont les donnes doivent tre rediriges, et d le descripteur de fichier destination. Cette syntaxe est souvent utilise pour rediriger le flux d'erreur standard vers le flux d'entre standard, lorsqu'on veut rcuprer les erreurs et les messages d'excution normale dans un mme fichier. Par exemple, si l'on veut rediriger le flux de sortie et le flux d'erreurs de la commande search dans un mme fichier, on utilisera la ligne de commande suivante : search <answer.txt >result.txt 2>&1 Cette ligne de commande utilise deux redirections successives pour les donnes affiches par la commande search : la premire redirige le flux de sortie standard vers un fichier, et la deuxime le flux d'erreur standard vers le flux de sortie standard. Notez que l'ordre des redirections est important. Elles sont appliques de gauche droite. Ainsi, dans la commande prcdente, le flux de sortie standard est redirig vers le fichier result.txt , puis le flux d'erreur standard est inject dans le flux de sortie standard ainsi redirig. Note : Il est galement possible d'utiliser un autre descripteur de fichier que les descripteurs des flux standards. Cependant, il est ncessaire, dans ce cas, d'ouvrir ce descripteur dans le shell avant de lancer la commande. Cela peut se faire l'aide de la syntaxe suivante : n<>fichier O n est un numro de descripteur de fichier non encore utilis, et fichier est un nom de fichier. Ce nouveau descripteur de fichier pourra tre utilis dans les commandes prcdentes, afin de faire manipuler le fichier fichier par les processus fils de manire transparente. Les descripteurs de fichiers ouverts de cette manire le restent d'une commande sur l'autre dans le shell. Cela implique que toutes les donnes crites dans ces descripteurs de fichiers sont ajoutes automatiquement la fin des fichiers manipuls par ces descripteurs. Ce comportement est diffrent de la redirection vers un fichier effectue par l'oprateur '>', qui ouvre chaque fois le fichier en criture son dbut et qui supprime donc toutes les donnes dj existantes. Il n'y a donc pas d'oprateur '>>&' pour ajouter des donnes un descripteur de fichier, car cela n'a pas de sens. Les descripteurs de fichiers peuvent galement tre manipuls directement, par l'intermdiaire de fichiers virtuels du rpertoire /dev/fd/. chaque descripteur de fichier (y compris les descripteurs pour les flux d'entre/sortie standards !) y correspond un fichier dont le nom est le numro du descripteur. Par exemple, le fichier /dev/fd/2 correspond au flux d'erreur standard. En fait, le rpertoire /dev/fd/ est un lien symbolique vers le rpertoire /proc/self/fd/ du systme de fichiers virtuels /proc/. Ce systme de fichiers est gr par le noyau directement, et permet d'accder aux informations sur le systme et les processus. Il contient en particulier un sous-rpertoire portant le nom du PID de chaque processus existant dans le systme, et chacun de ces rpertoires contient lui-mme un sous-

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

67

M. Elie Degny Raphael

rpertoire fd/ o sont reprsents les descripteurs de fichiers ouvert par le processus correspondant. Le systme de fichiers /proc/ contient galement un lien symbolique self/ pointant sur le sous-rpertoire du processus qui cherche l'ouvrir. Ainsi, /proc/self/fd/ est un chemin permettant chaque processus d'accder ses propres descripteurs de fichiers. En pratique, la manipulation directe des descripteurs de fichiers n'est rellement intressante que pour les flux standards, dont les numros de descripteurs sont fixes et connus de tous les programmes. Pour les autres descripteurs, cette technique est souvent inutilisable ou inutile, sauf lorsqu'on utilise des programmes sachant manipuler des descripteurs de numros bien dtermins. Insertion de documents Il existe un dernier oprateur de redirection, qui n'est utilis en pratique que dans les scripts shell. Cet oprateur permet d'insrer directement un texte complet dans le flux d'entre standard, sans avoir placer ce document dans un fichier part. Cette technique permet donc de stocker des donnes avec le code des scripts shell, et de n'avoir ainsi qu'un seul fichier contenant la fois le script et ses donnes. Cet oprateur est l'oprateur '<<', il s'utilise selon la syntaxe suivante : <<EOF texte &vellip; EOF O texte est le contenu du texte insrer, et EOF est un marqueur quelconque qui sera utilis seul sur une ligne afin de signaler la fin du texte. Par exemple, il est possible de crer un fichier test.txt de la manire suivante : cat <<fin >test.txt Ceci est un fichier texte saisi directement dans le shell. On peut crire tout ce que l'on veut, et utiliser les fonctions d'ditions de ligne du shell si l'on veut. Pour terminer le fichier, il faut taper le mot "fin" tout seul, au dbut d'une ligne vide. fin Les pipes Les redirections sont trs pratiques lorsqu'il s'agit d'injecter un fichier dans le flux d'entre standard d'un processus, ou inversement de rediriger le flux standard d'une commande vers un fichier, mais elles ont justement le dfaut de devoir utiliser des fichiers. Il est des situations o l'on dsirerait injecter le rsultat d'une commande dans le flux d'entre standard d'une autre commande, sans passer par un fichier intermdiaire. Cela est heureusement ralisable, grce ce que l'on appelle les pipes .
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 68

M. Elie Degny Raphael

Syntaxe des pipes Pour rediriger le rsultat d'une commande dans le flux d'entre d'une autre commande, il faut utiliser l'oprateur '|'. Cet oprateur reprsente un tuyau canalisant les donnes issues d'une commande vers le flux d'entre standard de la commande suivante, d'o le nom de pipe ( tuyau ou tube en anglais). L'oprateur pipe s'utilise de la manire suivante :

on crit la premire commande, qui doit fournir les donnes la deuxime commande ; on crit l'oprateur pipe ; on crit la deuxime commande, qui doit lire les donnes provenant de la premire.

La commande se trouvant la gauche de l'oprateur pipe doit tre complte, avec ses autres redirections ventuelles. La redirection dans une pipe s'effectue aprs les autres types de redirections vues prcdemment. Le systme contrle l'excution des processus qui se trouvent aux deux bouts dune pipe, de telle sorte que le transfert de donnes puisse toujours se faire. Si le processus source a trop de donnes, il est fig par le systme d'exploitation en attendant que le processus consommateur ait fini de traiter les donnes dj prsentes. Inversement, si le processus source est trop lent, c'est le processus consommateur qui attendra patiemment que les donnes soient disponibles. Les pipes sont utiliss trs couramment, ne serait-ce que pour afficher page par page le contenu d'un rpertoire. La commande suivante effectue un tel travail : ls | less Ici, le rsultat de la commande ls est redirig vers la commande less, qui permet d'afficher page par page (et de revenir en arrire dans ces pages) la liste des fichiers du rpertoire courant. Prenons un exemple un peu plus complexe. Supposons que l'on veuille archiver et comprimer un rpertoire. Il est possible d'archiver ce rpertoire avec la commande tar, puis de comprimer le fichier archive rsultant : tar cvf archive.tar * gzip archive.tar Cette mthode est correcte, mais souffre d'un dfaut : elle utilise un fichier intermdiaire, qui peut prendre beaucoup de place disque. Une mthode plus conome consiste lancer tar et gzip en parallle, et rediriger la sortie standard de l'un dans le flux d'entre de l'autre. Ainsi, il n'y a plus de fichier temporaire, et la place consomme sur le disque est minimale :

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

69

M. Elie Degny Raphael

tar cv * | gzip > archive.tar.gz La premire commande demande tar d'archiver tous les fichiers du rpertoire et d'envoyer le rsultat dans le flux standard de sortie. Le pipe redirige ce flux standard vers le flux d'entre standard de gzip. Celui-ci comprime les donnes et les met vers son flux standard de sortie, qui est lui-mme redirig vers le fichier archive.tar.gz. Aucun fichier temporaire n'a t utilis, et on a ainsi conomis l'espace disque de l'archive complte non comprime, c'est--dire environ la taille complte du rpertoire archiver. Ce genre de considration peut tre trs important lorsque le disque dur commence tre plein... Note : En fait, la commande tar de GNU permet de comprimer la vole les donnes archiver, permettant d'viter de se prendre la tte comme on vient de le faire. Pour cela, il suffit d'utiliser l'option z dans la ligne de commande de tar. Ainsi, la ligne de commande suivante fournit le mme rsultat : tar cvfz archive.tar.gz * Mais cette solution ne fonctionne pas avec les versions non GNU de tar, qui ne supporte pas cette option. Un autre exemple pratique est le dplacement de toute une arborescence de fichiers d'un systme de fichiers un autre. Vous ne pourrez pas y parvenir l'aide de la commande mv, car celle-ci ne fait que modifier la structure du systme de fichiers pour dplacer les fichiers et les rpertoires, elle ne peut donc pas fonctionner avec deux systmes de fichiers. Vous ne pouvez pas non plus utiliser la commande cp, car celle-ci ne prendra pas en compte les dates des fichiers, leur propritaire et leur groupe, ainsi que les liens symboliques et physiques. Il faut donc imprativement utiliser un programme d'archivage. La mthode suivre est donc de crer une archive temporaire, puis de se dplacer dans le rpertoire destination, et enfin d'extraire l'arborescence de l'archive : cd source tar cvf archive.tar * cd destination tar xvf source/archive.tar rm source/archive.tar Malheureusement, cette technique ncessite beaucoup de place disque, puisque l'archive temporaire est stocke directement sur disque. De plus, elle est assez lente, car toutes les donnes copier sont recopies sur le disque dur, et relues ensuite, pour finalement tre dtruites... La vraie solution est de raliser un pipe entre les deux processus tar invoqus. Dans ce cas, le transfert se fait simplement via la mmoire vive : cd source tar cv * | (cd destination ; tar xvf -) La commande utiliser est cette fois un peu plus complique, car la commande d'extraction des fichiers ncessite un changement de rpertoire. Il faut donc utiliser une
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 70

M. Elie Degny Raphael

commande multiple du shell. Ces commandes sont constitues de plusieurs autres commandes spares par des points virgules. La premire commande effectue ici est le changement de rpertoire, et la deuxime est l'extraction par tar de l'archive qui lui est transfre par le flux d'entre standard (reprsent ici par '-'). Ces deux commandes sont mises entre parenthses, car l'oprateur '|' du pipe est prioritaire sur l'oprateur ';' de concatnation des commandes du shell. Si vous trouvez que cela est un peu compliqu, je vous l'accorde. Cependant, la commande qui utilise le pipe consomme deux fois moins d'espace disque et est deux fois plus rapide que la commande qui n'en utilise pas. Je vous invite mesurer le gain de temps sur un rpertoire contenant un grand nombre de donnes (utilisez la commande time !). Les pipes nommes Les pipes crs par l'oprateur '|' constituent ce que l'on appelle des pipes anonymes, car ils sont crs directement par le shell pour une commande donne. Il est possible de crer manuellement des pipes en leur donnant un nom, et de les utiliser a posteriori dans plusieurs commandes. Ces pipes constituent ce que l'on appelle des pipes nommes. En fait, les pipes nommes sont des fichiers spciaux, que l'on cre dans un systme de fichier capable de les grer. Les seules oprations ralisables sont l'criture et la lecture, sachant que les donnes crites en premier seront forcment les premires donnes lues. C'est ce comportement qui a donn leur nom ces fichiers, que l'on appelle des FIFO (abrviation de l'anglais First In First Out ). De plus, la quantit de donnes en transit dans ces fichiers est souvent trs rduite, ce qui fait que ces donnes sont toujours places dans la mmoire cache du systme. Ainsi, bien qu'il s'agisse de fichiers, aucune criture ou lecture sur disque n'a lieu lors de l'utilisation dune pipe. Les pipes nommes sont cres par la commande mkfifo, dont la syntaxe est la suivante : mkfifo nom O nom est le nom dune pipe nomme. Notez que cette commande chouera sur les systmes de fichiers incapables de grer les pipes nommes. Une fois cr, le fichier de pipe peut tre utilis comme n'importe quel fichier dans les redirections que l'on a vues dans la section prcdente. Par exemple, la redirection suivante : ls | less peut tre rcrite pour utiliser un pipe nomm temporaire de la manire suivante : mkfifo /tmp/tempfifo ls > /tmp/tempfifo less < /tmp/tempfifo La destruction dune pipe nomme se fait comme n'importe quel fichier, l'aide de la commande rm.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

71

M. Elie Degny Raphael

La commande tee La commande tee est un petit programme permettant d'enregistrer les donnes qu'il reoit dans son flux d'entre standard dans un fichier et de les renvoyer simultanment vers son flux de sortie standard. Elle est couramment utilise, en conjonction avec les pipes, pour dupliquer un flux de donnes. Sa syntaxe est la suivante : tee fichier O fichier est le nom du fichier dans lequel le flux d'entre standard doit tre enregistr. Supposons par exemple que l'on dsire rediriger tous les messages (d'erreur ou non) de la commande ls /proc/1/* dans un fichier result.txt, tout en continuant les visualiser sur l'cran. Pour cela, on utilisera la commande suivante : ls -l /proc/1 2>&1 | tee result.txt l'issue de cette commande, le fichier result.txt contiendra une copie des donnes qui ont t mises par la commande ls -l /proc/1 2>&1. La commande xargs La commande xargs permet d'appeler une autre commande, en passant en paramtre les donnes qu'elle reoit dans le flux d'entre standard. Sa syntaxe est la suivante : xargs commande O commande est la commande que xargs doit excuter. xargs construira une ligne de commande complte pour cette commande, en utilisant comme paramtres les donnes issues du flux d'entre standard. Une fois cette ligne de commande construite, xargs l'excutera. Par exemple, la commande suivante : ls -l peut tre excute galement de la manire suivante : xargs ls et en tapant la chane de caractres -l suivie du caractre de fin de fichier CTRL+D. La commande xargs est une commande extrmement utile lorsqu'elle est utilise conjointement avec les pipes, parce qu'elle permet d'utiliser le rsultat d'une commande en tant que paramtre pour une autre commande. Ce mcanisme est donc complmentaire de celui des pipes, puisque ceux-ci permettaient d'utiliser le rsultat d'une commande pour alimenter le flux d'entre standard d'une autre commande. Un exemple plus utile que le prcdent permettra de mieux comprendre comment on utilise la commande xargs. Supposons que l'on dsire trouver tous les fichiers d'une arborescence complte dont l'extension est .txt et contenant la chane de caractres test . La liste des fichiers de l'arborescence peut tre dtermine simplement l'aide de la commande find, et la recherche du texte dans les fichiers se fait naturellement l'aide de la commande grep. On utilisera xargs pour construire la ligne de commande pour grep, partir du rsultat fourni par la commande find :
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 72

M. Elie Degny Raphael

find -name "*.txt" | xargs grep -l "test" Cette commande est plus simple et plus efficace que la commande quivalente : find -name "*.txt" -exec grep -l "test" {} \; parce que grep n'est excut qu'une seule fois (alors que l'option -exec de la commande find l'excute pour chaque fichier trouv). Manipulation des variables d'environnement Les systmes Unix permettent de dfinir un environnement d'excution pour chaque programme en cours d'excution. L'environnement est un ensemble de paramtres, que l'on appelle les variables d'environnement, qui permettent de modifier le comportement du programme. Ces variables contiennent une valeur de type chane de caractres, dont la signification est propre chaque variable. Il est d'usage que les noms des variables d'environnement soient crits compltement en majuscules, mais ce n'est pas une obligation. Chaque programme est susceptible de reconnatre un certain nombre de variables d'environnement qui lui sont propres, mais il existe galement des variables standards que tous les programmes utilisent. C'est notamment le cas de la variable d'environnement PATH, qui contient la liste des rpertoires dans lesquels le systme doit rechercher les programmes excuter. Cette variable permet donc de lancer les programmes en tapant simplement leur nom, et de laisser le systme rechercher le fichier de ce programme dans chacun des rpertoires indiqus par la variable d'environnement PATH. Par dfaut, les programmes sont lancs avec l'environnement du programme qui les lance, c'est--dire dans la plupart des cas l'environnement d'excution du shell. Les programmes peuvent galement dfinir de nouvelles variables d'environnement, qui seront ainsi accessibles par les programmes qu'ils lanceront eux-mmes. Comme tout programme, le shell dispose d'un environnement, qu'il utilise pour stocker ses propres variables. En effet, comme nous l'avons dj signal plus haut, le shell est bien plus qu'un interprteur de commande : il est compltement programmable. Et en tant qu'interprteur d'un langage de programmation, il fournit la possibilit de dfinir des variables de ce langage. Les variables du shell sont donc galement des variables d'environnement, mais le shell ne les communique pas par dfaut aux programmes qu'il lance. Pour tre plus prcis, le shell utilise deux environnements diffrents :

son propre environnement, qui contient les variables d'environnement normales et ses propres variables ; l'environnement d'excution, qui est l'environnement que le shell utilise pour lancer les programmes.

Il est trs facile de dfinir une variable du shell. Pour cela, il suffit de lui affecter une valeur, l'aide de la syntaxe suivante : variable=valeur
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 73

M. Elie Degny Raphael

O variable est le nom de la variable dfinir, et valeur est la valeur que l'on dsire lui affecter. Notez qu'il n'est pas ncessaire de fournir une valeur. Dans ce cas, la variable ainsi dfinie sera vide. Par exemple, la ligne suivante : BONJOUR="Bonjour tout le monde \!" permet de dfinir la variable BONJOUR. Notez que la valeur est encadre entre guillemets, car elle contient des espaces. Notez galement que le caractre point d'exclamation ('!') est prcd d'un caractre antislash d'chappement ('\'), car il a une signification particulire pour le shell. Ce caractre d'chappement permet simplement de signaler au shell qu'il ne doit pas interprter le caractre qui le suit, et fait donc en sorte que le point d'exclamation fasse partie de la chane de caractres affecter la variable. Bien entendu, le caractre antislash tant lui-mme un caractre spcial pour le shell, et il doit lui-mme tre prfix d'un autre antislash si l'on dsire l'utiliser dans une chane de caractres. La valeur d'une variable peut tre rcupre simplement en prfixant le nom de la variable du symbole dollar ('$'). Ainsi, la commande suivante permet d'afficher le contenu de la variable BONJOUR : echo $BONJOUR Les variables ainsi dfinies ne font partie que de l'environnement du shell, elles ne sont donc pas accessibles aux programmes que le shell lance. Donc, si l'on relance un nouveau shell avec la commande suivante : bash et que l'on essaie de lire le contenu de la variable BONJOUR avec la commande echo, on obtient une chane vide. Cela est normal, puisque le deuxime shell (c'est--dire celui qui est en cours d'excution) n'utilise pas le mme environnement que le premier shell. Vous pouvez quitter le nouveau shell avec la commande suivante : exit Ds lors, vous serez nouveau dans le shell initial, et la variable BONJOUR sera nouveau accessible. Pour rendre une variable du shell accessible aux programmes que celui-ci peut lancer, il faut l'exporter dans l'environnement d'excution. Cela peut tre ralis avec la commande export : export variable O variable est le nom de la variable du shell exporter dans l'environnement d'excution. La syntaxe prcdente exporte de manire permanente les variables du shell. Mais il existe galement une autre syntaxe, qui permet de ne dfinir des variables
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 74

M. Elie Degny Raphael

d'environnement que pour l'environnement d'excution d'une seule commande. Cette syntaxe consiste simplement prfixer la commande excuter par la dfinition de ladite variable. Par exemple, la commande suivante : BONSOIR="Bonsoir tout le monde \!" bash permet de lancer un shell et de lui communiquer la variable d'environnement BONSOIR. Cette variable ne sera dfinie que pour ce programme, si l'on quitte ce shell avec un exit, la variable BONSOIR ne sera plus dfinie. Une variable peut tre dtruite tout instant l'aide de la commande unset. Cette commande prend en paramtre le nom de la variable supprimer. Par exemple, la commande suivante supprime notre variable : unset BONJOUR Vous pouvez tout moment visualiser l'ensemble des variables dfinies avec la commande set. Le tableau donn ci-dessous vous prsentera les variables d'environnement les plus utilises, et que la plupart des programmes utilisent pour permettre l'utilisateur de modifier leur comportement : Tableau 5-3. Variables d'environnements courantes Nom HOME USER Signification Chemin du rpertoire personnel de l'utilisateur. Nom de login de l'utilisateur. Cette information est galement disponible au travers de la variable d'environnement LOGNAME. Type de terminal utilis. La valeur de cette variable sert aux applications pour dterminer les caractrisques du terminal et ses fonctionnalits, afin d'optimiser leur affichage. La valeur de cette variable est souvent linux sur les consoles Linux, et xterm dans les mulateurs de terminal graphiques sous X11. Nous verrons l'utilit de cette variable plus en dtail dans la la section intitule Description des terminaux dans Chapitre 6. Chemin sur le fichier de programme du shell actuellement utilis. Sous Linux, il s'agit souvent du shell bash. Liste des rpertoires dans lesquels les
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 75

TERM

SHELL

PATH

M. Elie Degny Raphael

Nom

Signification programmes excuter seront recherchs. Cette liste ne doit pas contenir le rpertoire courant (.), pour des raisons de scurit de base (il suffit de placer un cheval de troie portant le nom d'une commande classique dans un rpertoire pour que l'utilisateur le lance sans s'en rendre compte). LD_LIBRARY_PATH Liste des rpertoires dans lesquels les bibliothques dynamiques seront recherches si elles ne sont pas trouvables dans les rpertoires classiques des bibliothques de programme du systme. C_INCLUDE_PATH Liste des rpertoires dans lesquels le compilateur C recherchera les fichiers d'en-tte lors de la compilation des fichiers sources C. Cette liste doit contenir les rpertoires additionnels, qui ne sont pas dj pris en compte automatiquement par le compilateur C. CPLUS_INCLUDE_PATH Liste des rpertoires dans lesquels le compilateur C++ recherchera les fichiers d'en-tte lors de la compilation des fichiers sources C/C++. Cette liste doit contenir les rpertoires additionnels, qui ne sont pas dj pris en compte automatiquement par le compilateur C. LIBRARY_PATH Liste des rpertoires dans lesquels les bibliothques utiliser lors de l'dition de lien des programmes doivent tre recherches. Cette variable n'est utilise que par les outils de dveloppement lors de la compilation de fichiers sources, et elle ne doit pas tre confondue avec la variable d'environnement LD_LIBRARY_PATH, qui indique la liste des rpertoires dans lequel l'diteur de liens dynamiques recherchera les bibliothques dynamiques utilises par les

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

76

M. Elie Degny Raphael

Nom

TMPDIR

TZ

Signification programmes lors de leur chargement. Les notions de fichiers sources et de compilation seront dtailles dans le Chapitre 8. Rpertoire des fichiers temporaires. Par dfaut, le rpertoire des fichiers temporaires est le rpertoire /tmp/, mais il est possible d'en changer grce cette variable d'environnement. Dfinition de la zone horaire de l'utilisateur. Le systme travaillant exclusivement en temps universel, chaque utilisateur peut dfinir sa propre zone horaire pour obtenir l'affichage des dates et des heures dans son temps local. Le format de cette variable d'environnement est assez complexe. Il est constitu de plusieurs champs spars par des espaces, reprsentant successivement le nom du fuseau horaire (au moins trois caractres), le dcalage ajouter l'heure universelle pour obtenir l'heure locale, le nom du fuseau horaire pour l'heure d't, le dcalage pour l'heure d't, et les dates de dbut et de fin de l'heure d't. Les dcalages horaires doivent tre exprims avec un '+' pour les fuseaux horaires placs l'ouest de Greenwich, '-' pour ceux situs l'est. Les dates de dbut et de fin de la priode d'heure d't peuvent tre exprims de deux manires diffrentes. La premire mthode est d'indiquer le numro du jour dans l'anne aprs la lettre 'J'. Ce numro ne doit pas tenir compte du 29 fvrier, mme pour les annes bissextiles. La deuxime mthode est d'indiquer le mois de l'anne, la semaine du mois et le jour de la semaine, spars par des '.', et aprs la lettre 'M'. Les mois sont compts de 1 12, les semaines de 1 5 et les jours de 0 6, 0 tant le
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 77

M. Elie Degny Raphael

Nom

LANG

LC_MESSAGES

LC_TYPE

LC_COLLATE

LC_MONETARY

Signification dimanche. Seul le premier champ est obligatoire, il est possible d'utiliser les noms de fuseau horaires dfinis par la librairie C. En France, on utilise normalement le fuseau CES (temps d'Europe centrale). Valeur par dfaut utiliser pour les paramtres d'internationalisation des applications. Cette valeur sera utilise pour les paramtres qui n'en dfinissent pas une explicitement. Elle doit tre compose de deux codes deux caractres, le premier indiquant la langue, et le deuxime le pays (car plusieurs pays peuvent parler la mme langue, et un pays peut avoir plusieurs langues nationales). Pour la France, on utilise normalement la valeur fr_FR . Cette valeur peut tre redfinie par l'une des variables d'environnement dcrites ci-dessous. Valeur utiliser pour dterminer la langue des messages. La valeur par dfaut est spcifie par la variable d'environnement LANG. Valeur utiliser pour dterminer les rgles de classification des caractres. La classification des caractres permet de dire si un caractre est un chiffre ou non, s'il est en majuscule ou en minuscule, etc. La valeur par dfaut est spcifie par la variable d'environnement LANG. Valeur utiliser pour dterminer les rgles de comparaison des caractres. La comparaison des caractres est utilise pour les tris lexicographiques (tri par ordre alphabtique par exemple). La valeur par dfaut est spcifie par la variable d'environnement LANG. Valeur utiliser pour dterminer l'emplacement et le caractre

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

78

M. Elie Degny Raphael

Nom

LC_NUMERIC

Signification reprsentant le symbole montaire du pays. La valeur par dfaut est spcifie par la variable d'environnement LANG. Valeur utiliser pour dterminer les conventions locales d'criture des nombres (sparateurs dcimal, format de la virgule, etc.). La valeur par dfaut est spcifie par la variable d'environnement LANG.

En rsum, le shell utilise les variables d'environnement du systme pour grer ses propres variables, et permet de les exporter vers l'environnement d'excution qu'il communique aux commandes qu'il lance. Un grand nombre de variables d'environnement classiques sont reconnues par les programmes. Elles servent paramtrer leur comportement. Nous reverrons ultrieurement quelques-unes de ces variables lors de la configuration du systme de base. Caractre d'chappement et chanes de caractres Un certain nombre de caractres sont interprts par le shell d'une manire spciale. Nous en avons dj vu quelques-uns pour les redirections et les pipes, mais il en existe d'autres. Par consquent, il faut utiliser une syntaxe particulire lorsqu'on dsire utiliser un de ces caractres dans une commande du shell sans qu'il soit interprt par le shell. Pour cela, il suffit de faire prcder ces caractres du caractre d'chappement antislash (caractre de la barre oblique inverse, \). Ce caractre permet d'indiquer au shell que le caractre suivant doit tre trait tel quel, et ne doit pas tre interprt avec son sens habituel. Par exemple, pour crer un rpertoire nomm <, on utilisera la commande suivante : mkdir \< Bien entendu, le caractre antislash peut lui-mme tre prcd d'un autre antislash, lorsqu'on veut l'utiliser en tant que caractre normal. Le caractre d'chappement antislash permet galement, lorsqu'il est plac en fin de ligne, de supprimer le saut de ligne qui le suit. Cela signifie qu'il permet de rpartir une commande trop longue sur plusieurs lignes, des fins de lisibilit. Vous trouverez quelques exemples de cette notation plus loin dans ce document, pour prsenter des commandes trop longues pour tenir sur une page A4. Il peut tre relativement fastidieux de devoir taper des antislashs dans les chanes de caractres qui contiennent beaucoup de caractres interprtables par le shell. C'est pour cela que le shell permet de dfinir des chanes de caractres, dont il ignorera le contenu lors de l'analyse syntaxique. Ces chanes de caractres sont simplement donnes entre guillemets simples (caractre '). Par exemple, la commande suivante :
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 79

M. Elie Degny Raphael

MESSAGE='La syntaxe est A | B' permet d'affecter la chane de caractres La syntaxe est A | B, contenant des espaces et le caractre | normalement utilis par le shell pour les pipes, dans la variable d'environnement MESSAGE. Note : Une chane de caractres commence par un guillemet et se termine par un guillemet. Les chanes de caractres ne peuvent donc pas contenir de guillemet, mme prcd d'un caractre d'chappement. On veillera ne surtout pas confondre les guillemets simples (caractre ') avec les guillemets inverses (caractre `), qui se ressemblent normment dans certaines polices de caractres. Ces deux caractres ont une signification compltement diffrente. Le premier sert dfinir des chanes de caractres, et le deuxime excuter une commande et en inclure le rsultat dans une autre commande. Nous verrons plus loin comment utiliser ce type de guillemets. Les guillemets simples sont donc trs pratiques pour crire simplement une chane de caractres, mais ne permettent pas de bnficier des fonctionnalits de substitutions du shell, comme par exemple le remplacement d'une variable par sa valeur dans la chane de caractres. De plus, elles ne peuvent pas contenir de guillemets simples, puisque c'est leur caractre de terminaison. C'est pour ces raisons que le shell donne la possibilit de dfinir des chanes de caractres plus souples, l'aide des guillemets doubles (caractre "). Dans ces chanes de caractres, la plupart des caractres normalement interprts par le shell ne le sont plus, comme pour les chanes de caractres utilisant les guillemets simples. Cependant, les caractres spciaux $, ` et \ conservent leur signification initiale. Il est donc possible, par exemple, d'utiliser des variables d'environnement dans les chanes de caractres de ce type : echo "Mon nom est $USER" Le caractre d'chappement antislash peut toujours tre utilis, en particulier pour insrer un caractre de guillemets doubles dans une chane de caractres. En effet, ce caractre marquerait la fin de la chane de caractres s'il n'tait pas prcd d'un antislash. Note : Remarquez que les guillemets et les caractres d'chappement ne sont utiliss que pour l'analyse de la ligne de commande. Une fois toutes les chanes de caractres et toutes les substitutions traites, les guillemets et les caractres d'chappement inutiles sont supprims. En pratique, ce sont tous les caractres d'chappement et les guillemets qui restent aprs traitement de la ligne de commande et qui ne font pas partie du rsultat d'une des substitutions. Ainsi, la commande suivante : echo "Bonjour tout le monde" a pour but de passer la chane de caractres Bonjour tout le monde en tant que premier (et unique) paramtre de la commande echo, puis de l'excuter. Les guillemets ne font pas partie de la chane de caractres, ils ont t supprims par le shell et seul le contenu de la chane sera effectivement affich.
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 80

M. Elie Degny Raphael

Notez que la commande prcdente est trs diffrente de celle-ci : echo Bonjour tout le monde Mme si le rsultat est le mme. En effet, cette dernire commande passe les chanes de caractres Bonjour, tout, le et monde en tant que paramtres (4 au total) la commande echo, alors que l'utilisation des guillemets permet de passer toute la phrase en un seul paramtre. On peut voir la diffrence en utilisant plus d'un espace entre chaque mot : les espaces superflus ne sont conservs que dans la premire commande. Les substitutions L'une des fonctionnalits les plus puissantes du shell est sans doute sa capacit effectuer des substitutions d'expressions par leur valeur. L'une des substitutions les plus courantes est sans doute le remplacement d'une variable par sa valeur, mais le shell peut faire beaucoup plus que cela. Les lignes de commandes peuvent tre crites en utilisant diffrents types d'expressions spciales, qui seront remplaces par leur valeur par le shell avant l'excution de la commande. Ces expressions permettent de spcifier des motifs de chane de caractres, d'exprimer des chemins partiels sur des fichiers ou des rpertoires, de rcuprer la valeur des variables du shell, de calculer des expressions mathmatiques, voire d'inclure le rsultat d'une autre commande dans la ligne de commande en cours. Les mcanismes de substitution dcrits ci-dessous sont prsents par ordre de priorit dcroissante. Cela signifie que si une expression substituable contient elle-mme une autre expression substituable de priorit infrieure, cette expression sera remplace aprs la substitution de l'expression contenante. Gnration de chanes de caractres selon un motif Il est possible de demander au shell de gnrer une srie de chanes de caractres selon un motif simple. Ce motif est toujours constitu d'un prfixe, suivi d'une partie variable, suivie d'un suffixe. La partie variable du motif est celle qui subira les substitutions pour gnrer une liste de chanes de caractres commenant par le prfixe suivi du rsultat de la substitution et se terminant par le suffixe. Cette partie variable doit tre spcifi entre accolades, et prend la forme d'une liste de valeurs possibles pour chaque substitution, spares par des virgules. Par exemple, la commande suivante : ls test{0,1,2,3,4} sera transforme par le shell en la commande suivante : ls test0 test1 test2 test3 test4 Note : Ceux qui se souviennent un peu de leurs mathmatiques se diront qu'il s'agit l d'une factorisation. C'est rigoureusement exact. Substitution du nom d'utilisateur Le caractre tilde ('~') est remplac par le nom de l'utilisateur courant, ou, dfaut de nom, par le chemin sur le rpertoire personnel de cet utilisateur. Il est possible de
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 81

M. Elie Degny Raphael

spcifier un autre utilisateur en donnant le nom de login de cet autre utilisateur immdiatement aprs le caractre tilde. Par exemple, la commande suivante : cp *.txt ~jean permet de copier tous les fichiers d'extension .txt dans le rpertoire personnel de l'utilisateur jean. Remplacements de variables Comme il l'a dj t indiqu plus haut, la valeur des variables du shell et des variables d'environnement peut tre rcupre en prfixant le nom de la variable par le caractre dollar ('$'). En fait, cette criture est l'une des formes les plus simples que peuvent prendre les substitutions de paramtres. En effet, il est possible de remplacer l'expression par une partie seulement de la valeur de la variable, ou une par une autre valeur calcule partir de celle de la variable. En pratique, les expressions utilises par les substitutions de variables peuvent tre relativement compliques, et il peut tre ncessaire de les isoler du reste de la ligne de commande l'aide d'accolades. La syntaxe exacte complte de ce type de substitution est donc la suivante : ${expression} O expression est l'expression qui dfinit la chane de remplacement utiliser. Si cette expression est un nom de variable, ce sera le contenu de cette variable qui sera utilis pour la substitution. Il est possible de fournir une valeur par dfaut pour le cas o cette variable ne contient rien ou n'est pas dfinie. Pour cela, on utilisera la syntaxe suivante : ${variable:-valeur} O valeur est la valeur par dfaut utiliser dans ce cas. Notez que la variable reste indfinie aprs la substitution. Pour fixer la valeur de la variable cette valeur par dfaut en plus d'effectuer la substitution, on utilisera plutt la syntaxe suivante : ${variable:=valeur} valeur a toujours la mme signification dans cette syntaxe. Il est parfois prfrable d'afficher un message d'erreur plutt que de donner une valeur par dfaut lorsqu'une variable n'est pas dfinie. Cela peut se faire avec la syntaxe suivante : ${variable:?message} O message est le message afficher dans le cas o la variable variable serait non dfinie ou de valeur nulle. Si l'on veut tester si une variable est non dfinie et renvoyer une valeur spcifique si elle est dfinie, on utilisera plutt la syntaxe suivante :

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

82

M. Elie Degny Raphael

${variable:+valeur} O valeur est la valeur renvoyer si la variable est dfinie. Si la variable n'est pas dfinie, la substitution sera faite avec la chane de caractres vide (l'expression complte sera donc supprime). Le shell permet galement de faire la substitution avec une sous-chane de la valeur de la variable, partir d'une position donne et d'une longueur. La syntaxe utiliser est donne ci-dessous : ${variable:position:longueur} O position est la position laquelle commence la sous-chane extraire, et longueur est le nombre de caractres extraire. Ce dernier champ est facultatif (on ne mettra pas non plus les deux-points prcdents si on dcide de ne pas spcifier de longueur). Si on ne le prcise pas, la sous-chane extraite sera constitue du reste de la valeur de la variable partir de la position indique. La position quant elle doit tre positive ou nulle. Une valeur ngative indique un point de dpart correspondant au nombre de caractres correspondant partir de la droite de la valeur de la variable. Si l'on veut obtenir la longueur d'une chane de caractres contenue dans une variable, on utilisera cette syntaxe : ${#variable} O variable est toujours le nom de la variable. Il est galement possible de considrer que la valeur d'une variable est une chane de caractre prfixe d'une autre chane de caractres particulire. Le shell permet d'extraire la chane de caractres principale, en supprimant ce prfixe. Pour raliser cette opration, on utilisera l'une des syntaxes suivantes : ${variable#prfixe} Ou : ${variable##prfixe} O variable est la variable contenant la chane de caractres traiter, et prfixe est le prfixe supprimer. En fait, le prfixe peut tre spcifi l'aide d'un motif de caractres. Ce motif peut correspondre une partie plus ou moins grande de la valeur de la variable. Dans ce cas, il y a plusieurs manires d'interprter ce motif, et donc plusieurs choix de prfixes possibles supprimer. La premire syntaxe devra tre utilise lorsqu'on dsire supprimer le plus petit prfixe possible correspondant au motif. La deuxime syntaxe, quant elle, permettra de supprimer le prfixe le plus long. Par exemple, si la variable VAR contient la chane de caractres abbbc, la commande suivante : echo ${VAR#a*b} affichera la chane de caractres bbc, car le plus petit prfixe correspondant au motif a*b est ab. Inversement, la commande : echo ${VAR##a*b}

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

83

M. Elie Degny Raphael

utilisera le prfixe le plus long, savoir abbb. Le rsultat de cette substitution sera donc la chane de caractres c. La syntaxe des motifs de caractres utiliss ici sera prcise dans la la section intitule Les expressions rgulires. Le shell fournit une syntaxe similaire pour extraire des suffixes de la valeur des variables. Cette syntaxe utilise simplement le caractre % au lieu du caractre #. Comme pour les prfixes, le fait de doubler ce caractre implique que le suffixe le plus long correspondant au motif sera utilis, alors que l'utilisation d'un seul % permet de choisir le suffixe le plus court. Ainsi, la commande : echo ${VAR%b*c} affichera la chane de caractres abb, alors que la commande : echo ${VAR%%b*c} n'affichera que a. Pour terminer ce tour d'horizon des remplacements de variables, nous allons voir les possibilits de recherche et de remplacement du shell dans les chanes de caractres contenues dans des variables. La syntaxe suivante : ${variable/motif/remplacement} permet de rechercher la plus grande sous-chane de caractres correspondant au motif motif dans la chane contenue dans la variable variable, et de remplacer cette souschane par la chane de caractres remplacement. Par exemple, si la variable VAR contient la chane de caractres abab, la commande suivante : echo ${VAR/b/d} affichera la chane de caractres adab. Ce remplacement n'est donc effectu qu'une seule fois. Si l'on veut que toutes les occurrences du motif soient remplaces par la chane de remplacement, il suffit de doubler le premier / : ${variable//motif/remplacement} Dans les deux syntaxes, la prsence du champ remplacement est facultative. Cela permet de supprimer purement et simplement les sous-chanes de caractres qui correspondent au motif. La syntaxe des motifs sera dtaille dans la la section intitule Les expressions rgulires. Cependant, une prcision s'impose : si le motif commence par le caractre #, ce motif devra obligatoirement tre plac au dbut de la chane de caractres contenue dans la variable. De mme, si le motif commence par le caractre %, il devra obligatoirement se trouver la fin de cette chane. Ces deux notations permettent d'obtenir le mme effet que les suppressions de prfixes et de suffixes prsentes plus haut.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

84

M. Elie Degny Raphael

Substitution du rsultat d'une commande Le shell peut valuer une commande apparaissant dans une expression afin de la remplacer par son rsultat. Il existe deux syntaxes pour raliser ce type de substitutions. La premire, et la plus classique (voire historique), utilise des guillemets inverses : `commande` O commande est la commande devant tre remplace par son rsultat (c'est--dire ce qu'elle enverra sur le flux standard de sortie). Pour donner un exemple, la commande suivante : kill `cat /var/pid/p.pid` a pour rsultat de lancer un signal SIGTERM au processus dont le PID est stock dans le fichier /var/pid/p.pid. La commande cat est utilise pour afficher le contenu de ce fichier, et elle est substitue par ce contenu. En fin de compte, la commande kill est appliqu au PID affich par cat. La deuxime syntaxe utilisable est la suivante : $(commande) o commande est toujours la commande excuter et substituer. La diffrence entre ces deux syntaxes est que, dans le premier cas, les caractres $, ` et \ sont toujours interprts par le shell et doivent tre prcds d'un antislash s'ils doivent apparatre tels quels dans la commande substituer, alors que, dans le deuxime cas, on peut utiliser tous les caractres sans protection particulire (sauf, bien entendu, la parenthse fermante, puisqu'elle marque la fin de la commande). valuation d'expressions arithmtiques En gnral, le shell ne manipule que des chanes de caractres. Cependant, il est capable d'valuer des expressions mathmatiques simples faisant intervenir des entiers. Pour cela, il faut utiliser la syntaxe suivante : $((expression)) o expression est l'expression valuer. Les expressions mathmatiques peuvent contenir tous les oprateurs classiques du langage C : addition, soustraction, multiplication et division. Il existe en plus un oprateur d'lvation la puissance, reprsent par une double toile (**). Les oprateurs de dcalage binaires vers la gauche (<<) et la droite (>>) sont galement utilisables, ainsi que les oprateurs de manipulation de bits & ( ET binaire ), | ( OU binaire ), ^ ( OU binaire exclusif ) et ~ ( ngation binaire ). Comme en C, les comparaisons logiques peuvent galement tre values, elles ont la valeur 1 lorsque l'expression qui les utilise est vraie, et 0 dans le cas contraire. Les oprateurs disponibles sont ==, <, <=, >, >= et !=. Les tests peuvent tre composs l'aide des oprateurs && ( ET logique ) et || ( OU logique ).

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

85

M. Elie Degny Raphael

Les divers oprateurs d'affectation du langage C +=, -=, etc. sont galement disponibles. Substitution de commandes Nous avons dj vu qu'il tait possible de rcuprer le rsultat d'une commande pour l'insrer dans une ligne de commande. Cette technique s'apparente ce qu'il est possible de faire avec la commande xargs et une pipe. De la mme manire, le shell fournit une substitution permettant d'obtenir des fonctionnalits similaires celles fournies par les pipes nommes. Cette substitution est la substitution de commande. La syntaxe utilise par les substitutions de commandes est similaire celle des redirections classiques : <(command) Ou : >(command) O command est la commande substituer. La premire syntaxe permet de lancer une commande en arrire-plan en redirigeant son flux standard de sortie vers un descripteurs de fichiers du shell. Le rsultat de cette substitution est le nom du fichier /dev/fd/n permettant de lire les donnes crites par la commande dans ce descripteur de fichier. En pratique, on utilise donc cette substitution en lieu et place d'un fichier d'entre pour une commande normale. La deuxime commande permet de lancer galement une commande en arrire-plan, mais en redirigeant le flux d'entre standard de cette commande cette fois. Il est alors possible de fournir les donnes ncessaires cette commande en crivant dans le fichier /dev/fd/n dont le nom est fourni par le rsultat de la substitution. Ces deux commandes permettent donc de simplifier l'usage des pipes nommes, en vitant d'avoir crer un fichier de pipe manuellement et de lancer les deux commandes devant se servir de ce pipe pour communiquer. Ainsi, la commande suivante : cat <(ls) est fonctionnellement quivalente la srie de commande suivante : mkfifo /tmp/lsfifo ls > /tmp/lsfifo cat /tmp/lsfifo rm /tmp/lsfifo Les substitutions de commandes sont donc nettement plus pratiques et plus sres, car elles n'imposent pas la cration d'un fichier de pipe nomm dont le nom peut tre choisi arbitrairement. Dcoupage en mots Les rsultats provenant des substitutions vues prcdemment sont systmatiquement dcomposs en srie de mots par le shell avant de poursuivre le traitement de la ligne de
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 86

M. Elie Degny Raphael

commande. Cela signifie que les rsultats de substitutions sont analyss pour identifier les mots qu'ils contiennent, en se basant sur la notion de sparateur. Par dfaut, les sparateurs utiliss sont l'espace, le caractre de tabulation et le retour de ligne, mais il est possible de spcifier des sparateurs diffrents l'aide de la variable d'environnement IFS (abrviation de l'anglais Internal Field Separator ). Par exemple, le rsultat de la commande ls dans la commande suivante : echo `ls` est une chane de caractres contenant la liste des fichiers du rpertoire courant, chacun tant spar du suivant par un caractre de saut de ligne. La substitution du rsultat de cette commande est donc soumise au dcoupage en mots, et chaque caractre de retour la ligne est interprt comme un sparateur. Par consquent, cette chane de caractres est transforme en une liste de mots, chacun de ces mots tant un des noms de fichiers renvoys par la commande ls. Au final, la commande echo est appele, avec comme paramtres ces noms de fichiers, raison d'un par paramtre. Note : Ce dcoupage en mot est effectu automatiquement par le shell la suite des substitutions vues prcdemment. Cela signifie en particulier que s'il n'y a pas de substitution, il n'y a pas de dcoupage en mots non plus. Remplacement des caractres gnriques Si, aprs avoir appliqu toutes les formes de substitutions prcdentes, le shell trouve des caractres gnriques * et ? dans l'expression en cours de traitement, il interprtera la partie de l'expression contenant ces caractres comme un motif reprsentant des chemins Unix de fichiers. Les caractres * et ? auront donc le comportement que l'on a dj dcrit dans la la section intitule Notions de chemins sous Unix. Ce motif sera donc remplac par autant de chemins Unix lui correspondant que possible. Rappelons que le caractre gnrique * reprsente 0 ou plusieurs caractres quelconques, et que le caractre gnrique ? reprsente un caractre et un seul. Les chemins gnrs sont classs par ordre alphabtique. Il est possible galement de restreindre le jeu de caractres utilis par le shell pour rechercher les noms de fichiers correspondants au motif. Pour cela, il faut lui indiquer un ensemble de caractres ou de plages de caractres utilisables, spars par des virgules, et entre crochets. Les plages de caractres sont spcifies en indiquant le premier et le dernier caractre, spars par un tiret. Par exemple, la commande suivante : ls [a-c,m-t]*.txt permet d'afficher tous les fichiers dont le nom commence par les lettres a, b, c et les lettres allant de m t, et dont l'extension est .txt. Vous trouverez de plus amples renseignements sur la syntaxe de ces motifs dans la la section intitule Les expressions rgulires. Sauf paramtrage pour indiquer explicitement de faire le contraire, le shell ignore systmatiquement les rpertoires . et .. dans les substitutions. Cela est trs important. En
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 87

M. Elie Degny Raphael

effet, une commande utilisant le caractre gnrique * ne s'appliquera pas sur le rpertoire courant et le rpertoire pre par dfaut. Paramtrer bash pour qu'il prenne en compte ces rpertoires peut tre extrmement dangereux, surtout avec une commande telle que rm -f *, qui dans ce cas effacerait galement les rpertoires parents en plus du contenu du rpertoire courant ! Les expressions rgulires Les substitutions de variables et de noms de fichiers utilisent des motifs pour identifier des chanes de caractres. Ces motifs peuvent tre reconnus dans plusieurs chanes de caractres diffrentes, car ils contiennent une ou plusieurs parties variables, qui pourront reprsenter une sous-chane des chanes qui vrifient ce motif. Par exemple, le motif a*b reprsente toute chane de caractres commenant par un a et se terminant par un b. La sous-chane situe entre ces deux caractres peut tre quelconque, et constitue la partie variable du motif. La syntaxe utilise pour dfinir les motifs de chanes de caractres dans le shell bash est un sous-ensemble d'un langage plus complexe permettant de dcrire ce que l'on appelle les expressions rationnelles. Le langage des expressions rgulires est relativement compliqu, mais extrmement puissant. Ce langage permet d'identifier avec prcision des sous-chanes de caractres dans une chane de caractres l'aide des parties variables des expressions rgulires, et permet ventuellement de remplacer ces sous-chanes par des chanes de substitutions. Malheureusement, la description des expressions rgulires pourrait prendre plusieurs pages, aussi ne verrons-nous ici que expressions utilisables dans les substitutions du shell bash. Comme vous l'avez sans doute dj devin au travers des exemples prcdents, le caractre '*' permet d'identifier une quelconque chane de caractres, y compris la chane vide. Utilis dans les expressions rgulires, il constitue la partie variable principale de ces expressions. De la mme manire, le caractre '?' reprsente un et un seul caractre quelconque. Ce caractre sera donc utilis quand on dsirera contrler la taille de la partie variable d'une expression rgulire, ventuellement en le rptant un certain nombre de fois. Les deux caractres de substitutions prcdents peuvent contenir n'importe quel caractre, ce qui peut parfois ne pas tre assez restrictif dans la dfinition d'un motif. Le shell fournit donc une syntaxe plus volue, permettant de dfinir prcisment le jeu de caractre auquel un caractre du motif doit appartenir. Cette syntaxe consiste simplement donner la liste des caractres du jeu de caractres entre crochets : [...] Les points de suspension reprsentent ici l'ensemble des caractres qui peuvent apparatre dans le motif ainsi dfini. Notez que dans le cas d'une suite de caractres, il suffit de spcifier le premier et le dernier caractre, et de les sparer par un trait d'union (caractre '-'). Ainsi, le motif suivant : [a-egt] Reprsente n'importe lequel des caractres de 'a' 'e', plus les caractres 'g' et 't'.
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 88

M. Elie Degny Raphael

Note : Pour spcifier le caractre - lui-mme, il suffit de le placer tout seul au dbut ou la fin de la liste de caractres spcifie entre les crochets. De mme, pour spcifier le caractre ']' lui-mme (normalement utilis pour marquer la fin du jeu de caractres), il faut le placer au dbut de la liste, juste aprs le crochet ouvrant. Pour finir, sachez que le shell bash est galement capable de prendre en charge des expressions rgulires plus complexes que celles prsentes ici. Cependant, ces expressions ne sont pas actives par dfaut, et ne sont donc accessibles qu'en activant une option complmentaire du shell. Ces extensions ne seront pas dcrites ici, mais vous pouvez consulter la page de manuel de bash si vous dsirez en savoir plus ce sujet. Structures de contrle Tout langage de programmation digne de ce nom dispose de structures de contrles volues permettant de contrler l'excution du programme, de raliser des boucles et de structurer l'ensemble d'un programme. Le shell n'chappe pas la rgle, et fournit la plupart des constructions classiques. Cette section a pour but d'exposer leurs syntaxes. Les instructions composes Dans le langage du shell, une instruction se termine soit par un retour la ligne (non prcd d'un antislash), soit d'un point-virgule. Les instructions peuvent tre pourtant trs complexes, car elles peuvent contenir des pipes et des redirections. En fait, une instruction peut peu prs tre dfinie comme tant une ligne de commande normale du shell. Le shell permet bien entendu de raliser des instructions composes, afin de regrouper plusieurs traitements dans un mme bloc d'instructions. La mthode la plus simple pour raliser un bloc d'instruction est tout simplement de les regrouper sur plusieurs lignes, ou de les sparer par des points-virgules, entre accolades. Par exemple, les instructions suivantes constituent un bloc d'instructions : { cd /tmp rm *.bak

} Notez que l'accolade fermante est considre comme une instruction part entire. Cela signifie que si l'on ne met pas l'accolade fermante sur une ligne indpendante, il faut faire prcder l'instruction prcdente d'un point-virgule. De mme, il faut le faire suivre d'un autre point-virgule s'il ne se trouve pas la fin d'une ligne. Les instructions des instructions composes cres l'aide des accolades sont excutes au sein du shell courant. Les variables qu'elles dfinissent, ainsi que les changements de rpertoires, sont donc toujours valides l'issue de l'excution de ces instructions. Si cela n'est pas dsirable, on pourra crer des instructions composes l'aide de parenthses. Les instructions seront alors excutes dans un autre shell, lanc pour l'occasion, et elles n'auront donc pas d'effet de bord imprvu dans le shell appelant. Par exemple, le
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 89

M. Elie Degny Raphael

rpertoire courant l'issue de l'instruction compose prcdente est le rpertoire /tmp/, alors que l'instruction compose suivante : ( cd /tmp rm *.bak ) ne change pas le rpertoire courant. Note : On ne confondra pas les instructions composes utilisant des parenthses et les substitutions de rsultat de commande. Les instructions composes renvoient le code d'erreur de la dernire instruction excute, alors que le rsultat des substitutions est ce que la commande a crit sur son flux de sortie standard. Le shell permet galement de raliser des instructions composes conditionnelles, o l'excution de chaque instruction de l'instruction compose est conditionne par le rsultat de l'instruction prcdente. Ces instructions composes sont dfinies l'aide des oprateurs || et &&. La syntaxe de ces oprateurs est la mme : command1 || command2 command1 && command2 O command1 et command2 sont deux commandes du shell (composes ou non). Avec l'oprateur ||, la commande command2 n'est excute que si le code de retour de la commande command1 est non nul, ou, autrement dit, si cette commande ne s'est pas excute correctement. Inversement, avec l'oprateur &&, la commande command2 n'est excute que si la premire commande s'est excute correctement (et renvoie donc un code de retour nul). Par exemple, la commande suivante : rm *.txt 2> /dev/null || echo "Aucun fichier supprimer" permet d'effacer tous les fichiers d'extension .txt, ou d'afficher le message d'erreur Aucun fichier supprimer s'il n'existe pas de tels fichiers. Les instructions composes peuvent tre utilises comme n'importe quelle commande normale. En particulier, elles peuvent tre utilises dans des commandes plus complexes, par exemple comme destination d'un pipe. C'est ce que faisait l'exemple de dplacement de toute une arborescence dans la la section intitule Syntaxe des pipes. Les tests Sous Unix, chaque processus reoit plusieurs valeurs en paramtres et renvoie un code de retour. La plupart des paramtres sont passs en ligne de commande, et sont rcuprs directement par le processus, mais d'autres paramtres peuvent tre fournis par le processus appelant par l'intermdiaire de variables d'environnement et de descripteurs de fichiers. Le code de retour, quant lui, est un entier signalant si l'excution du processus s'est termine correctement ou si des erreurs ont eu lieu. Si les codes d'erreurs

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

90

M. Elie Degny Raphael

varient grandement d'un programme un autre, la valeur 0 signifie toujours, et ce quel que soit le programme, que l'excution s'est droule correctement. Il est possible de tester le code de retour d'une commande avec l'instruction if. La syntaxe la plus simple pour un test est la suivante : if commande ; then action fi O commande est la commande dont on dsire tester le code de retour, et action est la commande excuter si ce code vaut 0 (c'est--dire, si la commande commande s'est excute correctement). Il peut paratre rducteur de ne pouvoir tester que le code de retour d'une commande. Mais en fait, c'est une fonctionnalit trs puissante du shell, car elle permet de raliser tous les types de tests imaginables. En effet, il existe une commande spciale, [, qui permet de raliser divers types de tests sur les paramtres qu'on lui passe, et d'ajuster son code d'erreur en consquence. Par exemple, pour tester l'galit d'une variable d'environnement avec une chane de caractre, on utilisera la syntaxe suivante : if [ $variable == valeur ] ; then action fi Notez que dans cette syntaxe, le test effectu est une commande complte. Cela implique qu'il faut mettre une espace entre chaque paramtre, et en particulier entre le nom de la commande ([), le premier oprande ($variable), l'oprateur utilis (==), le deuxime oprande (valeur) et le caractre de marque de fin de test (]). La commande [ est capable d'effectuer tous les tests standards. Par dfaut, elle considre que les deux oprandes du test sont des chanes de caractres, et elle utilise l'ordre lexicographique pour les comparer. Les tests d'galit et d'ingalit sont effectus respectivement avec les oprateurs == et !=. Les oprateurs d'antriorit dans l'ordre lexicographique sont < et <=, et les oprateurs de postriorit sont > et >=. Notez que l'utilisation de ces oprateurs peut tre relativement pnible, parce que les caractres < et > sont interprts par le shell en tant que redirections. Par consquent, il faut souvent les prcder du caractre d'chappement antislash. L'ordre lexicographique convient dans la plupart des cas, mais il n'est pas trs appropri pour la comparaison de chanes de caractres. Par exemple, le test suivant : if [ -1 \< -2 ] ; then echo "-1 est plus petit que -2" fi est vrifi, car le caractre 1 prcde le caractre 2 dans l'ordre lexicographique. La commande [ fournit donc la possibilit d'utiliser une autre syntaxe pour comparer les entiers. Cette syntaxe utilise les options lt et gt respectivement pour les tests

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

91

M. Elie Degny Raphael

d'infriorit stricte et de supriorit stricte, et les options le et ge respectivement pour les tests d'infriorit et de supriorit ou d'galit. Ainsi, le test : if [ $i -gt 3 ] ; then echo "$i est suprieur 3" fi Permet de comparer la valeur entire de la variable i avec le nombre 3. Nous avons vu dans la la section intitule Les instructions composes que les oprateurs || et && permettent de tester le code de retour d'une commande, et qu'en fonction de la valeur de ce code de retour, d'excuter ou non la commande suivante. La syntaxe de ces oprateurs provient en fait de la possibilit de les employer pour effectuer des tests complexes avec l'instruction if. Par exemple, pour effectuer un ET logique entre deux tests, on utilisera la syntaxe suivante : if [ $i == "A" ] && [ $j -lt 3 ] ; then echo "i contient la lettre \"A\" et j contient un nombre infrieur 3" fi Notez que la deuxime commande [nest excute que si le premier test est vrifi. L'utilisation de l'oprateur || se fait selon le mme principe. Il est bien entendu possible de regrouper plusieurs commandes de test ensemble, l'aide de parenthses. Comme dans la plupart des langages informatiques, l'instruction if peut prendre des formes plus complexes pour traiter les cas o le test n'est pas vrifi. Ainsi, pour excuter une action spcifique pour le cas o le test serait faux, on peut utiliser la syntaxe suivante : if commande ; then action1 else action2 fi O commande est toujours la commande dont le code de retour sera test, action1 est l'action qui doit tre ralise si cette commande a renvoy le code de retour 0, et action2 la commande excuter dans le cas contraire. De mme, si l'on veut enchaner des tests, on utilisera le mot-cl elif. La syntaxe gnrale du test est donc la suivante : if commande1 ; then action1 elif commande2 ; then action2 elif commande3 ; then ... else actionn fi

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

92

M. Elie Degny Raphael

Note : Pour des raisons d'optimisation, le shell peut simuler le comportement du programme [, et viter ainsi de le lancer chaque fois qu'il a faire un test. Cependant, le principe originel tait bien celui dcrit ci-dessus, qui, bien que n'tant plus tout fait exact, permet de mieux comprendre la syntaxe du shell. Il est possible de rcuprer la valeur du code de retour de la dernire commande excute grce la variable spciale $?. Cependant, il est trs rare d'avoir manipuler cette valeur directement, car les structures de contrle du shell telles que if permettent d'effectuer les actions qui s'imposent sans avoir la connatre. Pour ceux qui savent programmer en C, sachez que le code de retour est la valeur renvoye par la fonction C exit ou par l'instruction return de la fonction principale main. Les paramtres de la ligne de commande, quant eux, sont rcuprables par l'intermdiaire des paramtres de la fonction principale main. Il ne faut pas oublier que la fonction premire du shell est de permettre les manipulations de fichiers. Il n'est donc pas tonnant que la commande [permette galement de raliser tous les tests imaginables sur les fichiers. Ces tests vont de l'existence d'un fichier sa nature et ses attributs, en passant par son propritaire et son groupe. La syntaxe gnrale de ces tests est la suivante : if [ option fichier ] ; then &vellip; fi O option est une option de la commande [ dcrivant la proprit teste, et fichier est le nom du fichier sur lequel le test doit porter. Les principales options utilisables dans les tests sur les fichiers sont rcapitules dans le tableau ci-dessous : Tableau 5-4. Tests sur les fichiers Option -e -d -f -s -L -b -c -p -r Signification Test d'existence d'un fichier ou d'un rpertoire. Test d'existence d'un rpertoire. Test d'existence d'un fichier normal. Test d'existence d'un fichier et vrification que sa taille est non nulle. Test d'existence d'un lien symbolique. Test d'existence d'un fichier spcial de priphrique de type block (disque dur, CD-ROM, lecteur de cassettes, etc.). Test d'existence d'un fichier spcial de priphrique de type caractre (port srie, port parallle, carte son...). Test d'existence d'un pipe. Test d'existence du fichier et d'accessibilit en lecture de ce fichier.
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 93

M. Elie Degny Raphael

Option -w -x -g -u -k -O -G -N

Signification Test d'existence du fichier et d'accessibilit en criture de ce fichier Test d'existence du fichier et de possibilit d'excution de ce fichier. Test d'existence du fichier et de prsence du bit setgid sur ce fichier. Test d'existence du fichier et de prsence du bit setuid sur ce fichier Test d'existence du fichier et de prsence du bit sticky sur ce fichier. Test d'existence du fichier et d'appartenance de ce fichier l'utilisateur effectif courant. Test d'existence du fichier et d'appartenance de ce fichier au groupe effectif courant. Test d'existence du fichier et de modification de ce fichier depuis la dernire fois qu'il a t lu.

Note : Ce tableau n'est pas exhaustif, mais les options les plus importantes et les plus utilises s'y trouvent. Vous pourrez vous rafrachir la mmoire sur les notions de bit setuid, setgid et sticky, ainsi que sur les notions d'utilisateur et de groupe effectif en relisant la la section intitule Scurit et utilisateurs dans Chapitre 3. La commande [accepte galement les options -nt et -ot, qui permettent respectivement de tester si un fichier est plus rcent ou plus vieux qu'un autre, en se basant sur les dates de dernire modification de ces fichiers. Ces deux oprateurs s'utilisent avec la syntaxe suivante : if [ fichier1 option fichier2 ] ; then &vellip; fi o fichier1 et fichier2 sont les deux fichiers sur lesquels la comparaison doit porter, et option est l'une des options -nt ou -ot. Le branchement conditionnel Lorsqu'on veut effectuer diffrentes oprations selon la valeur d'une variable, l'instruction if peut devenir trs lourde utiliser. En effet, si le nombre de valeurs diffrentes est grand, elle peut conduire crire un grand nombre de tests. Le shell fournit donc une instruction de branchement conditionnel, qui permet de spcifier quelle action doit tre prise pour chaque valeur de la variable. Le branchement conditionnel s'utilise de la manire suivante : case valeur in ( motif1 | motif2 | ... ) commande1 ;; ( motifn | motifn+1 | ... ) commande2 ;;
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 94

M. Elie Degny Raphael

&vellip; esac O motif1, motif2... motifn+1 sont des motifs spcifiant les valeurs possibles pour la valeur valeur, et commande1, commande2, etc. sont les commandes excuter pour les valeurs de ces motifs. La commande excute est la premire commande pour laquelle la variable correspond l'un de ses motifs correspondants. Une fois excute, la recherche se termine, et l'excution reprend la suite du branchement conditionnel. Par exemple ce branchement conditionnel : case $i in ( *.txt ) echo "$i est un fichier texte" ;; ( *.gz ) echo "$i est comprim avec gzip" ;; ( *.tar ) echo "$i est une archive" ;; esac affiche la nature du fichier dont le nom est stock dans la variable i partir de son extension. Le code de retour du branchement conditionnel est 0 si la variable ne correspond aucun des motifs, ou le code de retour de la commande excute sinon. Les boucles Il existe deux types de boucles : le while et le until. La syntaxe des boucles while est la suivante : while commande ; do action done O commande est une commande dont le code de retour est utilis comme critre de la fin de la boucle, et action est l'instruction (compose ou non) excute chaque itration de la boucle. Comme on le voit, le shell utilise le mme principe pour les boucles que pour les tests pour valuer une condition. Tant que la commande commande renvoie un code de retour gal 0, l'instruction action est excute. L'instruction until utilise la mme syntaxe que l'instruction while : until commande ; do action done ceci prs que l'instruction action est excute tant que la commande commande renvoie un code de retour non nul. L'instruction until utilise donc simplement le test inverse de celui de l'instruction while.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

95

M. Elie Degny Raphael

Bien entendu, il est possible d'utiliser la commande [ pour effectuer des tests plus complexes que le simple test du code de retour d'une commande. Par exemple, la boucle suivante calcule la somme des dix premiers entiers : result=0 i=0 while [ $i -le 10 ] ; do result=$(($result + $i)) i=$(($i + 1)) done echo $result Les itrations Les itrations sont des boucles qui s'excutent pour chaque lment d'un ensemble donn. Le shell gre les itrations par l'intermdiaire de l'instruction for. La syntaxe de cette instruction est la suivante : for variable [ in ensemble ] ; do action done O variable est un nom de la variable utilise pour l'itration, ensemble est l'ensemble des valeurs que peut prendre cette variable, et action est la commande (simple ou compose) excuter pour chaque valeur de cette variable. Le principe des itrations est trs simple. Pour chaque valeur indique dans l'ensemble des valeurs, la commande est excute, avec la valeur en question accessible dans la variable utilise pour l'itration. Par exemple, la commande suivante : for i in *.txt ; do mv $i ${i/%.txt/.doc} done permet de renommer tous les fichiers portant l'extension .txt en fichier du mme nom, mais avec l'extension .doc. Il n'est pas ncessaire de prciser l'ensemble des valeurs que peut prendre la variable. Dans ce cas, l'ensemble utilis sera celui de tous les paramtres du script ou de la fonctions. Nous verrons plus loin comment raliser des fonctions et des scripts, ainsi que la manire de rcuprer leurs paramtres. Les ruptures de squence Il est parfois ncessaire de modifier l'ordre d'excution dans les boucles et les itrations du shell. Par exemple, il est souvent ncessaire de sortir de la boucle courante, soit parce qu'on ne peut plus la continuer dans de bonnes conditions, soit parce que le traitement est termin. C'est notamment le cas lorsqu'une erreur se produit, ou lorsqu'on recherche une valeur spcifique en itrant sur les valeurs possibles d'un ensemble.
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 96

M. Elie Degny Raphael

Le shell fournit donc les instructions break et continue, qui permettent respectivement de sortir de la boucle courante et de passer directement l'itration suivante. Ces deux commandes peuvent tre utilises aussi bien l'intrieur des boucles while et until que dans les itrations crites avec l'instruction for. Par exemple, le calcul de la somme des dix premiers entiers aurait pu tre crit de la manire suivante : result=0 i=0 while true ; do result=$(($result + $i)) i=$(($i + 1)) if [ $i ==11 ] ; then break ; fi done echo $result Les instructions break et continue peuvent prendre un paramtre entier indiquant le niveau d'imbrication de la boucle sur laquelle elles s'appliquent. Ce paramtre doit imprativement tre suprieur sa valeur par dfaut, c'est--dire 1. Ainsi, pour sortir directement d'une double boucle lorsqu'on est dans le corps de la boucle la plus imbrique, on utilisera la commande suivante : break 2 Les fonctions Le langage du shell est un langage procdural. Cela signifie que l'on peut crer des fonctions pour regrouper des sries d'instructions couramment excutes. La syntaxe permettant d'crire de telles fonctions est la suivante : function nom () { instructions } O nom est le nom de la fonction, et instructions est la liste des commandes excuter dans cette fonction. Vous constaterez qu'il n'y a pas de dclaration des paramtres de cette fonction. C'est normal : les paramtres des fonctions sont passs implicitement dans les variables d'environnement $1, $2, $3, etc. En fait, comme nous le verrons plus loin, cette syntaxe est galement celle utilise pour rcuprer les paramtres de la ligne de commande des scripts shell. Cela signifie que les paramtres du script ne sont pas accessibles dans le corps d'une fonction, puisqu'ils sont masqus par les paramtres de la fonction. Les autres variables utilises dans les fonctions sont des variables globales. Celles qui sont dclares dans une fonction sont donc galement globales, et restent accessibles mme aprs l'excution de cette fonction. Si l'on veut dfinir des variables locales, on prcdera la dfinition de la variable du mot-cl local :
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 97

M. Elie Degny Raphael

local variable=valeur O variable est le nom de la variable locale, et valeur est sa valeur. Les fonctions peuvent retourner une valeur numrique en code de retour. Cette valeur peut tre indique l'aide de l'instruction return. Par exemple, la fonction suivante calcule la somme des entiers de 0 la valeur de l'entier qu'elle reoit en paramtre : function somme () { local result=0 local i=0 while [ $i -le $1 ] ; do result=$(($result + $i)) i=$(($i + 1)) done return $result } Ce code d'erreur pourra tre rcupr par l'appelant dans la variable d'environnement $? : somme 10 echo $? Les entres / sorties de donnes Tout langage de programmation qui se respecte dispose de possibilits d'entre / sortie pour permettre la communication avec l'utilisateur de manire interactive, et le shell n'chappe pas la rgle. Nous avons dj vu la commande echo dans bon nombre des exemples qui prcdaient, et vous avez sans doute devin qu'il s'agissait l de la commande qui permet d'afficher du texte l'cran. Son utilisation est des plus simples, puisqu'elle se contente d'envoyer sur le flux de sortie standard une chane de caractres contenant tous les paramtres qu'elle reoit, spars par des espaces. Nous ne nous attarderons donc pas sur cette commande, qui n'a pas d vous poser de problme jusqu' prsent. Il ne nous reste donc plus qu' voir la manire de demander l'utilisateur de saisir une valeur. Avec bash, la demande de saisie des donnes se fait classiquement l'aide de la commande read. Cette commande lit une ligne sur le flux d'entre standard, la dcoupe en une ou plusieurs donnes et place les rsultats dans les variables d'environnement qu'elle reoit en paramtre. La syntaxe de read est donc la suivante : read variable1 variable2 ... variablen O variable1, variable2, etc. sont les noms des variables d'environnement dans lesquelles les rsultats de la saisie doivent tre placs.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

98

M. Elie Degny Raphael

La commande read utilise les sparateurs indiqus dans la variable d'environnement IFS pour dcouper la ligne lue dans le flux d'entre standard. Si le nombre de variables spcifi est infrieur au nombre de mots de cette ligne aprs dcoupage, les premires variables d'environnement reoivent les premiers mots, et la dernire reoit le reste de la commande. Par exemple, la commande suivante : read MOT RESTE permet de lire le premier mot d'une ligne dans la variable d'environnement MOT et de placer le reste dans la variable RESTE. La commande read dispose d'une syntaxe simplifie, qui ne prend aucun paramtre. Dans ce cas, la ligne lue dans le flux d'entre standard est place telle quelle dans la variable d'environnement REPLY. Il est la charge du programmeur d'analyser son contenu. Le shell dispose galement d'une instruction volue permettant de raliser des menus simplifis : l'instruction select. Cette instruction construit un menu partir d'un certain nombre de choix, chaque choix tant prcd par un numro, et demande l'utilisateur de taper le numro de son choix. Elle affecte alors la valeur du choix correspondant une variable d'environnement, et excute une commande pour le traitement du choix. La syntaxe gnrale de l'instruction select est donne ci-dessous : select variable in liste ; do action done O variable est le nom de la variable devant recevoir la valeur choisie par l'utilisateur, liste est la liste des valeurs que cette variable peut prendre, et action est la liste des instructions excuter pour chaque choix effectu. Si le choix de l'utilisateur est incorrect, la variable de contrle reoit la valeur nulle. Le programmeur peut rcuprer la valeur saisie par l'utilisateur dans la variable d'environnement REPLY et effectuer un traitement d'erreur appropri. L'instruction select est une boucle. Le menu est repropos aprs chaque excution de l'action action. La sortie de cette boucle ne peut se faire que si un caractre de fin de fichier (CTRL + D) est lu sur le flux d'entre standard, ou si une option de menu spcifique est propose pour quitter cette boucle. Vous trouverez un exemple de menu simplifi ci-dessous : select LU in A B C D Sortir; do case $LU in ("A") echo "Vous avez choisi A" ;; ("B") echo "Vous avez choisi B" ;; ("C") echo "Vous avez choisi C" ;; ("D") echo "Vous avez choisi D" ;; ("Sortir") break ;;

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

99

M. Elie Degny Raphael

esac done Les alias Il est incontestable que certaines commandes peuvent avoir une grande complexit, et il peut tre fastidieux de les retaper compltement chaque fois que l'on en a besoin. D'autre part, la saisie d'une longue ligne de commande multiplie les risques de fautes de frappe et d'avoir corriger la commande. Cela peut au mieux faire perdre son temps l'utilisateur, et au pire l'nerver. Le shell fournit donc un mcanisme simplifi pour donner un nom simplifi aux commandes complexes : le mcanisme des alias. Les alias reprsentent en fait des chanes de caractres complexes, et sont remplacs automatiquement par le shell lorsqu'il analyse les lignes de commandes. C'est un mcanisme plus souple que celui des variables d'environnement, et qui permet de dfinir des macro-commandes plus facilement qu'avec les fonctions du shell. Pour crer un alias, vous devrez utiliser la syntaxe suivante : alias nom=chane O nom est le nom de l'alias, et chane est la chane de caractres reprsente par cet alias. Par exemple, pour faire un alias nomm beep permettant de faire un bip sonore, on pourra utiliser la commande suivante : alias beep="echo $'\a'" Cet alias pourra tre simplement utilis simplement en tapant beep en ligne de commande. Vous pouvez visualiser la liste des alias existant simplement l'aide de la commande alias, appele sans paramtre. Je vous recommande de consulter cette liste, pour vous donner une ide des alias courants, qui se rvlent gnralement trs utiles. La suppression des alias se fait l'aide de la commande unalias. Sa syntaxe est la suivante : unalias nom O nom est le nom de l'alias supprimer. Note : Les alias ne sont remplacs par la chane de caractres qu'ils reprsentent que lorsque le shell analyse la ligne de commande. Cela signifie que les dfinitions d'alias ne sont valides qu'aprs validation de cette ligne. On vitera donc de dfinir des alias dans la dclaration d'une instruction compose, car cet alias ne sera pas disponible l'intrieur de son propre bloc d'instructions. Par dfaut, les alias ne sont disponibles que dans les shells interactifs. Ils ne peuvent donc pas tre utiliss dans les scripts shell. La notion de script shell est dtaille dans la la section intitule Les scripts shell.
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 100

M. Elie Degny Raphael

Les scripts shell Pour l'instant, toutes les fonctionnalits de bash, aussi puissantes soient-elles, ne constituent que l'interface d'un interprteur de commande puissant. Mais nous avons dit que le shell tait vritablement un langage de programmation. Cela signifie qu'il est possible d'crire des programmes complexes en langage shell, simplement en stockant plusieurs commandes dans un fichier. On appelle ces fichiers des scripts shell. L'criture d'un script shell n'est pas plus complique que de taper les commandes du programme les unes la suite des autres dans un shell interactif. La seule diffrence est que les scripts shell peuvent tre rejous plusieurs fois, recevoir des paramtres en ligne de commande et renvoyer un code de retour. Tout script shell est en fait un fichier texte sur lequel on a mis les droits d'excutions. Il contient les diffrentes commandes du shell qu'il doit excuter. Sa premire ligne est trs importante, elle permet d'indiquer au shell excutant quelle est la nature du fichier. La syntaxe de cette ligne est la suivante : #!shell O shell est le chemin absolu sur le shell ou l'interprteur de commande capable d'excuter ce script. En pratique, pour bash, on utilisera toujours la ligne suivante : #!/bin/bash Les paramtres des scripts shells sont accessibles exactement comme des paramtres de fonction. On rcuprera donc le premier paramtre avec l'expression $1, le deuxime avec l'expression $2, le troisime avec l'expression $3, etc. Le code de retour d'un shell pourra tre fix l'aide de la commande exit. Par exemple : exit 0 Ce code de retour pourra tre rcupr par l'appelant l'aide de l'expression $?. Nous n'irons pas plus loin dans la description du shell bash, car ce n'est pas le but de ce document. Vous pouvez vous rfrer un bon livre d'Unix ou aux pages de manuel si vous dsirez approfondir le sujet. Comme vous avez d vous en rendre compte dans cette section, les shells Unix sont des vritables langages de programmation, qui dpassent de trs loin les interprteurs de commandes du type DOS. De plus, il existe plusieurs autres langages dont nous n'avons pas parl ici, chacun tant conu souvent pour raliser un certain type de tche (administration systme, manipulation de fichiers textes, cration de pages Web dynamiques, cration d'interfaces utilisateurs en mode fentr, pilotage d'applications, etc.). Si vous vous y intressez, vous verrez que le sujet est rellement vaste et passionnant.

Chapitre 5. CONFIGURATION DU SYSTEME DE BASE


www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 101

M. Elie Degny Raphael

La configuration du systme de base est un peu moins sensible que son installation. En pratique, les oprations de configuration consisteront manipuler les fichiers de configuration du systme. Les seuls risques que l'on encourt sont de les dtruire, et donc de devoir les recrer manuellement. C'est pour cette raison que nous allons commencer par les sauvegarder, afin de pouvoir revenir l'tape de configuration du systme de base sans repasser par la case dpart. Cela dit, il se peut fort bien que le programme d'installation ou le programme de configuration de votre distribution vous permette d'viter cette tche. Dans ce cas, il vous sera sans doute demand de rpondre quelques questions, et ce programme effectuera les modifications pour vous. Il est d'ailleurs recommand de toujours essayer la configuration du systme avec un tel programme, car lui seul connat les spcificits de votre distribution (puisqu'il est fourni avec !). Malheureusement, ces programmes ne peuvent pas tout prvoir, parce que Linux est un systme capable d'effectuer un nombre de tches trs diversifi d'une part, et parce que ce que vous voulez en faire personnellement ne correspond pas forcment un standard prdtermin d'autre part. Cette partie dcrira le mcanisme gnral d'amorage des systmes Linux et les commandes d'administration les plus importantes. Elle dcrira galement comment ajouter des priphriques additionnels (clavier, souris, cartes son, vido, rseau, imprimante) et comment les configurer pour obtenir un fonctionnement correct sous Linux. Cependant, la premire tape est bien entendu de faire une sauvegarde de tous les fichiers de configuration, car la moindre erreur peut provoquer de lourdes consquences (jusqu' la rinstallation complte du systme). Sauvegarde de la configuration d'installation La sauvegarde de la configuration du systme est une opration facile raliser. En effet, tous les fichiers de configuration sont placs dans le rpertoire /etc/. Par consquent, il suffit de faire une archive des fichiers de ce rpertoire et de ses sousrpertoires. Cette opration peut tre ralise avec la commande suivante : tar cvfz /root/install.conf.tar.gz /etc/* Cette commande crera une archive nomme install.conf.tar.gz dans le rpertoire personnel de l'administrateur systme. On notera que, pour certaines distributions, quelques fichiers de configuration sont placs dans le rpertoire /sbin/init.d/. Pour ces distributions, on utilisera donc plutt la commande suivante : tar cvfz /root/install.conf.tar.gz /etc/* /sbin/init.d/* De cette manire, si l'on a un gros problme avec la configuration de la machine, on peut revenir simplement la configuration utilise juste aprs l'installation du systme avec la simple commande suivante : tar xvfz /root/install.conf.tar.gz que l'on excutera dans la racine du systme de fichiers.
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 102

M. Elie Degny Raphael

Cette commande crasera tous les fichiers existants par ceux de la sauvegarde. Les fichiers qui ont t ajouts depuis cette sauvegarde seront bien entendu conservs. Il est galement recommand de faire une sauvegarde identique celle-ci une fois que l'on aura russi configurer le systme correctement, et que thoriquement, il n'y aura plus toucher aux fichiers de configuration. Cette sauvegarde devrait tre place sur une disquette que l'on conservera en lieu sr. Notion de niveau d'excution La plupart des systmes Unix utilisent la notion de niveaux d'excution. Un niveau d'excution est un mode de fonctionnement dans lequel un certain nombre de services sont accessibles. En gnral, il existe 7 niveaux d'excution, dont seulement trois fournissent des services bien dfinis pour quasiment toutes les distributions de Linux. Le niveau 0 correspond l'arrt du systme, et aucun service n'est disponible ( part le redmarrage de la machine bien entendu...). Le fait de passer dans le niveau d'excution 0 correspond donc arrter le systme. Le niveau 6 correspond au redmarrage de la machine. Le fait de passer dans le niveau d'excution 6 revient donc arrter et redmarrer la machine. Le niveau d'excution 1 correspond au mode de fonctionnement mono-utilisateur (encore appel mode de maintenance). Ce niveau d'excution fournit les services de base pour un seul utilisateur (normalement l'administrateur du systme). Dans ce niveau d'excution, l'administrateur peut changer la configuration et effectuer les tches de maintenance les plus critiques (par exemple, contrler la partition root). La signification des autres niveaux d'excution dpend de la distribution que vous utilisez, mais en gnral, le niveau d'excution 2 correspond au mode multi-utilisateurs avec rseau sans XWindow, et le niveau d'excution 3 ou 4 correspond au mode multiutilisateur avec login graphique sous XWindow. Les autres niveaux restent votre disposition. Le programme en charge de grer les niveaux d'excution est le programme init . Ce programme est le premier programme lanc par le noyau aprs qu'il a dmarr. Il ne peut pas tre dtruit, et c'est rellement le processus pre de tous les autres dans le systme. Le rle d'init est de rcuprer les processus zombies (c'est--dire les processus qui viennent de se terminer et dont le processus pre s'est termin avant eux) et de grer les changements de niveau d'excution. Il suffit d'utiliser la syntaxe suivante pour forcer le changement de niveau d'excution : init niveau O niveau est le niveau d'excution atteindre. Cela dit, cette manire de faire est assez rare, car en gnral on n'a pas besoin de changer de niveau d'excution, sauf pour arrter et redmarrer la machine. Mais pour ces oprations, les commandes shutdown, halt et reboot sont dj disponibles. init utilise le fichier de configuration /etc/inittab. Ce fichier dfinit les niveaux d'excution, le niveau par dfaut dans lequel le systme se place au dmarrage, et les
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 103

M. Elie Degny Raphael

actions qu'init doit prendre lorsque certains vnements arrivent. En particulier, il est indiqu quels sont les scripts qui doivent tre excuts lors du changement de niveau d'excution. Il est fortement, mais trs fortement, dconseill de toucher au fichier /etc/inittab pour des raisons bien videntes. Vous trouverez de plus amples renseignements dans les pages de manuel d'init et d'inittab. Lorsqu'on change de niveau d'excution, ainsi qu'au dmarrage du systme, des scripts de configuration sont appels. Comme on l'a vu, ces scripts sont spcifis dans le fichier /etc/inittab. En gnral, ils sont tous placs dans le rpertoire /etc/rc.d/ (ou /sbin/init.d/, selon votre distribution). Ce rpertoire contient donc :

le script excut lors du dmarrage du systme ; les scripts excuts lors de la sortie d'un niveau d'excution ; les scripts excuts lors de l'entre dans un niveau d'excution.

Le script appel lors du dmarrage du systme est en gnral spcifi directement dans /etc/inittab. Vous pouvez y ajouter les commandes spcifiques votre systme, comme par exemple les commandes de configuration du matriel. Ce fichier n'est excut qu'une seule fois et est plac directement dans /etc/rc.d/ (ou dans /sbin/init.d/). En revanche, les scripts appels lors du changement de niveau d'excution sont souvent placs dans des sous-rpertoires du rpertoire rc.d ou init.d. Ils sont classs raison d'un rpertoire par niveau d'excution. Ces sous-rpertoires portent le nom de rc0.d, rc1.d, rc2.d, etc. pour les diffrents niveaux d'excution. En fait, un seul script est excut par init lorsqu'on change de niveau d'excution, et ce script se charge d'excuter les bons scripts dans les sous-rpertoires de rc.d ou init.d. Classiquement, ce script principal est appel avec le numro du niveau d'excution en paramtre, et il commence par appeler les scripts de sortie du niveau d'excution courant, puis les scripts d'entre dans le nouveau niveau d'excution. La distinction entre les scripts d'entre et de sortie dans chaque rpertoire rc?.d se fait par la premire lettre du script. Sur certaines distributions, la lettre 'K' correspond aux scripts de sortie et la lettre 'S' au script d'entre (ces deux lettres correspondent respectivement aux mots anglais Kill et Start ). De plus, l'ordre dans lequel ces scripts doivent tre excuts est indiqu par le nombre suivant cette lettre dans le nom du script. Cela dit, ces conventions peuvent varier selon votre distribution. Consultez votre documentation pour plus de dtails ce sujet. Il est assez courant que les rpertoires rc?.d ne contiennent que des liens symboliques vers les fichiers de scripts, et que ceux-ci soient tous placs directement dans le rpertoire /etc/rc.d/ (ou /sbin/init.d/). La raison en est qu'un mme script peut tre utilis pour diffrents niveaux d'excution, et qu'il n'a donc pas de raison d'tre dans le rpertoire d'un niveau plutt que celui d'un autre.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

104

M. Elie Degny Raphael

De mme, il est assez courant que chacun de ces scripts gre la fois l'entre et la sortie du niveau d'excution, selon le paramtre qu'il reoit lors de son appel. Parmi les paramtres les plus courants, on retrouve les suivants :

start, pour le dmarrage du service correspondant ; stop, pour son arrt.

Ce sont les deux paramtres que le script de contrle de changement de niveau d'excution (celui appel par init et enregistr dans /etc/inittab) utilisera lors de l'entre et de la sortie du niveau d'excution. Il existe d'autres paramtres, comme par exemple restart, pour redmarrer le service correspondant. De cette manire, vous pouvez ajouter ou supprimer des services simplement dans chaque niveau d'excution. Il suffit d'crire un fichier script capable de prendre en paramtre l'action raliser sur le service (start ou stop), de le placer dans /etc/rc.d/ (ou /sbin/init.d/) et de crer les liens dans les sous-rpertoires /etc/rc.d/rc?.d/ (ou /sbin/init.d/rc?.d/). Ds lors, votre service sera arrt ou redmarr selon le niveau d'excution dans lequel passera le systme. La rdaction des scripts shells de configuration dpasse largement le cadre de ce document, de mme que la configuration du comportement du systme chaque changement de niveau d'excution. La description qui tait donne ici permet simplement d'avoir une ide plus claire de la manire dont le systme se comporte au dmarrage et l'arrt. Consultez la documentation de votre distribution pour plus de dtails ce sujet Notion de fichiers spciaux de priphriques Comme il a dj t expliqu dans les chapitres prcdents, Linux gre tous les priphriques comme des fichiers spciaux. Cela simplifie normment leur utilisation par les programmes d'application, puisque la plupart des oprations sur un priphrique reviennent simplement raliser une criture ou une lecture. videmment, l'criture sur un fichier spcial de disque permet d'enregistrer les donnes sur ce disque, et la lecture permet de les rcuprer. Mais cela ne s'arrte pas l ! Par exemple, la communication avec le modem se fait simplement en crivant et en lisant les donnes sur le fichier spcial du port srie sur lequel le modem est connect. De mme, jouer un fichier son revient simplement l'crire dans le fichier spcial qui gre la carte son. Il est mme possible d'accder la mmoire vido par l'intermdiaire d'un fichier spcial de priphrique... Bien entendu, certaines fonctionnalits avances des priphriques ne peuvent pas tre utilises simplement par une une criture ou une lecture dans un fichier spcial. Le systme fournit donc aux applications d'autres moyens d'accder ces fonctionnalits, par l'intermdiaire d'appels systmes spcifiques (pour ceux qui sont intresss par la programmation systme, cet appel systme est ralis par la fonction ioctl, dont le nom provient de l'abrviation de l'anglais Input / Output ConTroL ). videmment, cette mthode n'est utilise que par les programmes qui connaissent bien le fonctionnement du
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 105

M. Elie Degny Raphael

gestionnaire du priphrique, car ils doivent spcifier une requte que seul ce gestionnaire comprend en gnral. Quoi qu'il en soit, les requtes de ce type utilisent elles aussi un descripteur de fichier spcial de priphrique, ce qui fait que tous les accs au matriel ont lieu par l'intermdiaire de ces fichiers. Il existe deux principaux types de fichiers spciaux de priphrique. Le premier type correspond aux priphriques de type bloc, dont les donnes ne peuvent tre lues que par blocs (c'est le cas des disques durs, des lecteurs de CD et de disquettes en particulier). Le deuxime type correspond aux priphriques de type caractre, dont les donnes peuvent tre lues caractre par caractre (cartes son, ports srie, etc.). En plus de son type, chaque fichier spcial de priphrique est caractris par deux codes permettant d'identifier le type et le modle du priphrique auquel il donne accs. Ces deux codes portent le nom de code majeur et de code mineur. Comme nous le verrons plus tard, c'est par l'intermdiaire de ces codes que le noyau est capable de retrouver le gestionnaire de priphrique utiliser pour satisfaire aux requtes des clients qui accdent un fichier spcial de priphrique. Il y a donc, en gnral, une association unique entre ces codes et les gestionnaires de priphriques. La liste des codes majeurs et mineurs dj affects des priphriques est donne dans le fichier /usr/src/linux/Documentation/devices.txt (ce fichier vous donnera donc une ide des priphriques qui peuvent tre ou qui seront grs par Linux). Les fichiers spciaux de priphriques sont tous stocks dans le rpertoire /dev/. En gnral, ce rpertoire contient un grand nombre de fichiers spciaux de priphriques, mme pour des priphriques inexistants sur votre machine. Ces fichiers sont installs automatiquement par les distributions, qui laissent au noyau le soin de signaler que le priphrique est absent lorsqu'un programme tente d'accder une fichier spcial auquel aucun matriel ne correspond. Les fichiers fournis par les distributions sont donc, en thorie, susceptibles de couvrir toutes les gammes de priphriques courants, et vous n'aurez pas toucher au rpertoire /dev/. Cependant, si vous devez crer un fichier spcial de priphrique vous-mme, vous devrez utiliser la commande mknod. Sa syntaxe est relativement simple : mknod fichier type majeur mineur O fichier est le nom du fichier spcial de priphrique crer, type est une lettre indiquant le type du fichier spcial ('c' pour les fichiers de type caractre et 'b' pour les fichiers de type bloc), et majeur et mineur sont les codes majeur et mineur du priphrique. Depuis la version 2.4.0 du noyau, il est galement possible que le rpertoire /dev/ contienne un systme de fichiers virtuel, gr par le noyau. Ce systme de fichiers est peupl automatiquement par le noyau avec les fichiers spciaux de priphriques de tous les priphriques dtects lors de l'initialisation du systme. Cette technique permet de rsoudre plusieurs problmes concernant les fichiers spciaux de priphriques. Le plus vident pour l'utilisateur est que seuls les fichiers spciaux des priphriques effectivement prsents apparaissent dans le rpertoire /dev/, ce qui limine la prsence de tous les fichiers spciaux inutiles.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

106

M. Elie Degny Raphael

Le gros avantage du systme de fichiers virtuel /dev/ est que les fichiers spciaux sont crs par les gestionnaires de priphriques eux-mmes. Cela implique que l'association entre les fichiers spciaux et les gestionnaires de priphriques du noyau qui en ont la charge est directe, et ne ncessite plus d'avoir recours aux codes majeurs et mineurs. Cela a plusieurs consquences : il n'y a plus besoin d'avoir recours une autorit centrale pour obtenir les valeurs de codes mineurs et majeurs. Les fichiers spciaux de priphriques continuent d'avoir des codes majeurs et mineurs bien qu'ils ne soient plus ncessaires, mais les valeurs de ces codes sont attribues dynamiquement de manire unique par le noyau lorsque les gestionnaires de priphriques s'initialisent. Il n'y a donc plus de risques de conflits entre deux priphriques ; la limitation du nombre de priphriques due au nombre limit de codes majeurs et mineurs n'existe plus (il suffit de consulter la liste du fichier /usr/src/linux/Documentation/devices.txt pour constater qu'il reste peu de codes libres pour les priphriques venir) ; les performances sont suprieures, puisque la recherche du priphrique associ un fichier spcial de priphrique n'a plus lieu ; la configuration du systme en est simplifie.

Par ailleurs, le systme de fichiers virtuel est beaucoup plus structur que le rpertoire /dev/ classique, car les fichiers spciaux de priphriques sont classs par type et par nature. Ce systme de fichiers constitue donc une image logique et cohrente de l'architecture du matriel de l'ordinateur. Ainsi, la recherche d'un priphrique est beaucoup plus facile. En revanche, les chemins sur les fichiers spciaux de priphriques sont nettement plus longs que les chemins classiques. Par exemple, le fichier spcial de priphrique /dev/hda1 permettant d'accder la premire partition du premier disque IDE sera accessible avec le chemin /dev/ide/host0/bus0/target0/lun0/part1 dans le systme de fichiers virtuel. Ce changement dans la structure du rpertoire /dev/ est un changement de taille, propre empcher la plupart des applications systme de fonctionner normalement. C'est pour rsoudre ce problme que le dmon devfsd a t crit. Ce dmon, s'il est lanc juste aprs que le systme de fichiers virtuel a t cr (donc, en pratique, dans les premiers scripts de dmarrage du systme), surveille la cration des fichiers spciaux de priphriques dans le systme de fichiers virtuel et permet ainsi d'effectuer des actions spcifiques lorsqu'un gestionnaire de priphrique s'enregistre ou se dcharge du niveau. Les actions effectuer sont spcifies dans le fichier de configuration /etc/devfsd.conf. Par dfaut, le dmon devfsd cre des liens symboliques portant les noms des anciens fichiers spciaux de priphrique vers les fichiers du systme de fichiers virtuel. Ainsi, les anciennes applications peuvent continuer utiliser les anciens noms de fichiers spciaux pour accder aux priphriques. La suite de ce document utilisera donc les noms de fichiers spciaux de priphriques classiques. Vous devrez faire la transcription pour toutes les commandes manipulant les priphriques si vous utilisez le systme de fichiers virtuel avec sa nouvelle structure.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

107

M. Elie Degny Raphael

Note : Un dmon est un processus qui tourne en arrire plan dans le systme. Les dmons fonctionnent souvent dans le compte root et offrent des services de base que les autres programmes utilisent. Le terme dmon provient de la traduction littrale daemon , ce qui signifie ange en ralit. Le dmon se place donc en tant qu'intermdiaire entre Dieu (c'est--dire le noyau) et les hommes (c'est--dire les applications normales). Le terme daemon a t ensuite clairci et dfini comme l'acronyme de l'anglais Disk And Execution MONitor . Mme si votre distribution utilise le systme de fichiers virtuel /dev/, il se peut que vous ayez crer des fichiers spciaux manuellement. Cela peut tre ncessaire pour crer un fichier spcial de priphrique pour un gestionnaire qui ne gre pas encore le systme de fichier virtuel /dev/. La syntaxe utiliser est strictement la mme que dans le cas des fichiers spciaux classiques. Je vous invite consulter la page de manuel de la commande mknod si vous devez crer vous-mme un fichier spcial de priphrique. Ce ne sera normalement pas ncessaire. Vous pouvez galement obtenir de plus amples informations sur le dmon devfsd et son fichier de configuration dans la page de manuel devfsd. Configuration de LILO L'installation de LILO est quasiment un passage oblig sur les ordinateurs utilisant Linux, car c'est l'un des gestionnaires d'amorage les plus puissants. Il permet de dmarrer Linux comme tout autre systme d'exploitation trs simplement, en donnant le nom du systme lancer lors de l'amorage. Il est bien entendu possible de lancer un systme par dfaut, et de donner un temps d'attente avant de choisir cette option si l'utilisateur n'a rien saisi. LILO est constitu de deux parties. La premire partie peut s'installer sur le secteur principal d'amorage du disque dur ( MBR ), ou sur le secteur de boot de n'importe quelle partition. Comme on l'a dj indiqu plus haut, il est fortement recommand d'installer cette partie de LILO sur le secteur de boot de la partition Linux, afin d'viter qu'elle ne soit crase par le DOS ou par Windows. La deuxime partie est enregistre directement dans la partition Linux. Elle contient les informations ncessaires pour pouvoir charger les diffrents systmes d'exploitation grs. Bien entendu, la premire partie est capable de retrouver directement la deuxime sur le disque dur, car lors de l'amorage, les systmes de fichiers de Linux ne sont pas encore chargs. LILO utilise le fichier de configuration /etc/lilo.conf. Ce fichier contient la description des diffrents systmes d'exploitation que LILO doit proposer au dmarrage. Les options les plus importantes de ce fichier sont les suivantes : l'option boot, qui permet d'indiquer sur quel secteur d'amorage LILO doit s'installer. Cette option suit la syntaxe suivante :

boot = destination

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

108

M. Elie Degny Raphael

O destination est le fichier spcial du priphrique sur lequel LILO va s'installer. Ainsi, si l'on prcise /dev/hda, LILO va s'installer sur le MBR du premier disque du premier contrleur de disques IDE. De mme, /dev/hda3 demande LILO de s'installer sur le secteur de boot de la troisime partition de ce mme disque ; l'option read-only permet de demander au noyau de monter la partition root en lecture seule lors du dmarrage. Cette option est ncessaire pour que les scripts de dmarrage du systme puissent effectuer les vrifications du systme de fichier de cette partition si ncessaire. La partition sera remonte en lecture et en criture une fois ces vrifications ralises ; l'option prompt permet LILO de demander le systme lancer chaque dmarrage. Cette option force donc l'apparition du message d'invite de LILO au dmarrage : LILO boot: auquel on pourra rpondre en tapant le nom de la configuration lancer ; l'option timeout permet de fixer un dlai au del duquel LILO lancera la premire configuration dfinie dans le fichier lilo.conf. La syntaxe de cette option est la suivante :

timeout = diximes O diximes est le nombre de diximes de secondes attendre avant le lancement du systme. La suite du fichier lilo.conf dcrit les diffrentes configurations que LILO peut lancer. Les sections de configuration permettant de charger Linux ont le format suivant : image = noyau root = root_device label = nom O noyau est le chemin complet sur le noyau de Linux charger, root_device est le nom complet du fichier spcial de priphrique contenant le systme de fichier root et nom est le nom de la configuration tel qu'il devra tre saisi l'invite de LILO. L'exemple donn ci-dessous permet de charger le noyau /boot/vmlinuz en utilisant la partition /dev/hda2 comme partition racine : image = /boot/vmlinuz root = /dev/hda2 label = linux Si vous dsirez crer une section de configuration permettant de lancer un systme DOS (ou Windows 9x), vous pouvez utiliser le modle suivant : other = partition table = disque label = nom

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

109

M. Elie Degny Raphael

O partition est la partition o se trouve le systme DOS lancer, disque est le disque contenant la table des partitions utilise par ce systme, et nom est le nom de cette configuration. Vous pouvez vous inspirer de l'exemple fourni ci-dessous : other = /dev/hda1 table = /dev/hda label = dos Qui permet de lancer le systme situ sur la premire partition du premier disque IDE. L'exemple donn ci-dessous permet de donner la possibilit de charger Linux ou le DOS, en lanant Linux par dfaut au bout de 10 secondes. Le DOS est install sur la premire partition, et Linux utilise la deuxime et la troisime partition respectivement pour y stocker son noyau et sa partition racine. LILO est ici install sur la partition contenant le noyau de Linux : # Exemple /etc/lilo.conf : de fichier de configuration

# Options gnrales : boot = /dev/hda2 read-only prompt timeout=100 # Premire configuration (Linux) : image = /dev/hda2 root = /dev/hda3 label = linux # Deuxime configuration (DOS) : other = /dev/hda1 table = /dev/hda label = dos Remarquez que si l'on utilise /dev/hda la place de /dev/hda2 aprs l'option boot, LILO s'installera sur le MBR du disque et non pas sur le secteur de boot de Linux. Dans ce cas, vous prendrez des risques si vous rinstallez le systme DOS, car celui-ci crasera le MBR de votre disque, supprimant ainsi LILO. Si vous dsirez poursuivre dans cette voie (ce qui peut tre ncessaire si Linux est install sur un disque esclave par exemple), vous pouvez raliser une sauvegarde de votre MBR l'aide de la commande suivante : dd if=/dev/hda of=fichier bs=512 count=1 O fichier est le nom du fichier devant recevoir l'image du MBR. La restauration de votre MBR pourra alors tre effectue simplement avec la commande inverse : dd if=fichier of=/dev/hda bs=512 count=1

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

110

M. Elie Degny Raphael

Note : ATTENTION ! Cette dernire commande crit de manire directe le contenu du fichier sur les secteurs du disque dur ! La moindre erreur peut donc provoquer l'crasement TOTAL de votre disque dur par des donnes alatoires, ou, dans le meilleur des cas, la perte de toutes vos partitions. Fates donc extrmement attention ce que vous tapez et relisez trois fois, non, quatre, la page de manuel de la commande dd avant d'excuter cette commande... L'installation de LILO est trs simple une fois que l'on a crit le fichier lilo.conf. En effet, il suffit tout simplement de taper la commande suivante : lilo Si lilo signale une erreur, il vaut mieux ne pas insister et corriger le fichier lilo.conf. Lorsque la machine dmarre, LILO affiche son invite de dmarrage : LILO boot: Il attend ici que vous indiquiez le nom du systme que vous dsirez dmarrer. Attention, le clavier est ici en amricain, et la disposition des touches est donc QWERTY. Vous devez ici taper le nom du systme charger et valider : LILO boot:linux Si vous ne tapez rien, et que vous avez donn un dlai d'attente dans le fichier de configuration de LILO, la premire configuration sera lance automatiquement aprs ce dlai. Il est possible de spcifier des paramtres de dmarrage la suite du nom du systme utilis. Ces paramtres servent principalement renseigner le noyau sur la configuration matrielle (en particulier les ports d'entre/sortie et les lignes d'interruption des priphriques non Plug and Play), pour le cas o il ne parviendrait pas la dterminer automatiquement. L'un des paramtres les plus intressants est sans doute mem, qui permet d'indiquer au noyau la taille de la mmoire vive dont dispose l'ordinateur. Ce paramtre peut tre ncessaire si vous disposez de plus de 64 Mo de mmoire, parce que les fonctions du BIOS ne permettent pas d'indiquer les tailles de mmoire plus grandes. Par exemple, si votre ordinateur dispose de 128 Mo de mmoire, vous devrez taper la ligne de paramtres suivante au dmarrage : LILO boot:linux mem=128M Bien entendu, il est possible d'enregistrer ces paramtres dans le fichier de configuration de LILO. Pour cela, il suffit d'indiquer le paramtre de dmarrage du noyau dans une ligne append de la section de configuration de Linux : append="paramtre" Ainsi, la section de configuration de Linux du fichier lilo.conf exemple donn cidessus pourrait tre remplace par celle-ci sur une machine disposant de 128 Mo de mmoire : # Premire configuration (Linux) : image = /dev/hda2
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 111

M. Elie Degny Raphael

root = /dev/hda3 label = linux append="mem=128M" Le niveau d'excution dans lequel le systme doit se placer lors de son dmarrage peut galement tre prcis en paramtre du noyau lors du dmarrage. Vous devrez donc utiliser une commande semblable celle-ci : LILO boot:linux niveau pour dmarrer Linux dans le niveau d'excution niveau. Ainsi, pour passer en mode mono-utilisateur (c'est--dire le mode de maintenance), il suffit de taper la commande suivante l'amorage de LILO : LILO boot:linux 1 Il est galement possible d'utiliser le paramtre single, qui est synonyme du niveau d'excution 1. Gestion des systmes de fichiers La gestion des systmes de fichiers par Linux est extrmement volue, car il est capable de prendre en charge plusieurs types de systmes de fichiers diffrents. Ces systmes de fichiers doivent subir l'opration de montage avant de pouvoir tre utiliss. Le montage est l'opration qui consiste associer un rpertoire au point d'entre d'un systme de fichiers. Les donnes de ce systme sont alors accessibles partir de ce rpertoire. L'opration de montage permet de raliser une abstraction du support des systmes de fichiers, qui peuvent donc se trouver aussi bien sur disque qu'en mmoire ou que sur un rseau, mais peut se rvler ennuyante pour les systmes de fichiers couramment utiliss. C'est pour cette raison qu'il existe un mcanisme de montage automatique pour les systmes de fichiers les plus utiliss. Cette section vous prsentera les oprations de base sur les systmes de fichiers sur disque, car ce sont les plus courants. Vous y trouverez la description de la manire de paramtrer les disques durs IDE, de vrifier un systme de fichiers et de monter automatiquement les systmes de fichiers les plus utiliss au dmarrage du systme. La description des systmes de fichiers rseau sera donne dans le chapitre traitant de la configuration rseau.
Configuration des disques durs IDE

Les disques durs IDE ont longtemps souffert d'un gros dfaut par rapport aux disques SCSI : celui de ne pas pouvoir effectuer des oprations sans l'intervention du processeur. En effet, l'envoi des donnes aux disques se faisaient classiquement par de nombreuses critures dans les ports d'entre / sortie des contrleurs de disque, obligeant ainsi le systme consacrer une part importante des ressources processeur uniquement pour les accs disque. Inversement, les priphriques SCSI sont capables de communiquer entre eux sur leur bus, dchargeant ainsi le processeur de ce travail de transfert des donnes.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

112

M. Elie Degny Raphael

Pour rsoudre ce problme, les contrleurs IDE disposent prsent d'un mode de fonctionnement particulier, le mode DMA (abrviation de l'anglais Direct Memory Access ), qui leur permet d'accder directement aux donnes dans la mmoire centrale de l'ordinateur. Ainsi, le processeur n'a plus qu' envoyer les commandes de lecture et d'criture, et peut s'occuper d'autre chose pendant que le disque travaille. Ce mode existe depuis les tous dbuts de l'architecture PC, mais les premiers contrleurs DMA n'taient pas capable de suivre la cadence des disques durs, mme des plus anciens. Il n'a donc malheureusement pas t utilis pendant longtemps, jusqu' ce qu'une nouvelle technologie soit mise au point : l'Ultra DMA. La plupart des jeux de composants des cartes mres modernes sont prsent capables de grer l'Ultra DMA, dont les frquences de bus les plus courantes sont 33, 66 et 100MHz. Note : Mme si les disques durs IDE ont prsent rduit l'cart avec les disques SCSI au niveau du taux de transfert des donnes, ils ne disposent toujours pas d'une fonctionnalit extrmement utile pour les systmes d'exploitation multitches : la possibilit de mmoriser plusieurs commandes d'affiles pour les excuter sans intervention du processeur. Grce cette fonctionnalit, les disques SCSI ont un taux d'occupation du processeur nettement moindre, et permettent aux systmes tels que Linux d'atteindre un degr de ractivit ingal avec les disques IDE classiques. Par dfaut, Linux utilise les disques durs en mode de compatibilit, c'est dire qu'il n'active pas l'Ultra DMA pour les accs aux disques. Les performances du systme en sont donc grandement rduites au niveau des accs disques. Ceci se remarque particulirement lors des gros transferts de donnes, car le cache disque gr par Linux peut ne plus tre suffisant pour acclrer les oprations destination du disque. Notez cependant que pour une utilisation courante, les mcanismes de cache du systme sont tellement puissants que vous ne pourriez dtecter aucun dsagrment (j'ai par exemple pu travailler pendant plus de quatre mois sur ma machine avant de m'apercevoir que mes disques taient mal configurs). Toutefois, puisqu'on peut faire mieux, autant configurer correctement les contrleurs IDE... Les contrleurs IDE peuvent tre configurs grce l'utilitaire hdparm. Comme son nom l'indique, cet utilitaire permet de modifier les paramtres des disques dur et des contrleurs IDE. Il permet galement de tester les performances de votre configuration, et peut donc servir d'outil de diagnostic trs utile. La mesure du dbit de votre soussystme disque (sans les mcanismes de cache du systme) peut tre en effet ralise facilement avec la commande suivante : hdparm -t priphrique o priphrique est le fichier spcial de priphrique de votre disque dur. Note : Si vous obtenez des valeurs infrieures ou gales 3 Mo/s, vous avez rellement un problme de configuration. Les premiers disques UltraDMA 33 peuvent atteindre facilement 8 10 Mo/s, les disques UltraDMA 66 atteignent facilement 17 22 Mo/s, et les disques les plus rcents en UltraDMA 100 peuvent encore aller bien au del.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

113

M. Elie Degny Raphael

Faites bien attention ne pas utiliser l'option -T la place de l'option -t. En effet, vous mesureriez le dbit dans le sous-systme disque complet de Linux, avec ses mcanismes de cache. Vous obtiendriez alors des taux de transfert nettement plus grands (dix fois plus au moins), qui ne reprsenteraient pas le taux de transfert rel de votre disque dur. L'activation de l'UltraDMA avec hdparm se fait simplement avec l'option -d. Cette option prend en paramtre un entier pouvant valoir 0 ou 1, selon que l'UltraDMA doit tre activ ou non. Cependant, cette option peut ne pas tre suffisante pour les disques modernes, pour lesquels il faut galement prciser le mode de transfert utiliser. Ce mode peut tre indiqu l'aide de l'option -X, qui prend en paramtre un nombre dont la valeur est le numro du mode plus une constante identifiant le type de transfert utilis. Les transferts de type PIO (c'est dire le mode dans lequel le processeur effectue luimme les transferts par l'intermdiaire des ports d'entre / sortie) utilisent la constante 8, les transferts de type DMA simple utilisent la constante 32, et les transferts en UltraDMA utilisent la constante 64. Ainsi, la slection du mode UltraDMA mode 2 pour le disque matre du premier contrleur IDE se fait avec la commande suivante : hdparm -d1 -X66 /dev/hda La valeur 66 utilise ici signifie donc que les transfers se font en UltraDMA (constante 64), mode 2 (valeur 2). Le choix des modes de fonctionnement dpend bien entendu du matriel install sur votre ordinateur. Cependant, la ligne de commande de l'exemple prcdent conviendra dans la plupart des cas. Note : Pour que l'UltraDMA soit utilisable, il faut bien entendu que les drivers IDE de votre noyau Linux le grent. Gnralement, les noyaux des distributions en sont capables, mais si d'aventure ce n'tait pas le cas, vous devriez recompiler votre noyau. La manire de procder est dcrite en dtail dans le Chapitre 9. Sachez cependant que les options activer sont les suivantes :

Generic PCI IDE chipset support du menu IDE, ATA and ATAPI Block devices ; Generic PCI bus-master DMA support ; Use PCI DMA by default when available .

Vous devrez galement activer le support pour les jeux de composants utiliss par votre carte mre. L'utilitaire hdparm permet galement de fixer d'autres paramtres des contrleurs IDE. En particulier, il est possible d'activer et de dsactiver le mode 32 bits de ces contrleurs l'aide de l'option -c. Comme pour l'option -d, l'option -c prend en paramtre un indicateur pouvant valoir 0 ou 1 et permettant d'activer ou de dsactiver le mode 32 bits du contrleur. Notez que certains contrleurs ne supportent pas correctement le mode de fonctionnement 32 bits et peuvent perdre des donnes si vous l'activez.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

114

M. Elie Degny Raphael

Note : Prenez garde lorsque vous utilisez la commande hdparm. Si vous spcifiez des paramtres incorrects ou non pris en charge par votre matriel, vous pouvez fort bien bloquer compltement vos contrleurs IDE, et planter ainsi le systme en un temps trs court. Si d'aventure cela se produisait, il faudrait attendre un peu de temps, jusqu' ce que le systme s'aperoive de la mauvaise configuration des contrleurs et les rinitialisent avec leurs paramtres initiaux. Vous pouvez dtecter ce genre de rinitialisation dans les messages du noyau, que vous pouvez tout moment afficher avec la commande dmesg. Sachez toutefois que le risque de corruption du systme de fichiers en cas de mauvaise configuration reste bien rel, et qu'il vaut mieux un systme lgrement plus lent qu'un systme qui dtruit vos donnes en un temps record. Lorsque vous aurez trouv les paramtres optimaux de vos contrleurs de disque, vous pourrez demander au systme de conserver ces paramtres par dfaut en ajoutant l'option -k1 dans la ligne de commande de hdparm. Par exemple, pour configurer de manire permanente le premier disque IDE en UltraDMA mode 2 et en accs 32 bits, il faut utiliser la commande suivante : hdparm -c1 -d1 -X66 -k1 /dev/hda Note : Prenez garde toutefois au fait que les rinitialisations du contrleur en cas d'erreur reprendront systmatiquement les mmes paramtres, ce qui peut rellement bloquer compltement votre sous-systme disque (et planter irrmdiablement votre systme). Dans ce cas, il ne vous restera plus que le redmarrage brutal, avec les risques de pertes de donnes qui en dcoulent. La configuration des disques durs et des contrleurs IDE pourra galement tre ajoute dans le script de dmarrage de votre systme. Ce script est gnralement plac dans le rpertoire /etc/rc.d/ ou dans le rpertoire /sbin/init.d/ selon votre distribution. Bien entendu, il faut rellement tre sr de la commande de configuration utilise, car elle sera excute systmatiquement chaque dmarrage.
Vrication des systmes de fichiers

La vrification des systmes de fichiers est une opration que l'on ne devrait jamais avoir faire. Il y a plusieurs raisons cela. Premirement, si l'on arrte le systme correctement avant d'teindre la machine, les systmes de fichiers sont dmonts et ils sont dans un tat correct. Deuximement, les systmes de fichiers Unix sont rputs pour tre trs fiables. Troisimement, une vrification priodique est faite par le systme au bout d'un certain nombre de dmarrages. Enfin, si un systme de fichiers n'est pas dmont correctement avant l'arrt du systme, celui-ci effectuera automatiquement une vrification de ce systme de fichiers au dmarrage suivant, ce qui fait qu'il n'y a pas lieu de le faire soi-mme. Toutefois, mme le meilleur systme du monde ne saurait tre l'abri des secteurs dfectueux du disque dur sur lequel il est install. Il est donc parfois ncessaire d'effectuer une vrification manuelle des systmes de fichiers, et il faut savoir le faire mme quand plus rien ne marche.
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 115

M. Elie Degny Raphael

Un systme de fichiers ne se manipule que lorsqu'il est dmont. Cela pose videmment quelques problmes pour le systme de fichiers root, puisqu'on ne peut pas accder aux outils de vrification sans le monter. Pour ce systme de fichiers, il n'y a donc que deux possibilits :

soit on utilise une disquette de dmarrage contenant les outils de vrification et de rparation des systmes de fichiers ; soit on monte le systme de fichiers root en lecture seule.

La deuxime solution est la seule ralisable si l'on ne dispose pas de disquette de dmarrage. Par consquent, c'est cette mthode qui sera dcrite ici. La premire tape consiste passer en mode mono-utilisateur, afin de s'assurer que personne ni aucun programme n'accde la partition root en criture. Pour cela, il suffit de taper la commande suivante : init 1 Qui fait passer le systme dans le niveau d'excution 1. On peut galement passer le paramtre single au noyau lors de l'amorage du systme, comme il l'a t expliqu dans le paragraphe prcdent. Ensuite, il faut remonter la partition root en lecture seule, ce qui se fait avec la commande suivante : mount -n -o remount,ro / L'option remount permet de dmonter et de remonter la partition racine, et l'option ro indique qu'elle doit tre remonte en lecteur seule ( ro signifie Read Only ). Les options sont spares par des virgules (attention, il ne faut pas insrer d'espace). De plus, l'option -n indique mount qu'il ne doit pas crire dans le fichier /etc/mtab lorsqu'il aura remont la partition, parce qu'elle sera alors en lecture seule et qu'il ne pourra pas y parvenir. Ce fichier est utilis par mount pour mmoriser les partitions qui sont montes, afin de pouvoir en donner la liste (ce que mount fait lorsqu'elle est appele sans paramtres) et de permettre la commande umount de vrifier que les systmes de fichiers dmonter ne le sont pas dj. Lorsque la partition root sera monte en lecture seule, on pourra utiliser le programme fsck afin de vrifier, et ventuellement rparer, la partition root. En ralit, ce programme ne fait rien d'autre que d'appeler un programme spcifique pour chaque systme de fichier. Par exemple, pour les systmes de fichiers EXT2, fsck appelle le programme e2fsck, qui est capable de vrifier et de rparer ce type de systmes de fichiers. La ligne de commande utiliser pour vrifier la partition racine avec fsck est la suivante : fsck -a priphrique O priphrique est le fichier spcial du priphrique contenant le systme de fichiers vrifier. Il faut donc spcifier la partition sur laquelle le systme de fichier root se trouve. L'option -a demande fsck d'effectuer les ventuelles corrections

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

116

M. Elie Degny Raphael

automatiquement en cas d'erreur sur le systme de fichiers ainsi vrifi, sans confirmation de la part de l'utilisateur. Il est galement possible de demander la vrification de tous les systmes de fichiers enregistrs dans le fichier de configuration /etc/fstab. Pour cela, il faut ajouter l'option -A : fsck -a -A La syntaxe du fichier de configuration /etc/fstab sera dcrite dans la section suivante. Il n'est videmment plus ncessaire de spcifier le fichier spcial du priphrique contenant le systme de fichiers vrifier, puisque tous les systmes de fichiers enregistrs dans le fichier /etc/fstab seront vrifis. Si le disque dur contient des secteurs dfectueux, il peut tre ncessaire de les marquer comme tels dans les structures du systme de fichiers afin de ne pas les utiliser par la suite. De manire gnrale, la recherche de ces blocs peut tre faite l'aide du programme badblocks. Cette commande effectue un test de lecture de tous les blocs du disque sur lequel le systme de fichiers se trouve, et gnre une liste des blocs dfectueux. Vous pouvez l'appeler directement et fournir cette liste au programme e2fsck l'aide de son option -l, mais le plus simple est encore de demander e2fsck d'appeler badblocks lui-mme. Pour cela, il suffit de lui passer l'option -c, ce qui se fait en faisant prcder cette option d'un double-tiret dans la ligne de commande de fsck : fsck -a -- -c priphrique Note : L'option -c est spcifique e2fsck et peut ne pas fonctionner avec d'autres systmes de fichiers. En particulier, certains systmes de fichiers ne sont pas capable de grer correctement les blocs dfectueux des disques durs.

Le programme badblocks peut galement effectuer un test d'criture sur le disque dur, si on lui communique l'option -w. Il va de soi que ce type de test est destructif, car toutes les donnes du disque sont alors crases par des motifs particuliers. Il ne faut donc jamais utiliser cette option sur un systme de fichiers existant ! De manire gnral, il vaut mieux prvenir que gurir, aussi est-il recommand d'utiliser la commande badblocks au moins une fois avant d'utiliser un systme de fichiers. Cette vrification peut tre ralise de manire automatique lors de la cration du systme de fichiers l'aide de l'option -c de la commande mke2fs. Une fois que vous aurez termin la vrification du systme de fichiers, vous pourrez le remonter en lecture et criture avec la commande suivante : mount -n -o remount,rw /

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

117

M. Elie Degny Raphael Cette commande est similaire celle que l'on a vue pour monter le systme de fichiers en lecture seule, ceci prs que l'option rw est utilise la place de l'option ro. Cette option permet de remonter le systme de fichiers en lecture et en criture ( rw est l'abrviation de l'anglais Read Write ). Configuration du montage des systmes de fichiers

Le montage des systmes de fichiers est une opration assez fastidieuse. Heureusement, elle peut tre automatise pour les systmes de fichiers situs sur les disques fixes, et simplifis pour les systmes de fichiers amovibles. Pour cela, il faut enregistrer ces systmes de fichiers dans le fichier de configuration /etc/fstab. Ce fichier contient une ligne pour chaque systme de fichiers. Ces lignes contiennent plusieurs champs spars par des espaces. Les informations suivantes sont enregistres dans ces champs :

le fichier spcial permettant d'accder au systme de fichiers ; le rpertoire servant de point de montage par dfaut ; le type du systme de fichiers ; les options de montage pour ce systme de fichiers ; un entier indiquant quels systmes de fichiers doivent tre sauvegards ; un entier indiquant le rang dans lequel les systmes de fichiers doivent tre vrifis.

Tous les systmes de fichiers disposant de l'option auto seront monts automatiquement au dmarrage du systme par la commande mount -a. Les autres systmes de fichiers sont montables manuellement, avec les autres options indiques dans le fichier /etc/fstab. Grce ces informations, l'emploi de la commande mount est plus simple : mount priphrique Ou : mount rpertoire O priphrique est le fichier spcial de priphrique contenant le systme de fichiers monter, et rpertoire est le rpertoire servant de point de montage indiqu dans le fichier /etc/fstab. Il est possible d'utiliser indiffremment le fichier spcial de priphrique ou le rpertoire du point de montage. Le type du systme de fichiers est l'un des types disponibles accepts par la commande mount. Consultez la page de manuel de cette commande pour plus de renseignements ce sujet. Les principales options disponibles pour le montage sont les suivantes :

l'option defaults, qui permet de choisir les options par dfaut pour ce systme de fichiers ; l'option auto, qui permet de faire en sorte que le systme de fichiers soit mont automatiquement au dmarrage du systme ;

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

118

M. Elie Degny Raphael


l'option user, qui permet d'autoriser le montage de ce systme de fichiers par les utilisateurs ; l'option ro, qui permet de monter le systme de fichiers en lecture seule ; l'option rw, qui permet de monter le systme de fichiers en lecture et criture ; l'option exec, qui permet d'autoriser l'excution des fichiers excutables sur ce systme de fichiers ; l'option uid=utilisateur, qui permet de spcifier le numro utilisateur de l'utilisateur propritaire du rpertoire racine de ce systme de fichiers ; l'option gid=groupe, qui permet de spcifier le numro groupe du groupe d'utilisateur auquel le rpertoire racine du systme de fichiers appartient ; l'option mode=valeur, qui permet de fixer les droits sur le rpertoire racine du systme de fichiers monter. La valeur valeur est donne en octal ; l'option umask=valeur, qui permet de fixer les droits sur les fichiers qui ne sont pas grs par le systme de fichiers. La valeur valeur est donne en octal.

Par dfaut, les utilisateurs n'ont pas le droit de monter et de dmonter les systmes de fichiers. L'option user permet de dsactiver cette protection. Elle peut tre utile pour permettre le montage et le dmontage des disquettes et des CD-ROM. De mme, l'excution des fichiers excutables n'est par dfaut pas autorise sur les systmes de fichiers. Cette restriction permet d'viter l'excution de programmes placs sur des systmes de fichiers de systmes d'exploitation diffrents. Elle peut tre leve grce l'option exec. Les options ro et rw permettent d'indiquer mount si le systme de fichiers doit tre mont en lecture seule ou en lecture et criture. Les systmes de fichiers devant tre rpars doivent tre monts en lecture seule si l'on ne peut pas ne pas les monter (c'est le cas notamment du systme de fichiers root). Il en va de mme pour les CD-ROM, car on ne peut bien entendu pas crire dessus. Les options uid et gid permettent de spcifier le propritaire et le groupe du rpertoire racine du systme de fichiers monter. Par dfaut, c'est l'utilisateur root qui devient propritaire de ce systme de fichiers. Enfin, l'option mode permet de spcifier les droits d'accs sur tous les fichiers du systme de fichiers monter. L'option umask permet quant elle de fixer les droits qui ne sont pas grs par le systme de fichiers. Ce peut tre utile pour les systmes de fichiers FAT et FAT32. Il est ainsi possible de donner les droits de lecture et d'excution pour les fichiers de ces systmes avec une valeur de masque nulle. Cela permet de monter les systmes de fichiers FAT et FAT32 de telle sorte que tous les fichiers appartiennent l'utilisateur root par dfaut, et de donner cependant tous les droits tous les utilisateurs sur ces fichiers. On prendra garde ces options, car elles permettent quiconque d'crire des fichiers sous le nom de root, et donc constituent un grave dfaut dans la scurit du systme. Les deux derniers champs de /etc/fstab spcifient des options pour des programmes annexes. L'avant-dernier contrle le comportement du programme de sauvegarde dump,

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

119

M. Elie Degny Raphael

et le dernier celui du programme de vrification de systme de fichiers fsck. Consultez les pages de manuel pour plus de dtails ce sujet. Si vous disposez de systmes de fichiers FAT ou FAT32, vous pourrez monter ces partitions automatiquement lors du dmarrage du systme. Comme les systmes de fichiers bass sur la FAT ne peuvent pas grer les droits des utilisateurs, vous allez devoir faire un choix pour fixer ces droits une valeur raisonnable. Vous pouvez par exemple donner le droit de lecture tous les utilisateurs, mais le droit d'criture uniquement l'administrateur systme. La ligne ajouter dans le fichier /etc/fstab sera alors la suivante : /dev/partition rpertoire vfat auto,exec 0 0 O partitition est la partition contenant le systme de fichiers FAT, et rpertoire est le rpertoire servant de point de montage pour cette partition. Cette ligne permettra de monter automatiquement ce systme de fichiers en tant que FAT32 au dmarrage du systme. Les fichiers binaires seront excutables, bien qu'ils ne soient pas stocks sur un systme de fichier EXT2. Si vous voulez laisser les droits d'criture aux utilisateurs, vous pouvez utiliser la ligne suivante la place de celle indique ci-dessus : /dev/partition rpertoire vfat auto,umask=0 0 0 Cette ligne permet de monter le systme de fichiers FAT en laissant les droits d'excution et d'criture aux utilisateurs. En revanche, aucun fichier excutable de ce systme de fichiers ne pourra tre lanc, car l'option exec n'a pas t prcise. Par ailleurs, certaines distributions spcifient des options incorrectes pour le systme de fichiers /dev/pts/ dans le fichier /etc/fstab. Veuillez vous assurer que la ligne utilise pour ce systme de fichiers est bien identique la ligne suivante : none 0 0 /dev/pts devpts auto,gid=5,mode=620

Si ce n'est pas le cas, certains mulateurs de terminaux dvelopps rcemment ne fonctionneront pas correctement. Le systme de fichiers /dev/pts/ est en effet un systme de fichiers virtuel, gr directement par le noyau, dans lequel des fichiers spciaux de priphriques utiliss par les mulateurs de terminaux sont placs. Si les droits ne sont pas correctement fixs sur le rpertoire racine de ce systme de fichiers, les mulateurs de terminaux utilisant cette fonctionnalit ne pourront se connecter au systme que sous le compte root. Il faut donc imprativement corriger cette ligne, si vous voulez que les utilisateurs normaux puissent utiliser ces mulateurs. Notez galement qu'il faut que tout le monde ait les droits d'criture et de lecture sur le fichier spcial de priphrique /dev/ptmx pour que les utilisateurs non privilgis puissent utiliser ce systme de fichiers virtuel. Vous devrez galement ajouter le systme de fichiers virtuel /dev/shm/ dans votre fichier /etc/fstab. Ce systme de fichiers permet aux applications qui le dsirent d'utiliser des segments de mmoire partage de manire compatible avec la norme POSIX, par exemple pour raliser des communications inter-processus. Ce systme de fichiers permet en effet de crer des fichiers qui sont directement stocks dans la
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 120

M. Elie Degny Raphael

mmoire virtuelle et qui peuvent tre ouverts par plusieurs processus simultanment, ce qui permet d'utiliser les fonctionnalits classiques de partage de fichiers pour partager des zones de mmoire entre plusieurs processus. Ce type de communications peut tre utilis par des processus courants, aussi faut-il vous assurer que la ligne suivante se trouve bien dans la fichier fstab : tmpfs /dev/shm tmpfs defaults 0 0 Bien entendu, vous devrez crer le point de montage /dev/shm/ si celui-ci n'existe pas avant de monter ce systme de fichiers virtuels. Enfin, si vous utilisez des priphriques USB, vous pouvez monter le systme de fichiers virtuel /proc/bus/usb/ en ajoutant la ligne suivante dans le fichier fstab : none /proc/bus/usb usbdevfs defaults 0 0 Cette ligne doit tre place aprs celle qui effectue le montage du systme de fichiers virtuel /proc/. Mise l'heure du systme Les systmes d'exploitation utilisent l'heure pour un certain nombre de tches. En particulier, les fichiers disposent de plusieurs dates (date de cration, date d'accs et date de dernire modification), qui sont utilises par diffrents programmes. Les programmes de sauvegarde en font videmment partie, parce qu'ils se basent sur les dates de modification des fichiers pour dterminer quels sont les fichiers qui doivent tre sauvegards depuis la dernire sauvegarde (cas des sauvegardes dites incrmentales ). Les programmes de maintenance sont galement lancs des dates prcises, et les applications normales des utilisateurs peuvent utiliser la date systme pour l'intgrer dans leurs documents. En clair, il est important que votre systme soit l'heure. En fait, il existe deux horloges dans votre systme. La premire horloge, qui est l'horloge de rfrence pour toutes les oprations effectues dans le systme, est l'horloge dite systme . Cette horloge est maintenue par le noyau grce un compteur, qui est incrment rgulirement, sur la base d'une interruption matrielle. La prcision de ce compteur est a priori la mme que celle de l'interruption du timer matriel. Sur les PC, cette interruption a lieu 18,6 fois par seconde, ce qui donne pour la plus petite unit de temps mesurable environ 1/20 de seconde. La deuxime horloge est l'horloge matrielle, qui est l'horloge qui maintient l'heure de votre ordinateur pendant qu'il est teint. Cette horloge est couramment appele l'horloge CMOS, parce qu'elle est gre par le composant CMOS, qui stocke toutes les informations permanentes du BIOS. Pour rpondre immdiatement une question (dsormais sans objet), prcisons que Linux n'a aucun problme vis--vis des dates critiques du changement de millnaire. En effet, les systmes Unix n'utilisent qu'un seul format de date au niveau application : le nombre de secondes coules depuis le 01/01/1970 0 heure. Ce compteur est stock sur 32 chiffres binaires sur la plupart des machines et passe donc allgrement le cap de l'an 2000. En fait, le dbordement de ce compteur est prvu pour 2038, mais n'aura jamais lieu car l'apparition des processeurs 64 bits va porter 64 bits sa taille. Cela tant,
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 121

M. Elie Degny Raphael

il est possible que certaines applications mal crites n'utilisent pas ce format de date, et ne soient donc pas compatibles. Heureusement, ce cas de figure est trs rare sous Unix. Bien entendu, le problme reste entier si l'horloge matrielle de votre PC n'est pas compatible. Dans ce cas, la solution la plus simple est de rgler l'heure systme chaque dmarrage, manuellement ou l'aide de scripts de correction de la date renvoye par l'horloge matrielle. La valeur du compteur de l'horloge systme est toujours interprte en temps universel ( UTC en anglais, abrviation de Universal Time Coordinated ), c'est--dire le temps de rfrence valide dans le monde entier. Ce temps ne comprend pas les fuseaux horaires ni les rglementations concernant les heures d'hiver et d't. Cette convention est utilise partout dans le systme, ce qui est la condition sine qua non pour que tous les ordinateurs du monde utilisent la mme date et la mme heure. Ainsi, deux ordinateurs connects Internet peuvent communiquer sans se poser de questions quant leurs localisations respectives, ce qui simplifie beaucoup les choses. Notez galement que le fait de compter le temps en secondes permet de s'affranchir des conventions de dcoupage du temps et des calendriers utiliss dans chaque pays. Bien entendu, les dates prsentes l'utilisateur doivent tre traduites en temps local, corrig des carts pour l'heure d't et l'heure d'hiver. Cela est ralis par tous les programmes qui doivent afficher ces dates (par exemple, les simples commandes ls et date). Cette conversion est effectue par le systme en fonction du fuseau horaire et des plages de validit des horaires d't et d'hiver. La solution la plus simple pour rgler la date et l'heure de votre machine est donc de rgler l'horloge matrielle sur le temps universel, et de dfinir le fuseau horaire dans lequel elle se trouve, pour que le systme puisse calculer l'heure locale. Malheureusement, les systmes d'exploitation de Microsoft ne voient pas la chose de la mme manire. Ils attendent que l'horloge matrielle soit rgle l'heure locale. Par consquent, si Linux est install sur un ordinateur disposant dj de Windows, vous devrez rgler l'heure de votre ordinateur en temps local. A priori, cela ne fait aucune diffrence, le systme tant galement capable de calculer le temps universel partir de l'heure locale et de la zone horaire. Cependant, cela a un inconvnient : il est ncessaire de mettre l'heure l'horloge systme en cas de dplacement de la machine, et chaque changement d'horaire d't ou d'hiver. Bien sr, Windows est suppos tre capable de mettre jour l'heure matrielle en observation avec l'heure d't / d'hiver . Mais il utilise pour cela des rgles qui sont fixes dfinitivement dans le systme et qui ne peuvent pas tre mises jour avec les rglementations locales (par exemple, la rgle de changement d'heure a t modifie en 1996, si bien que Windows 95 n'a jamais pu fonctionner correctement sur ce point...). Quoi qu'il en soit, la mise l'heure d'un systme Linux requiert la dfinition de la zone horaire, la mise l'heure du systme et la mise l'heure de l'horloge matrielle. La dfinition de la zone horaire est primordiale et doit avoir lieu avant toute autre opration, car le rglage des horloges dpend videmment de cette zone.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

122

M. Elie Degny Raphael

Les zones horaires sont dfinies par un ensemble de rgles, qui comprennent chacune la priode de validit de la rgle (en gnral avec une date de dpart et une date de fin) et la diffrence entre le temps universel et le temps local lorsque cette rgle s'applique (gestion des horaires d't et d'hiver compris). Toutes ces rgles portent le nom de la zone gographique dans laquelle elles sont valides. Vous pourrez trouver des exemples de dfinitions de rgles (ainsi que l'historique des conventions concernant le temps) dans le rpertoire timezone des sources de la librairie C GNU. Les fichiers de rgles des zones horaires doivent tre compils avec le programme zic et installs dans le rpertoire /usr/share/zoneinfo. Normalement, votre systme dispose de la totalit des rgles, dj compiles, des diffrentes zones horaires du monde. Le programme zic permet galement de dfinir la zone horaire active. Cette opration se fait dans les fichiers de dmarrage de votre systme, avec une commande similaire la suivante : zic -l zone O zone est le chemin relatif du fichier de dfinition des rgles de la zone horaire locale, par rapport au rpertoire de base /usr/share/zoneinfo. Pour les systmes situs en France mtropolitaine, la commande utilise est donc celle-ci : zic -l Europe/Paris Une fois la zone horaire fixe, il est possible de rgler l'horloge systme. Il existe deux solutions pour cela. La premire solution est d'utiliser la commande systme date. Cette commande, appele sans paramtre, permet d'obtenir la date systme, exprime en temps local. Mais elle permet galement de modifier la date et l'heure systme avec l'option -s. La syntaxe complte utilise est donne ci-dessous : date -s "MM/JJ/AAAA HH:MM:SS" Il n'est pas ncessaire de prciser l'anne si celle-ci ne doit pas tre change. De mme, vous pouvez ne donner que l'heure, si la date du jour est correcte. En revanche, vous devez obligatoirement prciser l'heure si vous changez la date. Notez que l'heure doit tre donne en temps local, moins que l'option -u ne soit prcise. Le systme rglera son horloge en temps universel automatiquement, selon les rgles de zones horaires en vigueur qui ont t indiques par zic. Vous pouvez obtenir l'heure exacte en appelant le 3699. La deuxime solution est celle qui est utilise au dmarrage du systme. Elle consiste initialiser l'horloge systme partir de l'horloge matrielle. Cette opration se fait normalement l'aide de la commande clock (qui en fait est un lien symbolique vers hwclock, mais la commande Unix traditionnelle est clock). La syntaxe de cette commande est la suivante : clock [-u] -s | -w | -a L'option -s permet d'initialiser l'horloge systme partir de la date et de l'heure stockes dans l'horloge matrielle. C'est typiquement cette commande qui est utilise dans les
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 123

M. Elie Degny Raphael

scripts de dmarrage du systme. L'option -w permet de raliser l'opration inverse, c'est--dire sauvegarder la date et l'heure de l'horloge systme dans l'horloge matrielle. Elle n'est en gnral utilise qu'aprs avoir remis l'heure l'horloge systme. L'option -a permet, quant elle, de corriger l'avance ou le retard que l'horloge matrielle peut prendre. Ce dernier point mrite quelques explications complmentaires. En fait, l'horloge matrielle n'est pas extrmement prcise, et peut se dcaler petit petit de l'heure relle. Heureusement, ce dcalage est constant, ce qui fait qu'il est possible de le mesurer et de le prendre en compte. Le programme clock utilise le fichier /etc/adjtime pour enregistrer de combien est ce dcalage afin de pouvoir effectuer les corrections. Le principe de fonctionnement est le suivant : lors du premier rglage de l'horloge matrielle (avec l'option -w), il enregistre l'instant de ce rglage dans le fichier /etc/adjtime ; lors des rglages suivants, il calcule le temps qui s'est coul depuis le rglage prcdent, et le dcalage entre l'heure de l'horloge matrielle et l'heure laquelle celle-ci aurait d se trouver. Il enregistre ce dcalage et met jour la date de mise l'heure (pour pouvoir refaire ce calcul ultrieurement) ; lorsqu'on l'appelle avec l'option -a, clock ajuste l'horloge matrielle. Pour cela, il regarde la date courante, calcule le temps coul depuis la dernire mise l'heure ou le dernier ajustement, en dduit l'avance ou le retard de l'horloge matrielle, et la remet l'heure en consquence. Il enregistre galement la date de cet ajustement comme nouvelle date de mise l'heure, afin de ne pas faire deux fois l'ajustement pour cette priode la prochaine fois.

De cette manire, il est possible de maintenir l'horloge systme une valeur proche de la ralit (sans ce genre de mcanisme, il est courant de prendre 5 minutes d'cart en trois ou quatre mois, ce qui est dj considrable). Les scripts d'initialisation de votre systme doivent donc certainement contenir au moins les deux lignes suivantes aprs le rglage de la zone horaire : # Ajuste l'horloge matrielle : clock -a # Initialise l'horloge systme : clock -s Dans tous les cas, l'option -u permet d'indiquer que l'horloge matrielle est rgle en temps universel. Si votre machine ne dispose pas d'autre systme que Linux, il est recommand de procder ainsi et d'utiliser systmatiquement cette option. Note : Il est important de dfinir la zone horaire avec zic avant d'utiliser clock. En effet, si l'horloge matrielle est rgle en temps local, clock ne pourra pas dterminer l'heure en temps universel. D'autre part, clock initialise la structure de zone horaire interne
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 124

M. Elie Degny Raphael

noyau, que celui-ci utilise notamment pour l'criture des dates en temps local sur les systmes de fichiers FAT (Eh oui, les dates des fichiers des systmes de fichiers FAT sont enregistres en temps local...). Sachez galement que l'horloge systme peut galement se dcaler sensiblement sur de longues priodes. videmment, ce phnomne ne peut se dtecter que si le systme reste actif suffisamment longtemps, ce qui en pratique ne se produit que dans les serveurs (n'oubliez pas que Linux peut fonctionner des mois sans interruption...). Si vous tes intresss par la manire de resynchroniser l'horloge systme pour de telles configurations, vous devriez vous intresser la diffusion du temps sur le rseau Internet avec le protocole NTP ( Network Time Protocol ). En gnral, la resynchronisation de l'heure systme doit se faire progressivement afin de ne pas perturber la ligne du temps pour les applications. Cela peut tre fait avec le programme adjtimex. Configuration du lancement automatique des tches Il est possible de dclencher l'excution de certaines oprations intervalle rgulier sous Linux. Ces oprations sont dfinies pour le systme et pour chaque utilisateur. Elles sont enregistres dans des fichiers de configuration indiquant le moment o elles doivent tre dclenches, et quelle action elles doivent raliser. Les oprations dfinies pour le systme sont stockes dans le fichier de configuration /etc/crontab. Des commandes additionnelles peuvent tre dfinies dans les rpertoires /etc/cron.d/, /etc/cron.daily/, /etc/cron.weekly/ et /etc/cron.monthly/. Par ailleurs, les fichiers de configuration des utilisateurs sont stocks dans le rpertoire /var/cron/tab/, sous le nom de chaque utilisateur. Il est bien entendu possible d'diter ces fichiers en tant que root, mais ce n'est pas recommand. En effet, la commande crontab permet d'installer, de supprimer et de consulter les fichiers crontab de chaque utilisateur, et ce de manire sre. La commande crontab peut tre utilise pour afficher le contenu du fichier de configuration de l'utilisateur qui l'appelle, l'aide de l'option -l : crontab -l Elle permet galement de supprimer ce fichier, l'aide de l'option -r : crontab -r Enfin, l'option -e permet d'diter le fichier crontab, l'aide de l'diteur spcifi dans la variable d'environnement VISUAL ou EDITOR. Par dfaut, l'diteur vi sera utilis. En tant qu'administrateur du systme, il est possible de modifier les paramtres pour n'importe quel utilisateur. Pour cela, il faut prciser le login de l'utilisateur avec l'option -u. Il est recommand d'utiliser galement l'option -u si l'on a effectu un su, car la commande crontab peut ne pas pouvoir dterminer l'utilisateur qui l'a appel.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

125

M. Elie Degny Raphael

Le format des fichiers crontab est suffisamment riche pour permettre de spcifier avec finesse les conditions d'excution des oprations programmes. En gnral, le dbut du fichier contient la dfinition de variables d'environnement utilises par crontab. La suite du fichier est rserve aux commandes programmes. Chaque programmation est ralise sur une ligne du fichier crontab. Les lignes contiennent 5 champs spcifiant la date et l'heure laquelle la commande doit tre excute, un nom d'utilisateur ventuel et la commande elle-mme. Le nom d'utilisateur ne doit tre spcifi que dans le fichier /etc/crontab, qui dfinit les commandes du systme. Il spcifie alors au nom de quel utilisateur la commande doit tre excute. Pour les fichiers crontab propres chaque utilisateur, il n'est bien entendu pas ncessaire d'indiquer ce nom. Les 5 champs de la partie dcrivant la date d'excution de la commande fournissent respectivement les informations suivantes : les minutes (comprises entre 0 et 59) ; les heures (comprises entre 0 et 23) ; le jour dans le mois (compris entre 0 et 31) ; le mois (comprise entre 0 et 12, ou indiqu par les trois premires lettres du nom du mois en anglais) ; le jour dans la semaine (compris entre 0 et 7, ou indiqu par les trois premires lettres du nom du jour en anglais).

Les numros de mois 0 et 12 correspondent Janvier, et les numros de jours 0 et 7 correspondent au Dimanche. La commande sera excute chaque fois que le jour, le mois, l'heure et les minutes du systme correspondront avec ces 5 champs. Il suffit que l'une des spcifications du jour corresponde pour que la commande soit excute (c'est--dire qu'elle est excute une fois pour le jour du mois et une fois pour le jour de la semaine si ces deux champs sont spcifis). Il est possible d'utiliser un intervalle de valeurs pour chacun de ces champs, en indiquant la premire et la deuxime valeur, spares d'un tiret. Il est galement possible de faire une liste de valeurs et d'intervalles, en sparant chaque donne par une virgule. Si l'on veut spcifier toutes les valeurs possibles pour un champ, on peut utiliser le caractre '*'. Enfin, il est possible d'indiquer que la commande doit tre excute toutes les n valeurs pour chaque champ. Pour cela, il suffit de faire suivre le champ d'une barre de oblique de division ('/') et du nombre n. Ainsi, si l'on trouve l'expression */3 pour les heures, la commande sera excute toutes les trois heures. La spcification de la commande doit tre faite sur une seule ligne. Le caractre de pourcentage ('%') a une signification spciale, sauf s'il est prcd d'un antislash ('\'). Les donnes qui suivent le premier pourcentage sont passes telles quelles dans l'entre standard de la commande. Les caractres pourcentages suivants sont interprts comme des sauts de lignes (donc une validation). Ainsi, la commande suivante : rm -i file.txt%y%
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 126

M. Elie Degny Raphael

Permet de supprimer le fichier file.txt et de rpondre 'y' la commande rm. Le caractre 'y' est pass ici dans le flux d'entre standard de rm. Comme vous pouvez le voir, le fichier /etc/crontab du systme permet de programmer des oprations priodiques, comme les sauvegardes, la destruction des fichiers temporaires, ou toute autre tche de maintenance. Ne vous tonnez donc pas si votre ordinateur semble s'activer tout seul rgulirement, heure fixe (par exemple, sur le coup de 11 heures ou minuit). C'est le fonctionnement normal de votre systme, qui s'occupe de toutes les tches mnagres qu'il s'est rserv pour une heure o normalement tout le monde dort... Les utilisateurs peuvent galement dfinir leur propre crontab pour effectuer les oprations priodiques quils dsirent. Par exemple, ils peuvent programmer une commande qui leur rappellera un rendez-vous. Configuration des terminaux virtuels Un terminal est, comme son nom l'indique, un quipement qui se trouve au bout d'une connexion un ordinateur et qui permet de travailler sur l'ordinateur. Un terminal comprend gnralement un clavier et un cran (graphique pour les terminaux X), et parfois une souris. Initialement, les terminaux taient des priphriques passifs connects sur un port srie de l'ordinateur. Cette architecture permettait de partager une mme unit centrale avec plusieurs utilisateurs. De nos jours, la plupart des terminaux sont simplement d'autres ordinateurs du rseau, qui se connecte l'aide d'un programme que l'on appelle mulateur de terminal . L'mulateur de terminal se contente de simuler un terminal rel et permet de se connecter toute machine grant des terminaux clients. Du point de vue du systme, tous les utilisateurs sont connects via des terminaux, qu'ils soient physiques ou muls. Les connexions locales sont donc ralises par l'intermdiaire d'un terminal local, la console. La console est tout simplement le priphrique prenant en charge le clavier et l'cran. Ce priphrique est gr directement par le noyau, et mule un modle de terminal standard, le VT102. En fait, la console n'est utilise directement en tant que terminal de login qu'en mode mono utilisateur (c'est--dire en mode maintenance). En mode multi-utilisateur, la console est partage entre plusieurs terminaux dits virtuels , parce qu'ils simulent la prsence de plusieurs terminaux sur la mme console. Ces terminaux virtuels se partagent le clavier et l'cran, mais seulement un de ces terminaux peut accder la console chaque instant : celui qui traite les caractres saisis au clavier et qui ralise l'affichage. Pour pouvoir passer d'un terminal virtuel un autre, il faut utiliser une squence de touches spciale, comme par exemple ALT+Fn (ou CTRL+ALT+Fn si vous tes sous XWindow), o Fn est l'une des touches de fonction du clavier. Si l'on utilise cette combinaison avec la touche F1, on accdera au premier terminal virtuel. Avec la touche F2, ce sera le deuxime, avec F3, le troisime, etc. Il est donc possible de simuler la prsence de plusieurs crans et claviers sur une mme machine, ce qui est trs pratique lorsqu'on commence lancer plusieurs programmes en mme temps (cela ncessite videmment de se connecter plusieurs fois sur des
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 127

M. Elie Degny Raphael

terminaux diffrents). Bien entendu, la configuration du clavier et la police de caractres utilise sont communs tous les terminaux virtuels, puisqu'ils utilisent tous la mme console. La plupart des distributions utilisent au moins quatre terminaux virtuels, plus ventuellement un terminal pour le serveur X. Mais il est possible de dfinir d'autres terminaux, qu'ils soient graphiques ou non. Nous allons maintenant voir comment modifier le nombre de terminaux virtuels disponibles. L'utilisation des terminaux avec XWindow sera traite dans le chapitre traitant de la configuration de XWindow. Chaque terminal virtuel utilise un fichier spcial de priphrique du rpertoire /dev/. Le nom de ce fichier commence toujours par tty et est complt par le numro du terminal. Ainsi, le fichier spcial de priphrique /dev/tty1 correspond au premier terminal virtuel, accessible avec la combinaison de touches CTRL+ALT+F1, le fichier spcial de priphrique /dev/tty2 correspond au deuxime terminal virtuel, etc. Linux peut grer jusqu' 64 terminaux virtuels, cependant, il est ncessaire de dfinir d'autres combinaisons de touches pour accder aux terminaux 13 et suivants (puisqu'il n'existe que 12 touches de fonctions). Il serait possible d'utiliser les combinaisons de touches ALT+DROITE et ALT+GAUCHE pour les atteindre, mais d'une part ce ne serait pas trs pratique, et d'autre part, vous ne devriez pas avoir besoin de plus de quatre ou cinq terminaux virtuels. Nous n'utiliserons donc ici que les douze premiers terminaux virtuels. Les terminaux virtuels sont crs par le noyau la demande, ds qu'un processus cherche y accder. Ainsi, le systme n'alloue les ressources utilises pour la gestion de ces terminaux que lorsque cela est ncessaire. Les terminaux peuvent tre crs par diffrents processus, et leur emploi n'est pas restreint la simple connexion des utilisateurs. Par exemple, il est possible d'afficher un message sur un terminal simplement en crivant dans son fichier spcial de priphrique. Ainsi, si vous tapez la commande suivante sous le compte root : echo Coucou > /dev/tty11 La chane de caractres Coucou devrait apparatre sur le terminal virtuel 11. En gnral, les terminaux virtuels sont utiliss soit pour afficher les messages du systme, soit pour permettre aux utilisateurs de se connecter, soit pour XWindow. Les terminaux peuvent donc tre attribus diffrents programmes, selon l'emploi qu'on leur rserve. Il faudra cependant bien prendre garde au fait que les terminaux ne sont pas partageables entre tous les processus. Ainsi, on ne devra pas essayer de lancer un serveur X sur un terminal utilis par un processus de connexion en mode texte. Pour crer des terminaux de login, il suffit de demander au systme de lancer les processus de connexion sur chaque terminal dsir. Ce travail est la charge du processus fondamental du systme : init. La dfinition des terminaux de login se fait donc dans le fichier de configuration /etc/inittab. Si vous regardez le contenu de ce fichier, vous trouverez quelques lignes semblables la suivante :

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

128

M. Elie Degny Raphael

1:2345:respawn:/sbin/getty 9600 tty1 linux 2:2345:respawn:/sbin/getty 9600 tty2 linux etc. Ces lignes indiquent init que plusieurs processus getty doivent tre lancs sur les diffrents terminaux virtuels. Le programme getty est le programme qui vous demande votre nom d'utilisateur sur les terminaux virtuels. Plus prcisment, getty initialise le terminal, demande le nom d'utilisateur et lance le programme login en lui fournissant le nom saisi, afin que celui-ci demande le mot de passe de cet utilisateur. Si vous dsirez rajouter des terminaux de login votre configuration, vous devrez donc rajouter des lignes de ce genre dans le fichier /etc/inittab. En fait, ces lignes sont constitues de quatre champs :

le premier champ est le numro de la ligne. En pratique, ce numro doit tre celui du terminal virtuel qui sera utilis par getty ; le champ suivant ( 2345 ) contient les numros des niveaux d'excution dans lesquels cette ligne est valide. Ces numros doivent tre spcifis les uns la suite des autres, sans sparateur. Dans l'exemple donn ci-dessus, ces lignes sont valides dans les niveaux d'excution 2 5 compris, c'est--dire tous les niveaux d'excution classiques ; le troisime champ indique init des options pour le lancement du programme getty. Dans l'exemple donn ci-dessus, le programme getty doit tre relanc immdiatement ds qu'il se termine. Cela est le comportement dsir, puisque la terminaison de getty correspond la dconnexion de l'utilisateur courant, et qu'il faut laisser la possibilit de se reconnecter aux suivants ; le dernier champ indique le programme lancer et ses options. Dans notre cas, il s'agit de /sbin/getty. Les options indiques sont la vitesse de la ligne de communication utilise, le nom du terminal sur lequel getty doit travailler et son type (ici, ce sont des terminaux de type linux ).

Vous pouvez bien entendu vous baser sur les lignes existantes pour en crer de nouvelles. L'opration est trs simple : il suffit de renumroter les lignes et les terminaux virtuels utiliss. Prenez garde cependant ne pas affecter getty un terminal utilis par XWindow. Il est recommand d'effectuer ces modifications dans le niveau d'excution 2 pour ne pas tre gn par XWindow. Une fois les modifications ajoutes, vous pourrez demander init de relire son fichier de configuration avec la commande suivante : init Q Ds lors, les nouveaux terminaux sont prts tre utiliss. Configuration de la console

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

129

M. Elie Degny Raphael

Comme nous venons de le voir, tous les terminaux virtuels utilisent la mme console. La suite logique des oprations est donc de voir comment on ralise la configuration de celle-ci... Nous allons donc voir dans ce chapitre la manire de paramtrer le clavier et l'affichage du texte l'cran. Pour cela, il est ncessaire de bien comprendre les mcanismes mis en uvre pour le traitement des codes mis par le clavier d'une part, et pour l'affichage des symboles des lettres partir de leurs codes d'autre part. Ces mcanismes sont relativement volus et complexes, mais permettent de paramtrer avec prcision la disposition des touches du clavier, le comportement des applications et l'allure des symboles affichs l'cran. Le plus simple pour comprendre le fonctionnement de la console est encore de voir les diffrentes tapes entrant en ligne de compte de l'appui sur une touche jusqu' l'action correspondant cet appui. Notez bien que cette action n'est pas forcment l'affichage d'une lettre l'cran : cela dpend de l'application qui a trait l'vnement correspondant l'appui sur la touche. Il est toutefois ncessaire de prsenter auparavant quelques notions sur la manire dont les caractres sont reprsents dans les programmes. Pages de codes et Unicode De par leur nature de calculateurs, les ordinateurs n'ont jamais t conus pour manipuler nativement du texte. Cela signifie qu'ils n'ont aucune notion de caractre ou de symbole : pour eux, tout est numrique. Par consquent, il a fallu trouver le moyen de reprsenter les caractres humains sous une forme numrique, afin de pouvoir raliser des programmes de manipulation de texte. Cette reprsentation est effectue en associant chaque caractre un numro donn, et en travaillant directement sur ces numros. Par exemple, le caractre 'A' est classiquement reprsent par le nombre 65, la lettre 'B' par le nombre 66, etc. L'opration consistant effectuer cette association sur chaque caractre d'un texte constitue ce que l'on appelle l'encodage du texte. Initialement, plusieurs manires de raliser cet encodage ont t inventes, mais l'un des standards les plus utilis est l'encodage ASCII. Lorsqu'il a t cr, l'encodage ASCII codait les caractres sur 7 bits. Depuis, il a t tendu pour utiliser 8 bits, ce qui fait que chaque caractre est dornavant cod sur un octet. Ainsi, il est possible de reprsenter 256 caractres diffrents avec un octet, ce qui est suffisant pour toutes les langues occidentales. Cependant, le standard ASCII initial ne spcifiait que l'encodage des caractres utiliss en anglais, tout simplement parce que les Amricains parlent anglais. videmment, cela ne convenait pas pour les pays qui utilisent des lettres accentues, c'est--dire pour quasiment tout le monde. Il a donc fallu dfinir d'autres conventions que celle initialement utilise, afin d'associer des codes numriques aux caractres utiliss par les autres pays. Ces conventions constitue ce que l'on appelle une page de codes. Chaque pays est donc susceptible d'utiliser une page de codes qui lui est spcifique. Par exemple, la page de codes 437 reprsente l'encodage utilis aux tats-Unis, et la 850 celle utilise en France.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

130

M. Elie Degny Raphael

Historiquement, les pages de codes n'ont pas t immdiatement standardises, ce qui a conduit la prolifration de pages diffrentes et parfois incompatibles. Ainsi, les pages de codes utilises en France sont les pages de codes 850 sous DOS, Windows 1252 sous Windows, ISO 8859-1 et ISO 8859-15 sous Unix. Ces deux dernires constituent la norme actuelle, et sont celles qui doivent tre utilises de prfrence. La norme ISO 8859-1 est galement connue sous le nom latin-1, et la norme ISO 8859-15 sous le nom latin-0. La norme latin-0 est une extension de la latin-1, qui ne prvoyait pas le codage de certains caractres europens (comme le o e dans l'o franais) et le symbole de l'Euro. Le dfaut majeur de l'ASCII et de ses drivs est de travailler sur des nombres 8 bits. Si le nombre de 256 caractres diffrents convient pour la plupart des pays occidentaux, ce n'est pas le cas de quelques autres pays, qui utilisent un nombre de symboles de trs loin suprieur 256. C'est notamment le cas du Japon et de la Chine, qui ne peuvent pas encoder tous leurs idogrammes sur des nombres 8 bits. Il a donc fallu introduire d'autres types d'encodages, plus riches, permettant de satisfaire aux besoins de tout le monde. Aprs des tentatives infructueuses d'encodages taille variable (un ou plusieurs octets selon le caractre cod), Unicode a t introduit et normalis sous le nom ISO 10646. Unicode est une convention de codage universelle des caractres, qui utilise pour cela des nombres 32 bits (il existe galement une version plus ancienne qui n'utilise que 16 bits). Chaque caractre est reprsent par un nombre et un seul, comme pour l'ASCII. Cependant, avec ses 16 ou 32 bits, le jeu de caractres Unicode est suffisamment large pour coder tous les caractres de toutes les langues du monde. Bien entendu, tous les codes ne sont pas utiliss, et le jeu de caractre Unicode est discontinu. Pour des raisons de compatibilit, les 256 premiers caractres Unicode sont les mmes que ceux dfinis dans la norme ISO 8859-1 (ce qui rend malheureusement non conforme la norme ISO 8859-15, plus complte). Les autres caractres sont affects d'autres plages de codes, qui sont parfaitement dfinies. Ainsi, l'utilisation d'Unicode permettra, terme, de n'avoir plus qu'une seule page de codes pour tous les pays. Malheureusement, Unicode est une volution relativement rcente, et la plupart des programmes travaillent encore avec des caractres 8 bits, ce qui rend l'utilisation d'Unicode prmature. Linux, quant lui, est capable de grer l'Unicode. Cependant, pour des raisons d'conomie de place, il ne l'utilise pas directement. Il prfre en effet utiliser l'encodage UTF-8 (abrviation de l'anglais Unicode Tranfer Format ). Cet encodage est un encodage taille variable, qui permet d'encoder les caractres Unicode avec un, deux ou trois octets selon leur emplacement dans la page de codes Unicode.
Principe Du fonctionnement du clavier

En gnral, les claviers envoient une srie de codes l'unit centrale lorsqu'on appuie sur une touche. Certaines touches gnrent un seul code, d'autres peuvent en produire jusqu' une dizaine. Ces codes, que l'on appelle scancode, sont rcuprs par le driver du clavier dans le noyau de Linux, et constituent le dbut du traitement des saisies clavier. Les scancodes permettent normalement de dterminer avec certitude
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 131

M. Elie Degny Raphael

l'vnement qui s'est produit, pour peu que l'on connaisse parfaitement le type de clavier utilis. Malheureusement, ils sont spcifiques chaque modle de clavier, et il est difficilement concevable pour un programme de prendre en charge les particularits de tous les claviers existants. De plus, qui peut prvoir aujourd'hui combien de touches les claviers du futur auront, et quels scancodes ceux-ci utiliseront ? Linux effectue donc un travail d'uniformisation en interprtant les scancodes et en les traduisant en d'autre codes, les keycodes. Ces codes sont toujours les mmes, quel que soit le clavier utilis. Les keycodes simplifient le traitement des donnes provenant du clavier en dfinissant un code de touche unique chacune des touches du clavier. Les keycodes sont galement souvent appels les codes de touches virtuelles, car ils correspondent aux scancodes d'un clavier virtuel uniforme et commun toutes les plates-formes. La gestion des vnements claviers par l'intermdiaire des keycodes est donc beaucoup plus aise, car il n'y a plus se soucier ici que de ce clavier virtuel. La correspondance entre les scancodes, donc les touches physiques, et les keycodes, ou codes de touches virtuelles, est dfinie dans les drivers de claviers. La plupart des claviers courants sont grs et en gnral peu de personnes ont besoin de modifier ce type d'information. Toutefois, afin de permettre l'intgration des claviers futurs, il est possible de complter la table de conversion des scancodes en codes de touches virtuelles. La manipulation des scancodes est une opration relativement complique et peu commode, cause de la complexit des squences de scancodes envoyes par les claviers. C'est pour cela qu'une autre association, qui permet de dfinir le comportement obtenir pour chaque combinaison de codes de touches virtuelles, a t introduite. Cette correspondance est dcrite dans un fichier que l'on appelle couramment le plan de clavier (ou keymap en anglais). Les keymaps contiennent donc, pour chaque touche ou combinaison de touches virtuelles utilise, la dfinition d'une action effectuer ou d'un code de caractre renvoyer. Ces codes sont renvoys en ASCII, cods selon la page de code dfinie dans le plan de clavier. Cependant, certaines touches ne sont pas associes une lettre ASCII, et ne peuvent donc pas tre reprsentes par des codes simples. C'est le cas, par exemple, des touches du curseur, de la touche Entre et des touches de suppression du clavier. Ces touches sont donc signales aux programmes l'aide de squences de codes appeles les codes d'chappement. Les codes d'chappement sont en ralit des squences de codes ASCII dont le premier est le code du caractre d'chappement Escape (dont le numro est 27, quelle que soit la page de code utilise). Ces squences sont donc utilises typiquement pour signaler aux programmes qui les lisent qu'un traitement particulier doit tre effectu, comme par exemple le dplacement du curseur. Les programmes peuvent peuvent travailler n'importe lequel des trois niveaux de traitement que l'on vient de dcrire. Les programmes qui rcuprent directement les scancodes travaillent en mode raw (ce qui signifie en anglais que les donnes sont brutes ). Ils n'utilisent donc pas la traduction en codes de touches virtuelles et doivent ncessairement connatre les caractristiques physiques des claviers qu'ils veulent supporter. C'est le cas par exemple des serveurs X. Les programmes qui utilisent les

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

132

M. Elie Degny Raphael

keycodes travaillent dans le mode nomm medium raw ou keycode. Cependant, la plupart des programmes travaillent avec les codes issus du plan de clavier, qui sont normaliss et font bnficier d'une plus grande portabilit (y compris avec d'autres systmes Unix que Linux). Dans ce cas, on dit qu'ils travaillent en mode ASCII, ou xlate (abrviation de l'anglais translate , ce qui signifie traduction ). Note : En fait, la console peut galement travailler en Unicode, dans le mode UTF-8. Ce mode permet de travailler directement en Unicode, si vous le dsirez. Cependant, vous devrez vous assurer dans ce cas que tous les programmes que vous utilisez sont capables de fonctionner avec un encodage taille variable. Dans tous les cas, les programmes lisent les donnes provenant du clavier sur la console, par l'intermdiaire du fichier spcial de priphrique /dev/console. En fait, ces programmes ne savent pas qu'ils lisent les donnes du clavier local. Pour eux, ces donnes semblent provenir d'un terminal VT102, et ils traitent ces donnes comme celles provenant de n'importe quel terminal. Cela signifie que ces donnes semblent provenir d'une ligne de communication, laquelle le terminal local est connect. Et qui dit ligne de communication, dit paramtres de transmission des informations sur la ligne ! Les caractres issus de la keymap peuvent donc subir un traitement supplmentaire, en fonction des paramtres de la ligne de communication (virtuelle) utilise par la console. Cependant, il n'est en gnral pas ncessaire de modifier ces paramtres, puisque la ligne de communication utilise est bien entendue idale (quitte tre virtuelle, autant tre idale, non ?). Gloups !? Que c'est compliqu ! C'est effectivement la rflexion que vous tes en droit de vous faire. Cependant, si l'on prend un peu de distance par rapport ce mcanisme en trois passes, on comprend son intrt. Premirement, la contrainte initiale est la complexit des scancodes. Sur ce point, il n'y a rien dire. Grce aux keycodes, il n'est plus ncessaire de se soucier du modle de clavier utilis. Ensuite, grce aux keymaps, il est possible de faire l'association entre les keycodes et les lettres crites sur les touches du clavier. Ainsi, la disposition du clavier, ainsi que les raccourcis claviers, peuvent tre compltement paramtrs. Enfin, les applications qui grent les touches spciales du clavier peuvent interprter les codes d'chappement, qui sont ceux renvoys par le terminal de la console. Dans tous les cas, les programmes qui lisent les donnes du clavier considrent que ces donnes proviennent d'un terminal classique. Ils n'ont donc pas besoin de faire des hypothses sur l'origine des donnes, et leur programmation en est d'autant plus simple. Passons maintenant aux travaux pratiques. La commande kbd_mode permet de dterminer le mode de fonctionnement du clavier. Si vous essayez partir d'une console, vous verrez que le clavier est en mode ASCII. Inversement, si vous tapez cette commande partir d'une session X, vous constaterez que XWindow utilise le clavier en mode raw, et gre donc les scancodes lui-mme. Vous pouvez galement visualiser les codes renvoys dans les trois modes de fonctionnement du clavier avec la commande showkey. Lance avec l'option -s, elle permet d'afficher les scancodes lors de l'appui sur chaque touche. Vous pourrez constater que toutes les touches ne renvoient pas le

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

133

M. Elie Degny Raphael

mme nombre de codes. Vous pourrez utiliser l'option -k pour visualiser les keycodes renvoys par le noyau lors de l'appui et du relchement des touches. Enfin, si vous utilisez l'option -a, vous verrez les codes de touches ASCII. Vous pourrez constater que les touches spciales renvoient des squences de codes d'chappement. Note : Notez galement que certaines touches renvoient des caractres de contrle (nots ^A ^Z). Ces caractres correspondent en fait aux codes ASCII allant de 1 26 et ne sont pas des squences d'chappement. Ils peuvent galement tre gnrs avec les combinaisons de touches CTRL+A CTRL+Z. Si vous ne me croyez pas, tapez la commande ls dans une console et tapez la combinaison de touches CTRL+M (celle affecte la touche Entre). Vous verrez, c'est comme si vous aviez tap Entre ! Le programme showkey ne peut pas tre lanc sous XWindow, parce que celui-ci gre lui-mme le clavier. showkey se termine de lui-mme au bout de dix secondes aprs la dernire frappe, ou lors de l'appui de la squence de touches CTRL+D s'il est en mode ASCII.
Principe du fonctionnement de lcran de la console

Il est temps maintenant de passer au mcanisme d'affichage des caractres sur l'cran. Comme vous avez pu le voir dans les paragraphes prcdents, le fait d'appuyer sur une touche ne fait rien d'autre que de fournir des codes numriques aux programmes. Contrairement ce que vous pourriez penser, les codes de ces touches ne sont pas forcment transmis directement l'cran (heureusement, comment taperiez-vous votre mot de passe l'abri des regards indiscrets sinon ?). En fait, l'affichage des caractres l'cran est un des paramtres de la ligne du terminal, que l'on nomme echo. Pour la plupart des programmes, l'cho automatique est dsactiv, et ce sont donc les applications qui, en fonction des codes qu'elles lisent sur la console, effectuent une action. Cependant, la majorit de ces actions ncessitent d'afficher des rsultats sur le moniteur. Pour raliser cela, les donnes afficher sont crites dans le fichier spcial de priphrique de la console. Comme nous l'avons dj vu, la console de Linux se comporte comme un terminal local. Cela implique que les applications qui dsirent crire des donnes doivent les envoyer par la ligne de communication via laquelle elles sont connectes ce terminal. Tout comme les scancodes du clavier, les caractres envoys la console par les applications subissent donc le traitement impos par les paramtres de la ligne de communication virtuelle utilise. Bien entendu, ce traitement est encore une fois minimale, puisque cette ligne est idale Notez que les programmes n'en savent absolument rien, car pour eux, tout se passe comme s'ils crivaient sur un terminal rel. Quoi qu'il en soit, le flux de caractres arrive au niveau du driver de la console aprs ce traitement de base. Comme nous l'avons dj dit plus haut, la console Linux mule un terminal VT102, et recherche donc les codes de contrle et les squences d'chappement de ces consoles. Ces codes d'chappements sont classiquement utiliss pour effectuer des oprations sur la console, comme par exemple le dplacement du curseur, la couleur et les attributs des

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

134

M. Elie Degny Raphael

caractres affichs, l'effacement de l'cran, etc. Pour information, tous les codes de la console sont dcrits dans la page de manuel console_codes. Les codes qui ne sont pas reconnus comme tant des codes d'chappement sont traits en tant que caractres normaux. Le driver de la console doit donc dterminer quel caractre doit tre imprim l'cran pour chaque code fourni par l'application. Cela n'est pas une opration facile, parce que les polices de caractres, qui contiennent la dfinition de la reprsentation graphique des caractres, n'utilisent pas forcment la page de code active dans le systme. Cela signifie que les caractres dfinis dans la police n'apparaissent pas forcment dans le mme ordre que celui de la page de code, et pour cause : une police peut parfaitement tre utilisable dans plusieurs pays diffrents ! Cela complique donc un peu plus les choses, puisqu'il faut utiliser une table de conversion entre la page de code du texte afficher et l'encodage propre de la police. Afin de raliser cette conversion, le driver de la console Linux commence par convertir tous les caractres qu'il reoit en Unicode . Si la console est en mode UTF-8, cette opration est immdiate, car l'UTF-8 code les caractres exactement comme Unicode. En revanche, si la console est en mode ASCII, cette opration ncessite l'emploi d'une table de conversion. Linux dispose de quatre tables de conversions :

la premire table permet de faire la conversion entre la page de code ISO 8859-1 et Unicode (cette conversion est, par dfinition, immdiate) ; la deuxime table permet de faire la conversion entre les codes graphiques des terminaux VT100 et Unicode ; la troisime table permet d'effectuer la conversion entre la page de code 437 et Unicode ; et la quatrime et dernire table est rserve l'usage personnel de l'utilisateur.

La dernire table est trs utile, car elle permet de dfinir une nouvelle table de conversion si ncessaire. Par dfaut, elle convertit les codes reus en codes Unicode spciaux, qui reprsentent les codes utiliss par la police de caractres charge. Ainsi, lorsque cette table est utilise, les codes reus par la console seront utiliss directement pour localiser les caractres dans la police de caractre. Cela ne peut fonctionner que si les applications utilisent le mme encodage que la police de caractres courante. Linux dispose de deux jeux de caractres, nomms respectivement G0 et G1, qui permettent de slectionner la table de conversion utiliser. Par dfaut, ces jeux de caractres pointent respectivement sur la premire et la deuxime table de conversion, mais cela peut tre modifi l'aide de codes d'chappement. Seul un jeu de caractres est actif un moment donn. Par dfaut, il s'agit du jeu G0, ce qui implique que la table de conversion utilise par dfaut est la table ISO 8859-1 vers Unicode. Il est galement possible de changer de jeu de caractres, l'aide d'un code de contrle. Ce mcanisme ne sera pas dcrit plus en dtail ici, car il ne nous sera pas utile. Note : En fait, la recherche des codes de contrle est effectue a posteriori, aprs la conversion en Unicode.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

135

M. Elie Degny Raphael

Dans tous les cas, les codes envoys par l'application sont donc convertis en Unicode (16 bits). Ils peuvent donc tre reconvertis aisment dans l'encodage utilis par la police de caractre charge en mmoire vido. Par dfaut, cette opration est triviale, et l'encodage cible est donc l'encodage ISO 8859-1, sauf si la quatrime table de conversion a t utilise. Dans ce cas en effet, l'encodage cible est le mme encodage que celui utilis par l'application (tout se passe donc comme si rien ne s'tait pass). Enfin, la dernire opration est tout simplement l'criture du code dans la mmoire vido. Ce code est utilis par la carte graphique comme index dans la police de caractre, et le caractre ainsi localis est affich. Gloups !? Que c'est compliqu ! a ne va pas recommencer ? Eh si ! Mais encore une fois, ce mcanisme permet de rendre indpendant les applications des polices de caractres. Chacun peut utiliser l'encodage qu'il dsire, et grce un petit passage en Unicode, tous les caractres finissent par tre reprsents par le bon symbole l'cran... En fait, le passage par Unicode donne la possibilit de dfinir les tables de conversion des polices uniquement par rapport Unicode, et non par rapport tous les encodages possibles que les applications peuvent utiliser. Cela permet donc l'utilisation de polices de caractres diverses et varies, sans avoir modifier les applications.
Configuration du clavier

Bien que les distributions modernes fournissent les outils ncessaires la configuration correcte du clavier, vous aurez peut-tre intervenir pour le personnaliser selon vos propres dsirs. La configuration du clavier comprend la dfinition des scancodes, la dfinition du plan de clavier, et le rglage de la vitesse de rptition et de la touche de verrou numrique.
Choix de la police des caractres

La dfinition des scancodes est une opration qui ncessite une bonne connaissance du fonctionnement du clavier des PC. Heureusement, rares sont les personnes qui disposent de claviers non standard, c'est--dire en pratique de claviers disposant de plus de 105 touches. Notez que Linux reconnat parfaitement les touches Windows qui ont t introduites par Microsoft, et il n'y a donc pas lieu de dfinir leurs scancodes. Cependant, les claviers les plus rcents disposent de touches Internet ou Multimedia , qui ne sont pas encore reconnues par Linux en standard. L'utilisation de ces touches se traduit donc simplement par un message d'erreur dans les traces systmes. Si vous disposez d'un tel clavier, et que vous dsirez utiliser ces touches, vous allez devoir les dfinir dans la table des scancodes du noyau. Pour raliser cette opration, il faut avant tout dterminer les scancodes envoys par le clavier lors de l'appui sur la touche dfinir. Comme nous l'avons indiqu plus haut, les scancodes peuvent tre visualiss avec l'option -s de showkey : Showkey -s

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

136

M. Elie Degny Raphael

Les scancodes sont exprims en hexadcimal, c'est--dire en base 16. Dans cette base, les lettres A F reprsentent les chiffres manquant la base 10, soit les chiffres reprsentant les valeurs 10, 11, 12, 13, 14 et 15. En gnral, le clavier envoie un scancode lors de l'appui sur une touche, puis le mme scancode augment de 128 lors de son relchement. Le nombre de 128 provient du fait que le bit de poids fort du scancode est mis un lors du relchement de la touche. Ainsi, la touche 'A' des claviers franais renvoie le scancode 16 lors de l'appui, soit 0x10 en hexadcimal, et le scancode 144, soit 0x90, lors du relchement (notez que la valeur 128 se note 0x80 en hexadcimal, et que l'on a bien 0x90 = 0x10 + 0x80). Cependant, certaines touches renvoient des scancodes plus complexes. Ces touches sont gnralement des touches qui ont t ajoutes aprs la dfinition des premiers claviers PC, et qui ont sensiblement le mme rle qu'une touche dj prsente. C'est exactement le cas de la touche CTRL de droite par rapport la touche CTRL de gauche. Pour cette raison, les scancodes de ces touches sont les mmes que ceux de certaines touches classiques , mais ils sont prcds du prfixe 0xE0, qui indique qu'il s'agit d'une touche tendue. Par exemple, la touche CTRL de gauche (c'est--dire la premire touche de contrle qui ait t utilise) utilise le scancode 0x1D l'appui, et le scancode 0x9D au relchement. La touche CTRL de droite renvoie donc la squence suivante l'appui : 0xE0 0x1D Et la squence suivante au relchement : 0xE0 0x9D L'intrt de procder ainsi est que les vieux programmes, incapables de grer les codes de touches tendues, ignoraient purement et simplement le code 0xE0. Ainsi, ils confondaient les deux touches CTRL, ce qui est le comportement dsir. D'autres touches tendues utilisent des squences de scancodes variables. Par exemple, les touches du curseur (entre la touche Entre et le pav numrique) ont t ajoutes pour simplifier le dplacement du curseur l'cran. Initialement, on n'utilisait que les touches du pav numrique, en combinaison de la touche Majuscule de droite si le verrou numrique tait enclench. Par consquent, la squence de scancodes gnre lors de l'utilisation de la touche Flche Haute du pav numrique tait : 0x48 si le verrou numrique n'tait pas enclench, et : 0x2A 0x48 sinon (soit le scancode de la touche Majuscule de gauche suivi du scancode de la touche 8 du pav numrique). Lors du relchement, la squence tait inverse (et augmente de 128) : 0xC8 ou : 0xC8 0xAA selon l'tat du verrou numrique. La touche Flche Haute tendue renvoie donc deux squences de scancodes diffrents selon l'tat du verrou numrique : 0xE0 0x48 ou : 0xE0 0x2A 0xE0 0x48 Lors du relchement, la squence suivante complexe suivante est mise : 0xE0 0xC8 ou : 0xE0 0xC8 0xE0 0xAA selon l'tat du verrou numrique. Notez que l'tat du verrou numrique est maintenu en interne par l'lectronique du clavier, indpendamment de l'tat de la diode lumineuse du verrou numrique. Celui-ci peut en effet tre

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

137

M. Elie Degny Raphael

enclench sans que la diode soit allume, si le programme de gestion du clavier ne synchronise pas le clavier et sa diode. Enfin, pour couronner le tout, certaines touches spciales utilisent une squence de scancodes spcifiques. Par exemple, la touche Pause ne renvoie que la squence 0xE1 0x1D 0x45 0xE1 0x9D 0xC5 l'appui. Elle utilise donc le prfixe 0xE1 au lieu de 0xE0, et simule l'appui et le relchement immdiat des touches CTRL + Verrou Numrique (ce qui tait la manire de provoquer la pause avant l'introduction de la touche Pause). Comme vous pouvez le constater, tout cela est trs compliqu. Heureusement, le noyau fait le mnage pour vous et limine les touches suivantes :

les touches non tendues sont traites immdiatement (scancodes 0x01 0x58) ; la touche Pause est gre automatiquement ; les codes 0x2A et 0xAA de la touche Majuscule de droite sont automatiquement limins.

Grce ce traitement, les seuls scancodes que vous manipulerez sont les scancodes simples non connus, et les scancodes prcds du prfixe 0xE0. L'association d'un scancode inconnu un keycode se fait l'aide de l'utilitaire setkeycodes. Sa syntaxe est la suivante : setkeycodes scancode keycode O scancode est le numro du scancode, exprim en hexadcimal et sans le prfixe 0x , et keycode est bien entendu le numro de keycode attribuer cette touche. Les numros de scancodes peuvent tre simples (par exemple 48) ou prcds de leur prfixe (par exemple E048). Les numros de keycodes doivent tre exprims en dcimal, et doivent tre compris entre 1 et 127. Par exemple, mon clavier dispose de 12 touches Multimdia supplmentaires, dont les scancodes ne sont pas reconnues par le noyau. La touche Arrt du son gnrant les scancodes suivants l'appui : 0xE0 0x20 Je peux lui associer le keycode 119 avec la commande suivante : setkeycodes E020 119 Il va de soi qu'il faut s'assurer que chaque keycode n'est utilis qu'une fois ( moins, bien entendu, de vouloir que plusieurs touches aient le mme comportement). Pour cela, vous aurez sans doute besoin de voir les correspondances entre scancodes et keycodes. La commande suivante vous donnera la liste de ces correspondances : getkeycodes

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

138

M. Elie Degny Raphael

Les keycodes sont prsents raison de huit par ligne. Le scancode de la touche dcrite par le premier lment de chaque ligne est affich en tte de la ligne. Les autres scancodes peuvent tre dduits du numro de la colonne dans laquelle se trouve chaque keycode.
Dfinition dun plan du clavier

Comme nous l'avons expliqu dans les paragraphes prcdents, les plans de clavier dfinissent les associations entre les keycodes et les caractres ou les squences d'chappement renvoys par le clavier. Les plans de claviers permettent galement de dfinir des squences de composition, afin d'obtenir de nouveaux caractres en composant les actions de plusieurs touches. La dfinition d'un plan de clavier est donc constitue de trois parties. La premire partie dcrit les symboles accessibles pour certaines touches du clavier. Par exemple, les symboles accessibles pour la touche A peuvent tre les caractres 'a', 'A','' et '', l'aide des touches de majuscule et AltGr. La deuxime partie permet d'affecter des chanes de caractres certaines touches particulires. Cette partie peut contenir par exemple la dfinition de touches de raccourci pour les commandes les plus utilises. En pratique cependant, elles sont souvent utilises pour dfinir des squences d'chappement pour les touches de fonction et les touches du curseur, squences qui seront interprtes ensuite par les applications. Enfin, la dernire partie permet de dfinir les compositions de touches pour obtenir des caractres qui n'auraient t accessibles autrement que par des combinaisons de touches compliques. Pour chaque touche normale du clavier, il est possible de dfinir jusqu' 256 symboles diffrents. Ces symboles sont slectionns grce des touches de modification du comportement de base des autres touches, comme par exemple la touche Ctrl ou la touche Alt Gr. Linux est capable de grer des combinaisons de touches faisant intervenir jusqu' huit touches de modification diffrentes en plus de la touche affecte (remarquez qu'avec dix doigts, on peut encore y parvenir !). Ces touches sont rcapitules dans le tableau suivant : Touche de Valeur modification Shift 1 altgr control alt shiftl shiftr ctrll ctrlr 2 4 8 16 32 64 128 Description Touches de passage en majuscule (situes au dessus des touches Ctrl sur les claviers franais). Touche Alt Gr, situe droite de la barre d'espacement. Touches Ctrl, situes aux extrmits infrieures du clavier. Touche Alt, situe gauche de la barre d'espacement. Touche de majuscule de gauche. Touche de majuscule de droite. Touche Ctrl de gauche. Touche Ctrl de droite.
139

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

M. Elie Degny Raphael

Chaque touche dispose d'un code numrique qui est une puissance de deux. Lorsqu'elles sont utilises dans une combinaison avec une touche donne, la somme de ces valeurs est calcule pour dterminer le numro du symbole dans la liste des symboles associs la touche. Comme on peut le voir, toutes les valeurs possibles allant de 0 255 sont ralisables selon la combinaison de touches utilise, ce qui permet donc de dfinir effectivement 256 symboles diffrents pour chaque touche du clavier. Cependant, les touches Shift et Ctrl sont utilises plusieurs fois dans le tableau, prcisment trois fois, la premire ne faisant pas de distinction entre la touche de droite et la touche de gauche. En pratique donc, toutes les combinaisons ne sont pas ralisables. Mais en ralit, les touches de contrle du clavier sont des touches comme les autres, et peuvent tre places n'importe o dans le plan de clavier. Il est donc parfaitement possible de raliser une distinction entre les touches Majuscule, Majuscule Droite et Majuscule Gauche (et de mme pour les touches Ctrl). Par exemple, on peut associer la touche Majuscule la touche Echap, ce qui permet de faire la distinction entre les trois variantes de touches de majuscules... Heureusement, il n'est pas ncessaire d'aller jusque l. Les plans de claviers n'utilisent en pratique que les quatre premires touches de contrle, qui sont celles que vous connaissez. La dfinition des symboles accessibles pour une touche utilise la syntaxe suivant : keycode = symbole symbole symbole ... O keycode est le keycode qui identifie la touche en question, et symbole est un des symboles accepts dans les plans de claviers. Vous pourrez obtenir la liste des symboles utiliss grce la commande suivante : dumpkeys --long-info Vous pourrez voir par exemple les symboles A, B, C, etc. qui reprsentent les lettres classiques, ainsi que des symboles spciaux comme exclamdown, hyphen, cedilla, etc. pour les lettres non alphabtiques. Il existe galement des symboles pour les touches spciales comme Backspace, Delete, Escape. Enfin, le symbole VoidSymbol permet de signaler l'absence de symbole pour la combinaison de touches considre. En thorie, il faut dfinir la liste des 256 symboles accessibles pour toutes les combinaisons de touches imaginables. Le premier symbole est donc le symbole obtenu par appui direct de la touche, le deuxime est celui obtenu par la combinaison Majuscule + Touche, le troisime celui de la combinaison AltGr + Touche, le quatrime par Majuscule + AltGr + Touche, etc. videmment, il est trs fastidieux de dfinir ces 256 possibilits. Pour simplifier le format des plans de clavier, il est possible de ne spcifier que les combinaisons utilises, ce qui rduit en pratique quatre colonnes de symboles un plan de clavier franais. De plus, les derniers symboles sont facultatifs s'ils sont tous VoidSymbol. Vous pouvez indiquer au dbut du plan de clavier les valeurs des combinaisons de touches de modifications qui seront effectivement utilises avec la syntaxe suivante :

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

140

M. Elie Degny Raphael

keymaps valeurs O valeurs est la liste des valeurs ou des plages de valeurs des combinaisons de touches utilises. Les lments de cette liste sont spars par des virgules, et les plages de valeurs sont indiques par leurs premire et dernire valeurs, spares par un tiret. Vous pouvez galement utiliser une autre syntaxe, qui permet de ne modifier que les symboles associs certaines combinaison de touches. Cette syntaxe est trs utile lorsque vous ne dsirez modifier que quelques affectations de touches : modificateur keycode = symbole Dans cette syntaxe, modificateur est la liste des modificateurs devant intervenir dans la combinaison de touches, et keycode et symbole sont toujours le keycode de la touche et le symbole gnrer. Les modificateurs autoriss sont les noms des touches de modification indiques dans le tableau ci-dessus, plus le modificateur plain, qui signifie qu'aucune touche de modification n'est utilise. Par exemple, la ligne suivante : plain keycode 16 = q Permet d'affecter le symbole q la touche A de votre clavier, et la ligne : alt keycode 30 = a Permet d'affecter le symbole a la combinaison de touches Alt + Q (n'essayez surtout pas ces deux exemples, vous deviendriez fou). Note : Par dfaut, les symboles utilisables dans les plans de clavier sont les symboles du jeu de caractres ISO 8859-1. D'autres encodages sont utilisables, mais celui-ci convient parfaitement pour un clavier franais. Comme nous l'avons dit plus haut, la deuxime partie d'un plan de clavier permet d'affecter des chanes de caractres certaines touches. Cela est facilement ralisable, avec la syntaxe suivante : string symbole = "chane" O symbole est le nom d'un des symboles affect prcdemment une touche, et chane est une chane de caractres. Les chanes de caractres tant dlimites par des guillemets anglais ( " ), ceux-ci ne peuvent pas tre utiliss en tant que caractres de ces chanes. Pour rsoudre ce problme, on peut utiliser un antislash comme caractre d'chappement : \" Vous pouvez galement spcifier des caractres directement l'aide de leur valeur en base huit, l'aide de la syntaxe suivante : \0valeur O valeur est la valeur du caractre. Bien entendu, l'antislash tant utilis comme caractre d'chappement, il doit lui-mme tre prcd d'un caractre d'chappement si l'on dsire l'utiliser dans une chane de caractre : \\
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 141

M. Elie Degny Raphael

Ainsi, si l'on veut faire en sorte que la touche F4 affiche la chane de caractre Coucou , il suffit d'utiliser la ligne suivante dans le plan de clavier : string F4 = "Coucou" Bien entendu, les chanes de caractres les plus utiles sont celles qui dfinissent les squences d'chappement pour les touches spciales. Par exemple, la dfinition de la touche Page Haut est la suivante : string PageUp = "\033[5~" Vous pouvez reconnatre ces squences d'chappement la prsence du caractre octal 033, soit 27 en dcimal, qui n'est rien d'autre que le caractre Escape dans le jeu de caractres ISO 8859-1. Ne vous inquitez par pour l'instant de la forme apparemment complique de ces squences d'chappement, nous verrons plus loin comment elles sont utilises. Enfin, les plans de claviers contiennent la dfinition des compositions. Les compositions de touches sont accessibles l'aide d'une touche spciale dite de composition, dont le symbole est Compose dans le plan de clavier (il est donc ncessaire que ce symbole soit affect une des touches du clavier pour utiliser les compositions). Lorsqu'on appuie sur la touche de composition, le clavier attend deux autres touches, dont les caractres serviront de base au caractre compos. Par exemple, les caractres '^' et 'a' donne le caractre compos ''. Les compositions utilisent la syntaxe suivante : compose 'caractre' 'caractre' to 'rsultat' O caractre est un des deux caractres composer et rsultat est le caractre rsultant de la composition. Notez bien que les compositions se font sur les caractres, et pas sur les touches. Elles sont donc actives quel que soit la mthode obtenue pour gnrer ces caractres (combinaison de touches ou touches simples). Note : Le noyau dfinit la plupart des compositions ncessaires pour le jeu de caractres ISO 8859-1. Ne les cherchez donc pas en vain dans votre plan de clavier, vous ne les trouverez pas forcment... D'une manire gnrale, vous pourrez trouver de plus amples renseignements concernant les plans de clavier dans la page de man keymaps. Il est long et difficile de crer un plan de clavier de toute pice. Heureusement, encore une fois, cette description n'tait que didactique. Vous n'aurez certainement mme pas modifier votre plan de clavier (sauf si vous voulez faire des expriences), car des plans de claviers prdfinis sont fournis avec toutes les distributions. Ces plans de claviers sont en gnral stocks dans le rpertoire /usr/lib/kbd/keymap. Pour les claviers de PC franais, je vous conseille tout particulirement le plan de clavier frlatin0.map.gz du sous-rpertoire i386/azerty. Ce plan de clavier permet d'accder
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 142

M. Elie Degny Raphael

toutes les touches utilises par le franais, plus la plupart des touches utilises en Europe. Il utilise l'encodage ISO 8859-15, afin d'avoir accs aux rares caractres manquants dans l'encodage ISO 8859-1. Le chargement d'un plan de clavier est trs simple. Il suffit de taper la commande suivante sous le compte root : loadkeys keymap O keymap est le nom du fichier contenant le plan de clavier utiliser. Si l'on ne spcifie pas de fichier, loadkey attend que vous tapiez la spcification des touches directement. Vous pourrez valider en gnrant le caractre EOF (abrviation de End Of File , ce qui signifie Fin de fichier ) l'aide de la combinaison de touche CTRL + D, ou abandonner avec le classique CTRL + C. En gnral, les distributions utilisent la commande loadkey dans les fichiers d'initialisation du systme, pour charger le plan de clavier que vous avez choisi l'installation ds le dmarrage. Il est recommand de ne modifier le plan de clavier courant que par l'intermdiaire du programme de configuration du systme fourni avec votre distribution. Modification des paramtres du clavier Il nous faut encore voir deux petits utilitaires permettant de fixer quelques paramtres du clavier pour finir notre tour d'horizon de ce priphrique. Le premier de ces paramtres permet de manipuler l'tat des diodes lumineuses qui indiquent si le verrou numrique, le verrou des majuscules ou l'arrt dfilement sont actifs. Cet utilitaire se nomme logiquement setleds, et il permet non seulement de fixer l'tat de ces diodes, mais galement l'tat du clavier. Rappelons en effet que les diodes peuvent tre dsynchronises par rapport l'tat rel du clavier. Ce cas de figure peut se produire si l'on passe d'un terminal X un terminal en mode console, tout simplement parce que les serveurs X ne savent pas comment dterminer l'tat du clavier sur une console afin de le restaurer. La syntaxe de setleds est la suivante : setleds -D num | caps | scroll O num, caps et scroll sont des options permettant de prciser respectivement l'tat des verrous numriques, majuscules et dfilement. Ces options sont de la forme +num, -num pour le verrou numrique, et de forme similaire pour les autres verrous. Comme leur syntaxe l'indique, elles permettent d'enclencher ou de dsenclencher l'tat des verrous correspondants du clavier. L'tat des verrous du clavier est conserv par chaque terminal virtuel, indpendamment les uns des autres. Cette commande devra donc tre rpte pour tous les terminaux virtuels utiliss. L'option -D permet de rendre les changements permanents pour le terminal slectionn. Ainsi, si ce terminal est rinitialis, la modification sera conserve. C'est en gnral l'effet dsir. Sachez qu'il est galement possible d'effectuer une
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 143

M. Elie Degny Raphael

modification temporaire, et de ne modifier que l'affichage des diodes (sans changer l'tat des verrous). Il est recommand de placer les quelques lignes suivantes dans les fichiers d'initialisation de votre systme afin d'activer le verrou numrique pour tous les terminaux, si votre distribution ne vous permet pas de le faire par l'intermdiaire de son programme de configuration : INITTTY=/dev/tty[1-12] for tty in $INITTTY; do setleds -D +num < $tty done Ces lignes appellent la commande setleds sur les terminaux virtuels 1 12. Le deuxime utilitaire est kbdrate. Sa fonction est de fixer les paramtres de dlai d'attente avant rptition lorsqu'on maintient une touche enfonce, ainsi que la vitesse de rptition utilise une fois que ce dlai d'attente est dpass. Sa syntaxe est elle aussi trs simple : Kbdrate -s -r taux -d dlai O taux est le taux de rptition, et dlai est le dlai d'attente avant le dbut des rptitions de la touche enfonce. L'option -s indique kbdrate de ne pas afficher de messages pendant l'excution de la commande. Les dlais d'attentes spcifis peuvent tre de 250, 500, 750 ou 1000 millisecondes. Les taux de rptition utilisables vont de 2 30 caractres par seconde. Les claviers ne peuvent pas accepter toutes les valeurs intermdiaires pour le taux de rptition. Vous trouverez la liste exhaustive des valeurs admissibles dans la page de manuel kbdrate.
Choix de la police des caractres

Par dfaut, la police de caractres utilise par Linux est la police enregistre dans la carte graphique. Cette police convient pour l'affichage des textes anglais, car elle utilise la page de code 437. Il est donc souhaitable, sinon recommand, de changer de police de caractres la fois pour bnficier d'un encodage adapt la langue franaise, et pour bnficier d'amliorations esthtiques ventuelles. Linux est fourni avec un certain nombre de fichiers de polices, qui sont normalement installes dans le rpertoire /usr/lib/kbd/consolefonts. Comme vous pourrez le constater si vous y jetez un coup d'il, ce rpertoire contient un grand nombre de polices, utilisant divers encodages. Les polices les plus utiles pour un ordinateur situ en France sont sans doute les polices iso01*, lat1-* et lat0-*. Cette dernire police utilise l'encodage ISO 8859-15, et contient donc tous les symboles utiliss en Europe. Il est recommand, mais non ncessaire, d'utiliser une des polices encodes en ISO 8859-1 ou en ISO 8859-15, avec un plan de clavier appropri. Par exemple, le plan de clavier fr-latin0.map.gz pourra tre utilis avec la police de caractres lat0-16.psfu.gz.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

144

M. Elie Degny Raphael

Les polices de caractres sont charges aisment avec l'utilitaire setfont. La syntaxe de ce programme est trs simple : setfont police O police est le fichier de police charger. Si vous ne spcifiez aucun fichier de police, la police par dfaut sera charge. Notez que les fichiers de polices peuvent utiliser un encodage particulier spcifique, qui ne correspond aucune des tables de conversion prdfinies du noyau. Pour ces polices, il est donc ncessaire de spcifier des tables de conversion qui leurs sont propres. Ces tables permettent de convertir les codes des caractres reus par la console en codes Unicode spciaux. Tous ces codes appartiennent une plage de codes Unicode rserve au systme, et que Linux utilise pour dfinir les codes qui permettront d'accder directement aux caractres de la police. L'association entre les codes de caractres de l'application et leurs descriptions dans la police de caractres est donc ralise grce ces tables de conversion. Vous pouvez charger une table de conversion spcifique l'aide de l'utilitaire mapscrn. Cet utilitaire prend en ligne de commande un fichier contenant la table de conversion, et charge cette dernire dans la quatrime table de conversion du noyau (c'est--dire la table rserve l'utilisateur) : mapscrn fichier (O fichier est le fichier contenant la description de la table de conversion). Notez que l'utilitaire mapscrn charge la table de conversion, mais ne s'assure pas que le jeu de caractres courant utilise cette table. Par consquent, vous aurez sans doute utiliser les codes d'chappement \033(K ou \033)K pour faire pointer respectivement les jeux de caractres G0 et G1 sur la quatrime table. Ces codes d'chappement peuvent tre saisis l'aide de la commande cat : cat Il vous faudra alors taper sur la touche Echap, puis saisir (K ou )K , et enfin signaler la fin de fichier avec un CTRL + D. Faites bien attention ce que vous fates : en cas d'erreur, le jeu de caractres utilis peut rendre l'cran totalement illisible. Si cela devait se produire, vous devrez taper l'aveugle la commande reset. Cette table s'assure que le jeu de caractres actif est le jeu de caractres G0, et que celui-ci utilise la premire table de conversion. Vous pourrez galement recharger la police par dfaut l'aide de setfont. Heureusement, la plupart des polices de caractres contiennent galement la table de conversion utiliser, et setfont effectue tout le travaille en une seule passe. Il charge la police de caractres dans la carte graphique, puis sa table de conversion dans le noyau, et s'assure enfin que le jeux de caractres G0 soit actif et utilise cette table. Ainsi, l'utilisation de mapscrn est devenue facultative.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

145

M. Elie Degny Raphael

La dernire tape dans la configuration de la police de caractres est le chargement de la table de conversion Unicode vers les indices des caractres dans la police. Cette table est essentielle, puisque c'est elle qui indique l'emplacement des caractres de la police utiliser pour chaque code Unicode. Ces tables dpendent donc de l'encodage utilis par la police de caractres. Le chargement des tables de conversion est ralise par le programme loadunimap. La syntaxe de ce dernier est la mme que celle de mapscrn : loadunimap fichier O fichier est un fichier de conversion appropri. Vous trouverez de tels fichiers dans le rpertoire /usr/lib/kbd/consoletrans. Les fichiers proposs permettent d'utiliser les polices de caractres encodes selon les encodages les plus courants. Bien entendu, certaines polices disposent de leur propre table d'encodage. Encore une fois, l'utilisation de loadunimap est rendue facultative par setfont, qui se charge d'effectuer tout le travail. C'est notamment le cas pour les polices fr-latin0.psfu.gz et fr-latin1.psfu.gz, dont le u en fin d'extension indique la prsence de la table de conversion Unicode.
Configuration de la ligne de communication

La configuration du driver de console ne concerne proprement parler que les plans de clavier et les polices de caractres. Pour les applications, tout se passe comme si elles accdaient une console comme les autres, donc par l'intermdiaire d'une ligne de communication. En gnral, les lignes de communication utilises pour les terminaux sont des lignes srie, c'est--dire des lignes sur lesquelles les donnes sont envoys sous la forme de petits paquets de 5 8 bits, et contrls par d'autres bits ventuellement facultatifs (bit de stop et bit de parit). Il va de soi que toutes les lignes de communications ne sont pas identiques, et qu'un certain nombre de paramtres doivent tre fixs. Ces paramtres peuvent tre fixs avec la commande stty. Leur nombre interdit ici une description exhaustive, d'autant plus que pour un terminal local, ils sont tous initialiss des valeurs par dfaut correctes, et vous n'aurez pas les modifier. Vous pouvez toutefois consulter la page de manuel de stty pour de plus amples renseignements ce sujet. Si vous tes curieux, vous pourrez obtenir tout moment la liste des paramtres de la ligne de communication d'un terminal avec l'option -a de stty : stty -a Comme vous pourrez le constater, le nombre des options utilises est assez impressionnant. Sont dfinis, entre autres, les paramtres de vitesse de communication de la ligne (option speed), la gomtrie du terminal (options rows et columns), les caractres de contrle affects un certain nombre d'action relatifs la ligne (comme
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 146

M. Elie Degny Raphael

par exemple, le caractre ^Z , accessible par la combinaison de touches CTRL + Z, qui permet de suspendre l'excution du programme utilisant la ligne, et le caractre ^C , qui permet de le tuer), le format des donnes transfres sur la ligne (option parodd pour la parit impaire, option cs8 pour des paquets 8 bits, etc.) et des options de gestion des caractres transfrs (par exemple, echo fait en sorte que tout caractre entrant est immdiatement r-mis sur la console, ce qui permet de voir ce que l'on tape). Parmi ces paramtres, les plus intressants sont sans doute ceux dfinissant les actions associes aux diffrentes touches de contrle. Vous pourrez modifier ces paramtres avec la syntaxe suivante : stty action caractre O action est l'une des actions gres par stty, comme par exemple susp pour suspendre le processus en cours, intr pour le tuer, etc. Remarquez que l'action kill n'a rien voir avec la gestion des signaux des processus. Elle permet simplement d'effacer la ligne courante.
Description des terminaux

Le dernier maillon de la chane de gestion des caractres est bien entendu les applications. La plupart des applications sont capables de traiter les caractres simples comme les lettres de l'alphabet, les chiffres et la ponctuation. Cependant, il n'en va pas de mme pour les codes d'chappement des terminaux. Comme nous l'avons vu, certaines touches sont programmes pour renvoyer des codes d'chappement dans le plan de clavier. Mais le driver de la console est galement capable d'interprter certains codes d'chappements, afin d'effectuer des actions spcifiques. Par exemple, les touches du curseur mettent des codes d'chappement spciaux, et il est du ressort de chaque programme de reconnatre ces codes et d'agir en consquence. De mme, les programmes peuvent envoyer des codes d'chappement la console pour dplacer le curseur affich, effacer l'cran, effectuer un scrolling, etc. Le malheur, c'est que les codes d'chappement utilisables diffrent selon les diffrents terminaux utiliss. Les terminaux les plus standards sont les terminaux VT100 et VT102 (la console Linux en faut partie). Cependant, les programmes ne peuvent pas savoir a priori quels codes d'chappement doivent tre utiliss pour effectuer telle ou telle action. C'est pour ces diverses raisons que les systmes Unix disposent d'une base de donne de dfinition des terminaux. Cette base de donne contient tous les codes d'chappements que chaque type de terminal est capable de grer, dcrits d'une manire uniforme. Ainsi, les programmes dsirant grer correctement les terminaux n'ont qu' consulter cette base de donnes pour interprter et rcuprer les codes d'chappement utiliss par le terminal. Historiquement, la dfinition des terminaux tait ralise dans le fichier de configuration /etc/termcap. Ce fichier est obsolte et a t remplac par la base de donnes terminfo, que tous les programmes modernes doivent prsent utiliser. Cependant, le fichier de configuration /etc/termcap a t conserv par compatibilit avec les vieux programmes qui l'utilisent encore.
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 147

M. Elie Degny Raphael

Le fichier termcap comprend une ligne pour chaque type de terminal dcrit. Cette ligne est constitue d'un certain nombre de champs, spars par des caractres deux points (':'). Le premier champ de chaque ligne contient la description du terminal que cette ligne dcrit. Les champs suivants sont des dfinitions des variables contenant les squences d'chappement du terminal. Les informations descriptives du terminal sont les suivantes :

le nom abrg du terminal ; le nom complet du terminal ; les autres noms sous lesquels le terminal est galement connu ; la description dtaille du terminal (toujours en dernier).

Ces informations sont spares les unes des autres par une barre verticale ('|'). Viennent ensuite les dfinitions des variables. Chaque variable est dfinie selon la syntaxe suivante : variable=squence O variable est le nom de la variable, et squence est la squence d'chappement associe cette variable. Notez que certaines variables ne prennent pas de paramtres, et que leur prsence dans la description du terminal signale simplement un comportement particulier de celui-ci. Notez galement que pour les variables numriques, le caractre d'galit est remplac par un caractre dise ('#'). Un certain nombre de variables peuvent tre dfinies pour chaque terminal. Ce sont ces variables qui sont utilises par les programmes pour retrouver les squences d'chappement du terminal. Par consquent, les noms de ces variables sont fixs une fois pour toutes, et elles reprsentent toujours la mme fonctionnalit. La liste des fonctionnalits est, encore une fois, trs grande, et les variables utilisables sont listes exhaustivement dans la page de manuel termcap. Note : Il est vident que les lignes du fichier /etc/termcap peuvent devenir trs longues. Il est donc possible de les taler sur plusieurs lignes physiques, en insrant le caractre de continuation de ligne antislash ('\'). Aprs chaque retour la ligne, il faut utiliser une indentation l'aide du caractre de tabulation. Vous trouverez ci-dessous un exemple de dfinition de terminal : lx|linux|Console Linux:\ :do=^J:co#80:li#25:cl=\E[H\E[J:sf=\ED:sb=\EM:\ :le=^H:bs:am:cm=\E[%i%d;%dH:nd=\E[C:up=\E[A:\ :ce=\E[K:cd=\E[J:so=\E[7m:se=\E[27m:us=\E[36m:ue=\ E[m:\ :md=\E[1m:mr=\E[7m:mb=\E[5m:me=\E[m:is=\E[1;25r\ E[25;1H:\ :ll=\E[1;25r\E[25;1H:al=\E[L:dc=\E[P:dl=\E[M:\
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 148

M. Elie Degny Raphael

:it#8:ku=\E[A:kd=\E[B:kr=\E[C:kl=\E[D:kb=^H:ti=\E[r\ E[H:\ :ho=\E[H:kP=\E[5~:kN=\E[6~:kH=\E[4~:kh=\E[1~:kD=\ E[3~:kI=\E[2~:\ :k1=\E[[A:k2=\E[[B:k3=\E[[C:k4=\E[[D:k5=\E[[E:k6=\E[ 17~:\ :k7=\E[18~:k8=\E[19~:k9=\E[20~:k0=\E[21~:K1=\E[1~ :K2=\E[5~:\ :K4=\E[4~:K5=\E[6~:\ :pt:sr=\EM:vt#3:xn:km:bl=^G:vi=\E[?25l:ve=\E[? 25h:vs=\E[?25h:\ :sc=\E7:rc=\E8:cs=\E[%i%d;%dr:\ :r1=\Ec:r2=\Ec:r3=\Ec: Cette ligne permet de dfinir le terminal associ la console Linux. Vous pourrez par exemple reconnatre le nombre de colonnes et de lignes (variables co et li), ainsi que les codes d'chappements associs aux touches du curseur (variable ku, kd, kr et kl respectivement pour les touches haut, bas, droite et gauche). La variable cl donne par exemple de squence d'chappement utilisable pour effacer l'cran et faire revenir le curseur en haut gauche (squence d'chappement Esc [ H Esc [ J ). Comme il l'a dj t dit plus haut, la liste complte des variables peut tre obtenue en consultant la page de manuel termcap, et ce fichier ne sera pas dcrit plus en dtail ici. La base de donnes terminfo a t introduite pour combler certaines limitations du fichier termcap. Si le principe de fonctionnement est presque le mme, les informations fournies tiennent compte des terminaux plus rcents et de nouvelles fonctionnalits. Cela signifie en pratique que de nouvelles variables ont t dfinies pour dcrire les nouveaux terminaux. Inversement, certaines variables de termcap ont disparu parce qu'elles devenaient obsoltes, et ont t remplaces par des variables quivalentes de terminfo. La principale diffrence entre terminfo et termcap est que la description des terminaux n'est plus stocke dans un fichier de configuration en mode texte. Toutes les donnes sont dsormais stockes dans des fichiers binaires, qui peuvent tre gnrs l'aide du programme tic. Ces fichiers binaires sont usuellement placs dans les sousrpertoires du rpertoire /usr/share/terminfo/. En fait, le nombre de fichiers de description est tellement grand qu'ils ont t regroups par ordre alphabtique. Ainsi, le rpertoire /usr/share/terminfo contient des sous-rpertoires dont les noms sont les premires lettres des fichiers de description, et chaque fichier de description est situ dans le rpertoire correspondant. Par exemple, le fichier de description des terminaux Linux se nomme tout simplement linux. Comme la premire lettre de son nom est 'l', il est stock dans le rpertoire /usr/share/terminfo/l/, avec les descriptions de tous les autres terminaux dont le nom commence par 'l'. Note : En fait, les fichiers de description de terminaux peuvent tre placs un autre emplacement que l'emplacement par dfaut. Les bibliothques de programme utilisant
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 149

M. Elie Degny Raphael

les informations de terminfo cherchent en effet en premier dans le chemin rfrenc par la variable d'environnement TERMINFO, puis dans le rpertoire .terminfo du rpertoire de l'utilisateur. Ce n'est que si ces deux recherches chouent qu'elles utilisent les informations du rpertoire par dfaut. Comme nous l'avons dit, les fichiers de description sont des fichiers binaires, qui ont t compils l'aide du compilateur tic. Cependant, vous pouvez parfaitement visualiser le contenu de ces fichiers ou comparer deux fichiers l'aide de l'utilitaire infocmp. Par exemple, vous pouvez visualiser sous une forme lisible les informations du fichier de description des terminaux Linux avec la commande suivante : infocmp linux Vous obtiendrez certainement un rsultat semblable ceci : #Reconstructed via infocmp from file: /usr/lib/terminfo/l/linux linux|linux console, am, bce, eo, mir, msgr, xenl, xon, colors#8, it#8, pairs#64, acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\3 61h\260i\316j\\ 331k\277l\3 bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[J, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, cvvis=\E[? 25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, flash=\E[?5h\E[?5l$<200/>, home=\E[H, hpa=\E[%i %p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, invis=\E[8m, kb2=\E[G, kbs=\177, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\E[[A, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~,

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

150

M. Elie Degny Raphael

kf19=\E[33~, kf2=\E[[B, kf20=\E[34~, kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kspd=^Z, nel=^M^J, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=\E[10m, rmir=\E[4l, rmpch=\E[10m, rmso=\E[27m, rmul=\E[24m, rs1=\Ec, sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%? %p3%t;7%;%?%p4%t;5%;\ %?%p5%t;2%;%?%p6%t;1%;%?%p7%t;8%;%? %p9%t;11%;m, sgr0=\E[m, smacs=\E[11m, smir=\E[4h, smpch=\E[11m, smso=\E[7m, smul=\E[4m, tbc=\E[3g, u6=\E[%i%d; %dR, u7=\E[6n, u8=\E[?6c, u9=\E[c, vpa=\E[%i%p1%dd, Comme vous pouvez le constater, le format de ces informations est similaire celui de celles qui sont enregistres dans le fichier /etc/termcap. Les principales diffrences sont que les diffrents champs sont spars par des virgules (',') au lieu du caractre deux points (':'), et qu'il est possible de les rpartir sur plusieurs lignes physiques (il est donc inutile d'utiliser le caractre antislash en fin de ligne physique pour indiquer la continuation de la ligne logique). De plus, le nom des variables utilises dans les fichiers terminfo n'est pas le mme a priori. Cependant, le principe d'utilisation de ces variables reste le mme, chacune d'entre elles permet de dfinir une des fonctionnalits gres par le terminal et de dfinir la squence d'chappement ncessaire l'obtention de cette fonctionnalit si ncessaire. Vous pourrez trouver la liste exhaustive des variables utilisables dans la page de manuel terminfo. Le format des fichiers de configuration de terminfo ne sera donc pas dcrit plus en dtail dans ce document. Qu'ils utilisent des bibliothques bases sur termcap ou terminfo, les programmes doivent tous connatre le nom du terminal courant pour rcuprer les informations qui permettent de l'utiliser dans ces bases de donnes. C'est prcisment ce quoi sert la variable d'environnement TERM. Cette variable contient en permanence le nom du terminal courant, que les programmes peuvent utiliser comme index dans les bases de donnes termcap ou terminfo. Ainsi, si vous dsirez travailler sur un terminal Linux, vous pourrez fixer le type de terminal correct avec la commande suivante : export TERM=linux

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

151

M. Elie Degny Raphael

La liste des noms de terminaux utilisables peut tre obtenue en lisant directement le fichier termcap. En revanche, cette liste peut tre obtenue plus facilement pour terminfo, l'aide de l'utilitaire toe (abrviation de l'anglais Table Of terminfo Entry ). Bien entendu, vous n'aurez dfinir la valeur de TERM que si cette variable d'environnement n'est pas correctement dfinie, ce qui est trs rare. En fait, cela ne peut se produire que lors d'une connexion distance sur un autre ordinateur, dont les terminaux ne sont pas de type Linux.
Parametrage des applications

En thorie, la description du terminal courant fournie par les bases de donnes termcap ou terminfo est suffisante pour faire fonctionner correctement la plupart des applications. En particulier, les programmes qui utilisent les bibliothques de fonctions de manipulation des terminaux sont capables d'utiliser ces informations. C'est le cas par exemple de tous les programmes qui utilisent les bibliothques curses ou ncurses , car celles-ci s'appuient sur la base de donnes terminfo. Cependant, certaines applications utilisent un mcanisme plus simple (mais moins souple) pour grer les terminaux. Pour ces applications, une configuration spcifique doit tre effectue, souvent pour chaque terminal, en prcisant les codes d'chappement utiliser dans leurs fichiers de configuration. On remarquera la prsence du shell bash , de l'diteur vi et du programme de pagination less dans cette catgorie de logiciels. Comme ce sont les logiciels les plus couramment utiliss, il est indispensable d'indiquer comment les configurer pour une utilisation correcte. Configuration du clavier pour la bibliothque readline Un certain nombre d'applications, dont le shell bash , utilisent la libraire GNU readline pour obtenir les lignes de commandes saisies par l'utilisateur. Tous ces programmes peuvent donc tre configurs de la mme manire, grce au fichier de configuration de la bibliothque readline. Cette bibliothque recherche son fichier de configuration en premier l'emplacement indiqu par la variable d'environnement INPUTRC. Si cette variable d'environnement n'est pas dfinie, le fichier de configuration ~/.inputrc est lu pour dterminer les squences d'chappement utiliser. Il est donc recommand de crer un fichier de configuration gnral /etc/inputrc et de dfinir la variable d'environnement INPUTRC afin de dfinir des paramtres communs tous les utilisateurs. Vous pouvez galement recopier ce fichier dans les rpertoires personnels de tous les utilisateurs sous le nom .inputrc. Ainsi, si vous voulez grer correctement le clavier franais sous le shell bash, vous devrez vous assurer que les lignes suivantes sont places dans votre fichier inputrc : # Active la gestion du huitime bit des caractres
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 152

M. Elie Degny Raphael

# (par exemple pour les caractres accentus) : set meta-flag on set input-meta on set output-meta on set convert-meta off # Dfinit les codes d'chappement touches du curseur : "\e[1~": beginning-of-line "\e[3~": delete-char "\e[4~": end-of-line "\e[5~": history-search-backward "\e[6~": history-search-forward "\e[C": forward-char "\e[D": backward-char "\e[A": previous-history "\e[B": next-history associs aux

# Redfinit les codes d'chappement pour l'mulateur de terminal xterm : $if term=xterm "\e[1~": history-search-backward "\e[4~": set-mark "\e[H": beginning-of-line "\e[F": end-of-line "\eOH": beginning-of-line "\eOF": end-of-line $endif Ce fichier commence par autoriser le traitement des caractres dont le bit meta , c'est-dire le huitime bit, est positionn. C'est en particulier le cas de tous les caractres accentus dans les principales pages de codes ; ces options sont donc ncessaires pour pouvoir utiliser ces caractres dans le shell. La suite du fichier dfinit les actions associes chaque code d'chappement du terminal. Le caractre d'chappement est reprsent ici par la chane de caractres \e . Comme les codes d'chappement sont diffrents pour la console et pour les mulateurs de terminaux de XWindow, il est ncessaire de les redfinir en fonction de la nature du terminal. Configuration du clavier pour vi L'diteur en ligne de commande vi n'est pas rput pour tre agrable utiliser. Cela provient essentiellement de sa distinction entre les mode de commande, d'dition et de visualisation. Mais cela n'est pas suffisant pour le rendre hassable : la torture psychologique impose par la mauvaise gestion du curseur vient souvent bout des plus rsistants. Heureusement, Linux fournit un clone nettement plus puissant et qui permet de rsoudre ces problmes : vim.
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 153

M. Elie Degny Raphael

L'diteur vim peut bien entendu tre parfaitement compatible avec vi afin ne pas drouter les habitus de vi. Mais il dispose en plus de fonctionnalits avances qui en font un outil extrmement configurable, et il est possible de le rendre nettement plus ergonomique que son anctre. Malheureusement, il faut reconnatre que la plupart des distributions fournissent un vim brut de fonderie , ce qui fait que seuls ceux qui se lancent dans la lecture de son aide peuvent parvenir l'utiliser correctement. Les options qui sont proposes ici sont donc donnes simplement titre indicatif, mais permettront peut-tre de rendre vim un peu plus ergonomique. Les options de configuration de vim sont stockes dans deux fichiers. Le premier fichier est le fichier de configuration commun tous les utilisateurs, vimrc. Ce fichier peut tre plac soit dans le rpertoire /etc/, soit dans le rpertoire /usr/share/vim/, selon votre distribution. Le deuxime fichier est le fichier de prfrences personnelles de chaque utilisateur, et se nomme .vimrc. Il est normalement plac dans le rpertoire personnel de l'utilisateur. Plusieurs types d'options peuvent tre indiques dans ces fichiers de configuration. Les premires associent les actions effectuer aux codes d'chappement gnrs par les touches du curseur. Les autres spcifient simplement le comportement de l'diteur et le paramtrage de ses principales fonctionnalits. Vous trouverez ci-dessous les principales options que vous pourrez ajouter votre fichier de configuration vimrc. Ces options rendront sans doute l'utilisation de vim beaucoup plus agrable. " Exemple d'options de configuration pour vim. " Notez que les commentaires sont introduits ici " par des guillemets anglais (") et non " par des dises ('#'), contrairement la plupart des fichiers " de configuration. " viter tout pris la compatibilit avec vi, qui est insupportable : set nocompatible " Dfinir les touches du clavier : " Gestion du map ^[OA map ^[[A map ^[OB map ^[[B map ^[OD map ^[[D map ^? map ^H curseur en mode de visualisation : k k j j h h h h
154

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

M. Elie Degny Raphael

map map map map map map map map map map map map map map map

^[OC ^[[C ^[[2~ ^[[3~ ^[[1~ ^[OH ^[[H ^[[4~ ^[OF ^[[F ^[[5~ ^[[6~ ^[[E ^[[G ^[OE

l l i x 0 0 0 $ $ $ ^B ^F "" "" "" pav numrique en mode de visualisation : : * + + ^M 7 8 9 4 5 6 1 2 3 0 .

" Gestion du map ^[Oo map ^[Oj map ^[Om map ^[Ok map ^[Ol map ^[OM map ^[Ow map ^[Ox map ^[Oy map ^[Ot map ^[Ou map ^[Ov map ^[Oq map ^[Or map ^[Os map ^[Op map ^[On

" Gestion du pav numrique en mode insertion : map! ^[Oo : map! ^[Oj * map! ^[Om map! ^[Ok + map! ^[Ol + map! ^[OM ^M map! ^[Ow 7 map! ^[Ox 8 map! ^[Oy 9 map! ^[Ot 4
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 155

M. Elie Degny Raphael

map! map! map! map! map! map! map!

^[Ou ^[Ov ^[Oq ^[Or ^[Os ^[Op ^[On

5 6 1 2 3 0 .

" Gestion du curseur dans les modes d'insertion et de commande : map! ^[[H <Home> map! ^[OH <Home> map! ^[[F <End> map! ^[OF <End> map! ^[OA <Up> map! ^[OB <Down> map! ^[OC <Right> map! ^[OD <Left> map! ^[[3~ <Delete> map! ^[OE <Space> " Dfinir les autres options globales : " Paramtrage des touches Backspace et Delete : set t_kb=^? set t_kD=ESC[3~ " Faire en sorte que le "backspace" efface mme les sauts de lignes : set bs=2 " Utiliser l'indentation automatique dans les fichiers C et C++ " (pour les programmeurs) : set cindent " Utiliser la coloration syntaxique pour les principaux langages " de programmation : set background=dark if &t_Co > 1 syntax on endif

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

156

M. Elie Degny Raphael

" Signaler les correspondances accolades et crochets : set showmatch

de

parenthses,

" Rappeler le mode de fonctionnement courant : set showmode Vous constaterez que certains caractres de contrle sont utiliss dans ce fichier de configuration, dont le caractre de contrle ^[ , qui reprsente le caractre d'chappement. Ces caractres sont reprsents avec la notation classique ^C , o C est la lettre utiliser avec la touche CTRL pour obtenir ce caractre. Ces notations ne font que reprsenter les caractres de contrle, et doivent tre remplaces par les caractres qu'elles reprsentent dans le fichier de configuration. Pour saisir ces caractres spciaux, vous devrez passer en mode insertion dans vi, puis utiliser la combinaison de touches CTRL+V. Ce raccourci permet d'indiquer vi qu'il doit insrer les codes d'chappement directement issus du clavier, sans les interprter. Vous pourrez alors taper la squence de touches gnrant le caractre de contrle ou la squence d'chappement dsire. Par exemple, vous pourrez obtenir le caractre ^H en tapant la combinaison de touches CTRL+H, et le caractre ^? en appuyant sur la touche Backspace (retour arrire). Les caractres d'chappement peuvent tre gnrs par la touche Echap ou directement par les touches du curseur. Note : En fait, vous pouvez galement utiliser les chanes de caractres \e et <Esc> pour reprsenter le caractre d'chappement. Mais certaines options ne fonctionnent pas avec ces notations, et je vous les dconseille. Vous pouvez bien entendu ajouter d'autres options dans ce fichier de configuration. En pratique, toutes les options utilisables dans le mode de commande de vim peuvent tre fixes dfinitivement dans ce fichier. Vous obtiendrez de l'aide sur ces options grce la commande :help de vim. Configuration du clavier pour less Le programme de pagination less est naturellement bien plus agrable utiliser que son anctre more, puisqu'il permet de revenir sur les pages dj consultes. Cependant, il peut le devenir encore plus si l'on s'arrange pour qu'il reconnaisse les touches du curseur. Le programme less lit ses informations de configuration dans un fichier binaire dont l'emplacement est spcifi par la variable d'environnement LESSKEY. Si cette variable d'environnement n'est pas dfinie, less utilise le fichier de configuration .less du rpertoire personnel de l'utilisateur. Ce fichier binaire contient les associations entre les squences d'chappement du terminal et les actions effectues par less. Il est gnr par le compilateur lesskey, partir d'un fichier de configuration textuel classique. Ce fichier de configuration comprend plusieurs sections, qui permettent de dfinir les touches utilises en mode de commande, les touches utilises en mode d'dition de

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

157

M. Elie Degny Raphael

lignes (par exemple dans une commande de recherche), et enfin les variables d'environnements utilises par less. Vous trouverez ci-dessous un exemple de fichier de configuration pour less. Vous trouverez de plus amples renseignements sur les actions qui peuvent tre associes aux squences d'chappement et aux caractres de contrle dans la page de manuel lesskey. # Exemple de fichier de configuration pour less # Premire section : #command \e[B forw-line \e[A back-line \e[6~ forw-scroll \e[5~ back-scroll \177 back-screen ^H back-screen \e[3~ back-screen \e[2~ visual \e[1~ goto-line \eOH goto-line \e[4~ goto-end \eOF goto-end \eOM forw-line # Deuxime section : #line-edit \177 backspace ^H backspace \e[3~ delete \e[1~ home \eOH home \e[4~ end \eOF end \e[5~ up \e[6~ down \e[2~ insert \e[E insert \e[G insert \eOE insert \eOo insert : \eOj insert * \eOm insert \eOk insert +
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 158

M. Elie Degny Raphael

\eOl \eOM \eOw \eOx \eOy \eOt \eOu \eOv \eOq \eOr \eOs \eOp \eOn

insert + insert insert 7 insert 8 insert 9 insert 4 insert 5 insert 6 insert 1 insert 2 insert 3 insert 0 insert .

# Troisime section : #env LESSCHARSET=latin1 Conformment un usage courant, les commentaires sont introduits par le caractre dise ('#') dans ce fichier de configuration. Cependant, certains commentaires sont utiliss pour identifier le dbut des trois sections du fichier. Il s'agit des commentaires #command , #line-edit et #env . Il ne faut donc surtout pas supprimer ces commentaires dans votre fichier de configuration. Encore une fois, le caractre d'chappement est symbolis par la chane de caractre \e . De mme, les caractres de contrle sont reprsents par la notation classique ^C , o C est la touche utilise en combinaison avec CTRL pour gnrer ce caractre de contrle. Notez que contrairement au fichier de configuration /etc/vimrc, ces notations peuvent tre utilises directement dans le fichier de configuration de less. Ce fichier de configuration pourra tre compil avec le programme lesskey afin de gnrer le fichier binaire utilis par less. Pour cela, il faudra simplement utiliser la syntaxe suivante : lesskey fichier O fichier est le nom du fichier de configuration compiler. Le fichier binaire gnr est par dfaut celui rfrenc par la variable d'environnement LESSKEY. Si cette variable n'est pas dfinie, un fichier .less sera cr dans le rpertoire personnel de l'utilisateur.
Configuration de la souris

L'installation de la souris est une opration trs simple raliser. La seule chose importante est de bien connatre les diffrents types de souris et de ne pas les confondre.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

159

M. Elie Degny Raphael

Autrefois, la plupart des souris taient des souris connectes sur le port srie (souris srielles). Aujourd'hui, ces souris se font de plus en plus rares, et le port de prdilection est le port PS/2. Ce port a t introduit par IBM dans ses ordinateurs PS/2 et est quelque peu plus pratique que le port srie, car il dfinit une interface standard pour toutes les souris. De plus, il permet de dgager un des ports sries, ce qui simplifie la configuration des modems. Le port PS/2 ressemble au port clavier du mme type, et en fait on peut se tromper et brancher la souris la place du clavier et inversement. Il ne faut surtout pas confondre les souris PS/2 avec les souris Bus, qui ont t vendues autrefois et que l'on ne trouve quasiment plus prsent. Ces souris pouvaient se connecter sur des cartes spciales, voire, parfois, sur la carte graphique. Pour que l'installation de la souris se fasse correctement, il faut s'assurer que les options concernant la souris ait bien t dfinies dans la configuration du noyau de Linux. Cela n'est pas ncessaire pour les souris srie. Vous pouvez consulter le Chapitre 9 pour plus de dtails sur la configuration du noyau. Lorsque cette tape est faite, il ne reste plus qu' indiquer au programme de gestion de la souris quel type de souris il a affaire. Normalement ce programme est gpm, il permet d'utiliser la souris en mode texte. La configuration de la souris pour XWindow sera vue dans le Chapitre 10. La configuration de gpm se fait normalement par l'intermdiaire du programme de configuration de votre distribution. Lorsqu'on n'utilise pas XWindow, gpm est lanc automatiquement au dmarrage. Il se peut que votre programme de configuration vous demande le type de souris utiliser. Dans ce cas, il faut choisir le bon type, faute de quoi gpm ne fonctionnera pas correctement. Attention, si vous dsirez utiliser une souris molette (souris disposant d'une petite roue entre les deux boutons, et permettant de faire dfiler le contenu des fentres), le type de souris utiliser est imps2 et non simplement ps2 . Pour avoir la liste des types de souris grs par gpm, il suffit de le lui demander avec la ligne de commande suivante : gpm -t help Normalement, vous aurez utiliser gpm avec la ligne de commande suivante : gpm -t type -m /dev/mouse O type est le type de la souris que gpm doit utiliser et /dev/mouse est un lien vers le fichier spcial de priphrique grant votre souris. Modules du noyau Les modules du noyau sont des bibliothques que l'on peut charger dans le noyau lorsque celui-ci a besoin d'une certaine fonctionnalit. Une fois chargs, les modules font partie intgrante du noyau et ajoutent leurs fonctions celles existantes. Ces bibliothques sont normalement stockes dans le rpertoire /lib/modules/version/, o version est le numro de version du noyau pour lequel ces modules ont t crs. Beaucoup de fonctionnalits du noyau peuvent tre configures pour tre utilises sous

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

160

M. Elie Degny Raphael

la forme de modules. Certains drivers ne fonctionnent que sous la forme de modules, aussi faut-il savoir les manipuler. Les modules peuvent tre chargs manuellement l'aide des commandes insmod et modprobe. modprobe est un peu plus volue, car elle gre les dpendances entre les modules et est capable de charger les modules utiliss par le module demand. Leur utilisation est des plus simple : insmod module Ou : modprobe module O module est le nom du module charger. En ralit, la commande modprobe appelle la commande insmod pour chaque module qui doit tre charg, dans l'ordre des dpendances des modules. De cette manire, chaque module peut tre charg sans problme, car toutes les fonctionnalits qu'il utilise sont dj prsentes dans le noyau lors de son chargement. La commande modprobe va chercher ces informations de dpendance dans le fichier modules.dep, situ dans le rpertoire /lib/module/version/. Ce fichier utilise une syntaxe trs simple, et spcifie pour chaque module les modules dont il dpend. Bien qu'il puisse parfaitement tre crit la main, cela ncessiterait d'avoir une connaissance approfondie des modules du noyau. C'est donc pour cela que l'outil depmod a t crit. Cet outil permet de gnrer le fichier modules.def automatiquement, pourvu qu'on l'appelle avec l'option -a en ligne de commande : depmod -a Il faudra donc appeler cette commande aprs chaque installation ou suppression de module dans le systme. La liste de modules qui ont t chargs peut tre obtenue aisment avec la commande lsmod : lsmod Enfin, la commande rmmod permet de dcharger un module, avec la ligne de commande suivante : rmmod module La plupart des modules penvent prendre un certain nombre d'options lors de leur chargement. Ces options sont en quelque sorte l'quivalent des options que l'on communique au noyau lors du boot, pour prciser par exemple la configuration matrielle utilise. Toutes ces options sont dfinies dans le fichier de configuration/etc/modules.conf. Lors du chargement d'un module, modprobe consulte ce fichier et passe les paramtres indiqus au module charger.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

161

M. Elie Degny Raphael

Les options des modules sont spcifies dans le fichier module.conf l'aide du motcl option, suivi du nom du module pour lequel ces options sont dfinies, lui-mme suivi des paramtres de chargement du module. La syntaxe est donc la suivante : option module paramtres Par exemple, il est probable que le driver du port parallle soit fourni sous la forme de module avec votre distribution. Cela permet de le charger la demande, et de le configurer pour les diffrentes utilisations possibles d'un port parallle : communication avec une imprimante parallle, ou avec un lecteur ZIP, ou encore avec un lecteur de CD IDE, etc. Sur les ordinateurs de type PC, le nom du module grant le port parallle est parport_pc . Ce module peut prendre des paramtres de chargement permettant d'indiquer le port d'entre/sortie utiliser et la ligne d'interruption utiliser. En gnral, le port utilis est le port numro 378h, et la ligne d'interruption est souvent la 7. Les options suivantes doivent donc tre dfinies dans le ficher module.conf : option parport_pc io=0x378 irq=7 Le fichier module.conf permet galement de dfinir des oprations complmentaires qui doivent tre effectues lors du chargement et du dchargement d'un module. Ces oprations sont introduites par les mots-cls pre-install, post-install, pre-remove ou post-remove. Selon le mot-cl utilis, elles sont excutes respectivement avant et aprs le chargement du module, et avant et aprs son dchargement. Ces quatre motscls utilisent tous la mme syntaxe : xxx-install module opration o xxx-install est le mot-cl indiquant les conditions d'application de l'opration, module est le nom du module pour lequel une opration complmentaire doit tre effectue, et opration est la ligne de commande de l'opration en question. Ainsi, si le port parallle est utilis pour accder un priphrique ncessitant une opration d'initialisation quelconque, celle-ci peut tre excute aprs le chargement du module l'aide du mot-cl post-install : post-install parport_pc initperiph (en supposant que la commande initperiph permet d'initialiser le priphrique en question). videmment, ce type d'opration dpend du matriel connect sur le port parallle, mais le principe est l. Dans la plupart des cas, ces options sont facultatives, car modprobe utilise un jeu de valeurs par dfaut qui permettent d'utiliser les modules mme si le fichier de configuration modules.conf est absent. Vous pouvez visualiser ces options en renommant le fichier de configuration modules.conf et en tapant la commande suivante : modprobe -c

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

162

M. Elie Degny Raphael

Cette commande vous permettra galement de recrer un nouveau fichier de configuration si d'aventure vous perdiez celui fourni avec votre distribution. Notez cependant qu'il est recommand d'adapter le fichier de configuration modules.conf afin d'obtenir des performances optimales. Les modifications que nous avons donnes en exemple ci-dessus pour le port parallle permettent par exemple d'viter que le noyau consulte en permanence le port pour savoir s'il est prt recevoir ou fournir de nouvelles donnes pendant les impressions. Le gain de performance peut ainsi atteindre 10% quelle que soit la vitesse du processeur, ce qui est trs loin d'tre ngligeable. Il n'est normalement pas ncessaire d'utiliser ces commandes pour charger les modules. En effet, il est possible de faire en sorte que les modules soient chargs la demande, lorsqu'une de leurs fonctionnalits est demande au niveau du noyau. Pour cela, le noyau utilise lui-mme la commande modprobe pour charger les modules, ce qui assure la gestion correcte des dpendances entre les modules. chaque fois que le noyau a besoin d'une fonctionnalit qui n'est pas encore charge, il effectue une requte modprobe en lui demandant de charger le module manquant. Le nom du module dont le noyau demande le chargement modprobe dpend videmment de la fonctionnalit demande et ne correspond pas forcment un nom de module existant. modprobe doit donc faire la correspondance entre le nom de module demand par le noyau et le nom d'un module rel. C'est encore une fois dans le fichier de configuration /etc/modules.conf que cette correspondance est stocke. Par exemple, lorsque le noyau dsire accder au port parallle, il utilise la commande suivante : Modprobe -k parport_lowlevel O parport_lowlevel est le nom que le noyau utilise pour rfrencer le port parallle. Ce nom est identique quelle que soit la plate-forme sur laquelle le noyau fonctionne, qu'il s'agisse d'un PC, d'un Mac ou d'une station de travail Sun. Sur les ordinateurs dont l'architecture est de type PC, le vritable module utiliser est, comme on l'a vu, parport_pc. Il faut donc donner indiquer l'association entre les noms parport_lowlevel et parport_pc dans le fichier modules.conf. Cette association est ralise par la dfinition d'un certain nombre d'alias de modules rels. Chaque alias est introduit par le mot-cl alias, dont la syntaxe est donne cidessous : alias nom module O nom est le nom de l'alias, et module est le nom du module rel. Lorsque la commande modprobe est appele avec le nom d'un alias en paramtre, elle commence par rechercher le nom du module rel dans le fichier modules.conf, puis elle le charge en mmoire. Pour le port parallle, on aura donc la dfinition suivante dans le fichier modules.conf : alias parport_lowlevel parport_pc

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

163

M. Elie Degny Raphael

L'option -k passe en paramtre modprobe par le noyau n'est quant elle utilise que par le noyau. Elle permet de marquer le module comme tant automatiquement dchargeable, lorsque plus personne n'utilisera ses fonctionnalits. Cette technique permet de minimiser la consommation mmoire du noyau, sur les machines dont les ressources sont trs limites. Les modules qui sont chargs automatiquement par le noyau sont en effet marqus comme tant automatiquement dchargeables, et on peut effectivement les supprimer l'aide de la commande suivante : modprobe -r Cette commande dcharge les modules inutiliss automatiquement, dans l'ordre inverse de leur chargement. Cette commande respecte donc les dpendances entre modules, et seuls les modules inutiliss sont rellement dcharges. Il est recommand de placer cette commande dans le fichier /etc/crontab de votre systme, afin que les modules inutiliss soient dchargs intervalle de temps rgulier. Vous aurez donc sans doute placer une ligne telle que celle-ci : */2 * * * * root modprobe -r Dans votre fichier /etc/crontab. Le dchargement des modules inutiliss aura lieu toutes les deux minutes. Vous pouvez constater que le mcanisme d'alias permet de rendre le noyau indpendant des modules utiliss, puisque l'association entre le nom du module utilis par le noyau et le module rel et ses paramtres sont maintenus dans le fichier de configuration modules.conf. L'inconvnient de cette mthode est en revanche qu'il faut connatre les noms de modules utiliss par le noyau. Ces noms sont assez variables et dpendent de la fonctionnalit demande. Toutefois, les noms utiliss par le noyau peuvent facilement tre dtermins pour les modules grant les fichiers spciaux de priphriques. En effet, il est possible de construire un nom unique pour chaque fichier spcial de priphrique, qui pourra tre utilis par le noyau pour spcifier le module capable de grer les fonctionnalits de ce fichier. La manire de construire ces noms varie selon que le fichier spcial de priphrique accd, et selon qu'il s'agit d'un fichier rel ou d'un fichier du systme de fichiers virtuel /dev/ du noyau. S'il s'agit d'un vrai fichier spcial de priphrique, il est parfaitement identifi par sa nature (disque, priphrique de type caractre, interface rseau...) et ses deux codes majeur et mineur. Le noyau peut donc construire un nom partir de ces informations. Ainsi, pour un fichier spcial de priphrique de type caractre, le nom gnr par le noyau est en gnral de la forme char-major-xxxx . Pour les priphriques de type bloc, il est de la forme block-major-xxxx . Les caractres xxxx identifient le code majeur de ce priphrique, plus rarement son code mineur. Par exemple, pour les cartes son, le nom de module char-major-14 sera utilis, parce que les cartes sons utilisent toutes le code majeur 14. Le code mineur n'est actuellement pas utilis pour les cartes son. Mme si les noms de modules sont toujours construits plus ou moins selon ce schma pour les fichiers spciaux de priphriques rels, il reste difficile de dterminer le nom exact du module associ un fichier spcial de priphrique. Par exemple, nous avons

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

164

M. Elie Degny Raphael

vu que le nom de module utilis pour le port parallle (accessible via le fichier spcial de priphrique /dev/lp0) est parport_lowlevel. De mme, le nom utilis pour les interfaces rseau de type Ethernet est eth0, eth1, etc. Il n'est donc pas toujours vident de savoir quel est le nom que le noyau utilisera. Le plus simple dans ce cas est encore de regarder dans la configuration utilise par modprobe l'aide de son option -c. En revanche, si le fichier spcial de priphrique est un fichier virtuel, le mcanisme de nommage est compltement diffrent. En effet, le systme de fichiers virtuel /dev/ cre les fichiers spciaux de priphriques la demande, lorsque les gestionnaires de priphriques s'enregistrent au niveau du noyau. Il n'est donc pas possible de dterminer les codes majeurs et mineurs des fichiers spciaux de priphriques si les modules qui les grent ne sont pas chargs, parce que ces fichiers n'existent pas encore d'une part, et parce que ces codes sont dtermins dynamiquement et ne sont donc jamais fixes d'autre part. Le chargement des modules la demande est en fait ralis par le dmon devfsd, que nous avons dj dcrit dans la la section intitule Notion de fichiers spciaux de priphriques. Outre la cration des liens symboliques permettant d'accder aux fichiers spciaux de priphriques sous leur nom classique, ce dmon est capable d'effectuer des actions diverses lorsqu'un vnement se produit dans le systme de fichiers virtuel /dev/. Toutes ces actions sont dcrites dans le fichier de configuration /etc/devfsd.conf. En particulier, il est possible d'effectuer une action lorsqu'un programme recherche un fichier spcial de priphrique dans le systme de fichiers, chose que tous les programmes qui utilisent les fichiers spciaux de priphriques font, ne serait-ce que pour pouvoir les ouvrir. C'est lors de cette recherche que le dmon devfsd va demander le chargement du module correspondant au fichier spcial de priphrique demand. Pour que ce mcanisme fonctionne, il faut avant tout l'activer. Cela se fait simplement en ajoutant la ligne suivante dans le fichier devfsd.conf : LOOKUP .* MODLOAD qui signifie que le chargement dynamique de module (action MODLOAD ) doit tre effectue lorsqu'une recherche (vnement LOOKUP ) a lieu dans le systme de fichiers virtuel /dev/, et ce pour n'importe quel nom de fichiers spcial de priphrique (expression rguire .* , qui reprsente n'importe quelle squence de caractres). Bien entendu, les noms de modules utiliss par le dmon devfsd ne peuvent pas se baser sur les codes majeurs et mineurs du fichier spcial de priphrique pour les raisons que l'on a indiqu ci-dessus. Mais pourquoi faire compliqu quand on peut faire simple ? Le dmon devfsd ne s'embarrasse pas de dtails, et demande tout simplement le chargement du module dont le nom est exactement le chemin du fichier spcial de priphrique recherch ! Il suffit donc tout simplement de dfinir les alias correspondant dans le fichier modules.conf pour ventuellement trouver le bon nom de module charger.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

165

M. Elie Degny Raphael

En fait, le dmon devfsd utilise un autre fichier de configuration, le fichier /etc/modules.devfs, afin de simplifier l'criture du fichier modules.conf. Ce fichier lui permet d'associer un ensemble de noms de fichiers spciaux de priphriques un seul module. Par exemple, tous les ports srie d'une machine utilisent, en gnral, le mme gestionnaire, bien qu'ils soient accessibles par l'intermdiaire des fichiers spciaux de priphriques /dev/ttySn, o n est le numro du port srie (0 pour le port COM1, 1 pour le port COM2, etc.). Le fichier modules.devfs regroupe donc tous les noms de modules /dev/ttyS* en un seul nom de module, savoir serial. C'est donc ce nom l qui sera communiqu modprobe pour le chargement du module de gestion des ports srie. De manire gnrale, vous n'aurez pas modifier les fichiers devfsd.conf et modules.devfs, car ceux gnralement fournis avec les distributions conviennent parfaitement. En revanche, vous modifierez certainement le fichier modules.conf. Il s'agit l d'un opration dlicate, car elle ncessite de bien connatre les mcanismes de nommage utiliss par le noyau, les noms des modules rels et leurs paramtres de configuration. En gnral, vous trouverez les informations sur les entres ajouter ou modifier dans le fichier d'aide du module correspondant, que vous pourrez trouver dans les sources du noyau (dans le rpertoire /usr/src/linux/Documentation/). Quoi qu'il en soit, la modification de modules.conf peut gnrer de nouvelles dpendances entre les modules. Il est donc ncessaire d'excuter la commande depmod -a aprs chaque modification de ce fichier. Configuration des priphriques additionnels L'architecture initiale des PC a trs mal vieilli et souffre actuellement de dfauts majeurs qui nuisent leur dveloppement. Sans parler des goulots d'tranglement sur les diffrents bus systmes qui ne suivent plus les vitesses des processeurs actuels, la plupart des priphriques sont obligs de se restreindre des protocoles de communication obsoltes pour conserver une compatibilit ascendante. L'une des limitations majeurs de cette architecture est le nombre incroyablement restreint de ligne d'interruption permettant un priphrique de signaler au processeur qu'il a besoin de l'intervention de son gestionnaire pour poursuivre son travail, et la quasi absence des possibilits d'accs directs la mmoire, qui impose l'utilisation du processeur pour raliser de simples transferts de donnes entre les priphriques et la mmoire. Ces ressources limites, en plus de pnaliser les performances, posent des problmes vidents d'extensibilit. En effet, qui dit ressource limit dit qu'il est impossible de connecter plus de priphriques intelligents que ce que l'architecture matrielle autorise. L'installation de plusieurs cartes ISA grant chacune une interruption ou un canal DMA tait rellement un casse-tte il y a encore peu de temps. C'est pour rsoudre ces problmes de configuration du matriel que le standard Plug and Play a t dvelopp. Ce standard tablit un protocole de communication matriel permettant au BIOS de configurer automatiquement les priphriques ISA en vitant les conflits sur les ressources partages (le plus souvent, les lignes d'interruption).

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

166

M. Elie Degny Raphael

Ce protocole a soulag bien des gens, mais suppose un support spcifique de la part du systme d'exploitation, puisque les paramtres matriels de chaque carte Plug and Play ne sont pas fix d'un dmarrage l'autre de la machine. Il faut donc que le systme soit ou capable de rcuprer ces paramtres, ou de refaire la configuration du matriel. Cette deuxime solution est souvent impose par le fait que bon nombre de BIOS sont bogus et effectuent une mauvaise configuration des cartes Plug and Play. Le Plug and Play a t une amlioration sensible, mais n'a pas rsolu les problmes concernant les ressources limites des PC. Heureusement, depuis l'avnement du bus PCI, ces limitations se sont estompes. En effet, le bus PCI permet non seulement aux priphriques de s'autoconfigurer et de se dclarer dans le systme PCI, mais galement de partager plusieurs lignes d'interruptions et de prendre le contrle du bus mmoire. Ainsi, il n'y a virtuellement plus aucune difficult pour installer une carte PCI dans un ordinateur (si vous avez le choix, prenez systmatiquement des priphriques PCI). Ne croyez pas pour autant que le bus PCI soit idal, c'est loin d'tre le cas. En effet, il ne permet pas l'ajout et la suppression de cartes chaud (c'est--dire lorsque le systme est allum), et fonctionne dsormais une vitesse bien trop faible compte tenu de la vitesse des processeurs, cartes graphiques et circuits mmoire. Il est donc appel disparatre sous peu lui-aussi. Les priphriques PCI sont les plus courants actuellement. Le sous-systme PCI de Linux permet de les utiliser directement, sans configuration particulire. Les priphriques ISA, en revanche, peuvent tre plus difficile configurer. S'ils ne sont pas Plug and Play, il n'y a pas d'autre choix que de spcifier leurs paramtres matriels directement, soit lors de la compilation du noyau, soit l'aide d'options de boot lorsque le systme dmarre, soit l'aide d'options dans le fichier /etc/modules.conf si leur gestionnaire est compil sous forme de module. La premire solution est la plus technique, puisqu'elle ncessite de reconfigurer et de recompiler le noyau, les deux autres relvent de la configuration simple. La compilation du noyau sera dcrite en dtail dans le Chapitre 9. Les cartes ISA Plug and Play constituent un cas part, car, comme il l'a t dit ci-dessus, la plupart des BIOS Plug and Play est bogu et les initialisent mal. Il est donc ncessaire que le systme les initialise lui-mme, et dtermine par la mme occasion leur configuration matrielle. En pratique, il existe deux possibilits pour effectuer ces deux oprations. La premire possibilit est de laisser le noyau faire tout le travail de configuration des cartes et d'allocation des ressources. La deuxime possibilit est d'effectuer la configuration des cartes ISA Plug and Play au niveau applicatif dans les scripts de dmarrage du systme. Cette solution est relativement technique, et ne doit tre utilise que lorsqu'on dsire contrler finement les ressources alloues par les priphriques dans le systme. Si l'on dsire utiliser les fonctionnalits Plug and Play du noyau, il n'y a strictement rien faire. Linux se charge simplement d'initialiser automatiquement les cartes ISA Plug and Play lors du dmarrage du systme, leur attribuera les paramtres matriels adquats, et communiquera ces paramtres aux gestionnaires de priphriques. Il prendra galement en charge la gestion des conflits avec les autres priphriques, qu'ils
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 167

M. Elie Degny Raphael

soient ISA non Plug and Play ou PCI. Par consquent, vous n'aurez aucune configuration spcifique effectuer. Mais Linux fournit galement la possibilit de contrler soi-mme les ressources alloues chaque priphrique, pour ceux qui veulent avoir la matrise totale de leur matriel ou ceux qui ont une configuration tellement spcifique qu'elle ncessite un paramtrage manuel. Dans ce cas, l'initialisation des cartes ISA Plug and Play ne se fera pas lors du dmarrage du noyau, mais plutt ultrieurement. En gnral, on effectue cette tche dans les scripts d'initialisation du systme, mais ce n'est pas une obligation. Quoi qu'il en soit, comme l'attribution des ressources aux cartes est diffre, les gestionnaires de priphriques ne peuvent pas tre inclus dans le noyau. Il est donc ncessaire d'utiliser les modules du noyau pour ces gestionnaires. Les paramtres matriels pourront alors tre communiqus simplement ces gestionnaires lors du chargement des modules, l'aide d'options dans le fichier de configuration /etc/modules.conf. La configuration manuelle des cartes ISA Plug and Play se fait classiquement l'aide des outils isapnp . Parmi ces outils se trouve le programme isapnp, que l'on utilise pour initialiser les cartes ISA Plug and Play. Cet utilitaire utilise les informations qui se trouvent crite dans le fichier de configuration /etc/isapnp.conf pour dterminer les plages d'entre/sortie, les canaux DMA et les lignes d'interruption utiliser pour chaque carte. La rdaction manuelle du fichier isapnp.conf n'est pas une tche aise. Heureusement, elle peut tre ralise automatiquement, l'aide d'un autre utilitaire nomm pnpdump. Celui-ci affiche la liste des diffrentes possibilits de configuration pour chaque priphrique ISA Plug and Play. Cette liste est affiche exactement sous une forme exploitable par isapnp, ce qui fait qu'il est trs simple de crer un fichier de configuration correct en faisant une redirection de sa sortie standard dans un fichier : pnpdump > /etc/isapnp.conf Le fichier de configuration ainsi cr contient les diffrentes configurations possibles. Cependant, elles sont toutes commentes, et aucun priphrique ISA ne sera configur sans intervention supplmentaire. Il va donc falloir diter ce fichier, et retirer les commentaires devant les options de configuration qui vous intressent. Les lignes de commentaires commencent toutes par un caractre dise ('#'). Il suffit donc d'effacer ce caractre pour les dcommenter. Vous devez choisir les options dcommenter de telle manire qu'aucun conflit d'adresse, d'interruption ou de canaux DMA n'existent dans votre systme. Pour chaque priphrique, plusieurs possibilits sont offertes, mais vous ne devez retirer les commentaires que devant les lignes d'une seule de ces possibilits. Les zones dcommenter sont clairement identifies dans le fichier isapnp.conf gnr par pnpdump, il vous suffit donc d'effectuer le choix de la configuration utiliser. Enfin, il ne faut pas oublier de retirer le commentaire devant la ligne suivante : (ACT Y)

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

168

M. Elie Degny Raphael

la fin des diffrentes options de configuration pour chaque carte correctement configure, faute de quoi celle-ci ne sera pas active lors de l'appel isapnp. En gnral, il est souhaitable d'appeler la commande isapnp chaque dmarrage du systme, dans un des scripts de dmarrage. Vous devrez donc inclure une ligne telle que celle-ci : /sbin/isapnp /etc/isapnp.conf Dans le fichier de dmarrage principal de votre systme. Ce fichier peut se trouver dans le rpertoire /etc/rc.d/ (ou dans /sbin/init.d/ selon la distribution que vous utilisez). La plupart des distributions permettent de paramtrer l'appel cette commande l'aide d'une option de configuration modifiable l'aide de leur programme de configuration. Consultez la documentation de votre distribution pour plus de dtails ce sujet. Une fois que vous aurez dtermin la configuration correcte pour vos priphriques dans le fichier /etc/isapnp.conf, vous pourrez charger les modules du noyau grant ces priphriques. Cela peut ncessiter la modification du fichier /etc/modules.conf. Afin de limiter les risques d'erreur, vous devriez procder comme suit :

dterminer le fichier spcial de priphrique utilis par les applications pour accder votre priphrique ; dterminer le nom du module que le noyau tentera de charger lorsqu'un programme tentera d'utiliser ce fichier spcial de priphrique ; rechercher la ligne dfinissant l'alias pour ce nom de module, afin de savoir quel est le module qui sera effectivement charg par modprobe. Vous pouvez galement trouver ce nom dans la documentation de la configuration du noyau pour le gestionnaire du priphrique que vous configurez, ou en regardant directement dans le rpertoire d'installation des modules /lib/modules/ ; ajouter ventuellement la ligne options module paramtres permettant de spcifier les paramtres de chargement paramtres pour le module module ; ajouter ventuellement les lignes pre-install , post-install , preremove et post-remove permettant d'effectuer des actions complmentaires avant et aprs le chargement du module, ainsi qu'avant et aprs son dchargement.

Comme il l'a t indiqu dans la la section intitule Modules du noyau, la dtermination des noms de modules utiliss par le noyau pour les requtes de chargement automatique n'est pas facile. Si vous utilisez le systme de fichiers virtuel /dev/, ce nom est exactement le chemin complet du fichier spcial de priphrique. En revanche, si vous utilisez les fichiers spciaux de priphriques classiques, vous aurez sans doute vous servir du type, du code majeur et du code mineur de ce fichier spcial de priphrique. Vous pourrez obtenir ces informations l'aide de la commande ls -l fichier, o fichier est le nom du fichier spcial de priphrique. Le type de ce fichier est indiqu dans le premier caractre des droits du fichiers. Le caractre 'c' indique que le priphrique est un priphrique de type caractre, et le caractre 'b' indique qu'il

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

169

M. Elie Degny Raphael

s'agit d'un priphrique de type bloc. Les numros de codes majeurs et mineurs quant eux sont indiqus juste aprs les informations concernant le propritaire et le groupe du fichier, gnralement gaux root ; Dans tous les cas, il est fortement recommand de lire la documentation du module grant votre priphrique Plug and Play. Cette documentation est en gnral situe dans le rpertoire /usr/src/linux/Documentation/. Pour tester si les modifications que vous avez effectues sont correctes, vous pouvez essayer de charger le module avec la commande suivante : modprobe module O module est le nom du module charger. Vous pouvez galement vrifier que ce module se charge bien lorsqu'une requte sur le fichier spcial de priphrique correspondant est effectue, avec par exemple la commande suivante : echo Coucou > /dev/priphrique O priphrique est le fichier spcial de priphrique tester. Vous pouvez voir si le module s'est correctement charg en demandant la liste des modules chargs l'aide de la commande lsmod. Cette commande vous indique galement l'tat de chaque module, ainsi que le nombre de fois qu'il est utilis et par qui. Si un module est marqu uninitialized , vous avez de fortes chances de devoir redmarrer l'ordinateur et de revoir votre configuration, car un module qui se trouve dans cet tat est inutilisable. Configuration des cartes son La plupart des cartes son vendues actuellement sont des cartes PCI, qui se configurent relativement aisment. Cependant, il existe encore un bon nombre de cartes son ISA, dont la configuration peut tre plus technique, surtout si elles ne sont pas Plug and Play. De plus, les fonctionnalits fournies par les gestionnaires de son de Linux varient dans de larges proportions, selon le matriel utilis. En particulier, toutes les cartes son ne sont pas capables de grer la restitution des fichiers MIDI, et celles qui le grent ncessitent une configuration particulire. Cependant, il est possible d'utiliser un convertisseur logiciel de fichiers MIDI en fichiers son classique afin de jouer ce type de fichiers mme avec une carte son classique. La premire tape lors de la configuration de votre carte son sera la slection du driver utiliser au niveau du noyau. D'une manire gnrale, la configuration du noyau consiste simplement rpondre des questions concernant le noyau dans un programme de configuration. C'est une opration relativement simple, mais il faut viter de se tromper lors de cette tape cruciale, faute de quoi le noyau ne serait pas fonctionnel ou ne se comporterait pas comme prvu. La configuration du noyau est dcrite en dtail dans le Chapitre 9. En ce qui concerne les cartes son, les options de configuration se trouvent dans le menu Sound . Ce menu permet de choisir les drivers utiliser en fonction du matriel install. Ils sont classs en deux catgories : les drivers classiques (premire partie des
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 170

M. Elie Degny Raphael

options du menu) et les drivers OSS (options du sous-menu OSS sound modules ). OSS ( Open Sound System ) est une spcification d'interface de programmation permettant l'accs aux cartes son. Cette interface est en passe de devenir le standard dans le monde Unix. C'est un produit commercial, mais l'interface en soi est libre de droits et une implmentation libre en est fournie dans le noyau de Linux. Vous devez ici choisir le driver qui convient le mieux votre matriel. Si vous avez le choix entre les drivers classiques et les drivers OSS, choisissez les drivers OSS car ils sont plus standards et vous n'aurez aucun problme utiliser votre carte son avec la plupart des logiciels. L'erreur la plus classique que l'on peut faire ici est de supposer que l'on possde une carte compatible Sound Blaster alors que ce n'en est pas une. Je tiens prciser que quasiment aucune carte dite compatible sous Windows ne l'est sous Linux. La compatibilit sous Linux, c'est le fait d'avoir quasiment la mme lectronique ou du moins les mmes interfaces au niveau matriel. Sous Windows, la compatibilit n'existe qu'au niveau des interfaces fournies par le driver de la carte son. Par consquent, il vous faut savoir exactement de quel nature est votre carte son, et non ce que vous avez retenu des arguments commerciaux du fabricant. Notez en particulier que certaines cartes Sound Blaster ne sont pas compatibles Sound Blaster (Creative Labs est renomm en ce qui concerne les incompatibilits entre les diffrents modles de cartes son). C'est notamment le cas pour les cartes sons SB64 PCI et SB128 PCI, qui sont en ralit des cartes son ESS1370 ou ESS1371, et dont l'lectronique est fabrique par la socit Ensoniq (cette socit a t rachete par Creative Labs, qui vend ces cartes en s'appuyant sur son image de marque et qui sme ainsi la confusion sur le march). En conclusion, si vous ne voulez pas essayer plusieurs drivers et recompiler le noyau jusqu' ce que vous trouviez le bon, renseignez-vous bien sur la nature de votre carte son (si possible avant de l'acheter, au moins afin de savoir exactement ce que vous aurez). Vous pouvez galement taper la commande lspci afin de voir les priphriques rellement prsents sur le bus PCI. La commande systme dmesg peut galement vous tre utile. Elle permet de rafficher la liste des messages gnrs par le noyau lors de son amorage. Lorsque vous aurez choisi le driver adquat, vous aurez le choix entre le compiler l'intrieur du noyau (en choisissant l'option 'Y' pour ce driver) ou le compiler sous forme de module (en choisissant l'option 'M'). En pratique, il est plus simple de compiler les drivers l'intrieur du noyau pour les cartes PCI et les cartes ISA Plug and Play. En effet, Linux attribuera automatiquement les lignes d'interruptions, les portes d'entre/sortie et les canaux d'accs direct la mmoire pour ce type de matriel. Cette configuration n'est donc pas faire, et votre carte son fonctionnera immdiatement sans problmes. C'est gnralement galement le bon choix pour les vielles cartes sons ISA qui ne sont pas Plug and Play. En effet, pour ces cartes sons, la configuration logicielle est trs simple, puisqu'on ne peut pas les configurer du tout. Bien entendu, il faut que vous ayez rsolu manuellement les conflits possibles de matriel de votre ordinateur, mais cela ne concerne pas Linux. Pour ces cartes, il faut bien entendu indiquer au noyau les paramtres matriels (IRQ, DMA et ports d'entre/sortie) lors de la configuration.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

171

M. Elie Degny Raphael

Il se peut toutefois que vous ne puissiez pas spcifier ces paramtres matriels dans les menus de configuration de Linux. Bien qu'en thorie il soit possible de modifier les fichiers sources de Linux directement pour indiquer ces paramtres, ce n'est pas la porte du commun des mortels. Par consquent, on utilisera les modules du noyau, et les options matrielles seront indiques dans le fichier de configuration /etc/modules.conf. Notez que c'est galement de cette manire que vous devrez procder si vous dsirez configurer vous-mme l'allocation des ressources pour les cartes son ISA Plug and Play, ou, autrement dit, si vous prfrez utiliser l'outil isapnp au lieu des fonctionnalits Plug and Play du noyau. Ces oprations vous permettront de faire fonctionner votre carte son pour toutes les oprations de base, savoir la lecture et l'enregistrement de fichiers son, le rglage du volume sonore et ventuellement la lecture des CD audio par l'intermdiaire de votre carte son (si, bien entendu, vous avez reli la sortie audio de votre lecteur de CD l'entre auxiliaire de votre carte son). Vous ne pourrez cependant pas lire les fichiers MIDI sans raliser les oprations dcrites ci-dessous. Les fichiers MIDI sont des fichiers ne contenant que les partitions des morceaux enregistrs. Ils ne contiennent pas les donnes audio numriques comme c'est le cas des fichiers son classiques ou des pistes de CD audio. Cela explique leur taille rduite, mais pose un problme pour leur restitution. En effet, la lecture d'un fichier MIDI suppose que votre carte son dispose d'un jeu de sons numriss dans sa mmoire afin de pouvoir reconstituer le signal sonore partir des informations du fichier MIDI. Ces sons sont couramment appels des patches , et ils peuvent tre enregistrs soit en dur dans la mmoire de la carte son, soit chargs lors de son initialisation. Il va de soi que certaines cartes son ne disposent pas des fonctionnalits ncessaires la lecture des fichiers MIDI. Dans ce cas, il faut utiliser un programme externe capable de synthtiser le son partir de patches enregistrs sur le disque dur et d'envoyer les donnes audio ainsi cres la carte son pour la lecture. Pour les cartes son qui ne disposent pas des patches en mmoire morte, il est ncessaire d'utiliser un programme afin de les charger dans la mmoire de la carte. Il va de soi que ce programme est spcifique la carte son et doit tre install. Par exemple, pour les cartes Sound Blaster AWE, ce programme se nomme sfxload. Son utilisation requiert un fichier de dfinition des patches, fichier que vous trouverez normalement soit sur une installation de Windows avec une carte son AWE, soit sur vos CD d'installation, soit sur Internet. Le fichier fourni par Creative se nomme synthgm.sbk. Pour charger les patches dans la mmoire de la carte, il suffit d'utiliser la commande suivante : sfxload /usr/lib/synthgm.sbk (en supposant que le fichier de patches soit plac dans le rpertoire /usr/lib/). Vous pourrez placer cette commande dans les scripts de dmarrage de votre systme ou dans une option de chargement du module awe_wave qui gre la lecture des fichiers midi. Vous trouverez ci-dessous un exemple d'options du fichier /etc/conf.modules permettant le chargement correct des modules d'une carte son Sound Blaster AWE : # Chargement des modules de son :

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

172

M. Elie Degny Raphael

alias char-major-14 sb options sb io=0x220 irq=5 mpu_io=0x330 options adlib_card io=0x388

dma=1

dma16=5

# Chargement automatique du module de lecture des fichiers MIDI : post-install sb /sbin/modprobe -k midi alias midi awe_wave # Chargement des patches en mmoire : post-install awe_wave /usr/local/bin/sfxload /usr/lib/synthgm.sbk Pour les cartes son ne disposant pas de la possibilit de lire les fichiers MIDI, il ne reste que la solution de l'mulation logicielle. Vous pourrez dans ce cas recourir l'mulateur SoftOSS fourni avec les drivers OSS ou un autre programme trs utilis nomm Timidity . SoftOSS a l'avantage d'tre intgr au drivers OSS, mais souffre de deux inconvnients. Premirement, il n'est disponible qu'avec ces drivers, et deuximement, il consomme beaucoup de mmoire du noyau pour charger les patches. Timidity en revanche n'est pas intgr au noyau, et n'utilise par consquent pas la mmoire systme. De plus, la mmoire consomme par les patches est dcharge ds que Timidity se termine. Enfin, le moteur de Timidity est utilis par d'autres programmes externes, et en particulier par le lecteur KMidi de KDE. En raison de son caractre plus gnral, seule l'installation de Timidity et la configuration de KMidi seront prsentes ci-dessous. L'auteur originel de Timidity ne le maintient plus. Cependant, d'autres programmeurs ont pris le relais et l'ont amlior pour en faire la version Timidity++. Cette dernire version peut tre trouve sur Internet sur le site de Timidity. L'archive que vous rcuprerez ne contient pas forcment le programme : il peut ne s'agir que des fichiers sources permettant de le gnrer. Les notions de fichiers sources et de compilation de programmes excutables seront expliques en dtail dans le chapitre suivant. En attendant, si vous rcuprez les sources, vous pourrez suivre les indications donnes cidessous pour compiler et installer Timidity. Timidity peut utiliser diffrentes interfaces utilisateur, accessibles via diffrentes bibliothques. Il est recommand d'utiliser l'interface Tcl/Tk, car cette interface fonctionne aussi bien sous XWindow qu'en mode texte. Pour cela, il suffit de configurer les sources avec la ligne de commande suivante : ./configure --enable-dynamic --enable-tcltk=dynamic Une fois cela fait, vous pourrez gnrer l'excutable avec la commande suivante : make Et l'installer avec la commande :
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 173

M. Elie Degny Raphael

make install Cela installera Timidity dans le rpertoire /usr/local/bin/. La deuxime tape est bien entendu d'installer les fichiers de patches. Timidity utilise des patches pour les cartes son Gravis Ultrasound. Vous pourrez trouver des archives contenant de tels patches sur Internet trs facilement. En particulier, la collection de patches EAWPATS ralise par Eric A. Welsh est trs complte, quoique un peu grosse pour un tlchargement. Cette collection a de plus l'avantage d'tre prconfigure pour l'emploi avec Timidity. Lorsque vous aurez install les fichiers de patches, vous devrez indiquer Timidity leur emplacement dans le systme de fichiers. Cette information doit tre stocke dans le fichier de configuration timidity.cfg du rpertoire /usr/local/share/timidity/. Vous pourrez vous inspirer du fichier fourni avec la collection de patches EAWPATS. Cependant, vous aurez modifier les chemins indiqus dans ce fichier, car il a t crit pour la version Windows de Timidity. Le premier rpertoire indiquer est celui des bibliothques. Il faut ici simplement remplacer la ligne dir c:\timidity par la ligne dir /usr/local/lib/timidity . Notez que cette ligne est facultative et peut tre commente si vous n'avez pas dplac ce rpertoire. Le deuxime rpertoire est plus important, puisque c'est le rpertoire d'installation des patches. Il s'agit cette fois de remplacer la ligne dir c:\eawpats par la ligne dir rpertoire , o rpertoire est le rpertoire o vous avez extrait les fichiers patches. Une fois que vous aurez termin ces modifications, vous pourrez lire un fichier MIDI simplement en utilisant la ligne de commande suivante : timidity fichier O fichier est le nom du fichier MIDI lire. Si vous dsirez utiliser l'interface graphique de Timidity, vous n'avez qu' ajouter l'option -ik la ligne de commande prcdente. L'installation de KMidi ne pose pas de problme particulier, puisqu'il est fourni avec KDE et que KDE est normalement inclus dans toute bonne distribution. La seule opration que vous ayez faire est simplement de modifier le fichier de configuration de KMidi pour lui indiquer l'emplacement des fichiers de patches. Or comme KMidi est bas sur les sources de Timidity, il utilise le mme fichier de configuration timidity.cfg que Timidity. Ce fichier est normalement situ dans le rpertoire /base/kde/share/apps/kmidi/config/, o base reprsente le rpertoire de base d'installation de KDE. Vous n'aurez donc qu' rpter les oprations faites sur le fichier de configuration de Timidity avec le fichier de configuration de KMidi.

Installation d'une carte graphique 3D

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

174

M. Elie Degny Raphael

De nos jours, toutes les cartes graphiques disposent d'une acclration matrielle non seulement pour les oprations graphiques en 2D, mais galement pour le calcul de scnes en 3D. Ce dveloppement des cartes 3D a t principalement pouss pour les jeux, mais ces fonctionnalits sont galement trs utiles pour les applications de modlisation et de conception. La manire dont les oprations graphiques en 3D sont ralises dpend videmment du modle de carte graphique utilise, car il n'existe pas de standard au niveau matriel. Comme il est impensable que les applications qui dsirent utiliser les fonctionnalits 3D des ordinateurs modernes aient prendre en compte le type de carte utilise, des interface logicielles standards ont t dfinies. De toutes ces interfaces, Linux n'en gre qu'une seule : OpenGL. Cette interface a t dfinie par Silicon Graphics pour ses stations de travail haut-de-gamme, et s'est impose comme tant la norme en la matire pour ce qui est de la 3D. Cette interface a l'avantage d'tre ouverte et disponible sur la plupart des systmes, qu'ils soient de type Unix ou non. La prise en charge de l'interface OpenGL est ralise en deux endroits sous Linux. La principale rside dans le serveur X, qui, comme nous l'avons dj signal, n'est rien d'autre que le programme fournissant les services graphiques aux autres applications sous Unix. Elle est implmente par une extension de l'interface de programmation XWindow, que l'on nomme tout simplement GLX. Cependant, le serveur X ne peut pas tout faire lui tout seul, car pour des raisons de performances, il lui faut accder directement au matriel lors du rendu de scnes 3D. Il s'appuie donc pour cela sur un module du noyau, dont le but est de contrler les accs au ressources matrielles et de garantir ainsi la stabilit globale du systme. La configuration des fonctionnalits 3D des cartes graphiques sous Linux ncessite donc d'intervenir la fois dans le noyau et au niveau du serveur X. Pour ce qui est du noyau, il faut tout d'abord s'assurer que les fonctionnalits d'accs direct au matriel sont bien supportes. Ces fonctionnalits sont couramment appeles DRI , ce qui est l'abrviation de l'anglais Direct Rendering Infrastructure . Pour activer les fonctionnalits DRI, vous devrez, dans la configuration du noyau, valider l'option Direct Rendering Manager du menu Character devices , ainsi que le type de carte graphique utilise (3Dfx, 3dlabs, ATI Rage 128 ou ATI Radeon, chipset i810 ou Matrox G200/G400). Note : Les fonctionnalits 3D des cartes graphiques bases sur les puces NVidia ne sont pas supportes directement par XFree86 et par le noyau. En revanche, NVidia fournit un driver pour Linux pour ces cartes, qui, bien qu'il n'utilise pas DRI, dispose galement d'un module du noyau et d'un module pour XFree86. Quelle que soit votre carte graphique, vous aurez galement sans doute intrt activer le support de l'AGP dans le noyau, si bien sr votre carte graphique est une carte AGP. Pour cela, il suffit d'activer l'option /dev/agpgart (AGP support) dans le menu

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

175

M. Elie Degny Raphael

Character devices de la configuration du noyau, ainsi que le type de chipset utilis par votre carte mre. Une fois la configuration du noyau faite, vous pourrez le recompiler et l'installer. La manire de procder est dcrite en dtail dans le Chapitre 9. Vous devrez galement vous assurer que le fichier spcial de priphrique /dev/agpgart est bien prsent dans le rpertoire /dev/. Son code majeur est 10, et son code mineur est 175. De mme, si vous avez compil les options prcdentes sous la forme de modules du noyau, assurez-vous qu'ils sont bien rfrencs dans le fichier modules.conf. La suite des oprations se passe alors au niveau de la configuration du serveur X de XFree86. L'activation du support de l'AGP et d'OpenGL se fait simplement en rajoutant deux options dans le fichier de configuration /etc/X11/XF86Config. Vous devez trouver la section Modules et lui ajouter les deux lignes suivantes : Section "Module" &vellip; Load "dri" Load "glx" &vellip; EndSection Vous trouverez de plus amples renseignements sur la manire de procder dans le Chapitre 10. Note : Pour le driver fourni par NVidia pour XFree86, il n'est pas ncessaire de demander le chargement du module DRI, car il ne l'utilise pas. Il est suppos ici que le serveur X utilis correspond bien la carte graphique et est dispose des fonctionnalits 3D. Si ce n'est pas le cas, vous devrez sans doute rinstaller XFree86. Les programmes utilisant OpenGL utilisent souvent une bibliothque complmentaire nomme GLUT. Cette bibliothque est fournie avec la couche d'mulation logicielle d'OpenGL MESA. Bien que MESA soit distribue en standard avec XFree86, la bibliothque GLUT n'est disponible que dans les programmes d'exemples de MESA. Vous devrez donc rinstaller MESA compltement si votre distribution ne fournit pas la bibliothque GLUT avec XFree86. Installation d'une carte d'acquisition vido Linux fournit toutes les fonctionnalits ncessaires la manipulation des flux de donnes vido par l'intermdiaire d'une interface de programmation nomme video4linux (ce qui se lit Video for Linux ). Linux est capable de grer la plupart des cartes d'acquisition TV du march et quelques-unes des cartes d'acquisition vido. Comme d'habitude, seuls les constructeurs de matriel qui ont accept de jouer le jeu de
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 176

M. Elie Degny Raphael

fournir les informations ncessaires la programmation de gestionnaires de priphriques libres voient leur matriel support sous Linux. Par consquent, il est encore une fois ncessaire de bien se renseigner sur la nature du produit et la politique du fabricant lorsque vous achterez une carte d'acquisition TV. En pratique, quasiment toutes les cartes d'acquisition TV utilisent le circuit intgr Bt848 ou un de ses drivs, et Linux sait les grer sans problme. Les cartes d'acquisition et de montage vido utilisent d'autres circuits plus puissants, dont les spcifications sont gnralement non disponibles. Seule la configuration des cartes TV sera donc dcrite ci-dessous. Les applications, pour accder aux priphriques vido, utilisent l'un des fichiers spciaux de priphrique /dev/video*. Ces fichiers sont des fichiers de type caractre, dont le code majeur vaut 81. Le code mineur est utilis pour diffrencier les diffrents priphriques installs sur votre systme. En gnral, il existe un lien symbolique /dev/video sur l'un de ces fichiers spciaux, qui sera utilis pour accder au priphrique vido par dfaut. Normalement, tous ces fichiers sont installs d'office dans le rpertoire /dev/ par les distributions, et vous n'aurez pas les crer vous-mme. Le support de la vido sous Linux passe bien entendu par la configuration du noyau. Cette fois, il n'est pas certain du tout que le noyau fourni avec votre distribution supporte les cartes d'acquisition TV, aussi vous aurez peut-tre recompiler vous-mme votre noyau. La manire de procder est dcrite en dtail dans le Chapitre 9. Sachez toutefois que les options valider dans la configuration du noyau se trouvent dans le menu Multimedia devices . Vous devrez activer l'option Video For Linux sous la forme de module, car vous aurez sans doute communiquer des paramtres aux modules vido afin de leur spcifier le type de carte utilis et le type de tuner. Le module qui sera cr portera le nom videodev, c'est celui qui se chargera de rpondre aux requtes du client sur les fichiers spciaux de priphrique /dev/video*. Lorsque vous aurez activ la fonctionnalit de vido pour Linux, vous aurez le choix des drivers de cartes vido dans le sous-menu Video adapters . Note : La configuration des cartes bases sur la puce Bt848 (option de menu BT848 Video For Linux ) n'est accessible que si vous avez galement activ l'option I2C bitbanging interfaces du menu I2C support . De mme, le module prenant en charge les puces du type Bt848 ne prend pas en charge la gestion du son. En revanche, vous pourrez trouver le gestionnaire du son de ces cartes avec les autres gestionnaires de cartes son, dans le menu Sound . L'option que vous devez activer est l'option TV card (bt848) mixer support . Une fois le noyau recompil votre noyau et les nouveaux modules installs, il faut modifier le fichier de configuration /etc/modules.conf. Bien que Linux soit parfaitement capable de dterminer les ressources requises par les cartes vido, il est rare que le matriel soit correctement identifi par les gestionnaires de priphriques vido. En effet, ces gestionnaires se basent plus sur les composants courants permettant de faire l'acquisition vido que sur les modles de cartes de chaque fabricant. La palme revient
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 177

M. Elie Degny Raphael

sans doute au gestionnaire pour les cartes bases sur les puces Bt848 et ses drives, puisqu'il est capable de faire fonctionner toutes les cartes vido de tous les fabricants qui utilisent cette puce. Par consquent, il faut indiquer le modle de la carte au gestionnaire, l'aide des options de modules dans le fichier modules.conf. En fait, le gestionnaire pour les cartes bases sur la puce Bt848 est constitu de deux modules. Le premier, nomm bttv, gre la puce Bt848 elle-mme et prend en charge les flux vido et l'incrustation vido dans la mmoire de la carte graphique. Le deuxime module quant lui s'occupe de la gestion de la puce du tuner, qui effectue la recherche des chanes et le dcodage des signaux vido. Pour ces deux modules, il est indispensable de prciser quelle type de carte TV est install et quel tuner cette carte utilise. Il existe de nombreuses variantes, selon les modles et les diffrents fabricants prsents sur le march. Le type de carte peut tre communiqu au module bttv l'aide de l'option card. Cette option peut prendre comme valeur un numro identifiant le modle de la carte. Les valeurs actuellement supportes sont indiques dans le fichier CARDLIST du rpertoire /usr/src/linux/Documentation/video4linux/bttv/. Le module de gestion du tuner utilise l'option type pour dterminer le type de tuner utilis. Cette option prend, elle aussi, une valeur numrique indiquant la nature du tuner utilis. Les valeurs supportes sont galement donnes dans le fichier CARDLIST. En pratique, il est fort probable que vous utilisiez le type 3, qui correspond au tuner Philips SECAM, car la France utilise le standard SECAM pour les missions TV. Ainsi, si vous disposez d'une carte MIRO PCTV (carte de type 1) base sur le tuner Philips SECAM, vous devriez avoir les lignes suivantes dans votre fichier modules.conf : # Lien entre les fichiers spciaux de priphriques et les modules du noyau : alias char-major-81 videodev alias char-major-81-0 bttv # Options du module de gestion du Bt848 : options bttv card=1 # Option du module de gestion du tuner : options tuner type=3 Vous devrez bien entendu adapter ces lignes selon votre propre configuration. Note : Si vous avez compil les fonctionnalits de l'interface I2C sous forme de module (option de menu I2C bit-banging interfaces ), vous aurez galement ajouter ces lignes dans votre fichier de configuration modules.conf : # Lien pour les fonctionnalits I2C :

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

178

M. Elie Degny Raphael

alias char-major-89 i2c-dev # Activation de l'agorithme bit-banging : options i2c-algo-bit bit_test=1 Pour information, I2C est un protocole de communication entre micro-contrleurs, que la plupart des cartes mres sont capables de grer. Cette fonctionnalit n'est ncessaire que pour les cartes bases sur la puce Bt848. Lorsque vous aurez fini vos modifications dans le fichier de configuration modules.conf, n'oubliez pas d'appeler la commande depmod -a pour remettre jour les dpendances entre les modules du noyau. Si tout se passe bien, vous pourrez utiliser les programmes de lecture TV, comme KWinTV par exemple si vous utilisez l'environnement de bureau KDE. Note : Vous pouvez rencontrer quelques problmes lors de la configuration de votre carte TV. Gnralement, si vous n'obtenez aucune image, c'est que vous vous tes tromps de tuner. Revoyez dans ce cas l'option type du module tuner. Si vous obtenez bien une image, mais pas de son, c'est sans doute que vous vous tes tromps dans le type de carte, ou que vous avez oubli d'inclure le support du son pour les cartes base de Bt848. On notera que, comme pour les cartes son, seule la compatibilit matrielle importe. Par exemple, les cartes Studio PCTV de Pinacle vendues en France sont en ralit des cartes Miro PCTV et ne sont pas reconnues comme des cartes Studio PCTV par Linux... Si vous avez des problmes de son, vous devrez donc revoir la configuration du noyau ou modifier la valeur passe l'option card du module bttv. Dans tous les cas, n'hsitez pas utiliser la commande lspci, qui permet de visualiser les informations du bus PCI, et la commande dmesg, qui permet de voir la liste des messages du noyau. Vous pouvez galement avoir quelques problmes de droits sur les fichiers spciaux de priphriques /dev/videoX. Le symptme classique est dans ce cas que tout fonctionne parfaitement sous le compte root, mais pas sous les comptes utilisateurs. Dans ce cas, on pourra rsoudre ces problmes en attribuant un groupe d'utilisateurs video, auxquel appartiendront tous les utilisateurs ayant le droit d'utiliser la carte d'acquisition TV, et de changer le groupe des fichiers spciaux de priphriques /dev/videoX. Enfin, l'utilisation des cartes d'acquisition TV ncessite d'activer les fonctionnalits DGA du serveur X. Ces fonctionnalits permettent aux programmes d'accder directement la mmoire vido, et donc de faire l'incrustation de l'image dcode par la carte TV dans la surface d'affichage d'un cran. La manire d'activer les fonctionnalits DGA sera prcise dans le chapitre traitant de la configuration du serveur X. Installation d'un graveur de CD-ROM Linux dispose de tous les logiciels permettant de graver des CD-ROM, et ce avec la plupart des graveurs disponibles sur le march. Il permet de copier des CD et de crer des images disques. Cependant, il n'est pas encore possible d'utiliser le gravage par paquet, qui permet d'utiliser les graveurs de CD comme des priphriques amovibles.
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 179

M. Elie Degny Raphael

Cette fonctionnalit est en effet encore l'tude, elle sera sans doute disponible sous peu.
Notion de base sur le gravage de linux

Originellement, tous les graveurs de CD utilisaient l'interface SCSI. Ce n'est que plus tard que les graveurs sur port parallle et les graveurs IDE ATAPI sont apparus. Actuellement, les graveurs externes connects sur port parallle sont de moins en moins vendus. Les graveurs IDE font une belle perce, mais les graveurs SCSI restent incontournables pour les vielles machines dont on n'est pas sr des performances au niveau des disques. Les logiciels de gravage doivent donc tre capable d'utiliser n'importe quel type de graveur, ce qui n'est pas simple. C'est pour cette raison qu'ils utilisent tous l'interface SCSI, aussi bien pour des raisons historiques que pour des raisons techniques. Cela ne signifie pas qu'il est impossible d'utiliser les graveurs ATAPI, car le protocole de communication ATAPI n'est rien d'autre qu'une traduction des commandes IDE en commandes SCSI au niveau matriel. L'utilisation d'un graveur de CD SCSI ne posera donc pas de problmes et se fera de manire directe. En revanche, les graveurs de CD IDE ATAPI devront tre accds par l'intermdiaire d'un mulateur SCSI, qui traduira les commandes SCSI en commandes ATAPI correspondantes. Cet mulateur est gr au niveau du noyau de Linux. Le problme est qu'il est impossible d'activer la fois le support des CD-ROM IDE ATAPI et l'mulateur SCSI pour les priphriques IDE dans un mme noyau. On devra donc faire le choix entre les deux solutions suivantes :

soit on n'utilise que l'interface SCSI pour accder aux lecteurs de CD, et on ne risque aucun conflit ; soit on active les deux fonctionnalits sous la forme de modules, et on n'utilise qu'une seule des interfaces chaque instant.

La premire solution est videmment la plus simple (et surtout la plus sre). La deuxime solution permet d'utiliser ses lecteurs de CD-ROM IDE ATAPI normalement avec leur interface native, sauf lorsqu'on dsire graver un CD. Comme il n'y a pas de cas o l'interface SCSI est infrieure en terme de performances et de fonctionnalits l'interface IDE, cette mthode est dconseille.
Configuration du noyau

Vous allez encore une fois avoir effectuer des choix de configuration dans le noyau pour activer la gestion des priphriques SCSI capables de piloter votre graveur. Les questions concernant les graveurs de CD-ROM sont rcapitules ci-dessous : Include IDE/ATA-2 CDROM support Cette option permet d'activer la gestion des lecteurs de CD IDE ATAPI. Vous ne devez pas rpondre cette question par 'Y', faute de quoi vous ne pourrez pas utiliser votre graveur de CD. Il vous est en revanche possible de rpondre par 'M',
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 180

M. Elie Degny Raphael

pour n'activer la fonctionnalit qu' la demande, sous la forme de module. La rponse recommand est 'N', moins que vous ne sachiez ce que vous faites. En effet, si vous activez cette fonctionnalit, vous risquez d'avoir des conflits avec l'mulation SCSI. Ce problme sera dtaill plus loin. SCSI emulation support Cette option permet d'activer la gestion des priphriques IDE ATAPI par l'intermdiaire de commandes SCSI. C'est cette option qui va vous permettre d'utiliser votre graveur de CD IDE avec les programmes qui ne peuvent grer que des graveurs SCSI. Vous pouvez rpondre 'N' cette question si vous n'utilisez ni lecteur de CDROM SCSI ni graveur SCSI. Dans tous les autres cas, il est recommand de rpondre 'Y' cette question afin d'accder votre matriel via l'interface SCSI. Vous pouvez activer cette fonctionnalit sous la forme de module en rpondant par 'M' cette question, cette solution est recommande si vous avez activ la gestion des CD-ROM IDE ATAPI dans la question prcdente. Loopback device support Cette option permet d'activer une fonctionnalit permettant d'utiliser un fichier comme un priphrique normal. Elle est trs utile pour tester les images de CD, car il suffit simplement de monter le fichier image comme un priphrique loopback . Il est donc recommand d'activer cette fonctionnalit, que l'on dispose d'un graveur SCSI ou IDE. Cette fonctionnalit peut tre active sous la forme de module ou non, la rponse recommande est 'Y'. SCSI support Cette option permet d'activer la gestion des priphriques SCSI dans votre noyau. Il va de soi qu'il faut l'activer, que l'on dispose d'un graveur SCSI ou IDE. Cette fonctionnalit peut tre active sous forme de module ou non. La rponse recommande est 'Y'. SCSI CD-ROM support Cette option permet d'activer la gestion des lecteurs de CD SCSI. Il faut l'activer, que l'on dispose d'un graveur SCSI ou IDE. Il est impratif d'utiliser les modules si vous avez activ la gestion des lecteurs IDE. Vous pouvez intgrer cette fonctionnalit au noyau sans risque sinon. Cette dernire solution est la mthode recommande, aussi est-il conseill de rpondre 'Y' cette question. Enable vendor-specific extensions (for SCSI CDROM) Cette option permet d'autoriser l'emploi d'extensions au protocole SCSI dfinies par les fabricants de matriels. Certains graveurs utilisent de telles commandes, c'est en particulier le cas des graveurs de CD HP. Toutefois, si vous ne disposez
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 181

M. Elie Degny Raphael

pas d'un tel graveur, il est peu probable que vous ayez activer cette fonctionnalit. La rponse recommande est donc 'N'. SCSI generic support Cette option permet d'utiliser le priphrique SCSI avec des commandes non standards, ce qui requiert l'emploi de programmes capables de communiquer directement avec les priphriques SCSI. C'est le cas pour les graveurs, qui seront pilots directement par les logiciels de gravage. Il faut donc activer cette fonctionnalit, que l'on dispose d'un graveur SCSI ou IDE. La rponse recommande est 'Y'. Probe all LUNs on each SCSI device Cette option permet, lorsqu'on dispose de priphriques SCSI capables de grer plusieurs numros d'unit logiques, de leur demander tous ces numros. Ce type de priphriques est assez rare, et en gnral chaque priphrique n'utilise qu'un et un seul numro d'unit logique. Il ne faut donc pas, en gnral, activer cette fonctionnalit. La rponse recommande pour cette question est donc 'N'. Enfin, il faut choisir le driver bas niveau permettant de grer son graveur de CD. Pour les graveurs IDE ATAPI, la couche d'mulation suffira et il est inutile de slectionner un autre driver. En revanche, pour les graveurs SCSI, il faut choisir le driver appropri. Une fois cette configuration effectue, il ne reste plus qu' compiler le noyau et les modules et les installer. Vous trouverez plus de dtails ce sujet dans le chapitre traitant de la compilation du noyau.
Configuration des modules du noyau

Vous aurez sans doute modifier le fichier de configuration /etc/modules.conf si vous avez activ certaines fonctionnalits SCSI sous la forme de modules, afin de charger les modules ncessaires lorsqu'une commande sera effectue sur un des fichiers spciaux de priphriques SCSI. Si toutes les fonctionnalits SCSI sont intgres au noyau, cette tape est bien entendue facultative. Les fichiers spciaux utiles pour les priphriques blocs SCSI sont les fichiers scdx et sgx, o x est le numro du priphrique. Les fichiers spciaux du premier groupe sont de type bloc, et permettent d'accder aux lecteurs de CD SCSI. Les fichiers du deuxime groupe en revanche sont de type caractre, et permettent d'accder aux priphriques SCSI de manire gnrique. Les codes majeurs pour ces deux groupes de fichiers spciaux sont respectivement 11 et 21, il faut donc ajouter les entres du fichier modules.conf pour les modules nomms block-major-11 et char-major-21. Normalement, ces entres sont dj prsentes dans le fichier fourni par votre distribution. Cependant, vous aurez ajouter les lignes suivantes si vous utilisez un graveur de CD IDE ATAPI : post-install sr_mod modprobe -k ide-scsi

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

182

M. Elie Degny Raphael

Aprs la ligne indiquant le module charger pour les priphriques blocks de code majeur 11, et : post-install sg modprobe -k ide-scsi Pour les priphriques SCSI gnriques, de code majeur 21. Ces deux lignes permettent de demander au noyau de charger galement le module idescsi lorsque l'un des modules SCSI est charg. Le module ide-scsi est le module qui se charge d'effectuer l'mulation SCSI pour les priphriques IDE ATAPI. Il va de soi que lorsque vous aurez utilis un des fichiers priphriques SCSI, le module ide-scsi sera charg. Vous ne pourrez donc plus utiliser le module ide-cd, qui permet d'accder aux lecteurs IDE par leur interface ATAPI. De mme, si vous montez votre lecteur de CD par l'intermdiaire du fichier spcial de priphrique IDE correspondant, le module ide-cd sera charg. Vous ne pourrez donc plus utiliser le module d'mulation SCSI. La solution est donc, dans ce cas, de dcharger les modules inutiliss l'aide de la commande rmmod. Il est vident que comme vous n'avez pas besoin d'utiliser l'interface IDE de vos lecteurs de CD dans la plupart des cas, le plus simple est simplement de toujours utiliser l'mulation SCSI et ainsi d'viter tout conflit. Dans ce cas, vous pourrez rpondre par 'N' la question Include IDE/ATA-2 CDROM support de la configuration du noyau, surtout si vous ne matrisez pas Linux ou si n'avez pas bien assimil le fonctionnement des modules.
Installation des logiciels de gravage

Lorsque cela aura t ralis, il ne vous reste plus qu' installer les logiciels de gravage. Les logiciels indispensables sont les suivants :

cdrecord, qui permet de piloter le graveur de CD et d'effectuer les tches ncessaires pour le gravage ; mkisofs, qui permet de crer des images disques ISO 9660 ; mkhybrid, qui permet de crer des images disques ISO 9660 avec les extensions Joliet (CD Windows 95), Rock Ridge (CD Unix) ou HFS (CD Macintosh). Ce programme est trs pratique, car les CD ainsi crs pourront tre lus correctement par plusieurs systmes ; cdda2wav, qui permet d'extraire les donnes numriques des CD audio.

Vous pourrez vrifier que votre configuration fonctionne correctement avec la commande suivante : cdrecord -scanbus Cette commande recherche tous les priphriques SCSI du systme. Vous devrez normalement y trouver, en plus de vos autres priphriques SCSI, votre graveur de CD.

Utilisation des logiciels de gravage www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 183

M. Elie Degny Raphael

Nous allons prsent voir les commandes permettant de faire les principales oprations ayant trait au gravage des CD. Bien que ce document soit consacr l'installation de Linux et non son utilisation, elles vous permettront de tester si tout fonctionne correctement. La copie directe d'un CD peut se faire avec la commande suivante : cdrecord -dummy -v dev=bus,ID,lun speed=n -isosize /dev/scdx O bus reprsente le bus SCSI sur lequel le graveur est branch, ID le numro de priphrique du graveur sur ce bus SCSI et lun son numro d'unit logique ( Logical Unit Number . Le numro du bus SCSI et le numro de priphrique peuvent tre obtenus avec la commande cdrecord -scanbus prsente ci-dessus. Le numro d'unit logique est, dans la majorit des cas, 0. Le nombre n doit ici valoir le facteur multiplicateur de la vitesse de gravage. Vous pouvez essayer avec des valeurs faibles pour commencer, afin d'tre sr que tout se passe bien. Le fichier de priphrique /dev/scdx indiqu dans la ligne de commande de cdrecord doit bien entendu tre le fichier de priphrique SCSI du lecteur de CD utilis pour lire le CD-ROM. L'option -isosize permet de demander cdrecord de lire la taille de la piste graver dans le systme de fichiers ISO9660 du CD source. Enfin, l'option -dummy permet de faire toutes les oprations en conservant le laser du graveur teint, ce qui revient faire un test. Si vous voulez rellement graver votre CD, il suffit de supprimer cette option. Il va de soi que si vous ne disposez pas d'un lecteur de CD en plus de votre graveur, vous ne pouvez pas utiliser la commande prcdente. Dans ce cas, vous devrez faire une image disque en extrayant toutes les donnes du CD source. Cela peut tre ralis avec la commande suivante : dd if=/dev/scdx of=image o /dev/scdx est le fichier spcial de priphrique SCSI du lecteur utilis pour faire l'image (donc, si vous ne disposez que d'un graveur, c'est le fichier spcial de priphrique SCSI de votre graveur), et image est le fichier image qui doit tre cr. Le gravage d'une image disque peut tre ralis avec la commande suivante : cdrecord -dummy -v dev=bus,ID,lun speed=n -data image O les options sont les mmes que dans les commandes prcdentes. Si vous dsirez crer une image disque partir des fichiers de votre disque dur, vous pouvez utiliser mkisofs ou mkhybrid. Le premier programme permet de crer une image disque ISO9660, avec ventuellement les extensions Rock Ridge pour activer les fonctionnalits des systmes de fichiers Unix (noms de fichiers plus longs, liens symboliques, droits...). Le deuxime programme permet de crer des images qui seront lisibles sur plusieurs systmes d'exploitation, en fournissant les extensions Joliet sous Windows 95 et NT (noms de fichiers longs), Rock Ridge sous Unix et HFS sous

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

184

M. Elie Degny Raphael

Macintosh. Le prix payer pour cette amlioration est la perte de quelques centaines de kilo octets, ce qui est drisoire tant donn le gain en portabilit. Les options des deux utilitaires mkisofs et mkhybrid sont similaires. La ligne de commande utiliser pour crer une image disque est la suivante : mkisofs [-r | -R] -V "nom" -o image rpertoires Ou mkhybrid [-r | rpertoires Selon le programme utilis. -R] [-J] [-hfs] -V "nom" -o image

Les options -r ou -R, -J et -hfs permettent respectivement d'utiliser les extensions Rock Ridge, Juliette ou HFS. mkhybrid est capable de prendre plusieurs de ces options simultanment, et de crer des CD hybrides qui fonctionneront sur plusieurs systmes. La distinction entre l'option -r et l'option -R est que -r modifie les attributs des fichiers Unix afin que le CD puisse tre utilis sur un autre ordinateur que celui sur lequel le CD a t cr. En particulier, le propritaire et le groupe des fichiers voient leurs valeurs fixes 0. L'option -V permet de fixer le nom du volume dans l'image. Il est possible de placer ce nom entre guillemets. Cette fonctionnalit est intressante si ce nom comprend des espaces. L'option -o permet de spcifier le nom du fichier image qui doit tre cr. Les paramtres suivants constituent la liste des rpertoires et des fichiers qui doivent tre insrs dans le CD-ROM. Par dfaut, chaque rpertoire ou fichier indiqu en paramtre est plac dans le rpertoire racine du CD-ROM, et l'arborescence des sous-rpertoires est respecte. Cependant, il est possible de placer un des rpertoires ou fichiers indiqu en paramtre dans un autre rpertoire du CD-ROM, l'aide de la syntaxe suivante : destination=source O destination est le rpertoire destination du CD-ROM, et source le rpertoire ou le fichier source ajouter l'image disque. De mme, il est possible d'exclure certains sous-rpertoires de l'image disque l'aide de l'option -x : -x rpertoire Les sous-rpertoires du rpertoire indiqu seront galement supprims de l'image disque. Vous pouvez tester votre image disque en la montant par l'intermdiaire du priphrique loopback. Il faut pour cela que vous ayez activ la gestion de ce priphrique dans la configuration du noyau. La commande utiliser pour monter ce type de priphrique est lgrement plus complique que pour les systmes de fichiers classiques : mount -t iso9660 -o ro,loop=/dev/loop0 image /cdrom O image est le nom de votre fichier image tester. Cette commande monte le systme de fichiers de cette image dans le rpertoire /cdrom. La commande umount peut tre utilise pour dmonter ce systme de fichiers, et elle s'utilise alors exactement comme pour les autres systmes de fichiers.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

185

M. Elie Degny Raphael

Les commandes prsentes ci-dessus ne permettent pas de travailler avec des CD audio. Pour extraire les donnes audio d'un CD, vous devrez utiliser le programme cdda2wav : cdda2wav [-H] bus,ID,lun -B nom [-tdbut[+fin]] -O wav -D

L'option -H permet d'viter la cration des fichiers d'information .inf sur les pistes extraites par cdda2wav. L'option -B permet d'utiliser le nom nom complt d'un numro pour les fichiers de donnes crs. Les pistes seront donc stockes dans des fichiers portant les noms nom_01, nom_02, etc. L'option -t permet d'indiquer la piste dbut et la piste fin afin de slectionner les pistes dont les donnes audio doivent tre extraites. Si la piste de fin n'est pas prcise, toutes les pistes depuis la piste de dbut jusqu' la dernire piste du CD seront extraites. De mme, si la piste de dbut n'est pas prcise, l'extraction commencera partir de la premire piste. L'option -O permet d'indiquer le type de fichier de sortie, wav indique ici que les fichiers crs seront au format WAV des fichiers sons de Windows. Il est galement possible d'utiliser le type de fichier raw, avec lequel les fichiers seront prts tre gravs tels quels. Enfin, l'option -D permet de spcifier le priphrique SCSI utiliser pour lire les donnes audio. Ce priphrique est slectionn par le numro du bus SCSI sur lequel il se trouve, son numro dans ce bus et son numro d'unit logique. Le gravage des pistes audio peut tre ralis avec la commande suivante : cdrecord -dummy -v dev=bus,ID,lun speed=n -nofix -audio piste1.wav \ piste2.wav ... L'option -nofix permet ici d'viter de fermer la session. Elle doit tre utilise si l'on dsire rajouter des pistes audio sur le CD-ROM ultrieurement. Si, en revanche, elle est omise, cdrecord fermera automatiquement la session aprs l'criture de la dernire piste, et plus aucune donne ne pourra tre ajoute. La commande suivante vous permettra de fixer le disque a posteriori : cdrecord -dummy -v dev=bus,ID,lun speed=n -fix Enfin, si vous disposez d'un graveur de CD rinscriptible, vous pourrez utiliser la commande suivante pour effacer un CDRW : cdrecord -dummy -v dev=bus,ID,lun -blank=fast O bus,ID,lun reprsente toujours le priphrique SCSI utiliser en tant que graveur. Il est peu probable que vous ayez utiliser ces commandes directement, car il existe un programme graphique capable de les piloter de manire conviviale. Ce programme se nomme xcdroast, et peut tre rcupr sur Internet si votre distribution ne le comprend pas. Il est vivement recommand de l'installer. Son utilisation est assez lmentaire et ne devrait pas poser de problme particulier.
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 186

M. Elie Degny Raphael

Installation des priphriques USB Bien qu'ayant eu quelques difficults ses dbuts, le port USB est dsormais en pleine volution. Il s'agit d'une extension des ports srie classiques, qui offre les avantages suivants :

possibilit de connecter jusqu' 127 priphriques sur un mme port, selon une structure arborescente ; bande passante accrue jusqu' 12 Mbits/s thoriques ; capacit de connexion des priphriques chaud et dtection automatique par le systme d'exploitation ; possibilit d'alimentation des priphriques par le bus lui-mme, vitant ainsi d'avoir des cbles supplmentaires pour les priphriques consommant peu d'lctricit.

Tous ces avantages font que le bus USB est appel remplacer les ports srie que l'on connat, et que l'on n'utilise plus dsormais que pour les modems, les vieilles souris srie et quelques appareils extrieurs. Notez que la simplicit du port srie fera qu'il restera encore prsents sur bon nombre d'appareils pour plusieurs annes encore, mais les priphriques informatiques risquent de s'en dtourner de plus en plus. La gestion de l'USB sous Linux se fait au niveau du noyau en ce qui concerne les drivers, et au niveau applicatif pour la dtection et la configuration dynamique des priphriques branchs chaud. Linux est capable d'utiliser la plupart des priphriques USB existant actuellement sur le march. La configuration chaud des priphriques en revanche n'est pas encore tout fait finalise, bien que les mcanismes soient tous en place. La configuration et la compilation du noyau seront dcrites en dtail dans le Chapitre 9.
Configuration du noyau

La configuration des priphriques USB se fait, au niveau du noyau, dans le menu USB support . Il faut simplement activer l'option Support for USB , slectionner un gestionnaire pour le port USB et choisir les drivers des diffrents types de priphriques que l'on voudra connecter sur la machine. Il peut tre utile d'activer l'option Preliminary USB device filesystem afin de pouvoir vrifier, dans le rpertoire /proc/bus/usb/ du systme de fichiers virtuel /proc/, que les priphriques USB connects apparaissent bien. Ce systme de fichiers doit tre mont l'aide de la commande suivante : mount -t usbdevfs none /proc/bus/usb pour pouvoir tre utilis. Il est galement possible de le monter automatiquement dans le fichier /dev/fstab. En fait, il existe deux types d'interfaces USB sur le march : l'interface UHCI (abrviation de l'anglais Universal Host Controller Interface ), spcifie par Intel, et
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 187

M. Elie Degny Raphael

que les contrleurs de la plupart des cartes mres utilisent (chipsets Intel et VIA), et l'interface OHCI ( Open Host Controller Interface ), spcifie par Compaq, et qui est utilise par les chipsets Compaq et ALi principalement. Ces deux interfaces sont incompatibles, vous devez donc slectionner l'un des deux drivers UHCI disponibles (options UHCI (Intel PIIX4, VIA, ...) support et UHCI Alternate Driver (JE) support (NEW) )) ou le driver OHCI (option OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support . Comme vous pouvez le constater dans le menu de configuration du noyau, un grand nombre de priphriques USB sont grs par Linux. Vous devez bien entendu activer les options permettant de prendre en charge votre matriel. Il est conseill d'inclure ces fonctionnalits sous forme de modules, afin de permettre le chargement dynamique des gestionnaires de priphriques. Cela est ncessaire pour la configuration des priphriques connects chaud dans le systme. Il existe cependant une exception : les priphriques d'entre tels que le clavier et la souris devront, si possible, tre inclus directement au sein du noyau, afin d'viter de se retrouver sans clavier et sans souris en cas de problme dans la configuration du systme. Notez qu'il existe deux types de drivers pour les priphriques d'entre : un driver gnral (option USB Human Interface Device (full HID) support), qui fonctionne avec tous les priphriques d'entre du menu Input core support , et des drivers simplifis (options USB HIDBP Keyboard (basic) support et USB HIDBP Mouse (basic) support ), que l'on utilisera pour raliser des systmes embarqus ou des noyaux lgers. Il est videmment recommand d'utiliser le premier driver, si rellement le support du clavier USB est ncessaire (normalement, les claviers USB sont pris en charge par le BIOS de l'ordinateur et apparaissent exactement comme des claviers classiques pour le systme d'exploitation).
Dtection automatique des priphriques USB

Nous avons signal ci-dessus que le bus USB permettait l'ajout et la suppression des priphriques USB chaud, c'est--dire ordinateur allum. C'est une nette progression par rapport aux anciens bus, qui n'ont jamais rellement accept ce genre d'opration, tant du point de vue lectrique (ils peuvent tre dtriors) que du point de vue logiciel (le nouveau priphrique n'est pas dtect ou ne peut pas tre configur). Les drivers USB de Linux sont capables de dtecter l'apparition d'un nouveau priphrique sur le bus USB et de rserver les ressources systmes ncessaires son utilisation, mais ils ne peuvent pas faire grand chose de plus. En effet, la configuration d'un nouveau matriel requiert des oprations dpendantes de celui-ci, telles que :

dterminer le driver charger pour grer ce nouveau priphrique ; charger et configurer ce driver ; signaler aux applications clientes l'apparition du priphrique.

Bien entendu, les oprations inverses doivent galement tre effectues lorsqu'un priphrique est dbranch.
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 188

M. Elie Degny Raphael

Sous Linux, toutes ces oprations sont donc ralises par un programme externe au noyau. La gestion des priphriques USB se fait donc comme suit :

un mcanisme de surveillance du bus USB dtecte les apparitions et disparitions des priphriques. Ce mcanisme est souvent implment sous la forme d'un dmon USB ; ce dmon appelle des programmes clients capables de raliser la configuration des nouveaux priphriques. Ces programmes clients sont couramment appels des agents USB .

Il existe deux solutions pour implmenter le dmon USB. La premire solution consiste surveiller le systme de fichiers virtuel /proc/bus/usb/ pour dtecter les apparitions et disparitions des priphriques USB. La deuxime solution est d'implmenter le dmon USB directement au sein du noyau. Cette solution est plus efficace, parce que le dmon fait dans ce cas partie intgrante du noyau et n'a donc pas surveiller le systme de fichiers virtuel /proc/bus/usb/. La suite de ce document dcrit cette mthode, parce qu'elle est la plus aboutie et plus gnrale (elle fonctionne galement avec d'autres priphriques que les priphriques USB). Pour activer le dmon USB du noyau (nomm khubd), il faut simplement valider l'option Support for hot-pluggable devices du menu General setup dans la configuration du noyau. Cette option ajoute galement une entre hotplug dans le rpertoire /proc/sys/kernel/ du systme de fichiers virtuels /proc/ du noyau. Ce fichier contient le chemin sur le programme utilisateur qui sera appel par le dmon USB chaque fois qu'un priphrique sera ajout ou supprim pendant le fonctionnement du systme. Par dfaut, ce chemin rfrence l'utilitaire /sbin/hotplug, mais il est possible d'en indiquer un autre en crivant une nouvelle valeur dans ce fichier. Le programme hotplug est gnralement un script, capable de charger les modules pour la gestion de la plupart des priphriques USB. Il joue donc le rle d'un agent universel. Cependant, il peut aussi excuter des agents utilisateurs, s'ils existent, qui sont situs dans le rpertoire /etc/hotplug/. Pour les priphriques USB, le script appel se nomme usb.agent. En fait, le noyau appelle le script hotplug ds qu'un priphriqe est ajout ou supprim, que ce soit un priphrique USB ou non. Ce mcanisme est donc absolument gnrique, et fonctionne galement pour les cartes PCMCIA, les priphriques PCI connectables chaud, et les interfaces rseau. Les scripts appels par hotplug se nomment alors respectivement usb.agent, pci.agent et net.agent. Le script hotplug fait la distinction entre ces trois classes de priphriques grce au premier paramtre que le noyau lui passe sur sa ligne de commande. Les valeurs de ce paramtres peuvent valoir respectivement usb, pci et net. Les agents ont besoin d'informations complmentaires pour dterminer quel est le priphrique qui vient d'apparatre ou de disparatre. Ces informations sont passes

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

189

M. Elie Degny Raphael

hotplug sous la forme de variables d'environnement, spcifiques chaque classe de priphriques. Pour les priphriques USB, les variables d'environnement dfinies par le noyau sont les suivantes :

ACTION, qui contient la description de l'vnement qui s'est produit pour ce priphrique ; PRODUCT, qui contient les identificateurs du vendeur, du produit et du priphrique pour le priphrique considr ; TYPE, qui contient la classe et la sous-classe du priphrique, ainsi que son protocole de communication ; INTERFACE, qui contient les paramtres de classe, sous-classe et de protocole pour les interfaces, si le priphrique USB est de classe 0.

Si vous avez activ le support du systme de fichiers virtuel USB, les variables suivantes seront galement dfinies :

DEVFS, qui contient le chemin sur la liste des gestionnaires de priphriques USB. Il s'agit normalement du fichier /proc/bus/usb/drivers ; DEVICE, qui contient le chemin sur le fichier spcial de priphrique pour le priphrique USB ;

Enfin, la variable d'environnement PATH est initialise pour rfrencer les rpertoires /sbin/, /bin/, /usr/sbin/ et /usr/bin/, et la variable d'environnement HOME contient le chemin du rpertoire racine. Normalement, le script hotplug et les agents utilisateurs doivent tre fournis avec votre distribution. Cependant, toutes les distributions ne sont pas encore prtes pour le support de l'USB, et vous devrez installer ces scripts vous-mme. Leur rdaction peut tre extrmement technique, je vous recommande donc d'utiliser les scripts disponibles sur le site de l'USB pour Linux. Configuration de l'imprimante Le sous-systme d'impression de Linux est emprunt un autre systme Unix clbre, BSD. Les commandes utilisateurs sont donc les mmes, et son fonctionnement repose sur les mmes principes. En gnral, les imprimantes sont connectes au port parallle de l'ordinateur (sauf les imprimantes professionnelles, qui disposent d'une interface rseau). Il est donc ncessaire que la configuration du port parallle soit correcte. Dans la suite, nous supposerons que l'imprimante est connecte sur le port /dev/lp0 (premier port parallle, soit l'quivalent de LPT1 sous DOS).

Files dimpression

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

190

M. Elie Degny Raphael

Il est possible d'envoyer directement un fichier imprimer l'imprimante, en le recopiant directement sur le fichier spcial de priphrique de l'imprimante. Cette technique peut parfaitement convenir pour un fichier texte simple, mais elle pose quelques problmes. Premirement, elle ne fonctionne qu'avec des fichiers que l'imprimante peut comprendre, donc des fichiers contenant des instructions qui lui sont spcifiques. Mais le problme le plus important est sans doute le fait que cette technique n'est pas utilisable lorsque plusieurs programmes dsirent envoyer un fichier en mme temps l'imprimante. Le sous-systme d'impression utilise donc un mcanisme de files d'attente pour les impressions ( spool en anglais). Tous les travaux d'impression soumis sont placs dans une file d'attente, et attendent leur tour pour tre envoys l'imprimante associe cette file. Une fois que l'impression est termine, les travaux sont supprims de la file. Ainsi, un seul programme accde l'imprimante : le sous-systme d'impression. Notez qu'il est possible de dfinir plusieurs files d'attentes sur une mme imprimante, selon la nature du travail effectuer. Par exemple, une file peut se charger des documents textes, et une autre des documents graphiques. Bien entendu, le sous-systme d'impression contrle tous les accs l'imprimante et assure qu'un seul document est en cours d'impression chaque instant. D'autre part, le sous-systme d'impression donne la possibilit de spcifier la nature des fichiers imprimer, afin de les traduire dans un langage comprhensible par l'imprimante. Ce travail de conversion est ralis par un ensemble de programmes que l'on appelle les filtres. Un filtre n'est en fait rien d'autre qu'un programme qui reoit un fichier en entre et qui fournit la traduction de ce fichier dans un autre format en sortie. Linux est fourni avec un certain nombre de filtres, qui permettent de grer la plupart des formats de fichiers utiliss. Parmi ces formats de fichiers, il en est un qui est plus important que les autres : PostScript. PostScript est un langage de description de pages invent par Adobe, et que nombre d'imprimantes laser comprennent. En fait, il s'agit d'un vritable langage de programmation, qui permet de programmer les priphriques dont la vocation est d'afficher ou d'imprimer des documents. Techniquement parlant, PostScript permet d'obtenir une qualit d'impression irrprochable, car c'est l'imprimante elle-mme qui dessine la page imprimer. Le problme est que toutes les imprimantes ne comprennent pas forcment le langage PostScript, notamment les imprimantes jet d'encre. Pour ces imprimantes, il faut donc un filtre particulier, capable de convertir le PostScript dans le langage graphique de l'imprimante. Linux utilise pour cela un interprteur PostScript . Un interprteur PostScript est un programme capable de comprendre les fichiers PostScript et de les convertir dans le format compris par l'imprimante. L'interprteur couramment utilis sous Linux est GhostScript, parce que c'est un logiciel libre (cependant, la version courante est toujours commerciale). Il est galement capable d'afficher les fichiers PostScript sous XWindow, et de grer la plupart des imprimantes du march. La plupart des autres filtres ont donc pour vocation de convertir un fichier en PostScript. L'avantage de cette technique est que toutes les imprimantes apparaissent comme tant
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 191

M. Elie Degny Raphael

des imprimantes PostScript pour les programmes dsirant imprimer. Ainsi, leur programmation est beaucoup plus simple, puisqu'ils n'ont qu'un seul format grer. Bon nombre d'applications gnrent directement des fichiers PostScript, qui sont donc envoys directement GhostScript pour l'impression dfinitive. Comme on le voit, pour Linux, le langage d'impression universel est le langage PostScript. Bien entendu, cela est idal si l'on dispose effectivement d'une imprimante PostScript, mais mme dans le cas contraire, les impressions se font parfaitement grce GhostScript.
Commandes dimpression

La commande d'impression sous Linux est la commande lpr (abrviation de l'anglais Laser PRinter ). Cette commande est trs simple utiliser, comme le montre la syntaxe suivante : lpr fichier O fichier est le nom du fichier imprimer. Cette commande se contente de placer le fichier imprimer dans un rpertoire affect la file d'attente des travaux d'impression. Le travail d'impression est ensuite effectu par le dmon lpd, qui fait passer chaque fichier imprimer travers la srie de filtre pour le convertir dans le langage de l'imprimante, puis qui alimente l'imprimante. La liste des travaux d'impression en attente peut tre consulte avec la commande lpq. Chaque travail en attente porte un numro, grce auquel on peut le manipuler. Entre autres oprations, il est possible de l'abandonner l'aide de la commande lprm. Enfin, pour consulter et contrler l'tat des files d'impression, on peut utiliser la commande lpc. Cette commande peut prendre des options en ligne de commande, afin de prciser l'opration effectuer. Par exemple, l'option status permet d'obtenir l'tat de chacune des files d'impression. Les autres options permettent d'arrter le travail en cours, de le suspendre, de dsactiver l'imprimante pour les travaux suivants, et inversement de relancer les travaux d'impression sur cette file.
Configuration des files dimpression

Les distributions modernes fournissent toutes un outil permettant d'effectuer la configuration du sous-systme d'impression. Il est videmment recommand d'utiliser ces outils, car le rsultat est assur et la vie en est d'autant plus facile. De plus, les distributions peuvent fournir des filtres complmentaires, que seuls ces outils connaissent et sont capables d'installer. Toutefois, il est bon de savoir quels sont les mcanismes mis en uvre lors de l'impression d'un document. Nous allons donc nous y intresser brivement dans ce paragraphe. Le dmon lpd utilise le fichier de configuration /etc/printcap pour dterminer l'ensemble des files d'impression existantes et quels filtres doivent tre utiliss. Chaque file est dcrite par une ligne et une seule de ce fichier. Ces lignes sont constitues de
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 192

M. Elie Degny Raphael

divers champs, spars par des deux points (':'). Comme ces lignes peuvent tre relativement longues, elles peuvent tre rparties sur plusieurs lignes physiques en plaant le caractre d'chappement '\' la fin de chaque ligne, sauf la dernire. Le premier champ de la description d'une file d'attente est une liste des noms sous lesquels cette file sera connue. Les diffrents noms sont crits les uns la suite des autres, spars par une barre verticale (caractre '|'). Les champs suivants dcrivent l'imprimante utiliser, ainsi que les options gnrales de la file d'attente. Ces champs utilisent tous la mme syntaxe : option = valeur Il existe un grand nombre d'options, nombre d'entre elles sont facultatives. Cependant, il est impratif que le dmon lpd puisse trouver l'imprimante utiliser. Par consquent, il faut lui fournir au moins l'une des deux srie d'options suivantes :

l'option lp permet de spcifier le fichier spcial de priphrique auquel l'imprimante est connecte ; les options rm et rp permettent de spcifier respectivement le nom d'un serveur d'impression distant ( remote en anglais) et de l'imprimante utiliser sur ce serveur ( remote printer ).

Le dmon lpd doit galement connatre le rpertoire dans lequel les travaux en attente seront stocks (rpertoire dit de spool ). Ce rpertoire peut tre dfini avec l'option sd. D'autres options peuvent tre utiles, comme sh (cette option ne prend pas de valeur), qui permet de supprimer la page de garde au dbut de chaque impression, et mx, qui permet de spcifier la taille maximale des travaux d'impression soumis. Cette dernire option permet de fixer des quotas d'impression selon la taille des documents, afin de donner la possibilit aux autres documents d'tre imprims. Cette option utilise une syntaxe particulire : mx#taille O taille est la taille maximale autorise, exprime en kilo-octets. Le fait de spcifier une taille nulle permet de supprimer ce contrle. L'exemple ci-dessous correspond la dfinition d'une file d'attente locale lmentaire : ascii|lp:lp=/dev/lp:sd=/var/spool/lpd/ascii:mx#0:sh Comme vous pouvez le constater, il n'y a aucune spcification des filtres d'impression utiliser dans cet exemple. Les travaux sont donc directement envoys l'impression, sans traduction pralable. Il est donc ncessaire qu'ils soient dj au format de l'imprimante. Si l'on veut utiliser des filtres d'impression, il faut utiliser l'une des options if, cf, df, gf, nf, rf, tf ou vf. Chacune de ces options permet de spcifier la ligne de
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 193

M. Elie Degny Raphael

commande d'un filtre d'impression spcifique. Le choix du filtre utilis pour un travail d'impression est effectu lors de l'appel la commande lpr, l'aide d'une option en ligne de commande. Le filtre if est le filtre par dfaut, il n'y a donc besoin d'aucune option pour l'utiliser. Les autres filtres peuvent tre slectionns respectivement avec les options -c, -d, -g, -n, -f, -t et -v. Comme on le voit, le sous-systme d'impression ne reconnat pas automatiquement le format de fichier utilis. D'autre part, le nombre de filtres utilisables est limit 8, ce qui peut ne pas suffire tant donn la prolifration des formats de fichiers. Pour rsoudre ce problme, les distributions utilisent souvent un filtre gnrique (utilis en tant que filtre par dfaut), qui est capable de reconnatre le format du fichier imprimer et de le diriger vers un autre filtre ou une srie de filtres. Comme on l'a vu ci-dessus, l'ultime filtre utilis est en gnral l'interprteur GhostScript. Ainsi, il n'y a plus de limite sur le nombre de filtres utilisables, et les filtres sont slectionns automatiquement en fonction de la nature du document imprimer. Malheureusement, ces filtres volus ne sont pas standards, et chaque distribution est susceptible de fournir sa propre version. C'est pour cette raison qu'il est recommand d'utiliser les programmes de configuration fournis par ces distributions pour installer l'imprimante.

Chapitre 6. CONFIGURATION DU RESEAU

Linux est un systme d'exploitation fabriqu par l'Internet et pour l'Internet. Inutile de prciser que c'est l'un des meilleurs systmes pour grer et exploiter un rseau. Certains ne l'utilisent d'ailleurs que pour cela, et profitent de ses excellentes performances sur les petites machines afin de rcuprer du matriel autrement vou la casse. En fait, les fonctionnalits rseau de Linux sont si nombreuses que j'ai t oblig d'y consacrer un chapitre part entire. La configuration d'un rseau est une opration qui ncessite quelques connaissances thoriques sur le fonctionnement des rseaux TCP/IP. Ces informations sont assez techniques, mais indispensables pour bien configurer les services rseau de toute machine connecte, et pas seulement les machines fonctionnant sous Linux. Il n'est en effet pas rare de trouver des rseaux de machines fonctionnant sur des systmes dont la configuration est suppose tre plus simple, mais dont l'organisation est une hrsie absolue et qui risque de ncessiter une remise plat complte chaque interconnexion. Cette section va donc donner quelques explications sur les notions fondamentales des rseaux informatiques. Il traitera ensuite de la configuration des rseaux locaux, puis celle des connexions temporaires Internet. Les services rseau volus tels que le partage de connexion Internet et la cration d'un serveur de fichiers seront finalement traits en fin de chapitre. Notions de rseau TCP/IP
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 194

M. Elie Degny Raphael

Gnralits sur les rseaux Un rseau n'est en gnral rien d'autre qu'une interconnexion entre plusieurs machines et qui leur permet d'changer des informations. Il existe de nombreux moyens de raliser cette interconnexion, qui utilisent parfois des supports physiques varis. Les techniques les plus utilises sont la liaison radio et la liaison par cble. Cette dernire technique comprend diverses variantes, dont les rseaux Ethernet, TokenRing et simplement la liaison tlphonique. Il est vident que la manire d'envoyer et de recevoir des informations est diffrente pour ces diffrents supports physiques, parce qu'elle dpend tout simplement des possibilits techniques offertes par la technologie sous-jacente utilise. Cependant, il est trs courant de dcouper les informations changer en paquets, qui sont ensuite transmis sur le rseau. Ces paquets peuvent tre de tailles varies, et contenir des informations utiles la gestion du rseau. L'information la plus importante est sans doute celle permettant de connatre la machine destinataire du paquet. On l'appelle l'adresse de la machine cible. En gnral, les paquets contiennent galement l'adresse de la machine source, afin qu'une rponse puisse lui tre envoye. Du fait de la diversit des supports physiques de rseau, il n'est pas simple d'crire une application rseau qui puisse travailler dans des environnements rseau htrognes. Cela supposerait de connatre les protocoles de communication pour chaque type de rseau, ce qui compliquerait l'infini le moindre programme et le rendrait inutilisable avec les nouveaux rseaux. Par consquent, cette tche ingrate a t relgue au plus profond des drivers spcifiques au support physique. Les applications quant elles utilisent un protocole de communication plus volu, dont le but est d'assurer l'interoprabilit des diffrents supports physiques. Ce protocole utilise toujours des paquets et une notion d'adresse, mais cette fois ces informations sont standardises et utilisables par toutes les applications. Les paquets de ce protocole sont stocks dans les paquets des rseaux physiques et transmis tels quels. Ils peuvent ventuellement tre dcoups en sous-paquets dans le cas o la taille des paquets du rseau serait trop petite pour les contenir. Cette technique s'appelle l'encapsulation d'un protocole dans un autre protocole.
Le Protocol IP

Les machines Unix utilisent toutes le protocole de communication de bas niveau IP ( Internet Protocol ). Ce protocole a t invent pour permettre l'interconnexion d'un grand nombre de rseaux physiques diffrents (le nom d'Internet provient d'ailleurs de cette caractristique : INTERconnected NETworks ). Il permet de transmettre des informations de manire uniforme sur tous ces rseaux physiques. Ainsi, les programmes qui utilisent IP ne voient pas les spcificits des diffrents rseaux physiques. Pour eux, il ne semble y avoir qu'un seul rseau physique, dont le protocole de communication de base est IP. Autrement dit, les applications qui utilisent le rseau se contentent d'utiliser le protocole IP, et n'ont plus se soucier de la manire dont il
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 195

M. Elie Degny Raphael

faut formater et transmettre les informations sur chaque support physique du rseau. Ce genre de dtails est laiss aux drivers rseaux de chaque machine et aux passerelles reliant les divers rseaux physiques. Comme il l'a dj t dit ci-dessus, le protocole IP utilise des adresses pour identifier les machines sur les rseaux. Les adresses IP sont codes sur quatre octets (nombres binaires huit chiffres, permettant de reprsenter des valeurs allant de 0 255), chacun dfinissant une partie du rseau. Ces adresses sont donc utilises un peu comme les numros de tlphone : le premier octet dfini le numro d'un super rseau dans lequel le correspondant se trouve (ces super rseaux sont appels les rseaux de classe A), le deuxime octet dfini le numro du sous-rseau dans le super rseau (ces sous-rseaux sont appels rseaux de classe B), le troisime octet dfini encore un sous-sous-rseau (rseaux dits de classe C) et le quatrime octet donne le numro de la machine dans ce sous-sous-rseau. Cette numrotation permet d'affecter des adresses similaires pour les diffrentes machines d'un rseau, et de simplifier ainsi la gestion de ce dernier. Elle dispose en revanche d'un inconvnient majeur : beaucoup d'adresses sont gaspilles, car il n'y a pas suffisamment de rseaux de classe A d'une part, et qu'on ne peut pas mlanger les machines de deux sous-rseaux dans un mme rseau de classe A d'autre part. Si l'on reprend la comparaison avec les numros de tlphone, il y a normment d'abonns dont le numro commence par 01, mais beaucoup moins dont le numro commence par 02, et quasiment aucun dont le numro commence par 08. Si on venait manquer de place dans la liste des numros commenant par 01, on ne pourrait pas pour autant utiliser les numros commenant par 02 pour des raisons de zones gographiques. C'est la mme chose pour les adresses IP, sauf que les zones gographiques sont remplaces par des sous-rseaux. Le problme est que, malheureusement, on commence manquer d'adresses disponibles (alors qu'il y en a plein de libres mais inutilisables parce qu'elles se trouvent dans d'autres sous-rseaux !). Il va donc falloir effectuer une renumrotation d'ici peu, exactement comme il y en a dj eu dans le monde de la tlphonie... Note : Le protocole IPv6, qui remplacera le protocole IP classique (encore appel IPv4), a pour but de rsoudre les limitations du protocole IP utilis actuellement. Les adresses du protocole IPv6 sont codes sur 16 octets, ce qui rsoudra dfinitivement le problme du manque d'adresses. De plus, les services modernes que sont l'authentification de l'metteur, ainsi que la qualit de service (c'est--dire la garantie du dlai de transmission des donnes, garantie ncessaire pour transmettre de faon correcte les flux multimdia tels que le son et la vido en temps rel) sont fournis par IPv6. Bien entendu, Linux est dj capable d'utiliser IPv6 (combien de systmes peuvent aujourd'hui l'affirmer ?) ! Notez toutefois que pour cela, il faut recompiler le noyau et toutes les applications rseau du systme, ce qui est tout de mme trs lourd. Par consquent, il vaut mieux se contenter du protocole IP actuel. Malgr ses limitations, ce protocole reste sans doute le meilleur protocole rseau du monde, car il allie souplesse et fonctionnalit. Il est difficilement concevable de crer un rseau aussi grand qu'Internet avec les autres protocoles existant sur le march...

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

196

M. Elie Degny Raphael

Les adresses IP sont donc parfaitement dfinies l'aide de leurs quatre nombres, que l'on note les uns la suite des autres et en les sparant d'un point. Comme on l'a vu, les adresses IP sont classes en sous-rseaux, de classe A, B et C. Les adresses des rseaux de classe C ont leurs trois premiers nombres fixs, et seul le quatrime nombre change pour chaque machine du rseau. De la mme manire, les rseaux de classe B ont leurs deux premiers nombres fixs, et seuls les deux derniers nombres permettent de distinguer les diffrentes machines du rseau. Enfin, les rseaux de classe A n'ont de fix que leur premire composante, les autres sont libres. Il est donc clair qu'il existe peu de rseaux de classe A, mais que ce sont de trs gros rseaux (ils peuvent contenir jusqu' 16 millions de machines !). En revanche, il existe beaucoup plus de rseaux de classe C, dont la taille est plus modeste (seulement 256 machines). Pour un rseau donn, les adresses ont donc toutes la mme forme. Les premiers octets des adresses du rseau sont toujours les mmes (ce peut tre le premier octet pour les rseaux de classe A, les deux premiers pour les rseaux de classe B ou les trois premiers pour les rseaux de classe C). On peut donc dfinir la notion d'adresse de rseau, qui est l'adresse IP d'une machine du rseau dont les parties variables ont pour valeur 0. Par exemple, si une machine d'un rseau de classe C a pour adresse 192.168.1.15, alors l'adresse de son sous-rseau est 192.168.1.0. Cela signifie que toutes les machines de ce rseau auront une adresse de la forme 192.168.1.xxx . Un rseau n'appartient qu' une et une seule classe. Les adresses IP sont rparties sur les diffrentes classes de rseau, selon la valeur des bits de poids fort de leur premier octet. Par exemple, les rseaux de classe A sont identifiables au fait que le bit de poids fort de leur adresse est nul. Les adresses de rseau valides pour les rseaux de ce type sont donc les adresses comprises entre 0.0.0.0 et 127.0.0.0. Il n'existe donc que 128 rseaux de classes A en tout et pour tout. Les autres rseaux ont donc le bit de poids fort de leur adresse fix 1, et c'est le deuxime bit de poids fort qui est utilis pour distinguer les rseaux de classe B des autres. Les rseaux de classe B utilisent toujours la valeur 0 pour ce bit, leurs adresses varient donc entre 128.0.0.0 et 191.255.0.0. De mme, les rseaux de classe C utilisent la valeur 1 pour le deuxime bit de leur adresse, et ont ncessairement un troisime bit nul. Leurs adresses vont donc de 192.0.0.0 223.255.255.0. Les adresses pour lesquelles le troisime bit (en plus des deux premiers) est 1 sont rserves (soit pour une utilisation ultrieure, soit pour s'adresser des groupes d'ordinateurs en multicast) et ne doivent pas tre utilises. Il s'agit des adresses 224.0.0.0 255.255.255.255. Cette dernire adresse a une signification spciale et permet de s'adresser tous les ordinateurs d'un rseau. Il est possible de dterminer l'adresse du rseau auquel une machine appartient en utilisant ce qu'on appelle le masque de sous-rseau. Le masque de sous-rseau est une srie de quatre nombres ayant le mme format que les autres adresses IP, mais dont les composantes ne peuvent prendre que la valeur 0 ou la valeur 255, les 255 devant ncessairement apparatre en premier. Les composantes des adresses IP qui correspondent la valeur 255 dans le masque de sous-rseau font partie de l'adresse dudit sous-rseau. Les composantes qui correspondent la valeur 0 dans le masque de sous-rseau n'en font pas partie, et varient pour chaque machine du rseau. Pour reprendre l'exemple prcdent, si une machine a pour adresse IP 192.168.1.15 et que son
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 197

M. Elie Degny Raphael

masque de sous-rseau est 255.255.255.0, alors l'adresse de son rseau est 192.168.1.0. Si le masque de sous-rseau avait t 255.255.0.0 (typiquement le masque d'un rseau de classe B), l'adresse du rseau aurait t 192.168.0.0. Comme on le voit, le masque de sous-rseau est utilis par le systme pour dterminer rapidement l'adresse de sousrseau d'une machine partir de son adresse IP. Les adresses IP ne sont pas attribues aux machines au hasard. Il est vident que chaque machine doit avoir une adresse unique, et que son adresse doit appartenir la plage d'adresses utilise pour le sous-rseau dont elle fait partie. Pour cela, la classe des rseaux, ainsi que les adresses qu'ils utilisent, sont attribus par l'IANA, un organisme de gestion de l'Internet. Le rle de l'IANA (abrviation de l'anglais Internet Assigned Numbers Authority ) est essentiellement d'assurer l'unicit des adresses IP sur l'Internet. Cependant, certaines adresses sont librement utilisables pour les rseaux locaux qui ne sont pas connects directement l'Internet. Les paquets utilisant ces adresses sont assurs de ne pas tre transmis sur Internet, et peuvent donc tre utilises par quiconque. Les plages d'adresse rserves sont les suivantes : Tableau 7-1. Plages d'adresses IP rserves pour un usage personnel Classe de rseau A B C Adresses de rseau rserves 10.0.0.0 172.16.0.0 172.31.0.0 192.168.0.0 192.168.255.0

Ainsi, un rseau de classe A (d'adresse 10.0.0.0), 16 rseaux de classe B (les rseaux 172.16.0.0 172.31.0.0) et 255 rseaux de classe C (d'adresses 192.168.0.0 192.168.255.0) sont disponibles. Vous pouvez donc les utiliser librement. Il est galement possible de configurer les machines pour qu'elles rcuprent leurs adresses IP auprs d'un serveur l'aide du protocole DHCP (abrviation de l'anglais Dynamic Host Configuration Protocol ). Cette technique est trs intressante quand on dispose d'un grand nombre de machines qui ne sont pas toujours toutes connectes un rseau. Il est donc possible de redistribuer les adresses IP d'un stock d'adresses en fonction des machines qui se connectent, et d'conomiser ainsi les prcieuses adresses. En revanche, elle n'est pas approprie pour les serveurs qui sont couramment accds par des postes clients, et qui doivent donc avoir une adresse IP fixe. Certaines adresses IP ont une signification particulire et ne peuvent pas tre attribues une machine. Par exemple l'adresse 127.0.0.1 reprsente, pour une machine, elle-mme. Cette adresse est souvent utilise pour accder un programme rseau sur la machine locale. Elle fait partie du sous-rseau de classe A 127.0.0.0, qui ne comprend pas d'autres adresses. De plus, les adresses dont les derniers nombres (c'est--dire les nombres qui ne font pas partie de l'adresse du rseau) se terminent par 0 ou 255 sont rserves pour l'envoi des paquets destination de tout le monde sur le rseau (mission dite broadcast ). Par exemple, les adresses 192.168.1.0 et 192.168.1.255 ne peuvent

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

198

M. Elie Degny Raphael

pas tre affectes une machine. Ce sont typiquement ces adresses qui sont utilises par le protocole DHCP pour mettre des requtes sur le rseau alors que la machine n'a pas encore d'adresse fixe. Il est important de savoir que par dfaut, une machine ne communiquera qu'avec les machines de son propre rseau. C'est dire que si une machine utilise l'adresse IP 192.168.1.15 et que son masque de sous-rseau est 255.255.255.0, elle ne pourra contacter que des machines dont l'adresse est de la forme 192.168.1.xxx. Elle ne pourra donc pas voir par exemple une machine dont l'adresse IP est 192.168.0.2. Cela ne signifie pas que l'on doive toujours utiliser le masque 0.0.0.0 pour voir toutes les machines du monde, mais plutt que la machine 192.168.0.2 ne fait pas partie, a priori, du mme rseau physique que la machine 192.168.1.15. Il est donc inutile de chercher la contacter (et mettre le masque de sous-rseau 0.0.0.0 ne rsoudrait videmment pas le problme). Cependant, si deux rseaux physiques ont ncessairement deux adresses de rseau diffrentes, rien n'empche de dfinir, sur un mme rseau, plusieurs rseaux logiques. Ainsi, une mme carte rseau peut avoir plusieurs adresses IP. La communication avec les machines des diffrents rseaux logiques se fait alors par l'intermdiaire de la mme interface rseau. Arriv ce stade des explications, je sens venir la question suivante : ?! Euhhh... Mais alors, comment peut-on voir les machines sur Internet ? Je n'ai pas de rseau, et quand je me connecte Internet, je peux y accder ! Et mme si j'avais un rseau, elles ne feraient certainement pas partie de mon rseau... . Explications :

premirement, vous avez un rseau, mme si vous ne le savez pas. Toute machine capable de se connecter l'Internet appartient au moins son propre rseau virtuel, sur laquelle elle est la seule machine, et o elle a l'adresse 127.0.0.1 ; deuximement, effectivement, les machines qui se trouvent sur Internet n'appartiennent pas votre rseau, que celui-ci existe effectivement ou soit virtuel ; troisimement, toutes les informations que vous envoyez et recevez transitent par un seul ordinateur, celui de votre fournisseur d'accs Internet. C'est cet ordinateur qui se charge de faire le transfert de ces informations vers les machines situes sur Internet.

C'est donc ici qu'intervient la notion de passerelle ( Gateway en anglais). Une passerelle est une machine qui appartient deux rseaux physiques distincts, et qui fait le lien entre les machines de ces deux rseaux. Les ordinateurs des deux rseaux peuvent communiquer avec la passerelle de part et d'autre, puisqu'elle appartient aux deux rseaux. Les ordinateurs de chaque rseau transmettent cette passerelle tous les paquets qui ne sont pas destins une machine de leur propre rseau. Celle-ci se charge simplement de transfrer ces paquets aux machines de l'autre rseau.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

199

M. Elie Degny Raphael

Lorsque vous vous connectez Internet, vous ne faites rien d'autre que de crer un rseau (dont le support physique est la ligne tlphonique), et vous utilisez l'ordinateur que vous avez appel comme passerelle par dfaut. Tous les paquets destins un autre rseau que le vtre (donc, en pratique, tous les paquets si vous n'avez pas de rseau local) sont donc envoys au fournisseur d'accs Internet, qui se charge de les transmettre aux autres ordinateurs. Notez que la passerelle peut elle-mme transmettre ces paquets une autre passerelle, et ainsi de suite, jusqu' ce que la destination soit atteinte. Dans le cas d'un particulier, le choix du rseau sur lequel les paquets doivent tre transmis est trs facile faire, puisqu'en gnral, un paquet est soit destination de la machine locale, soit destination d'une machine sur Internet. Pour un paquet destin la machine locale, le rseau virtuel local est utilis. Tous les autres paquets sont envoys sur la connexion Internet. Cependant, il peut arriver qu'une machine ait le choix entre plusieurs rseaux diffrents pour envoyer un paquet dont la destination n'est pas sur son propre rseau. Par exemple, les passerelles des fournisseurs Internet peuvent tre ellesmmes connectes diffrents autres rseaux, qui sont eux-mmes connects d'autres rseaux. L'ensemble des rseaux emprunts par un paquet dans son voyage constitue ce qu'on appelle sa route. Chaque passerelle contribue donc dterminer la route des paquets en choisissant, pour chaque paquet, l'interface rseau utiliser pour transmettre ce paquet. Ce choix est fait en suivant un certain nombre de rgles bases sur l'adresse destination des paquets. Par exemple, si une passerelle reoit un paquet dont l'adresse destination est 125.46.10.15, et qu'elle est elle-mme connecte un rseau possdant cette machine, elle transmettra bien videmment ce paquet sur ce rseau. Si en revanche elle ne peut localiser la machine cible sur l'un de ses rseaux, elle l'enverra une autre passerelle. Le choix du rseau utilis est en gnral dtermin par des rgles de la forme suivante : Tous les paquets destins au sous-rseau 125.46.0.0 doivent tre envoys vers la passerelle 137.49.20.1 du rseau 137.49.20.0 . Ainsi, si la passerelle est connecte trois rseaux d'adresses respectives 192.168.1.0, 137.49.20.0 et 209.70.105.10, elle transfrera le paquet destination de 125.46.10.15 la passerelle 137.49.20.1. L'ensemble des rgles utilises par les passerelles sont stockes dans ce qu'on appelle des tables de routage. Les tables de routage peuvent tre configures statiquement dans la configuration des passerelles, c'est--dire initialises dans les fichiers de configuration et ne jamais tre modifies. Cette technique convient parfaitement pour les petits rseaux, cependant, elle se rvle insuffisante sur les passerelles d'Internet. En effet, si les rseaux emprunts par une route sont saturs, voire hors service, il peut tre intressant d'utiliser une autre route. Ces passerelles utilisent donc des tables de routage dynamiques, qui sont automatiquement mises jour en fonction de l'tat du rseau. Bien que Linux puisse parfaitement effectuer ce type de routage, c'est une configuration rserve un usage spcifique de Linux. Ce document ne traitera donc pas du routage dynamique.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

200

M. Elie Degny Raphael

Le problme des adresses IP est qu'elles ne sont pas trs parlantes pour les tres humains : que peut donc signifier 192.147.23.2 ? Pas grand chose... C'est pour cela qu'on affecte des noms de machines plus humains, comme par exemple krypton.andromede.galaxie. Ces noms suivent une convention de nommage bien prcise. En gnral, le premier nom est le nom de la machine elle-mme, et la suite du nom constitue ce qu'on appelle le domaine dans laquelle la machine se trouve. Ainsi, dans l'exemple prcdent, krypton est le nom d'une machine, et andromede.galaxie est le nom de son domaine. En gnral, il existe plusieurs machines dans un mme domaine, on pourrait donc galement avoir altair.andromede.galaxie par exemple (malheureusement pour mon exemple, l'toile Altar ne se trouve pas dans la galaxie d'Andromde, mais bon...). Souvent, les noms de domaines sont des noms de socits. La dernire partie du nom de domaine permet galement de dterminer la nature du domaine, ou sa localisation. Par exemple, l'extension .com indique clairement que le domaine est de nature commerciale (de surcrot, il s'agit sans doute d'une socit amricaine, l'extension .com tant rserve aux tats-Unis). De mme, l'extension .gov est utilise pour les organismes gouvernementaux amricains, et l'extension .edu pour les universits ou les coles amricaines. L'extension .org est utilise pour les organisations non commerciales. Enfin, les noms de domaines des autres pays que les tats-Unis utilisent quasiment systmatiquement une extension indiquant leurs pays d'origine. Ainsi, .fr reprsente la France, .uk les Royaumes-Unis, etc. Notez que la notion de domaine est a priori distincte de la notion de rseaux. La question technique qui se pose avec ces conventions de nommage humaines est de savoir comment dterminer, partir d'un nom littral, l'adresse IP de la machine correspondante. Cette opration n'est pas simple, et en fait elle est effectue de deux manires :

soit la machine locale demande une autre machine qu'elle connat d'effectuer la recherche de l'adresse du correspondant ; soit elle dispose d'une liste de noms et d'adresses lui permettant de dterminer directement les adresses de ses interlocuteurs.

La premire solution utilise ce qu'on appelle un serveur de noms ( DNS en anglais, abrviation de Domain Name Service ), qui connat toutes les machines du rseau soit directement, soit indirectement (donc via un autre DNS). L'opration qui consiste retrouver l'adresse IP d'une machine partir de son nom s'appelle la rsolution de noms de domaines. Il est vident que si le serveur de noms ne peut tre contact, il sera impossible d'utiliser les noms de machines. En revanche, il sera toujours possible d'utiliser leurs adresses IP directement, si on les connat. La deuxime solution ne souffre pas de ce dfaut, cependant, elle ncessite de mettre jour la liste des noms sur tous les postes rgulirement, ce qui est beaucoup plus complexe que la gestion centralise d'un DNS. On ne l'utilisera donc que pour les petits rseaux.
Le Protocol TCP

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

201

M. Elie Degny Raphael

Nous avons vu que le protocole IP fournit les briques de bases de toute la communication rseau sous Unix (et Internet). Ses principales fonctionnalits sont le dcoupage des informations en paquets de taille suffisamment petite pour pouvoir transiter sur tous les types de rseaux physiques, la gestion des destinations des paquets l'aide des adresses IP, et le choix de la route permettant d'acheminer les paquets destination. En revanche, il est incapable d'assurer les services plus volus comme la gestion de l'ordre d'arrive des informations et la gestion de la fiabilit du transfert des informations. C'est donc des protocoles plus volus, eux-mmes encapsuls dans IP, d'effectuer ces tches. L'un des protocoles les plus importants est le protocole TCP (abrviation de l'anglais Transfer Control Protocol ). Ce protocole se charge d'tablir les connexions entre deux ordinateurs, et assure la fiabilit des informations transmises et l'arrive des informations dans leur ordre d'envoi. Il existe d'autres protocoles, moins connus que TCP mais tout aussi importants. On retiendra en particulier les deux protocoles suivants :

UDP (abrviation de l'anglais User Datagram Protocol ), qui permet d'mettre des datagrammes sur le rseau, qui sont de simples paquets de donnes (c'est un protocole semblable IP destin aux applications) ; ICMP (abrviation de Internet Control Message Protocol ), qui est utilis essentiellement pour transmettre des messages de contrle du fonctionnement des autres protocoles (il est donc vital).

Les services rseaux des machines sont organiss en couche logicielle, qui s'appuient chacune sur la couche infrieure. Ainsi, TCP utilise IP, qui lui-mme utilise le driver qui gre l'interface rseau. Du fait que ces couches s'appuient les unes sur les autres, on appelle souvent l'ensemble de ces couches une pile ( stack en anglais). Vous avez peut-tre dj entendu parler de la pile TCP/IP. Lorsqu'un service rseau d'une machine n'est plus accessible, il se peut que ce service rseau ait plant. Si tout un ensemble de services rseau ne fonctionne plus, c'est certainement une des couches logicielles qui est plante. Par exemple, une machine peut rpondre la commande ping (classiquement utilise pour tester les connexions rseaux) et ne plus accepter la plupart des connexions rseau. Cela signifie simplement que la couche TCP ne fonctionne plus, et que la couche ICMP (utilise par ping) est toujours valide. videmment, si la couche IP tombe en panne, la machine ne sera plus accessible du tout, sauf avec d'autres protocoles rseaux compltement diffrents (IPX, Appletalk, etc.). Seuls les mcanismes du protocole TCP seront dtaills dans la suite de ce document. Le protocole TCP est en effet utilis par un grand nombre de services, ce qui en fait certainement le plus connu. Le protocole TCP utilise la notion de connexion. Une connexion est un canal de communication tabli entre deux processus par TCP. Comme les processus sont susceptibles d'utiliser plusieurs connexions simultanment, TCP fournit la possibilit de les identifier par un numro unique sur la machine, compris entre 0 et 65535. Chaque numro identifie ce qu'on appelle un port TCP. Quand un processus dsire tablir une

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

202

M. Elie Degny Raphael

connexion avec un autre, il utilise un de ses ports et essaie de se connecter sur le port du deuxime processus. Il faut bien comprendre que les deux numros de ports utiliss ne sont a priori pas les mmes pour les deux processus. videmment, il est ncessaire que les processus clients connaissent les numros de port des processus serveurs auxquels ils se connectent. Les numros de ports sont donc affects des services bien dfinis, et les serveurs qui fournissent ces services doivent bien entendu utiliser ces numros de ports. Par consquent, il est possible de dterminer de manire unique un programme serveur sur un rseau avec l'adresse IP de la machine sur laquelle il fonctionne et le numro de port qu'il coute pour les connexions extrieures. Les clients qui se connectent savent donc parfaitement quel service ils accdent lorsqu'ils choisissent le numro de port destination. Leur propre numro de port est en gnral choisi par le systme, afin d'viter tout conflit avec un autre processus de la mme machine. Une fois tablie, une connexion TCP permet d'effectuer des communications bidirectionnelles. Cela signifie que le clients et le serveur peuvent tous deux utiliser cette connexion pour envoyer des donnes l'autre. Le client envoie ses donnes sur le port destination du serveur, et le serveur peut renvoyer les rsultats au client en utilisant le port de celui-ci. Les paquets TCP disposent donc toujours d'un port source (c'est--dire le port TCP de l'metteur), et d'un port destination (le port du rcepteur). Ainsi, le rcepteur peut renvoyer sa rponse en utilisant le port source comme port de destination du paquet renvoy, et inversement. Comme il l'a dj t dit, le protocole TCP s'assure que les informations transmises arrivent bon port (c'est le cas de le dire !). Pour cela, il utilise un mcanisme d'accuss rception, qui indiquent l'metteur si le destinataire a bien reu chaque paquet envoy. Si l'accus rception n'est pas reu dans un temps fix, le paquet est r-mis. Un paquet reu en double cause d'un retard dans la communication de l'accus rception est tout simplement ignor. La fiabilit des informations est galement assure. Cette fiabilit est ralise par un mcanisme de somme de contrle. Si le rcepteur constate que la somme de contrle des donnes reues n'est pas celle que l'metteur a calcul, il rejette le paquet parce qu'il sait que les informations ont t corrompues pendant la transmission. Enfin, TCP s'assure que les informations mises en plusieurs passes sont bien reues dans leur ordre d'mission. Cette rorganisation se fait grce une numrotation des paquets (cette numrotation sert galement dtecter les paquets reus en double). Elle peut paratre inutile, mais la vitesse d'arrive des paquets est hautement dpendante de la route IP qu'ils prennent pour parvenir destination. Les paquets qui arrivent en avance sont donc mmoriss jusqu' ce que tous les paquets qui les prcdent soient reus.

Les Protocols de haut niveau

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

203

M. Elie Degny Raphael

TCP fournit donc les fonctionnalits requises pour la plupart des services rseaux existants. Il est logique que ceux-ci s'appuient sur lui pour effectuer leur travail. Cependant, il ne se charge que de communiquer les informations, rien de plus. Des protocoles de plus haut niveau ont donc t crs. Leur valeur ajoute provient souvent du formatage et de la structuration des flux de donnes changs. La plupart des services rseaux dfinissent donc un protocole qui leur est propre. Il est d'ailleurs assez courant de confondre le service et le protocole, tellement ils sont intrinsquement lis. Ainsi, le service FTP utilise le protocole FTP ( File Transfer Protocol , protocole de transfert de fichiers), les serveurs Internet utilisent essentiellement le protocole HTTP ( Hyper Text Transfer Protocol , protocole de transfert d'hypertexte), le service de courrier lectronique utilise les protocoles POP ( PostOffice Protocol ) pour la rception des courriers et SMTP ( Simple Mail Transfer Protocol ) pour leur envoi. La liste de ces protocoles n'est pas exhaustive, et de nouveaux services apparaissent rgulirement. Les protocoles de haut niveau ne seront donc pas traits dans ce document. Configuration du rseau sous Linux La configuration du rseau ncessite donc la configuration du protocole IP et des services TCP, UDP et ICMP (entre autres). Cette opration se fait en dfinissant l'adresse IP le masque de sous-rseau et les routes utiliser. Vient ensuite la configuration du nom de la machine locale, de son domaine, des noms de machines qu'elle peut rsoudre elle-mme et des serveurs de DNS qu'elle doit utiliser pour les autres noms. Il est quasiment certain que votre distribution dispose d'un outil permettant d'effectuer la configuration du rseau simplement. Connaissant prsent la signification des termes utiliss dans les rseaux TCP/IP, vous devriez pouvoir parvenir une configuration valide relativement simplement. Il est fortement recommand de consulter la documentation de votre distribution. Les commandes de configuration du rseau sont souvent appeles dans les scripts de dmarrage de la machine, ou dans les scripts de changement de niveau d'excution. Toutefois, il peut tre utile de connatre ces commandes, ne serait-ce que pour comprendre comment votre systme fonctionne. Cette section a donc pour but de vous prsenter ces commandes, ainsi que les principaux fichiers de configuration du rseau utiliss sous Linux.

Configuration statique des interfaces rseaux

La principale commande permettant de configurer le rseau est la commande ifconfig. Comme son nom l'indique ( InterFace CONFiguration ), elle permet de configurer les
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 204

M. Elie Degny Raphael

interfaces rseaux de la machine. Il faut savoir qu'il existe plusieurs types d'interfaces rseaux. Les plus courants sont les trois types d'interfaces suivants :

l'interface loopback, qui reprsente le rseau virtuel de la machine, et qui permet aux applications rseaux d'une mme machine de communiquer entre elles mme si l'on ne dispose pas de carte rseau ; les interfaces des cartes rseaux (que ce soient des cartes Ethernet, TokenRing ou autres) ; les interfaces ppp, plip ou slip, qui sont des interfaces permettant d'utiliser les connexions srielles, parallles ou tlphoniques comme des rseaux.

La configuration d'une interface comprend l'initialisation des drivers ncessaires son fonctionnement et l'affectation d'une adresse IP cette interface. La syntaxe gnrale que vous devrez utiliser est la suivante : ifconfig interface adresse netmask masque up O interface est le nom de l'interface rseau que vous voulez configurer, adresse est l'adresse IP que cette interface grera, et masque est le masque de sous-rseau que vous utilisez. Les interfaces que vous aurez configurer seront certainement des interfaces Ethernet, auquel cas vous devrez utiliser les noms eth0, eth1, etc. dans la commande ifconfig. Si vous dsirez configurer l'interface loopback, vous devrez utiliser le nom d'interface lo. Le paramtre up donne ifconfig lui indique que l'interface doit tre active. Cela signifie que ds que la commande ifconfig s'achvera, votre interface rseau sera active et fonctionnelle. On ne peut faire plus simple... Bien entendu, il existe le paramtre inverse : down. Ce paramtre s'utilise tout simplement dans la commande ifconfig avec la syntaxe suivante : ifconfig interface down O interface est toujours le nom de l'interface. Un exemple de configuration trs classique est le suivant : ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up Note : Prenez bien garde, lorsque vous crivez vos adesses IP, ne pas rajouter de 0 supplmentaire devant les nombres qui la constituent. En effet, il existe une convention en informatique qui dit que les nombres prfixs d'un 0 sont cods en octal, c'est--dire en base 8. Il va de soi qu'une adresse IP code en octal n'utilise pas les mmes nombres que lorsqu'elle est exprime en dcimal, aussi prouveriez-vous quelques difficults pour diagnostiquer le non fonctionnement de votre rseau si vous faisiez cette erreur ! Le noyau utilisera par dfaut le nombre 255 pour les adresses de broadcast dans les composantes de l'adresse IP qui ne fait pas partie de l'adresse de sous-rseau. Si vous dsirez utiliser une autre adresse (en gnral, l'alternative est de prendre l'adresse du sous-rseau), vous devrez utiliser l'option broadcast adresse dans la commande
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 205

M. Elie Degny Raphael

ifconfig. Cependant, le comportement par dfaut convient la plupart des rseaux. La commande de configuration donne en exemple ci-dessus sera alors : ifconfig eth0 192.168.0.1 broadcast 192.168.0.0 up netmask 255.255.255.0

Enfin, il est possible d'affecter plusieurs adresses IP certaines interfaces rseau. C'est en particulier le cas pour toutes les interfaces rseau classiques, mais bien entendu cela n'est pas ralisable avec les interfaces de type point point comme, par exemple, les interfaces des connexions ppp. Lorsqu'une interface dispose de plusieurs adresses, la premire est considre comme l'adresse principale de l'interface, et les suivantes comme des alias. Ces alias utilisent comme nom le nom de l'interface rseau principale et le numro de l'alias, spars par deux points (caractre ':'). Par exemple, si l'interface eth0 dispose d'un alias, celui-ci sera nomm eth0:0. Ainsi, pour fixer l'adresse d'un alias d'une interface rseau, on utilisera la syntaxe suivante : ifconfig interface:numro add adresse netmask masque O interface est toujours le nom de l'interface, numro est le numro de l'alias, adresse est l'adresse IP attribuer cet alias, et masque est le masque de sousrseau de cette adresse. La commande ifconfig est en gnral appele dans les scripts d'initialisation du systme, qui ont t gnrs par l'utilitaire de configuration rseau de votre distribution. Si vous effectuez un grep sur ifconfig dans le rpertoire /etc/rc.d/ (ou /sbin/init.d/, selon votre distribution), vous trouverez la commande de dmarrage du rseau. Il se peut qu'une variable d'environnement soit utilise la place de l'adresse IP que vous avez choisie. Quoi qu'il en soit, vous devez sans aucun doute avoir les lignes suivantes, qui permettent l'initialisation de l'interface loopback : ifconfig lo 127.0.0.1 netmask 255.0.0.0 up
Dfinition des rgles de routage

La deuxime tape dans la configuration du rseau est la dfinition des rgles de routage. Il est possible de dfinir plusieurs rgles de routage actives simultanment. L'ensemble de ces rgles constitue ce qu'on appelle la table de routage. La rgle utilise est slectionne par le noyau en fonction de l'adresse destination du paquet router. Chaque rgle indique donc un critre de slection sur les adresses, et l'interface vers laquelle doivent tre transfrs les paquets dont l'adresse destination vrifie cette rgle. La commande utilise pour dfinir une route est, chose surprenante, la commande systme route. Sa syntaxe est donne ci-dessous : route opration [-net | -host] adresse netmask masque interface

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

206

M. Elie Degny Raphael

O opration est l'opration effectuer sur la table de routage. L'opration la plus courante est simplement l'ajout d'une rgle de routage, auquel cas add doit tre utilis. L'option suivante permet d'indiquer si le critre de slection des paquets se fait sur l'adresse du rseau destination ou plus restrictivement sur l'adresse de la machine destination. En gnral, il est courant d'utiliser la slection de toutes les adresses d'un mme rseau et de les router vers une mme interface. Dans tous les cas, adresse est l'adresse IP de la destination, que celle-ci soit un rseau ou une machine. Si la destination est un rseau, il faut indiquer le masque de sous-rseau masque l'aide de l'option netmask. Enfin, interface est l'interface rseau vers laquelle doivent tre envoys les paquets qui vrifient les critres de slection de cette rgle. Par exemple, la rgle de routage utiliser pour l'interface loopback est la suivante : route add -net 127.0.0.0 netmask 255.0.0.0 lo Cette rgle signifie que tous les paquets dont l'adresse de destination appartient au sousrseau de classe A 127.0.0.0 doivent tre transfrs vers l'interface loopback. Cela implique en particulier que les paquets destination de la machine d'adresse IP 127.0.0.1 (c'est--dire la machine locale) seront envoys vers l'interface loopback (ils reviendront donc sur la machine locale). Une autre rgle de routage classique est la suivante : route add -net 192.168.0.0 netmask 255.255.255.0 eth0 Elle permet d'envoyer tous les paquets destination du rseau de classe C 192.168.0.0 vers la premire interface Ethernet. C'est typiquement ce genre de rgle qu'il faut utiliser pour faire fonctionner un rseau local. Il n'est normalement pas ncessaire d'ajouter les rgles de routage pour les rseaux auxquel la machine est connecte. En effet, la configuration d'une carte rseau l'aide de la commande ifconfig ajoute automatiquement la table de routage une rgle pour envoyer les paquets destination de ce rseau par l'interface rseau qui y est connecte. Cependant, la commande route devient rellement ncessaire lorsqu'il faut dfinir les passerelles utiliser pour l'envoi des paquets destins une machine laquelle la machine locale ne peut accder directement. Les rgles de routage faisant intervenir une passerelle sont semblables aux rgles de routage vues ci-dessus, ceci prs que l'adresse IP de la passerelle utiliser doit tre fournie. Pour cela, on utilise l'option gw (abrviation de l'anglais Gateway ). La syntaxe utilise est donc la suivante : route add [-net | -host] adresse netmask masque gw passerelle interface O passerelle est l'adresse IP de la passerelle utiliser pour router les paquets qui vrifient les critres de cette rgle. Les autres paramtres sont les mmes que pour les rgles de routage classique.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

207

M. Elie Degny Raphael

Par exemple, supposons qu'une machine soit connecte un rseau d'adresse 192.168.0.0, et que sur ce rseau se trouve une passerelle d'adresse 192.168.0.1 permettant d'atteindre un autre rseau, dont l'adresse est 192.168.1.0. Une machine du rseau 192.168.0.0 aura typiquement les rgles de routage suivantes : route add -net 192.168.0.0 netmask 255.255.255.0 eth0 route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.1 eth0 La premire rgle permet, comme on l'a dj vu, de communiquer avec toutes les machines du rseau local. La deuxime rgle permet d'envoyer la passerelle 192.168.0.1 tous les paquets destination du rseau 192.168.1.0. Inversement, si la passerelle utilise l'adresse 192.168.1.15 sur le rseau 192.168.1.0, les machines de ce rseau qui voudront accder au rseau 192.168.0.0 devront spcifier la rgle de routage suivante : route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.1.15 eth0 Bien entendu, il est ncessaire que toutes les machines des deux rseaux utilisent ces rgles de routage pour que la communication entre les deux rseaux se fasse dans les deux sens. Le problme de ces rgles de routage est qu'elles spcifient l'adresse du rseau destination. Il est videment hors de question d'utiliser une rgle de routage diffrente pour toutes les adresses de rseaux possibles. Il est donc possible de dfinir ce qu'on appelle une passerelle par dfaut, qui n'est rien d'autre que la passerelle vers laquelle doivent tre envoys tous les paquets qui n'ont pas vrifi les critres des autres rgle de routage. La syntaxe utiliser pour dfinir la passerelle par dfaut est plus simple, puisqu'il n'est plus ncessaire de prciser les critres de slection : route add default gw passerelle interface O la signification des paramtres passerelle et interface est inchange. Ainsi, pour reprendre l'exemple prcdent, supposons que la machine 192.168.0.47 dispose d'une connexion Internet. Pour que toutes les machines du rseau local puisse profiter de cette connexion, il suffit de demander ce que tous les paquets qui ne vrifient aucune autre rgle de routage soient envoys la passerelle 192.168.0.47. Cela se fait avec la rgle de routage suivante : route add default gw 192.168.0.47 eth0
Dfinition du nom de la machine

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

208

M. Elie Degny Raphael

La configuration du nom d'un ordinateur n'est pas proprement parler une opration indispensable, mais elle permet de le nommer de manire plus conviviale qu'en utilisant son adresse IP. La commande de base permettant de manipuler le nom de la machine locale est la commande hostname. Appele telle quelle, elle renvoie le nom actuel de la machine : hostname Cette commande permet galement de modifier ce nom, simplement avec la syntaxe suivante : hostname nom O nom est le nom utiliser. Il est d'usage de n'utiliser que le nom de la machine, sans son domaine. Le nom de domaine sera dtermin automatiquement par le systme partir des informations issues de la configuration de la rsolution des noms de domaines. Nous verrons cela dans le paragraphe suivant. Cette commande est donc trs simple utiliser, et elle est en gnral appele dans les scripts de dmarrage du systme. La plupart des distributions utilisent le fichier /etc/HOSTNAME pour stocker le nom de la machine. Vous tes bien entendu libre de choisir le nom que vous voulez pour votre ordinateur, mais vous devez vous assurer que ce nom est unique dans votre domaine !
Rsolution des noms de domaine

La commande hostname ne permet de fixer que le nom de la machine locale. Pour les autres machines du rseau, il faut mettre en place les mcanismes de rsolution de noms de domaines. Comme il l'a dj t indiqu au dbut de ce chapitre, il existe deux solutions pour trouver l'adresse IP d'une machine partir de son nom : la consultation d'une liste de noms stocke en local, soit l'interrogation d'un serveur de nom de domaines. Le fichier /etc/host.conf permet de dfinir le comportement du systme lors de la rsolution d'un nom. Sa structure est trs simple, puisqu'il y a une option de recherche par ligne. Dans la plupart des cas, les lignes suivantes sont suffisantes : order hosts,bind multi on Elles permettent d'indiquer que la recherche des noms pour leur rsolution doit se faire d'abord localement, puis par appel aux DNS si la recherche prcdente a chou. C'est en gnral le comportement dsir. La deuxime ligne permet de faire en sorte que toutes les adresses correspondant une machine soient renvoyes. Si l'on avait utilis l'option multi off, seule la premire adresse IP trouve aurait t renvoye. La liste de noms locale est stocke dans le fichier /etc/hosts (cela explique le nom hosts utilis pour l'option order dans le fichier /etc/host.conf). Votre ordinateur
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 209

M. Elie Degny Raphael

connatra directement l'adresse IP de toutes les machines rfrences dans ce fichier. Il est bon de placer ici une entre pour les ordinateurs les plus couramment utiliss sur le rseau. Chaque entre commence par une adresse IP, et est suivie de la liste des noms de la machine possdant cette adresse, spars par des espaces. Pour ceux qui ne disposent pas de rseau local, ce fichier doit tre relativement simple : seule la ligne affectant l'adresse 127.0.0.1 la machine locale (appele localhost ) doit s'y trouver. 127.0.0.1 localhost

De la mme manire, le fichier /etc/networks contient les adresses des rseaux. Ce fichier est utilis par la commande route pour donner un nom aux diffrents rseaux. Chaque entre est constitue du nom du rseau, suivi de son adresse IP. Encore une fois, ce fichier se rduit sa plus simple expression pour ceux qui n'ont pas de rseau local, puisqu'il ne contiendra tout au plus qu'une entre pour le rseau loopback , sur lequel se trouve l'adresse de retour 127.0.0.1. Cette entre aura donc la forme suivante : loopback 127.0.0.0

La configuration des serveurs de noms est en revanche une opration ncessaire si l'on dsire accder des machines dont on ne connat que le nom. Le fichier de configuration utilis est cette fois le fichier /etc/resolv.conf. Sa structure est encore une fois trs simple, avec une option par ligne, chaque option tant introduite par un mot-cl. Le mot-cl domain permet d'indiquer le nom du domaine dont fait partie votre machine. Par exemple, si votre nom de domaine est andromede.galaxie , vous devrez utiliser la ligne suivante : domain andromede.galaxie Le mot-cl search permet quant lui de spcifier une liste de noms de domaines ajouter par dfaut aux noms de machines non compltement qualifis. Les lments de cette liste doivent tre spars par des espaces. La recherche d'une machine dont le nom ne comprend pas la partie de nom de domaine s'effectue en ajoutant au nom de la machine les noms des domaines indiqus ici, jusqu' ce que la rsolution du nom en adresse IP soit effectue. Cette recherche commence bien entendu par le nom de domaine local, s'il a t dfini. Il est donc recommand d'indiquer votre nom de domaine dans cette liste de noms de domaines. Par exemple, si votre machine fait partie du domaine andromede.galaxie , vous devrez utiliser la ligne suivante : search andromede.galaxie Ainsi, si vous recherchez l'adresse de la machine krypton , la requte au DNS se fera avec le nom compltement qualifi krypton.andromede.galaxie . Vous tes bien entendu libre d'ajouter d'autres noms de domaines pour le cas o la rsolution de nom chouerait sur ce domaine.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

210

M. Elie Degny Raphael

Enfin, l'option nameserver est essentielle, puisqu'elle permet de donner les adresses IP des serveurs de DNS auxquels doivent tre adresses les requtes de rsolution de noms. Par exemple, si vous disposez de deux serveurs DNS, un primaire, d'adresse 192.168.0.10, et un secondaire, d'adresse 192.168.0.15, vous utiliserez la ligne suivante : nameserver 192.168.0.10 192.168.0.15 Cette ligne est videmment obligatoire, faute de quoi la rsolution des noms de machines en adresse IP chouera pour toute machine qui ne se trouve pas dans votre fichier /etc/hosts.
Utilisation des protocoles DHCP et BOOTP

Gnralement, la gestion des adresses IP des machines devient rapidement une tche difficile sur les grands rseaux, pour trois raisons. Premirement, il faut toujours s'assurer que chaque machine dispose bien d'une adresse qui lui est propre, ce qui peut tre difficile si l'on ne s'organise pas en consquence. Deuximement, il faut que les fichiers /etc/hosts de toutes les machines soient jour, ce qui ncessite un travail proportionnel au nombre de machine administre. Enfin, le nombre d'adresses IP disponibles peut se rduire et devenir gnant terme. Afin de rsoudre ces problmes de configuration rseau, le protocole DHCP (abrviation de l'anglais Dynamic Host Configuration Protocol ) a t dfini. Il s'agit d'un protocole qui permet aux machines connectes sur un rseau d'interroger un serveur d'adresses du rseau capable de grer une liste d'adresses et de les affecter dynamiquement aux machines du rseau. En fait, ce protocole permet de fournir plus d'informations que les simples adresses IP, comme par exemple la route par dfaut que les machines doivent utiliser, ainsi que les adresses des serveurs de noms du rseau. Un autre protocole semblable DHCP a galement t dvelopp dans le but de permettre la configuration rseau des machines ds leur dmarrage : le protocole BOOTP (abrviation de l'anglais BOOTstrap Protocol ). Ce protocole est videmment plus lger que DHCP, mais permet aux machines d'obtenir dynamiquement leur configuration rseau ds leur dmarrage, avant mme que ne soient monts les systmes de fichiers. Ce protocole est donc particulirement utile pour faire dmarrer des machines sans disque, pour lesquelles le systme de fichiers root est alors mont en NFS. La configuration des protocoles BOOTP et DHCP ne se fait bien entendu pas de la mme manire, car le premier est implment purement au niveau du noyau, alors que le deuxime requiert la prsence d'un dmon de configuration rseau. Les deux sections suivantes dcrivent la manire d'utiliser ces protocoles.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

211

M. Elie Degny Raphael Configuration dun client BOOTP

La configuration du protocole BOOTP en soi ne comporte aucune difficult particulire, puisque tout est pris en charge par le noyau. Cela suppose donc que la prise en charge de ce protocole soit active dans le noyau, et, si ce n'est pas le cas, il va vous falloir recompiler un nouveau noyau et l'installer. Cette opration en revanche est relativement technique, et doit tre faite avec soin. La manire de procder sera dcrite en dtail dans le Chapitre 9. L'option activer pour permettre l'utilisation du protocole BOOTP est l'option IP: kernel level autoconfiguration du menu Networking options . Cette option vous permettra de slectionner le protocole d'auto-configuration rseau que le noyau devra utiliser lors de son amorage. Vous devrez alors choisir l'option IP: BOOTP support (NEW) pour activer le protocole BOOTP. Note : Vous remarquerez qu'il existe galement un autre protocole d'auto-configuration du rseau au dmarrage : le protocole RARP. Ce protocole fournit les mmes services que le protocole BOOTP, mais est plus ancien. Il n'est donc plus conseill de l'utiliser, sauf vous vous trouvez sur un rseau pour lequel seul le protocole RARP est disponible. Une fois ces options slectionnes, vous pourrez recompiler votre noyau, l'installer et redmarrer la machine. Lors du dmarrage, le noyau doit chercher un serveur BOOTP sur le rseau local pour effectuer la configuration rseau de votre carte rseau. Note : Vous devrez peut-tre galement activer les options NFS file system support et Root file system on NFS du menu Network File Systems si vous dsirez faire dmarrer votre machine sur un systme de fichiers root mont en NFS lors du dmarrage.
Configuration dun client DHCP

Comme sous la plupart des systmes Unix, le protocole DHCP est pris en charge sur les machines par le programme dhclient. Ce programme est gnralement lanc dans les scripts de dmarrage des machines, et envoie des paquets de demande de configuration sur le rseau l'adresse de diffusion gnrale 255.255.255.255. Ces paquets sont donc susceptibles d'tre captes par toutes les machines du rseau, mais seuls les serveurs DHCP y rpondent. Les rponses obtenues sont alors analyss par dhclient, qui configure en consquence l'interface rseau et passe ensuite en arrire-plan. Les informations envoyes par les serveurs DHCP peuvent tre plus ou moins compltes, la base tant bien sr l'adresse IP de la machine et son masque de sousrseau. Il est toutefois possible de donner plus d'informations, comme par exemple les adresses des serveurs de noms, des routes par dfaut et des passerelles utiliser. Les adresses IP attribues aux clients ne sont pas permanentes, car le protocole DHCP est avant tout destin la configuration automatique des postes itinrants ou susceptibles de redmarrer souvent. Par consquent, ces adresses sont fournies dans le cadre d'un
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 212

M. Elie Degny Raphael

bail, dont la dure maximum est fixe par le serveur. Ds que le bail obtenu par un client expire, celui-ci doit chercher le renouveler. C'est encore le programme dhclient qui s'en charge. C'est la raison pour laquelle celui-ci passe en arrire-plan aprs avoir configur l'interface pour la premire fois : il attend la fin des bails de la machine sur laquelle il tourne et cherche les renouveler. Si un client ne renouvelle pas ce bail (parce qu'il est arrt par exemple), le serveur DHCP peut rutiliser son adresse IP et l'affecter une autre machine. Bien que les serveurs DHCP s'efforcent gnralement de conserver les adresses IP des clients chaque bail, un client configur par DHCP ne peut donc pas considrer que son adresse IP restera toujours la mme. C'est la contrepartie de la flexibilit. Si aucun serveur DHCP ne peut tre contact lors du dmarrage, dhclient abandonne temporairement et ressaie au bout d'un temps alatoire. Au bout d'un certain nombre d'essais non fructueux, il peut dcider de configurer les interfaces rseaux avec les adresses IP des anciens baux obtenus par la machine. Pour cela, il mmorise dans le fichier de configuration /var/db/dhclient.lease les adresses IP de ces anciens baux. Ce fichier est priodiquement rcrit avec la liste des adresses des baux valides afin d'viter qu'il ne se remplisse ad vitam eternam. Bien entendu, les postes clients ne peuvent pas choisir leurs adresses IP sans vrification d'unicit. Dans le cas de l'absence de serveur DHCP (et donc d'autorit centrale), les clients qui dmarrent interrogent les machines dj prsentes sur le rseau pour dterminer si l'adresse qu'ils envisagent de prendre est bien libre. Dans le cas contraire, une autre adresse est essaye, et ainsi de suite. Ainsi, mme en cas de panne de tous les serveurs DHCP d'un rseau, les postes clients peuvent toujours travailler ensemble sans conflits d'adresses IP. Comme vous pouvez le constater, le comportement de dhclient est relativement complexe et dpend de nombre de paramtres. Tous ces paramtres peuvent tre dfinis dans le fichier de configuration /etc/dhclient.conf. Ce fichier contient en particulier les diffrentes dures intervenant dans le choix des adresses IP, comme par exemple la dure minimale d'un bail, les dures entre chaque tentatives de configuration, les informations qui doivent tre rcupres des serveurs DHCP, ainsi que les valeurs par dfaut pour ces informations lorsque les serveurs ne les fournissent pas. Le fichier de configuration dhclient.conf est donc relativement complexe. Heureusement, dhclient utilise des options par dfaut qui conviennent dans la plupart des cas, aussi est-il fortement probable que votre fichier dhclient.conf soit vide. Si toutefois vous dsirez en savoir plus, vous pouvez consulter la page de manuel dhclient.conf. La configuration DHCP pour les postes clients se rduit donc l'essentiel : le lancement de dhclient. Celui-ci s'utilise avec la syntaxe suivante : dhclient interface0 [interface1 [...]] O interface0, interface1, etc., sont les interfaces rseaux qui doivent tre configures par DHCP. On ne peut donc pas faire plus simple...

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

213

M. Elie Degny Raphael

Note : Sous Linux, le programme dhclient utilise les fonctionnalits d'accs direct aux cartes rseau et de filtrage des paquets. Ces deux fonctionnalits peuvent tre actives dans la configuration du noyau l'aide des options Packet socket , Packet socket: mmapped IO et Socket Filtering du menu Networking options . L'option IP: multicasting de la liste des options du protocole IP devra galement tre active. Le dtail de la configuration et de la compilation du noyau sera vu dans le Chapitre 9.
Dfinition des protocoles de haut niveau

Comme nous l'avons vu plus haut, le protocole IP fourni les mcanismes de base pour la transmission des paquets. Plusieurs protocoles de plus haut niveau ont t dfinis pour fournir des services valeur ajoute, qui satisfont donc plus aux besoins des applications. Tous ces protocoles sont encapsuls dans le protocole IP, ce qui signifie que leurs informations sont transmises en tant que donnes dans les paquets IP. En ralit, les paquets du protocole IP contiennent un champ permettant de signaler le type de protocole de haut niveau dont ils transportent les informations. chaque protocole est donc attribu un identificateur numrique qui lui est propre, et qui permet aux services rseaux d'interprter les donnes des paquets. Tout comme les adresses IP, ces numros identifiant les protocoles ne sont pas trs intressant pour les humains, qui leur prfrent videmment le nom du protocole. Certains programmes rseaux utilisent donc ces noms pour identifier les protocoles. Pour leur permettre de faire l'association entre ces noms et les identificateurs numriques, le fichier /etc/protocols est utilis. Le format de ce fichier est trs simple. Il contient une ligne pour chaque protocole, constitue du nom du protocole, de la valeur de son identificateur, et des autres noms que ce protocole peut avoir (c'est--dire ses alias). Parmi ces protocoles, les plus importants sont les suivants : Nom ip icmp tcp udp Numro 0 1 6 17 Alias IP ICMP TCP UDP

Comme on le voit, le protocole IP dispose lui-mme d'un identificateur de protocole (qui vaut 0 en l'occurrence). Cet identificateur est un identificateur de pseudo protocole , parce qu'IP est en fait le protocole de base. ICMP est identifi par le numro 1, TCP par le numro 6 et UDP par le numro 27. Il existe beaucoup d'autres protocoles, qui ne seront pas dcrits ici. Bien entendu, le fichier /etc/protocols fourni avec votre distribution doit dj contenir la dfinition de la plupart des protocoles.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

214

M. Elie Degny Raphael

De la mme manire, la plupart des ports TCP et UDP sont affects des services bien dfinis, et certains programmes rseau peut chercher faire la correspondance entre les noms de ces services et les numros de ports. Cette correspondance est stocke dans le fichier de configuration /etc/services. Les informations concernant les services sont donnes raison d'une ligne par service. Chaque ligne suit la syntaxe suivante : nom port/protocole alias O nom est le nom du service dcrit par cette ligne, port est le numro du port utilis par ce service, protocole est le nom du protocole utilis par ce service (ce peut tre tcp ou udp ), et alias la liste des autres noms sous lesquels ce service est galement connu. Vous trouverez les principaux services dans l'extrait donn ci-dessous : Service ftp telnet smtp pop3 irc irc Port/Protocole 21/tcp 23/tcp 25/tcp 109/tcp 194/tcp 194/udp

Comme vous pouvez le constater, ces services n'ont pas d'alias. Ces informations sont donnes uniquement titre d'exemple. Il va de soi que le fichier /etc/services fourni avec votre distribution contient la dfinition d'un grand nombre de services, et vous n'aurez en gnral pas y toucher.
Le dmon inetp

La plupart des services rseaux sont grs par des programmes qui s'excutent en permanence et qui attendent des connexions sur un port TCP ou UDP. Ces programmes consomment relativement peu de ressources car ils passent la plupart de leur temps attendre ces connexions. Ils ne se rveillent que lorsqu'un client se connecte effectivement et leur envoie une requte. Cependant, ils peuvent tre relativement nombreux, et si tous les services sont lancs simultanment, ils peuvent finir par consommer une part non ngligeable des ressources. C'est pour cette raison que le dmon inetd (de l'anglais InterNET Daemon ) a t cr. Ce dmon est l'coute des demandes de connexion des clients pour les autres services rseaux, et ne lancent ceux-ci que lorsqu'un client se connecte sur leur port. Une fois lancs, ceux-ci reprennent la main et communiquent directement avec leurs clients. Ainsi, inetd coute les ports pour tout le monde, et est la plupart du temps le seul

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

215

M. Elie Degny Raphael

fonctionner. Les ressources systme sont conomises de cette manire, et les services rseaux sont dmarrs et arrts la demande. Le dmon inetd utilise le fichier de configuration /etc/inetd.conf pour dterminer les ports sur lesquels il doit attendre des connexions de la part des clients, et pour trouver le service rseau qu'il doit lancer lorsqu'une telle connexion arrive. Encore une fois, le fichier est structur en lignes. Chaque ligne dcrit un des services que le dmon inetd prend en charge. Les informations donnes sur ces lignes sont les suivantes :

le nom du service (tel qu'il est dfini dans la premire colonne du fichier /etc/services) dont inetd doit surveiller les requtes ; le type de canal de communication rseau utilis, en gnral stream (pour les communications en mode connect, donc en gnral celles qui utilisent le protocole TCP) ou dgram (pour les communications bases sur les datagrammes, donc typiquement les communications utilisant le protocole UDP) ; l'un des mots-cls wait ou nowait, qui permettent d'indiquer si inetd doit attendre la fin de l'excution du dmon grant ce service ou s'il peut attendre de nouvelles requtes de la part des clients ; le nom de l'utilisateur au nom duquel le dmon grant ce service doit fonctionner (en gnral, c'est root) ; le chemin sur le fichier excutable de ce dmon ; les ventuels paramtres en ligne de commande pour ce dmon, en commenant par l'argument 0, qui doit toujours tre le nom du fichier excutable du programme lui-mme.

Par exemple, la ligne suivante permet de lancer le dmon telnetd sur toute requte via le protocole TCP pour le service telnet : telnet stream tcp in.telnetd nowait root /usr/sbin/in.telnetd

Il est suppos ici que le dmon en charge de ce service peut tre lanc avec le programme /usr/sbin/in.telnetd. Le dmon inetd est capable de fournir lui-mme un certain nombre de services de base, et il n'est pas ncessaire de fournir un dmon pour ces services. Dans ce cas, il faut utiliser le mot-cl internal la place du nom du fichier excutable du dmon de ce service. Les paramtres doivent galement tre remplacs par le mot-cl internal. En fait, il est fort peu probable que votre fichier de configuration /etc/inetd.conf dfinisse les services comme indiqu dans cette section. En effet, un programme intermdiaire en charge d'assurer des contrles de scurit est souvent intercal entre inetd et les dmons grant les services. Nous verrons ce que fait exactement ce programme dans la section suivante.
Configuration de la scurit www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 216

M. Elie Degny Raphael

La plupart des dmons ont besoin d'avoir les privilges du compte root pour s'excuter. Cela peut gnrer des problmes de scurit si d'aventure une personne mal intentionne dcouvrait le moyen de les dtourner de leur fonction initiale et de leur faire accomplir des tches au nom de l'administrateur. Bien entendu, les dmons sont des programmes trs bien crits, et qui vrifient en gnral toutes les requtes demandes par les clients avant de les satisfaire. Cependant, tout programme peut comporter des failles et laisser ainsi un accs indsir au sein du systme. Le principe de base de la scurit est de ne faire confiance qu'au minimum possible de gens. Ce n'est pas un comportement paranoaque, mais simplement du bon sens : puisqu'on ne peut garantir la fiabilit d'un systme 100%, il faut en restreindre les accs aux personnes habilites. D'une manire gnrale, la plupart des surprises dsagrables dans le monde environnant proviennent du mauvais jugement des personnes. Il est est de mme dans le domaine de la scurit informatique, il ne faut donner un accs qu'aux personnes que l'on connat rellement bien, et ne fournir des services rseaux qu'aux personnes et machines qualifies de sres . Il va de soi que lorsqu'il y a un loup dans la bergerie, tout peut aller trs mal trs vite. Tout cela pour dire que les services rseaux d'un systme Linux sont potentiellement nombreux, et parfois inutiles pour l'emploi que l'on veut en faire. Par consquent, il vaut mieux tout simplement ne pas les proposer au monde extrieur, simplement en ne lanant pas les dmons correspondants ou en commentant les lignes des services inutiles dans le fichier /etc/inetd.conf. Mais cela n'est pas suffisant, il faut galement restreindre le nombre de personnes et des machines auxquels les services ncessaires sont proposs. Le service le plus sensible est bien entendu le login. Il est possible de fournir le service de login aux connexions extrieures, et il est vident que cela constitue dj un point d'entre pour qui peut trouver un mot de passe valide. De toute vidence, si quelqu'un trouve le mot de passe du compte root, il a tout gagn. Cela dit, il est possible de limiter srieusement les dgts en interdisant l'utilisateur root de se connecter purement et simplement. Dans la majorit des cas cependant, il est concevable que root puisse se connecter sur la console locale (c'est--dire, avec votre clavier et votre cran...). Il est donc possible de choisir les terminaux partir desquels l'utilisateur root peut se connecter. Ces informations sont stockes dans le fichier de configuration /etc/securetty. Le format de ce fichier est trs simple, puisqu'il est constitu de la liste des terminaux partir desquels l'utilisateur root peut se connecter, raison d'un terminal par ligne. Un fichier de configuration /etc/securetty typique contient donc la liste des terminaux virtuels de la machine : # Exemple de fichier /etc/securetty tty1 tty2 tty3 tty4
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 217

M. Elie Degny Raphael

tty5 tty6 Il est donc fortement dconseill de placer dans ce fichier les autres terminaux (en particulier, les terminaux srie ttyS0 et suivants). Un autre service sensible est le service de tlchargement de fichiers. Il est recommand d'interdire aux utilisateurs privilgis les transferts de fichiers par FTP. En effet, si une personne parvient accder au systme de fichiers, il peut supprimer tous les mcanismes de scurit. De la mme manire que l'on a interdit l'utilisateur root de se connecter sur les terminaux distants, il faut lui interdire (ainsi qu'aux autres comptes sensibles) les connexions par FTP. Cette opration peut tre ralise en ajoutant le nom de chaque utilisateur sensible dans le fichier de configuration /etc/ftpusers. Ce fichier a la mme structure que le fichier securetty, puisqu'il faut donner un nom d'utilisateur par ligne : # Exemple de fichier /etc/ftpusers root uucp mail Bien entendu, la liste des utilisateurs privilgis de votre systme dpend de la distribution que vous avez installe. Le fichier /etc/ftpusers fourni avec cette distribution est donc, en gnral, appropri. Comme on le voit, il est possible de restreindre l'accs certains utilisateurs pour certains services. Mais il est galement possible de restreindre les accs provenant de certaines machines, considres comme peu fiables. En particulier, on peut considrer comme dangereuse tout machine trangre au rseau local. Le programme tcpd a t invent pour effectuer ces contrles. Il s'intercale entre le dmon inetd et les dmons que celui-ci est suppos lancer lorsqu'un client le demande. Ainsi, il lui est possible d'effectuer des vrifications de scurit de base, principalement bases sur les adresses IP des clients. Comme vous pouvez sans doute le constater dans le fichier /etc/inetd.conf de votre systme, tcpd est lanc par inetd pour quasiment tous les services, et reoit en paramtres de la ligne de commande le nom du dmon lancer si la machine cliente en a l'autorisation, ainsi que les paramtres communiquer ce dmon. L'accs quasiment tous les services est donc contrl par tcpd. tcpd utilise les deux fichiers de configuration /etc/hosts.allow et /etc/hosts.deny pour dterminer si une machine a le droit d'accder un service donn. Le premier de ces fichiers indique quelles sont les machines autorises utiliser certains services locaux. Le deuxime fichier indique au contraire les machines qui ne sont pas considres comme sres et qui doivent se voir refuser toute demande de connexion sur les services locaux.
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 218

M. Elie Degny Raphael

Le format de ces deux fichiers est identique. Il est constitu de lignes permettant de dfinir les rgles d'accs pour certains dmons. Chaque ligne utilise la syntaxe suivante : dmons : machines [: commande] O dmons est une liste de noms de dmons, spars par des virgules, et machines est une liste de noms de machines ou d'adresses IP, galement spars par des virgules. commande est un paramtre optionnel permettant de faire excuter une action tcpd lorsque la rgle indique par cette ligne est prise en compte. Une rgle dfinie par une de ces lignes est utilise ds qu'une des machines indiques dans la liste des machines tente une connexion l'un des services de la liste des services. Si la rgle se trouve dans le fichier /etc/hosts.allow, la connexion est autorise et le service est lanc par tcpd. Si elle se trouve dans le fichier /etc/hosts.deny, la connexion est systmatiquement refuse. Si aucune rgle n'est utilise, la connexion est accepte par dfaut. Les listes de machines peuvent contenir des noms de machines partiels, et utiliser des caractres gnriques. Il est galement possible d'interdire la connexion toutes les machines d'un domaine en ne donnant que le nom de domaine (prcd d'un point). Enfin, des mots-cls spciaux permettent de reprsenter des ensembles de machines. Par exemple, le mot-cl ALL reprsente toutes les machines et LOCAL reprsente toutes les machines du rseau local. Le mot-cl ALL permet galement de reprsenter l'ensemble des dmons dans la liste des dmons. Par exemple, le fichier /etc/hosts.deny devrait contenir la ligne suivante : # Exemple de fichier /etc/hosts.deny : ALL : ALL Cela permet de garantir que par dfaut, aucune demande de connexion n'est accepte, ce qui est un comportement sain. Les machines ayant le droit de se connecter doivent tre spcifies au cas par cas dans le fichier /etc/hosts.allow, comme dans l'exemple suivant : # Exemple de fichier /etc/hosts.allow : telnetd, ftpd : LOCAL Cela permet d'autoriser les connexions telnet et ftp pour toutes les machines du rseau local. Vous trouverez de plus amples renseignements sur le fonctionnement de tcpd dans la page de manuel hosts_access(5). Note : Comme vous pouvez le constater si vous comparez les lignes du fichier de configuration /etc/inetd.conf utilisant tcpd et celles qui ne l'utilisent pas, la liste des paramtres passs tcpd par inetd est diffrente de celle utilise pour les dmons lancs directement. En effet, elle ne comprend pas le nom de tcpd lui-mme, alors que pour les
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 219

M. Elie Degny Raphael

dmons, elle contient le nom du dmon en premier paramtre. Cette diffrence provient du fait que le premier argument pass en ligne de commande est le nom du programme lui-mme, sauf pour tcpd. En effet, tcpd suppose que ce paramtre contient le nom du dmon dont il contrle l'accs, et non son propre nom. La scurit base sur tcpd suppose que les adresses IP source des paquets reus sont effectivement les adresses IP des machines qui les ont envoyes. Malheureusement, cette hypothse ne peut pas tre vrifie, car le protocole IP n'inclut aucun mcanisme d'authentification. Par consquent, n'importe qui peut tenter de communiquer avec votre machine au nom d'une autre machine, qu'il aura au pralable mis hors d'tat de se manifester (technique nomme IP spoofing en anglais). tcpd tente par dfaut de contrler ce genre de pratique en vrifiant que le nom indiqu par la machine qui se connecte correspond bien l'adresse IP qu'elle utilise. Ainsi, pour passer cette protection, il faut d'abord infecter un DNS. Cependant, ce genre d'attaque (dite d'interposition) reste courant, surtout sur les rseaux dont les DNS sont insuffisamment protgs. Par consquent, vous ne devez pas vous reposer uniquement sur tcpd et les techniques de firewalling si vous devez crer un site parfaitement sr. En particulier, vous devriez vous intresser aux rseaux virtuels et l'encryptage des donnes. Le protocole Ipv6 intgrera des mcanismes d'authentification et sera donc nettement plus sr. Bien entendu, cela dpasse le cadre de ce document. Configuration de la connexion Internet Les connexions Internet font partie des connexions rseaux temporaires permettant de relier deux machines. La machine locale se connecte en effet au serveur du fournisseur d'accs Internet via la ligne tlphonique. Bien entendu, ce serveur est considr comme la passerelle par dfaut pour tous les paquets destination d'Internet. Ce type de connexion a de particulier que les adresses IP des deux machines sont, en gnral, dtermines dynamiquement, lors de l'tablissement de la connexion. La configuration rseau des connexions Internet se fait donc lgrement diffremment de la configuration d'un rseau local normal. Heureusement, tous les dtails de la configuration rseau sont pris en charge automatiquement.
Le Protocole PPP

Les connexions Internet utilisent le protocole PPP (abrviation de l'anglais Point to Point Protocol ), qui permet deux ordinateurs d'changer des paquets TCP/IP au travers d'une ligne srie (donc galement au travers d'une ligne tlphonique en utilisant un modem). Ce protocole est gr par le noyau d'une part, et par le dmon pppd d'autre part. Il permet d'effectuer la ngociation initiale entre les deux machines, ce qui comprend notamment l'identification, l'authentification et l'attribution des adresses IP. Le dmon pppd ne gre pas le modem directement, car il est suppos tre utilisable sur d'autres types de lignes que les lignes tlphoniques. La gestion du modem est donc relaye un autre programme, qui se nomme chat (il tient son nom du fait qu'il permet de dialoguer directement avec le modem). Le programme chat ne connat pas les
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 220

M. Elie Degny Raphael

diffrents types de modems qui existent sur le march, il se contente d'excuter des scripts qui dcrivent les informations envoyer au modem et les rponses attendues en retour. Cela permet de reporter la configuration spcifique aux modems dans les scripts de connexions. L'criture de ces scripts ncessite bien entendu de connatre les commandes que votre modem est capable de comprendre. Notez galement qu'il est indispensable ici que votre modem soit un vrai modem (qu'il soit interne ou externe), et non pas un modem logiciel (ces modems sont des modles bas de gamme, qui ncessitent un support logiciel pour interprter les informations analogiques reues sur la ligne tlphonique). Renseignez-vous donc bien sur la nature du modem que vous achetez, si vous voulez ne pas avoir de problmes sous Linux... La squence des oprations lors d'une connexion est donc l'initialisation du modem et l'tablissement de l'appel tlphonique par le programme chat, puis le dmarrage du dmon pppd. Celui-ci effectue la connexion sur le serveur du fournisseur d'accs, et dtermine l'adresse IP, les adresses des DNS, la passerelle et la route utiliser pour cette connexion. Une fois cela ralis, toutes les fonctionnalits rseau peuvent tre utilises via Internet, et votre ordinateur fait alors partie du rseau mondial. L'identification et l'authentification peuvent se faire de diffrentes manires selon le fournisseur d'accs Internet utilis. Un certain nombre de fournisseurs exige l'authentification lors de l'appel tlphonique, avec un mcanisme de login classique. Pour ces fournisseurs, l'authentification est faite par le programme chat, auquel il faut communiquer le nom d'utilisateur et le mot de passe. D'autres fournisseurs utilisent un protocole d'authentification spcifique. Pour ceux-ci, l'authentification est ralise directement par le dmon pppd, une fois que la ligne a t tablie. Les deux principaux protocoles d'authentification sont PAP (abrviation de l'anglais Password Authentification Protocol ) et CHAP (abrviation de Challenge Handshake Authentification Protocol ). PAP ralise l'authentification comme le mcanisme de login classique : le client envoie son nom et le mot de passe correspondant en clair au serveur. CHAP utilise en revanche la notion de dfi. Le serveur envoie une requte contenant son nom, et le client doit s'identifier et authentifier son identit en lui renvoyant une rponse contenant son propre nom et une valeur calcule partir du mot de passe correspondant. Les deux mthodes seront prsentes ci-dessous. Si vous ne parvenez pas vous connecter Internet avec la premire de ces mthodes, tentez votre chance avec PAP ou CHAP. Sachez que pour utiliser ces protocoles il est ncessaire de connatre, en plus de votre login et de votre mot de passe, le nom du serveur utilis. Cette information doit vous tre communique par votre fournisseur d'accs Internet. Si vous avez le choix, utilisez de prfrence le protocole CHAP, car il n'envoie jamais de mot de passe en clair sur la ligne tlphonique. La configuration de l'accs Internet pour un fournisseur d'accs requiert donc la configuration du rseau, la configuration de ppp, la configuration de chat et l'criture des scripts de connexions. Les tapes seront dtailles ci-dessous. Nous supposerons dans la suite que vos paramtres de connexions sont les suivants :

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

221

M. Elie Degny Raphael

Paramtre Fournisseur d'accs Internet Nom de domaine Adresse du DNS Numro de tlphone Nom de login Mot de passe Nom de serveur (pour PAP et CHAP)

Valeur www.monfai.fr monfai.fr 192.205.43.1 08 36 76 30 18 Jdupont gh25k;f serveurfai

Note : Les informations donnes dans le tableau ci-dessus sont fictives et ne servent qu' donner un exemple. Vous devez bien entendu les remplacer par les valeurs vous concernant en chaque endroit o elles apparaissent dans la suite de ce document. Si par hasard une de ces informations correspondait un numro de tlphone, un nom ou une adresse IP valide, ce serait une pure concidence. Certains fournisseurs d'accs refuseront de vous donner toutes ces informations, sous prtexte qu'ils vous fournissent un kit de connexion pour Windows. Ce n'est pas trop grave, car il est possible de leur extorquer ces informations malgr eux. Les seules informations rellement indispensables sont le numro de tlphone, le nom de login, le mot de passe et le nom de domaine. Les adresses de DNS peuvent tre dtermines automatiquement dans le cadre du protocole PPP, et le nom de serveur est arbitraire et ne sert qu' identifier la connexion.
Cration dune connexion internet

La premire tape dans la cration d'une connexion Internet est avant tout l'ajout des serveurs DNS du fournisseur d'accs votre configuration rseau. Cela n'est pas toujours ncessaire, car il est possible de configurer le dmon pppd pour qu'il demande au fournisseur d'accs les adresses IP des DNS de celui-ci lors de l'tablissement de la connexion. Cependant, il est plus facile d'utiliser le mcanisme de connexion la demande si l'on indique les adresses des DNS du fournisseur d'accs dans la configuration rseau. Pour l'exemple de connexion utilis ici, vous devez simplement ajouter les lignes suivantes dans le fichier /etc/resolv.conf : search monfai.fr nameserver 192.205.43.1 Si vous ne connaissez pas les adresses de DNS de votre fournisseur d'accs, vous pourrez l'obtenir en regardant dans les traces du noyau lors de l'tablissement d'une connexion. Nous verrons cela en dtail plus loin.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

222

M. Elie Degny Raphael

La deuxime tape est d'crire un script de numrotation pour le programme chat. Ce script pourra tre plac dans le rpertoire /etc/ppp/peers/, et pourra tre nomm monfai.chat par exemple. Son contenu sera le suivant : REPORT CONNECT ABORT ERROR ABORT BUSY ABORT VOICE ABORT "NO CARRIER" ABORT "NO DIALTONE" "" ATZ OK AT&F1 OK ATM0L0DT0836763018 CONNECT "" Ce script contient le programme que chat doit excuter pour appeler le fournisseur d'accs Internet. Il indique toutes les erreurs possibles susceptibles de faire chouer l'opration, puis il envoie les commandes d'initialisation et de numrotation au modem. Vous devrez remplacer le numro de tlphone utilis dans la commande DT<numro> par le numro de tlphone de votre fournisseur d'accs Internet. Note : Dans les scripts pour chat, il est possible d'utiliser indiffremment l'apostrophe simple, l'apostrophe double ou aucune apostrophe si la chane attendue de la part du modem ou lui envoyer ne contient aucun espace. Si d'aventure ce script ne fonctionne pas, vous serez sans doute oblig de demander au programme chat d'afficher tous les messages envoys et reus par le modem. Cela se fait normalement avec les options -v et -s, et la technique utiliser sera dcrite ci-dessous. Vous verrez alors les messages en provenance du modem, ce qui vous permettra de dterminer comment modifier ce script. Si votre fournisseur d'accs Internet utilise un mcanisme de login classique, vous devez faire l'identification directement dans le script chat. En gnral, serveur du fournisseur d'accs envoie la demande de login ds que la connexion a t tablie. Pour cela, il utilise une chane de caractres telle que login: , laquelle le script chat doit rpondre par votre nom d'utilisateur. Le serveur demande alors le mot de passe avec une chane telle que password: , demande suite de laquelle le script chat doit envoyer votre mot de passe. Ce n'est que lorsque ces deux informations auront t fournies que la connexion sera rellement tablie. Vous pouvez complter le script chat pour rpondre ces deux questions avec les deux lignes suivantes : ogin: jdupont ssword: gh25k;f Vous devrez bien entendu remplacer le nom du login et le mot de passe par vos propres donnes dans ce script. Notez qu'il n'est pas ncessaire (ni recommand) de demander la

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

223

M. Elie Degny Raphael

rception de la chane complte login: , car une erreur de transmission sur la ligne peut encore arriver ce stade et provoquer la perte des premiers caractres envoys par l'ordinateur distant. De plus, il se peut que la premire lettre soit en majuscule ou en minuscule, selon le fournisseur d'accs Internet que vous utilisez. Il en va de mme pour la demande de mot de passe ( password: ). Si, en revanche, votre fournisseur d'accs utilise le mcanisme d'authentification PAP ou CHAP, vous ne devez pas ajouter ces lignes, car le serveur n'enverra pas la chane de caractres login: . Il tentera de communiquer directement avec votre dmon pppd pour raliser l'authentification. Bien entendu, les dfis lancs par le serveur sont simplement constitus de la demande du login et de la demande du mot de passe correspondant ce login. Le dmon pppd utilisera alors les secrets stocks dans le fichier /etc/ppp/pap-secrets ou le fichier /etc/ppp/chap-secrets pour rpondre ces dfis, selon que le protocole utilis par le serveur du fournisseur d'accs est PAP ou CHAP. C'est donc dans ces fichiers que vous devrez enregistrer votre login et votre mot de passe. Le format de ces fichiers est trs simple. Les deux fichiers utilisent la mme syntaxe pour les secrets. Vous devez simplement y ajouter une ligne telle que celle-ci : # Secrets for authentification using PAP/CHAP # client server secretIP addresses jdupont serveurfai gh25k;f pour que l'identification et l'authentification se fasse correctement. Comme on le voit, le nom du serveur est indiqu dans ce fichier : il permet de dterminer quel login et quel mot de passe doivent tre utiliss pour les protocoles PAP et CHAP. Note : En fait, le protocole PPP ne permet pas d'identifier des utilisateurs, mais des machines. Cependant, pour votre fournisseur, votre machine est identifie par votre login, et il faut donc indiquer ce nom comme nom de machine cliente dans les fichiers pap-secrets et chap-secrets. Le nom de serveur n'est pas utilis pour la connexion. Il ne sert qu' dterminer quel secret doit tre utilis pour une connexion donne. Comme la plupart des gens n'ont qu'un seul fournisseur d'accs Internet, ce nom est purement et simplement facultatif. Dans ce cas, on peut parfaitement remplacer le nom du serveur par une toile. Ce caractre gnrique indique simplement que le mme secret doit tre utilis pour toutes les connexions. Pour les connexions Internet, il est souvent impossible de connatre a priori l'adresse IP que le serveur donnera au client. On peut donc laisser vide la colonne contenant les adresses IP utilisables par les clients. Lorsque vous aurez crit le script chat et ventuellement complt les fichiers de secrets de PAP ou de CHAP, vous pourrez crire le script de connexion Internet. Ce script est trs simple : #!/bin/sh
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 224

M. Elie Degny Raphael

# Script de connexion Internet # Effectue le mnage : rm -f /var/spool/uucp/LCK* /var/run/ppp*.pid /var/lock/LCK*

# tablit la connexion : /usr/sbin/pppd /dev/modem 115200 connect "/usr/sbin/chat -v \ -f /etc/ppp/peers/monfai.chat" defaultroute usepeerdns \ ipcp-accept-remote ipcp-accept-local Prenez garde crire la ligne excutant pppd et la ligne des options en une seule ligne, sans retour. Notez que le caractre '\' plac en fin de ligne permet d'indiquer que la commande se poursuit sur la ligne suivante. Ce script commence par faire le mnage sur les fichiers ventuellement laisss par les anciennes connexions, et appelle pppd en lui demandant d'utiliser la connexion tablie par le programme chat avec la vitesse maximale de connexion indique. Lorsque la connexion est tablie, le serveur du fournisseur d'accs est enregistr comme passerelle par dfaut dans la table de routage du noyau. L'envoi et la rception des paquets IP en direction de l'Internet se fera donc en passant par cette passerelle. Les adresses de DNS du fournisseur d'accs sont galement rcupres et ajoutes dans le fichier /etc/resolv.conf. Vous pourrez les dterminer simplement en consultant les fichiers de log de votre distribution dans le rpertoire /var/log/. Les deux dernires options permettent d'autoriser le serveur du fournisseur d'accs fixer les adresses IP locales et distantes. Dans ce script de connexion, le programme chat est appel avec le script de numrotation pour chat que l'on a dj crit. Si l'on dsire voir exactement ce qui se passe, on peut ajouter l'option -s la commande d'excution de chat : /usr/sbin/chat -v -s -f /etc/ppp/peers/monfai.chat Dans le script de connexion vu ci-dessus. Cela vous permettra de dboguer votre script de numrotation. Vous remarquerez que le programme pppd utilise le fichier spcial de priphrique /dev/modem pour la communication. Il va de soi que si ce fichier spcial n'existe pas, vous devrez le crer. La solution la plus simple est de faire un lien symbolique vers /dev/ttS0 ou /dev/ttS1, selon que votre modem est connect sur le premier ou le deuxime port srie de votre ordinateur. La commande de lancement donne ci-dessus suppose que le script de connexion /etc/ppp/peers/monfai.chat ralise l'identification et l'authentification. Si vous utilisez l'un des protocoles PAP ou CHAP, il faut demander pppd d'effectuer ces deux oprations lui-mme. Pour cela, il faut ajouter des options dans la ligne de commande utilise pour le lancer dans le script de connexion, afin de prciser le nom du serveur et

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

225

M. Elie Degny Raphael

le nom d'utilisateur pour l'identification. La ligne complte utiliser pour PAP ou CHAP doit donc tre celle-ci : # tablit la connexion : /usr/sbin/pppd /dev/modem 115200 connect "/usr/sbin/chat -v \ -f /etc/ppp/peers/monfai.chat" defaultroute usepeerdns \ ipcp-accept-remote ipcp-accept-local noauth \ remotename serveurfai user jdupont Encore une fois, cette commande doit tre crite sur une seule ligne, ou sur plusieurs lignes spares par le caractre '\'. L'option noauth signale qu'il n'est pas ncessaire que le serveur du fournisseur d'accs s'authentifie en tant que tel (ce n'est pas ncessaire, car les fournisseurs d'accs ne jouent pas vraiment aux pirates du web), et les deux options suivantes permettent respectivement d'indiquer le nom de ce serveur ainsi que le nom d'utilisateur utiliser pour le login. Lors de l'authentification, le dmon pppd lira le fichier de secret du protocole choisi par le fournisseur d'accs pour trouver le mot de passe utiliser. Notez encore une fois qu'il est facultatif de prciser le nom du serveur du fournisseur d'accs si vous avez utilis le caractre gnrique '*' dans les fichiers de secrets pour PAP et CHAP. Il est possible de faire en sorte que la connexion Internet s'tablisse automatiquement ds qu'un programme cherche utiliser une adresse devant passer par la route par dfaut. Toute demande destination d'une machine dont l'adresse est inconnue localement provoque dans ce cas l'tablissement de la connexion Internet. Pour cela, il suffit simplement :

d'ajouter l'option demand la ligne de commande de pppd dans le script de connexion ; de lancer ce script en arrire plan dans un des scripts de dmarrage du systme.

Si vous dsirez utiliser cette fonctionnalit, il est recommand d'activer galement la dconnexion automatique, faute de quoi vous risqueriez de rester connect involontairement. Cela se fait simplement en ajoutant l'option idle n dans la ligne de commande de pppd, o n est le nombre de secondes pendant lequel le lien PPP doit rester inactif avant que la connexion ne se coupe automatiquement. Un choix judicieux est par exemple 600 (ce qui correspond dix minutes). Note : L'interface rseau est automatiquement cre lorsqu'on lance le dmon pppd avec l'option demand. Par consquent, le dmon pppd dfinira automatiquement une adresse IP locale pour cette interface et une adresse IP distante pour la passerelle par dfaut. Malheureusement, la plupart des fournisseurs attribuent les adresses IP dynamiquement, et en gnral, la connexion ne se fait pas toujours sur le mme serveur (il peut y avoir plusieurs serveurs pour un mme numro de tlphone). C'est pour cela qu'il faut ajouter les options ipcp-accept-remote et ipcp-accept-local pour

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

226

M. Elie Degny Raphael

indiquer pppd de modifier ces adresses lorsqu'il tablira la connexion. Le problme, c'est que les connexions TCP/IP utilisant ces adresses seront systmatiquement casses la suite de ce changement. C'est en particulier le cas pour le programme qui a initi l'tablissement de la liaison PPP. C'est pour cette raison qu'il est recommand de demander une adresse IP fixe son fournisseur d'accs lorsqu'on veut utiliser la connexion la demande. Hlas, ce service peut faire l'office d'une facturation supplmentaire. Mme si l'on utilise l'option usepeerdns dans la ligne de commande de PPP, il est recommand de rajouter les adresses des DNS dans le fichier /etc/resolv.conf. En effet, en l'absence de DNS, les noms de domaines ne seront pas rsolus et aucune requte vers l'extrieur ne se fera. Par consquent, la route par dfaut ne sera pas utilise, et pppd n'tablira donc pas la connexion automatiquement. Notez que si vous dfinissez les DNS dans le fichier /etc/resolv.conf, vous pouvez vous passer de l'option usepeerdns dans la ligne de commande de pppd. Si vous dsirez procder de cette manire, vous devrez vous assurer que l'ordre spcifi pour la rsolution des noms dans le fichier /etc/host.conf est bien le fichier /etc/hosts (option hosts) avant le DNS (option bind), faute de quoi votre ordinateur se connectera systmatiquement Internet ds que vous utiliserez un nom de machine local. La plupart des options passes en ligne de commande peuvent tre spcifies dans le fichier d'options /etc/ppp/options du dmon pppd. Cela peut permettre de simplifier les scripts de connexion. Si l'on n'utilise pas les mcanismes de connexion / dconnexion automatiques, on devra se dconnecter manuellement. Pour cela, rien de plus simple : il suffit de dtruire le dmon pppd. Cela peut tre ralis automatiquement avec le script suivant : #!/bin/sh # Script de terminaison de la connexion PPP # # Dtermine la connexion fermer (fournie sur la ligne de commande, # ppp0 par dfaut) : if [ "$1" = "" ]; then DEVICE=ppp0 else DEVICE=$1 fi # Teste si la connexion indique est active : if [ -r /var/run/$DEVICE.pid ]; then # Dtruit le processus ppp correspondant (son PID est stock

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

227

M. Elie Degny Raphael

# dans /var/run/) : kill -INT `cat /var/run/$DEVICE.pid` # Effectue le mnage : if [ ! "$?" = "0" ]; then rm -f /var/run/$DEVICE.pid echo "ERREUR: Un fichier de PID rsiduel \ a d tre effac manuellement" exit 1 fi rm -f /var/spool/uucp/LCK* /var/lock/LCK* echo "La connexion PPP sur $DEVICE a t ferme correctement..." echo # Termine le script : exit 0 fi # La connexion indique n'est pas active : echo "ERREUR: Il n'y a pas de connexion PPP sur $DEVICE" exit 1
Utilisation du mail

prsent, vous pouvez vous connecter Internet simplement en excutant le script de connexion. Pour vous dconnecter, il suffit d'appeler le script de dconnexion. Ds que vous tes connect Internet, vous pouvez utiliser toutes les fonctionnalits rseau de Linux, qui sont sans limites. Parmi ces fonctionnalits, on trouve l'envoi de courriers lectroniques. Cette opration peut tre ralise l'aide du programme mail, qui se manipule l'aide de commandes simples. Les commandes disponibles chaque instant sont affiches dans le bas de l'cran de mail. Le programme mail n'est qu'un client, qui ne fait rien d'autre que d'envoyer et recevoir des mails au serveur de mails local. Sur la plupart des distributions, le serveur de mails utilis se nomme sendmail . Si vous dsirez utiliser le courrier lectronique, vous devrez donc configurer sendmail. Hlas, cette opration est technique et difficile. Il est recommand d'utiliser l'outil de configuration de votre distribution, qui fera tout le sale boulot pour vous. Toutefois, si vous dsirez configurer sendmail vous-mme, sachez que la plupart des options sont stockes dans le fichier /etc/sendmail.cf. Vous devriez vous documenter avant de vous lancer dans cette opration. Le fichier /etc/sendmail.cf ne sera pas dcrit ici, il peut faire lui seul l'objet de plusieurs livres...

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

228

M. Elie Degny Raphael

Classiquement, lorsque vous envoyez un mail, ce mail est envoy sendmail. Si vous tes connect Internet, celui-ci le transmet immdiatement votre fournisseur d'accs Internet, qui le rediffuse. En revanche, si vous n'tes pas connect, sendmail stockera votre message dans le rpertoire /var/spool/mqueue/. Les courriers ne seront envoys que lorsque vous vous connecterez Internet. sendmail vrifie priodiquement s'il peut envoyer les mails en attente, cependant, si vous ne restez pas connect suffisamment longtemps, il peut ne pas s'en apercevoir. Pour viter cela, vous pouvez utiliser la commande suivante : sendmail -q Cette commande demande sendmail d'envoyer les courriers en attente immdiatement. De la mme manire, le programme mail ne rcupre pas lui-mme les mails depuis le serveur de mail de votre fournisseur d'accs Internet. En gnral, le programme utilis pour rcuprer les mails se nomme fetchmail . Si vous voulez rcuprer immdiatement vos mails, vous devrez donc appeler fetchmail manuellement : fetchmail Bien entendu, ces oprations sont ennuyeuses. Si vous voulez tre tranquille, vous pouvez placer ces deux commandes la fin du script de connexion Internet. De la sorte, vous recevrez et enverrez votre courrier chaque fois que vous vous connecterez...
Les Autres outils de connexion

Vous en savez suffisamment prsent pour vous connecter Internet avec Linux. Les oprations qui ont t dcrites ici sont lgrement compliques, et vous les trouvez sans doute un peu lourd. Cela est naturel, car elles le sont effectivement. En fait, les oprations dcrites ici vous montrent comment vous connecter manuellement, mais elles ne constituent pas la manire de faire la plus facile. En effet, si vous installez XWindow, vous pourrez utiliser des programmes graphiques permettant de vous connecter Internet, d'envoyer et recevoir des courriers lectroniques ( mails , de naviguer ( surfer ) et de lire les groupes de discussions ( news ). Cependant, l'utilisation de ces outils ne sera pas dcrite ici, car il en existe trop pour que l'on puisse tous les prsenter. Heureusement, ces outils sont prvus pour tre trs simples d'emploi et leur configuration ne pose rellement aucun problme. Firewalls et partages de connexion Internet Supposons qu'une machine situe sur un rseau local a accs Internet. Il peut tre intressant de faire en sorte que les autres machines du rseau puissent galement y accder, en utilisant cette machine comme passerelle. Cela est parfaitement ralisable et ne pose aucun autre problme que la dfinition des rgles de routage si toutes les machines ont une adresse IP attribue par l'IANA. Cependant, cela est rarement le cas, car les rseaux locaux utilisent normalement les adresses rserves cet usage, qui ne
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 229

M. Elie Degny Raphael

sont pas routables sur Internet. Dans ce cas, il est vident que les machines du rseau local ne pourront pas envoyer de paquets sur Internet, et qu'a fortiori elles ne recevront jamais de paquets provenant d'Internet. Heureusement, il existe une technique nomme masquerading, base sur un mcanisme de translations d'adresses ( NAT en anglais, abrviation de Network Address Translation ), qui permet de modifier les paquets mis destination d'Internet la vole, afin de pouvoir partager une connexion Internet mme avec des ordinateurs qui utilisent des adresses locales. Comme nous allons le voir, partager une connexion Internet avec d'autre ordinateurs d'un rseau local est un jeu d'enfant sous Linux grce cette technique. Il faut toutefois bien se rendre compte que le fait que fournir un accs Internet un rseau local pose des problmes de scurit majeurs. Pour des rseaux locaux familiaux, les risques de piratages sont bien entendu mineurs, mais lorsque la connexion Internet est permanente ou lorsque les donnes circulant sur le rseau local sont sensibles, il faut tenir compte des risques d'intrusion. Lorsqu'on utilise des adresses IP dynamiques, il est relativement difficile d'accder des machines du rseau local, sauf si la passerelle expose des services internes au reste du rseau. En revanche, si les adresses utilises sont fixes et valides sur Internet, le risque devient trs important. La configuration de la passerelle doit donc se faire avec soin dans tous les cas, et l'installation d'un Firewall est plus que recommande (un firewall , ou pare-feu en franais, est un dispositif qui consiste protger un rseau local du feu de l'enfer d'Internet, sur lequel tous les crackers sont supposs grouiller). Les paragraphes suivants exposent les mcanismes de filtrage de paquets rseau de Linux, qui sont utilises tant pour dfinir les rgles de protection contre les intrusions indsirables sur un rseau par l'intermdiaire d'une passerelle que pour effectuer des traitements sur les paquets. Cependant, de tous ces traitements, nous ne verrons que la translation d'adresses, car c'est sans doute celui que la plupart des gens cherchent utiliser.
Mcanisme de filtrage de noyau

Linux est capable de filtrer les paquets circulant sur le rseau et d'effectuer des translations d'adresses depuis la version 2.0, cependant, les techniques utilises ont t profondment remanies chaque version. partir de la version 2.4.0, une architecture extensible a t mise en place et semble rpondre tous les besoins de manire simple : Netfilter. Netfilter est simplement une srie d'entres dans les couches rseau du noyau au niveau desquels des modules peuvent s'enregistrer afin d'effectuer des contrles ou des traitements particuliers sur les paquets. Il existe une entre en chaque point cl du trajet suivi par les paquets dans les couches rseau du noyau, ce qui permet d'intervenir de manire souple et n'importe quel niveau. Un certain nombre de modules permettant d'effectuer les traitements les plus courants sont fournis directement dans le noyau, mais l'architecture Netfilter est suffisamment souple pour permettre le dveloppement et l'ajout des modules complmentaires qui pourraient tre dvelopps par la suite.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

230

M. Elie Degny Raphael

Les fonctionnalits fournies par ces modules sont regroupes par domaine fonctionnel. Ainsi, les modules permettant de raliser des Firewalls se chargent spcifiquement de donner les moyens de filtrer les paquets selon des critres bien dfinis, et les modules permettant d'effectuer des translations d'adresses ne prennent en charge que la modification des adresses sources et destination des paquets la vole. Afin de bien les identifier, ces fonctionnalits sont regroupes dans ce que l'on appelle des tables. Une table n'est en fait rien d'autre qu'un ensemble cohrent de rgles permettant de manipuler les paquets circulant dans les couches rseau du noyau. Les tables les plus couramment utilises sont les tables filter et nat , qui permettent respectivement de raliser des Firewall et d'effectuer des translations d'adresses. Chaque table utilise ses propres points d'entre de Netfilter. Pour chacun de ces points d'entre, des listes de rgles de gestion des paquets peuvent tre dfinies. Ces listes sont communment appeles des chanes. Il y a donc toujours une chane de rgles prdfinie pour chaque point d'entre. L'utilisateur peut bien entendu dfinir de nouvelles chanes et les utiliser dans les chanes prdfinies. Les rgles permettent de spcifier les paquets qui les vrifient, selon des critres prcis, comme par exemple leur adresse source ou le type de protocole qu'ils transportent. Les rgles indiquent galement les traitements qui seront appliqus ces paquets. Par exemple, il est possible de dtruire purement et simplement tous les paquets provenant d'une machine considre comme non sure si l'on veut faire un Firewall. On pourra aussi envoyer ces paquets dans une autre chane, qui peuvent indiquer d'autres rgles et d'autres traitements. Les critres de slection des paquets des rgles de filtrage se basent sur les informations de l'en-tte de ces paquets. Rappelez-vous que chaque paquet de donnes mis sur le rseau transporte avec lui des informations ncessaires au fonctionnement dudit rseau, entre autres les adresses source et destination du paquet. Ce sont sur ces informations que la slection des paquets est effectue dans Netfilter. Dans le cas d'un protocole encapsul dans un autre protocole, comme par exemple un paquet TCP dans un paquet IP, les informations du protocole encapsul peuvent galement tre utilises, si l'on a charg des modules complmentaires dans NetFilter. Par exemple, le numro de port TCP peut faire partie des critres de slection d'une rgle. Les traitements que l'on peut appliquer un paquet sont galement fournis par des modules de Netfilter. Les traitements les plus simples sont bien entendus fournis en standard avec le noyau. En gnral, on peut chercher raliser les oprations suivantes sur un paquet :

l'enregistrer, pour analyse ultrieure ; le rediriger vers un port local, pour traitement par un programme ddi (par exemple, par un serveur proxy) ; l'accepter, l'abandonner ou le rejeter directement (le rejet se distingue de l'abandon par l'mission d'une notification hte inaccessible la machine ayant mis le paquet) ;

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

231

M. Elie Degny Raphael


le modifier, et en particulier, le marquer pour le reconnatre dans un traitement ultrieur ou effectuer une translation d'adresses ; l'envoyer dans une autre chane pour effectuer des vrifications complmentaires ; le faire sortir immdiatement de la chane courante.

De plus, les statistiques tenues par le noyau pour la rgle ainsi vrifie sont mises jour. Ces statistiques comprennent le nombre de paquets qui ont vrifi cette rgle ainsi que le nombre d'octets que ces paquets contenaient. Lorsqu'un paquet arrive la fin d'une chane (soit parce qu'il n'a pas t rejet ou dtruit par une rgle de Firewalling, soit parce qu'il ne correspond aux critres d'aucune rgle, ou soit parce qu'il est arriv ce stade aprs avoir subi des modifications), le noyau revient dans la chane appelante et poursuit le traitement du paquet. Si la chane au bout de laquelle le paquet arrive est une chane prdfinie, il n'y a plus de chane appelante, et le sort du paquet est dtermin par ce qu'on appelle la politique. La politique ( policy en anglais) des chanes prdfinies indique donc ce que l'on doit faire avec les paquets qui arrivent en fin de chane. En gnral, on utilise une politique relativement stricte lorsqu'on ralise un Firewall, qui rejette tous les paquets par dfaut et qui n'ont pas t accept explicitement par une rgle de la chane. Note : Certains paquets peuvent tre dcoups en plusieurs paquets plus petits lors de la traverse d'un rseau. Par exemple, un paquet TCP un peu trop gros et initialement encapsul dans un seul paquet IP peut se voir rpartir sur plusieurs paquets IP. Cela peut poser quelques problmes aux rgles de filtrage, puisque dans ce cas les donnes spcifiques TCP (par exemple les numros de ports) ne sont disponibles que sur le premier paquet IP reu, pas sur les suivants. C'est pour cette raison que le noyau peut effectuer une dfragmentation des paquets lorsque cela est ncessaire, et que les paquets transmis par la passerelle ne sont pas toujours strictement identitiques aux paquets qu'elle reoit.
Translation dAdresses et Masquerading

Nous avons vu que grce aux mcanismes de filtrage du noyau, il est possible de modifier les paquets la vole. Il peut tre intressant de modifier un paquet pour diverses raisons, les trois plus intressantes tant sans doute de le marquer l'aide d'un champ spcial dans son en-tte afin de le reconnatre ultrieurement, de modifier sa priorit pour permettre un traitement privilgi ou au contraire en arrire plan de ce type de paquet (librant ainsi les ressources rseau pour d'autres connexions), et de modifier ses adresses source et destination, pour effectuer une translation d'adresse. Nous allons nous intresser plus particulirement aux diffrentes formes de translation d'adresses dans la suite de cette section. Une translation d'adresse n'est en fait rien d'autre qu'un remplacement contrl des adresses source ou des adresses destination de tous les paquets d'une connexion. En gnral, cela permet de dtourner les connexions rseau ou de simuler une provenance unique de plusieurs connexions. Par exemple, les connexions Internet peuvent tre
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 232

M. Elie Degny Raphael

dtournes vers un proxy fonctionnant sur la passerelle de manire transparente, en modifiant les adresses destination des paquets mis par les clients. De mme, il est possible de simuler un seul serveur en remplaant la vole les adresses source des paquets que la passerelle envoie sur Internet. On distingue donc deux principaux types de translation d'adresses : les translations d'adresses source et les translation d'adresses destination. Parmi les translations d'adresses source se trouve un cas particulier particulirement intressant : le masquerading . Cette technique permet de remplacer toutes les adresses source des paquets provenant des machines d'un rseau local par l'adresse de l'interface de la passerelle connecte Internet, tout en conservant une trace des connexions rseau afin d'acheminer vers leur vritable destinataire les paquets de rponse. Ainsi, une seule connexion Internet peut tre utilise par plusieurs machines distinctes, mme si elles ne disposent pas d'adresses IP fournies par l'IANA. Lorsqu'une machine du rseau local envoie un paquet destination d'Internet, ce paquet est donc achemin vers la passerelle, qui est la route par dfaut. Celle-ci commence par modifier leur adresse source et mettre sa propre adresse la place, puis les transfere vers la machine du fournisseur d'accs. Tous les paquets mis par les machines du rseau local semblent donc provenir de cette passerelle, et seront achemins normalement destination. En fait, la complication provient des paquets rponse, puisque les machines situes sur Internet croient que la machine avec laquelle elles communiquent est la passerelle. Les paquets rponse sont donc tous envoys la passerelle directement, et celle-ci doit retrouver la machine du rseau local laquelle ce paquet est destin. Cette opration est ralise de diffrentes manires selon les protocoles utiliss, et elle suppose que la passerelle conserve en permanence une trace des connexions rseaux effectues par les machines du rseau local. Pour TCP, ce suivi de connexion est ralis en modifiant galement le port source des paquets provenant des machines locales. La passerelle utilise un port unique pour chaque connexion, qui va lui permettre de retrouver la machine laquelle un paquet est destin lorsqu'elle en reoit un provenant d'Internet. Par exemple, si une machine locale fait une connexion Internet, la passerelle alloue un nouveau numro de port pour cette connexion et modifie tous les paquets sortants comme ayant t mis par la passerelle elle-mme, sur ce port. Lorsque l'autre machine prenant part la connexion, situe sur Internet, envoie un paquet rponse, celui-ci sera destination de la passerelle, avec comme port destination le port de la connexion. La passerelle peut donc retrouver, partir de ce port, l'adresse de la machine destination relle, ainsi que le port source que cette machine utilisait initialement. La passerelle modifie donc ces deux champs du paquet, et le renvoie sur le rseau local. Finalement, la machine destination reoit le paquet sur son port, et ce paquet semble provenir directement d'Internet, comme si la connexion avait t directe. Notez bien que la passerelle ne modifie pas les adresses sources des paquets provenant d'Internet, elle ne fait que les racheminer vers la bonne destination. Ainsi, le masquerading est un mcanisme compltement transparent pour les machines du rseau local. En revanche, pour les machines de l'Internet, il ne semble y avoir qu'un
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 233

M. Elie Degny Raphael

seul interlocuteur : la passerelle. Celle-ci utilise des numros de ports varis, mais cela ne les regarde pas. Les machines du rseau local sont donc compltement masques par la passerelle, d'o le nom de masquerading. Tout ce travail effectu par la passerelle ncessite un traitement spcifique sur chaque paquet qu'elle achemine, et consomme bien entendu des ressources systme. Cependant, les dbits utiliss pour les connexions Internet, mme les plus rapides, sont trs loin de mettre genoux une passerelle sous Linux, mme sur les plus petites machines (386 et 486). Vous voil rassur, et peut-tre aurez-vous trouv d'ici peu une utilit l'un de ces dinosaures qui tranent encore dans votre garage...

Trajet des Paquets

Il existe cinq points d'entre au total pour les modules de Netfilter dans le code des couches rseau IP de Linux. ces cinq points d'entre correspondent cinq chanes prdfinies, qui peuvent tre accdes par l'intermdiaire des diverses tables de Netfilter. Les paragraphes suivants dcrivent ces cinq chanes, ainsi que l'ordre dans lequel les paquets les traversent. Les paquets rseau provenant de l'extrieur sont d'abord contrls par le noyau afin de dtecter les erreurs les plus simples. Les paquets mal forms ou corrompus sont systmatiquement limins ce niveau, avant mme d'atteindre le code de Netfilter. Les autres paquets commencent alors leur trajet dans les couches de plus haut niveau. C'est ce moment l qu'ils rencontrent la chane PREROUTING, qui est la premire chane prise en compte. Cette chane prcde le code de routage, qui est en charge de dterminer le trajet que le paquet devra suivre par la suite partir de l'adresse destination des paquets. C'est donc dans cette chane que l'on pourra modifier l'adresse destination des paquets, si l'on veut faire une translation d'adresse destination. Cette chane est donc utilisable dans la table nat. Les paquets qui traversent la chane PREROUTING sont ensuite orients par le code de routage de Linux. S'ils sont destination de la machine locale, ils rencontrent une autre chane prdfinie : la chane INPUT. C'est ce niveau que l'on peut empcher un paquet d'entrer dans le systme, aussi cette chane est-elle naturellement disponible dans la table filter. Les autres paquets doivent tre transfrs vers une autre machine, souvent par une autre interface rseau. Ils traversent alors la chane FORWARD. Cette chane permet de contrler les paquets qui transitent au travers d'une passerelle, et fait donc partie de la table filter. Les paquets qui sont accepts par la chane FORWARD retournent ensuite dans le code de routage du noyau, afin de dterminer l'interface rseau par laquelle ils doivent tre rmis. Une fois cela ralis, ils sont prts tre rmis, mais ils doivent auparavant

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

234

M. Elie Degny Raphael

traverser la chane POSTROUTING. C'est dans cette dernire chane que se font les translations d'adresse source, aussi est-elle accessible dans la table nat. Enfin, les paquets mis par la machine locale destination de l'extrieur doivent imprativement traverser la chane OUTPUT, dans laquelle on pourra filtrer les informations sortantes. Cette chane est donc accessible dans la table filter. Les paquets qui se rvlent avoir le droit de sortir traversent alors de code de routing, puis, tout comme les paquets qui ont t transfrs, entrent dans la chane POSTROUTING. La chane OUTPUT est galement accessible au travers de la table nat, afin de permettre la modification des adresses destination des paquets avant leur routage. Note : Pour des raisons de clart, les chanes prdfinies et les points d'entre de Netfilter ont t volontairement confondus dans ce paragraphe. En fait, il faut bien comprendre que les chanes appartiennent aux tables, et qu'il peut exister plusieurs chanes du mme nom dans plusieurs tables diffrentes. L'ajout d'une rgle dans une chane ne se fait donc que pour une table donne, les autres tables ne contiendront donc pas cette rgle. En revanche, les paquets qui traversent ces chanes le font bien lorsqu'ils sont au niveau du point d'entre correspondant dans le code des couches rseau de Linux.
Configuration du noyau et installation des outils

Les fonctionnalits de Netfilter sont toutes fournies par le noyau lui-mme, aussi leur configuration doit-elle se faire au niveau du noyau. La manire de procder pour configurer le noyau sera indique ultrieurement dans le paragraphe traitant de la compilation du noyau. Sachez cependant que les options activer pour mettre en place les fonctionnalits de filtrage des paquets et de translation d'adresses sont les suivantes :

Network packet filtering (replace ipchains) , pour activer les fonctionnalits de filtrage des paquets en gnral ; Network packet filtering debugging , pour obtenir les messages de dbogage du noyau. Ces messages peuvent tre trs utiles pour mettre au point les rgles de filtrage ; Connection tracking (required for masq/NAT) (menu IP: Netfilter Configuration ), pour permettre le suivi des connexions auxquelles appartiennent les paquets IP reus par la passerelle. Cette option est ncessaire pour raliser un partage de connexion Internet ; FTP protocol support , pour permettre la gestion des connexions FTP, qui exigent un traitement particulier pour les translations d'adresses ; IP tables support (required for filtering/masq/NAT) , pour permettre la gestion des tables de Netfilter ; Packet filtering , pour inclure le support de la table filter . Cette option est ncessaire pour raliser un Firewall ; REJECT target support , pour permettre le rejet des paquets (par dfaut, seul l'abandon des paquets est fourni dans le code de filtrage) ;

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

235

M. Elie Degny Raphael


Full NAT , pour inclure la table nat de Netfilter. Cette option est ncessaire pour raliser un partage de connexion Internet ; MASQUERADE target support , pour permettre le masquerading afin de raliser un partage de connexion Internet.

Vous devrez ensuite compiler le noyau et les modules, et les installer comme indiqu dans la partie traitant de la compilation du noyau. Note : Le noyau de Linux dispose d'un paramtre global permettant de contrler le routage des paquets IP d'une interface rseau une autre. Par dfaut, ce paramtre est 0, ce qui implique que la transmission des paquets ne sera pas autorise. Il faut donc activer ce paramtre chaque dmarrage afin de pouvoir utiliser votre passerelle Linux. Cela peut tre ralis en crivant la valeur 1 dans le fichier /proc/sys/net/ipv4/ip_forward du systme de fichiers virtuel /proc/ : echo "1" > /proc/sys/net/ipv4/ip_forward La manipulation des chanes et la manipulation des rgles de Netfilter se fait grce l'outil iptables. Cette commande doit normalement avoir t installe par votre distribution, toutefois si ce n'est pas le cas, vous pouvez la compiler manuellement. Pour cela, il vous faudra rcuprer l'archive des sources d'iptables. Cette archive peut tre trouve sur Internet. La version courante est la 1.1.2, aussi l'archive se nomme-t-elle iptables-1.1.2.tar.bz2. L'installation d'iptables ne pose pas de problme particulier en soi. Vous devrez d'abord dcomprimer l'archive avec les deux commandes suivantes : bunzip2 iptables-1.1.2.tar.bz2 tar xf iptables-1.1.2.tar Puis modifier le fichier Makefile pour dfinir les rpertoires d'installation dans les variables LIBDIR, BINDIR et MANDIR. En gnral, les rpertoires utiliss seront respectivement les rpertoires /usr/lib/, /usr/bin/ et /usr/man/. Une fois cela fait, il ne restera plus qu' compiler le tout avec la commande make et faire l'installation avec la commande make install. Utilisation d'iptables Il est possible, grce iptables, d'effectuer toutes les oprations d'administration dsires sur les tables de Netfilter. Vous pourrez donc crer des nouvelles chanes, les dtruire, dfinir leur politique par dfaut, ainsi que manipuler les rgles de ces chanes (en ajouter, en supprimer ou en remplacer une). En fait, iptables dispose d'un grand nombre d'options, et seules les options les plus importantes seront prsentes ici. Vous pouvez lire la page de manuel iptables si vous dsirez plus de renseignements sur la manipulation des chanes et des rgles de filtrage du noyau.

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

236

M. Elie Degny Raphael

Manipulation des chanes Toutes les options peuvent tre utilises avec toutes les tables gres par le noyau. La table sur laquelle une commande s'applique peut tre prcise l'aide de l'option -t. Si cette option n'est pas fournie, la table utilise par dfaut sera la table filter, qui est celle qui est normalement utilise pour dfinir des rgles de filtrages des paquets dans un Firewall. La cration d'une nouvelle chane se fait simplement avec l'option -N : iptables [-t table] -N chane O chane est le nom de la chane crer. Il est interdit d'utiliser un des mots-cls rservs par iptables. En pratique, il est recommand d'utiliser des noms de chanes en minuscules, car les chanes prdfinies sont en majuscules. Une chane peut tre dtruite avec l'option -X : iptables [-t table] -X chane Une chane ne peut tre dtruite que lorsqu'elle ne contient plus de rgles. De plus, il est impossible de dtruire les chanes prdfinies d'une table. Vous pouvez lister l'ensemble des rgles d'une chane avec l'option -L : iptables [-t table] -L chane Enfin, il est possible de supprimer toutes les rgles d'une chane avec l'option -F : iptables [-t table] -F chane O chane est le nom de la chane dont on veut lister les rgles. Manipulation des rgles La syntaxe gnrale pour ajouter une rgle dans une chane est la suivante : iptables [-t table] -A chane [-s source] [-d destination] [-p protocole] [-i itfsource] [-o itfdest] [-j cible] o :

table est la table dans laquelle se trouve la chane manipule (par dfaut, il s'agit de la table filter) ; chane est le nom de la chane laquelle la rgle doit tre ajoute ; source est l'adresse source du paquet ; destination est l'adresse destination du paquet ; protocole est le protocole du paquet (spcifi avec son numro de port ou par le nom du protocole tel qu'il est dclar dans le fichier /etc/services) ;
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 237

M. Elie Degny Raphael


itfsource est le nom de l'interface rseau source par laquelle le paquet doit arriver ; itfdest est le nom de l'interface destination par laquelle le paquet doit sortir ; et cible est la cible des paquets qui vrifient les critres de slection de la rgle.

Chacun des paramtres plac entre crochets dans la syntaxe est facultatif, mais il faut au moins qu'un critre de slection soit donn (sur les adresses sources ou destination, ou sur le port ou l'interface). Les adresses sources et destination peuvent tre indiques directement par le nom des machines (comme par exemple www.monrezo.com ) ou par leurs adresses IP. Vous pouvez spcifier directement toutes les adresses d'un rseau avec la syntaxe rseau/masque . Il est galement possible d'utiliser la syntaxe rseau/n , o n est le nombre de bits mis 1 dans le masque de sous-rseau. Ainsi, rseau/24 est quivalent rseau/255.255.255.0, rseau/16 rseau/255.255.0.0, etc. Par extension, rseau/0 peut tre utilis pour spcifier toutes les adresses possibles (dans ce cas, l'adresse donne pour le rseau n'est pas prise en compte). La cible dtermine les oprations qui seront appliques ces paquets. Les cibles autorises dpendent de la chane dans laquelle la rgle est ajoute, ainsi que des modules de Netfilter qui ont t compils. Les principales cibles sont les suivantes :

ACCEPT, pour accepter le paquet qui vrifie le critre de slection de la rgle ; DROP, pour liminer purement et simplement le paquet ; REJECT, pour rejeter le paquet (en signalant l'erreur la machine mettrice). Cette cible n'est utilisable que dans les chanes INPUT, FORWARD et OUTPUT, ainsi que dans les chanes utilisateurs appeles partir de ces chanes ; QUEUE, pour envoyer le paquet un programme utilisateur capable de communiquer avec NetFilter ; RETURN, pour sortir de la chane immdiatement, ou appliquer la rgle de la politique par dfaut pour les chanes prdfinies ; REDIRECT, pour rediriger le paquet sur une autre machine, souvent la machine locale. Cette cible n'est utilisable qu'avec la table nat, car il s'agit d'une translation d'adresse. On ne peut l'utiliser que dans les chanes PREROUTING et OUTPUT et les chanes utilisateur appeles partir de ces chanes ; SNAT, pour permettre la modification des adresses source des paquets. Cette cible n'est bien entendu accessible qu'au niveau de la table nat. Comme la modification de l'adresse source n'a de signification que pour les paquets devant sortir de la passerelle, cette cible ne peut tre utilise que dans la chane POSTROUTING et les chanes utilisateur appeles partir de cette chane ; DNAT, pour effectuer la modification des adresses destination des paquets, afin par exemple de les dtourner vers une autre machine que celle vers laquelle ils devaient aller. Cette cible n'est accessible que dans la table nat, et n'est utilisable que dans les chanes PREROUTING et OUTPUT ainsi que dans les chanes utilisateur appeles partir de ces chanes ;
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 238

M. Elie Degny Raphael

MASQUERADE, pour effectuer une translation d'adresse sur ce paquet, dans le but de raliser un partage de connexion Internet. Cette cible n'est accessible que dans la chane POSTROUTING de la table nat, ainsi que dans les chanes utilisateur appeles partir de cette chane.

Toute autre spcification de destination doit tre le nom d'une chane utilisateur, avec les rgles de laquelle le paquet devra tre test. Si aucune cible n'est spcifie, aucune action n'est prise et la rgle suivante est traite. Cependant, les statistiques de la rgle sont toujours mises jour. La suppression d'une rgle d'une chane se fait avec la commande suivante : iptables -D chane numro O chane est la chane dont on veut supprimer la rgle, et numro est le numro de la rgle supprimer dans cette chane. Il est galement possible d'utiliser l'option -D avec les mmes options que celles qui ont t utilises lors de l'ajout de la rgle, si l'on trouve cela plus pratique. Enfin, la politique d'une chane, c'est--dire la cible par dfaut, peut tre fixe avec l'option -P : iptables -P chane cible O chane est l'une des chanes prdfinie, et cible est l'une des cibles ACCEPT ou DROP. Remarquez que l'on ne peut pas dfinir de politique pour les chanes cres par l'utilisateur, puisque les paquets reprennent les vrification de la chane appelante lorsqu'ils sortent de la chane appele. Exemple de rgles Ce paragraphe a pour but de prsenter quelques-unes des rgles les plus classiques. Le but est ici de prsenter les principales fonctionnalits d'iptables et non de raliser un Firewall fiable. Reportez-vous des documents plus spcialiss pour cela. Exemple de rgles de filtrage Les rgles de filtrage peuvent tre utilises pour mettre en place un Firewall afin de protger votre rseau. La dfinition des rgles de filtrage constitue bien souvent l'essentiel du problme, et ncessite bien entendu de parfaitement savoir ce que l'on veut faire. De manire gnrale, la rgle d'or en matire de scurit informatique est de tout interdire par dfaut, puis de donner les droits au compte-gouttes. C'est exactement ce que permet de faire la police des chanes. On dfinira donc toujours la police par dfaut des chanes pour utiliser la cible DROP. Cela peut tre ralis simplement avec les trois commandes suivantes : iptables -P INPUT -j DROP iptables -P FORWARD -j DROP iptables -P OUTPUT -j DROP
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 239

M. Elie Degny Raphael

Ces rgles commencent par blinder la passerelle pour ne rien laisser entrer, ne rien laisser passer et ne rien laisser sortir. Dans ce cas, on ne craint plus rien, mais on ne peut plus rien faire non plus (pas mme en local). Aussi faut-il redonner les droits ncessaires pour permettre l'utilisation normale de votre systme. Par exemple, on peut autoriser l'arrive et l'mission de tous les paquets du rseau local avec les rgles suivantes : iptables -A INPUT -s 192.168.0.0/24 -i eth0 -j ACCEPT iptables -A OUTPUT -s 127.0.0.0/8 -o eth0 -j ACCEPT et autoriser la communication des paquets de la machine locale vers la machine locale (ces paquets sont vitaux !) : iptables -A OUTPUT -s 127.0.0.0/8 -o lo -j ACCEPT iptables -A INPUT -d 127.0.0.0/8 -i lo -j ACCEPT Comme vous pouvez le constater, ces rgles ne permettent l'entre des paquets prtendant provenir du rseau local (c'est--dire les paquets ayant comme adresse source une adresse de la forme 192.168.0.0/24) que par l'interface rseau connecte au rseau local (dans notre exemple, il s'agit de l'interface rseau eth0). De mme, seule la machine locale peut mettre des paquets sur le rseau local. Il va de soi que ces paramtres sont trop restrictifs pour raliser une passerelle. Dans ce cas, on devra relcher un peu plus de contraintes, et en utilisant des rgles de filtrages plus fines. On devra autoriser le routage des paquets (chane FORWARD), par exemple en n'autorisant que les paquets provenant d'un ensemble de machines considres comme fiables. Notez que ces rgles sont beaucoup trop restrictives pour permettre un accs Internet (et, a fortiori une intrusion provenant d'Internet...). Les rgles prsentes ici se basent uniquement sur les adresses source et destination des paquets, ainsi que sur les interfaces rseau par lesquelles ils entrent et ressortent. Sachez cependant que l'on peut raliser des rgles beaucoup plus fines, qui se basent galement sur les protocoles rseau utiliss, et, pour chaque protocole, sur des critres spcifiques ces protocoles. Vous pouvez consulter la page de manuel d'iptables pour plus de dtails ce sujet. Exemple de partage de connexion Internet Le masquerading est un cas particulier de translation d'adresse source. En effet, celle-ci est couple un suivi des connexions, afin d'effectuer la translation d'adresses destination des paquets rponse renvoys par les serveurs sur Internet pour les acheminer vers la machine du rseau local qui a initi la connexion. En pratique, seule la chane POSTROUTING sera utilise pour le masquerading, parce que c'est ce niveau que la translation d'adresses est effectue. La mise en uvre du masquerading se fait extrmement simplement, puisqu'il suffit de spcifier que tous les paquets du rseau local sortant de l'interface rseau connecte sur Internet doivent subir le masquerading. En gnral, l'interface de la connexion Internet est une interface PPP, aussi la commande utiliser est-elle simplement la suivante :

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

240

M. Elie Degny Raphael

iptables -t nat -A POSTROUTING -s rseau/24 -o ppp0 -j MASQUERADE O rseau est l'adresse de votre rseau (par exemple, 192.168.0.0). Notez que la commande donne ci-dessus suppose que votre rseau soit de classe C, car le masque de sous-rseau utilis est 255.255.255.0. La cible spcifie pour toutes les paquets provenant de votre rseau local sortant par l'interface ppp0 est donc MASQUERADE, ce qui active la translation d'adresses. Remarquez que les paquets provenant de la machine locale ne subissent pas le masquerading, car c'est compltement inutile. Note : Les chanes et leurs rgles ne sont pas enregistres de manire permanente dans le systme. Elles sont perdues chaque redmarrage de la machine, aussi faut-il les redfinir systmatiquement. Cela peut tre ralis dans les scripts de dmarrage de votre systme. N'oubliez pas que votre passerelle doit dfinir une route par dfaut pour que tous les paquets qui ne sont pas destins au rseau local soient envoys par l'interface rseau connecte Internet. Cette route par dfaut est tablie automatiquement lorsque vous vous connectez Internet l'aide de PPP. Dans les autres cas, vous aurez la dfinir manuellement. Le routage des paquets est, par dfaut, dsactiv sous Linux. Si votre distribution ne le fait pas, vous aurez galement ajouter une ligne telle que celle-ci : # Activation du routage : echo "1" > /proc/sys/net/ipv4/ip_forward Dans vos scripts de dmarrage de votre systme. Assurez-vous que les rgles de filtrage que vous utilisez permettent bien aux machines du rseau local d'accder Internet, et rciproquement, que les machines d'Internet peuvent leur rpondre. Sans cela, toute tentative de masquerading sera voue l'chec, avant mme d'atteindre la chane POSTROUTING. Configuration des clients La configuration des autres machines du rseau est trs simple. Vous devrez tout d'abord dfinir la machine possdant la connexion Internet comme passerelle par dfaut de tous vos postes clients. Cette opration peut se raliser de diffrentes manire selon le systme d'exploitation utilis par ces machines. Sous Linux, il suffit d'utiliser la commande suivante : route add default gw passerelle eth0 O passerelle est l'adresse de votre passerelle vers Internet sur le rseau local. Cette commande suppose que l'adaptateur rseau utilis est eth0 La deuxime tape est ensuite de donner accs aux postes clients au DNS de votre fournisseur d'accs. Cela permettra en effet d'utiliser les noms de machines autres que ceux de votre rseau local. Encore une fois, la manire de procder dpend du systme
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 241

M. Elie Degny Raphael

utilis. Sous Linux, il suffit d'ajouter les adresses IP des serveurs de noms de domaines de votre fournisseur d'accs dans le fichier de configuration /etc/resolv.conf. Configuration des fonctions serveur En gnral, les gens ne voient Internet que du point de vue client en terme d'architecture client / serveur. Cela signifie qu'ils se contentent de se connecter Internet, et n'utilisent que des logiciels clients qui communiquent avec des serveurs situs sur Internet. Ce mode d'utilisation est de loin le plus courant et celui qui convient la majorit des gens, qui n'ont en gnral mme pas conscience de l'existence du monde des serveurs. Cependant, il est parfois ncessaire de mettre en place des petits serveurs, sans forcment tre un fournisseur d'accs Internet ou un hbergeur de site Web. Par exemple, il peut tre intressant de fournir la possibilit de raliser une connexion par tlphone un ordinateur distant que l'on doit laisser allumer pour une raison ou une autre, afin de raliser une opration de maintenance. Il est galement possible de faire une liaison PPP entre deux ordinateurs par un cble srie pour changer des donnes, ou pour relier deux rseaux spars physiquement par l'intermdiaire du rseau tlphonique. Cette section prsente donc les techniques de base permettant de paramtrer Linux pour accepter les communications entrantes, tant pour satisfaire aux demandes de connexions distantes que pour tablir une liaison PPP. Paramtrage des connexions extrieures Nous avons vu dans la la section intitule Configuration des terminaux virtuels dans Chapitre 6 que le programme en charge de demander l'identification des utilisateurs sur les terminaux de login tait le programme getty. Ce programme ne permet aux utilisateurs que de s'identifier. Lorsque quelqu'un saisit son nom, getty se contente de lancer le processus login pour que celui-ci ralise l'authentification de l'utilisateur en lui demandant son mot de passe. En fait, getty peut trs bien lancer un autre programme que login, si l'identification n'est pas ncessaire sur le terminal qu'il gre, mais en gnral, il faut identifier les utilisateurs. Le programme getty est donc le point d'entre par lequel il faut ncessairement passer pour utiliser le systme. Dans le cas des terminaux virtuels, getty utilise une ligne de communication virtuelle, mais il peut parfaitement utiliser une ligne de communication relle (c'est d'ailleurs ce pour quoi il a t conu l'origine). En particulier, il est possible de lancer un processus getty sur une ligne srie, afin de permettre l'utilisation de terminaux rels connects sur le port srie correspondant. La ligne srie sur laquelle le processus getty fonctionne n'est pas forcment connecte un terminal physique. Elle peut parfaitement tre connecte un modem. Dans ce cas, les utilisateurs devront appeler le serveur pour se connecter l'aide d'un logiciel mulateur de terminal. Il existe plusieurs logiciels permettant d'appeler un ordinateur distant et d'muler un terminal. On citera par exemple le logiciel HyperTerminal de
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 242

M. Elie Degny Raphael

Windows, et les programmes Telix et Minicom. Ce dernier est couramment fourni avec les distributions de Linux, car c'est un logiciel libre. En fait, il existe plusieurs variantes de getty, spcialises pour des usages spcifiques, et permettant de faciliter le paramtrage du fichier de configuration /etc/inittab. Les distributions de Linux sont souvent fournies avec les versions suivantes :

mingetty, qui est un getty simplifi, couramment utilis pour les terminaux virtuels ; mgetty, qui est une version spcialement conue pour tre utilise sur les lignes sries connectes un modem. mgetty est en particulier capable d'initialiser les modems, de dcrocher automatiquement la ligne lorsqu'il y a un appel, et de grer les principales commandes des modems compatibles Hayes ; agetty, qui est une version complte de getty, utilisable aussi bien sur les lignes sries (avec ou sans modem) que pour les terminaux virtuels. On utilisera de prfrence cette version si l'on dsire proposer une connexion par l'intermdiaire d'un cble null-modem.

Note : Les cbles null-modem sont des cbles srie symtriques, qui permettent de relier deux ordinateurs par l'intermdiaire de leurs ports srie. Ces cbles peuvent tre trouvs chez la plupart des revendeurs de matriel informatique (vous pouvez galement en fabriquer un vous-mme si vous avez du temps perdre). Connaissant les diverses possibilits de ces programmes, proposer un service de connexion extrieur est relativement simple. Il suffit en effet de rajouter dans le fichier de configuration /etc/inittab les lignes permettant de lancer les programmes getty sur les bonnes lignes. Par exemple, pour offrir une connexion modem sur le deuxime port srie (couramment appel COM2), on ajoutera la ligne suivante : S1:23:respawn:/usr/sbin/mgetty -n 3 -s 38400 ttyS1 Cette commande indique init que mgetty doit tre relanc chaque fois qu'il se termine dans les niveaux d'excution 2 et 3. Il doit prendre le contrle de la ligne srie utilise par le fichier spcial de priphrique /dev/ttyS1, utiliser la vitesse de communication de 38400 bauds sur cette ligne (option -s) et ne dcrocher qu'au bout de la troisime sonnerie (option -n). Vous pouvez bien entendu ajuster ces options en fonction de vos besoins. En revanche, si l'on dsire offrir une possibilit de connexion sur un port srie par l'intermdiaire d'un cble null-modem, on utilisera plutt le programme agetty. La ligne ajouter dans le fichier /etc/inittab sera alors : S1:123:respawn:/sbin/agetty -L 38400 ttyS1 Notez que les options sont quelques peu diffrentes. La vitesse de la ligne est donne directement, et l'option -L indique que la ligne srie utilise est locale et ne gre pas le signal de porteuse CD (abrviation de l'anglais Carrier Detect ) habituellement utilise pour dtecter les coupures tlphoniques. Encore une fois, vous pouvez adapter
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 243

M. Elie Degny Raphael

ces commandes selon vos besoins. N'hsitez pas consulter les pages de manuel des programmes mgetty et agetty pour obtenir plus de renseignements. Note : Vous pouvez tester vos connexions sries l'aide de l'mulateur de terminal minicom. S'il est install sur votre distribution, vous pourrez le lancer simplement en tapant la commande minicom. Si vous l'utilisez sur une connexion directe (c'est--dire par un cble null-modem), vous devrez utiliser l'option -o, afin d'viter que minicom n'envoie les codes d'initialisation du modem sur la ligne srie. Il se peut que vous ne parveniez pas vous connecter sur vos ports srie. Dans ce cas, la premire des choses faire est de regarder les paramtres de la ligne srie l'aide de la commande stty. Vous devriez vous intresser tout particulirement la vitesse utilise, et ventuellement vous assurer que les deux ports srie des deux ordinateurs utilisent la mme vitesse, ou que le modem est capable de grer la vitesse utilise par le port srie. Si besoin est, vous pouvez modifier la vitesse d'un port srie l'aide de la commande stty. Par exemple, pour configurer le port srie COM2 la vitesse de 115200 bauds, vous devez taper la commande suivante : stty -F /dev/ttyS1 ispeed 115200 Configuration des liaisons PPP Le protocole PPP utilis par les fournisseurs d'accs Internet est, comme son nom l'indique ( Point to Point Protocol , ou protocole de liaison point point ), un protocole permettant de relier deux ordinateurs uniquement. Ce protocole est compltement symtrique, et la mise en place d'un serveur PPP n'est pas plus complique que celle d'un client. Les liaisons PPP sont donc couramment utilises pour relier deux rseaux distants par l'intermdiaire des lignes tlphoniques. Lorsque nous avons prsent la configuration des accs Internet, nous avons utilis des options spcifiques ce cas de figure afin de grer le fait que les paramtres rseau sont imposs par le fournisseur d'accs. Dans le cas d'un serveur, ces paramtres ne sont pas ncessaire, puisque nous sommes cette fois la place du fournisseur d'accs. En revanche, certains paramtres supplmentaires devront tre spcifis, notamment pour configurer le modem afin d'accepter les connexions externes. En gnral, il faut lancer une instance du dmon pppd pour chaque ligne srie utilise pour les connexions entrantes, car pppd ne peut grer qu'une seule connexion la fois. Cette technique peut paratre lourde, mais en fait elle est relativement pratique, car elle permet de spcifier des options spcifiques chaque ligne srie. Comme d'habitude, ces options peuvent tre spcifies sur la ligne de commande de pppd, mais elle peuvent galement tre enregistres dans un fichier de configuration. Le fichier de configuration global /etc/ppp/options est gnralement utilis pour stocker les options communes toutes les lignes sries. Les options spcifiques chaque ligne sont enregistres quant elles dans les fichiers options.ttySx, o ttySx est le nom du fichier spcial de priphrique utilis pour accder cette ligne. L'usage de ces fichiers de configuration permet de simplifier notablement les lignes de commandes utilises pour lancer pppd.
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 244

M. Elie Degny Raphael

Cette ligne de commande utiliser pour lancer pppd en mode serveur diffre peu de celle utilise pour tablir une connexion PPP en tant que client. Les deux principales diffrences proviennent du fait que :

le serveur doit spcifier l'adresse IP qu'il utilisera pour l'interface PPP et l'adresse IP qu'il donnera au client lors de l'tablissement de la liaison ; le script chat utilis ne doit pas composer un numro, mais initialiser le modem pour qu'il rponde aux appels entrants.

Les adresses IP sont spcifies en ligne de commande l'aide de la syntaxe suivante : locale:distante o locale est l'adresse IP de l'interface PPP du serveur, et distante est l'adresse IP que le client recevra lorsqu'il se connectera. Il est important que ces deux adresses ne soient pas sur le mme rseau, car les deux machines sont effectivement spares l'une de l'autre ! Un lien PPP ne constitue donc pas un rseau en soi, mais plutt un pont entre deux rseaux distincts. Ainsi, l'option suivante : 192.168.30.1:192.168.31.1 indiquera pppd que l'adresse IP de l'interface PPP locale sera 192.168.30.1, et que les clients qui se connecteront sur la ligne correspondante devront recevoir l'adresse 192.168.31.1. Notez que les adresses utilises ici font partie des adresses IP rserves pour les rseaux locaux. Ce n'est pas ce que font les fournisseurs d'accs Internet en gnral, car ils disposent d'un ensemble d'adresses IP relles redistribuables, mais les adresses rserves sont parfaitement utilisables. Le seul cas o cela pourrait tre gnant serait si l'on voulait faire passer les adresses des deux passerelles de la liaison PPP sur Internet, mais les paquets utilisant ces adresses ne circulent justement que sur cette liaison ( moins que les passerelles ne se trouvent sur des rseaux locaux et utilisent des adresses de ces rseaux pour la liaison PPP, auquel cas, de toutes manires, il faudrait utiliser la technique du masquerading pour connecter ces rseaux sur Internet). Le script d'initialisation du modem, quant lui, peut tre spcifi l'aide de l'option init de pppd. Cette option fonctionne exactement comme l'option connect que l'on a utilise pour tablir la liaison tlphonique dans la la section intitule Cration d'une connexion Internet. La diffrence est ici que l'on ne cherche pas composer un numro de tlphone, mais plutt initialiser le modem pour qu'il dcroche automatiquement la ligne lorsqu'il reoit un appel. Il existe malheureusement plusieurs dialectes de langages de commandes utiliss par les modems. En gnral, chaque modem dispose donc de ses propres commandes, et il faut consulter sa documentation pour savoir leur syntaxe. Malgr cela, ce n'est pas trop gnant, car la plupart des modems sont compatibles avec le standard Hayes, dont les commandes sont bien connues. Pour l'initialisation d'un modem pour un serveur, les commandes d'initialisation suivantes seront trs utiles :

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

245

M. Elie Degny Raphael

Commande ATS0=n AT&C1

AT&K3

Signification Dcrochage automatique si n vaut 1, manuel si n vaut 0. Activation du contrle de la ligne CD ( Carrier Detect ) pour signaler les raccrochages des clients. Cette commande n'est utile que si l'option modem est passe en paramtre pppd sur sa ligne de commande. Activation du contrle de flux matriel (pour optimiser les changes de donnes entre le modem et l'ordinateur). Cette option ncessite d'utiliser l'option crtscts dans la ligne de commande de pppd.

Au final, la ligne de commande utiliser est donc la suivante : pppd port vitesse detach modem crtscts init "/usr/sbin/chat -v \ -f /etc/ppp/script" & o port est le nom du fichier spcial de priphrique utiliser pour cette connexion, par exemple /dev/ttyS0, vitesse est la vitesse de la ligne, par exemple 115200, et /etc/ppp/script est le nom du fichier du script chat devant servir l'initialisation du modem. L'option detach permet de demander pppd de se dtacher du terminal courant, afin que l'on puisse le lancer en arrire plan. Vous trouverez ci-dessous un script chat d'exemple, permettant de spcifier les options vues ci-dessus : "" ATZ OK ATS0=1 OK AT&C1 OK AT&K3 OK "" Note : Vous remarquerez qu'il n'est pas ncessaire, contrairement ce que l'on a vu lors de la configuration d'un client PPP, de spcifier le nom de l'utilisateur et le protocole d'identification et d'authentification utilis. Cela est normal, car le serveur n'a pas s'identifier auprs de la machine cliente en gnral (il peut bien entendu le faire s'il le dsire, mais dans ce cas seuls les clients capables de grer ce type de connexion pourront se connecter). En revanche, il peut tre ncessaire d'exiger que les clients s'identifient et s'authentifient l'aide de l'un des protocoles PAP ou CHAP. Pour cela, il suffit simplement d'ajouter les noms des clients et leurs secrets respectifs dans les fichiers de secrets /etc/ppp/papsecrets et /etc/ppp/chap-secrets, et d'ajouter l'une des options require-pap ou require-chap sur la ligne de commande du dmon pppd. Remarquez que le format des fichiers pap-secrets et chap-secrets est le mme aussi bien pour les connexions entrantes que pour les appels vers l'extrieur. Cela signifie que l'on doit
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 246

M. Elie Degny Raphael

donner d'abord le nom du client, ensuite le nom du serveur, et ensuite son secret et enfin la liste des adresses IP que les clients peuvent utiliser. Remarquez que la colonne spcifiant la liste des adresses IP ne doit pas rester vide lorsqu'on dsire crer un secret pour le serveur. En effet, pppd se base sur l'adresse IP de la machine distante et sur le nom du client pour dterminer le secret utiliser lors de l'authentification. Cependant, si l'on dsire utiliser les mmes secrets pour toutes les lignes (et donc pour toutes les adresses que le client peut se voir imposer), on pourra utiliser une toile. Cela signifie que toutes les adresses correspondront la ligne, et seul le nom du client sera utilis pour dterminer le secret utiliser. Par exemple, si le serveur se nomme monserveur et le poste client s'appelle jdupont, on utilisera la ligne suivante : #Client jdupont Serveur monserveur Secret Adresses gh25k;f *

Lorsque la liaison PPP est tablie, le dmon pppd configure l'interface rseau correspondante. Le protocole utilis par dfaut est bien entendu le protocole IP. En gnral, il est ncessaire de configurer cette interface, afin de spcifier les rgles de routage permettant au client d'envoyer et de recevoir des paquets. Lors de l'tablissement de la liaison, le dmon pppd ajoute automatiquement une rgle de routage pour indiquer que tous les paquets destination de l'adresse du client doivent passer par l'interface ppp de la liaison courante. Cette rgle convient dans la majorit des cas, et en tout cas pour les fournisseurs d'accs Internet, car le client ne dispose que d'une seule machine. En revanche, si la liaison PPP est utilise pour relier deux rseaux, les rgles de routages par dfaut ne suffiront plus, car des paquets destination de toutes les machines du rseau distant doivent tre envoys via l'interface ppp (et inversement). Pour rsoudre ces petits problmes, on devra complter ou modifier les scripts /etc/ppp/ip-up et /etc/ppp/ip-down. Ces deux scripts sont appels par le dmon pppd respectivement lors de l'tablissement de la liaison PPP et lors de sa terminaison. On placera donc les commandes de routage complmentaires dans le script ip-up, et on fera le mnage correspondant dans le script ip-down. Remarquez que ces deux scripts sont communs toutes les interfaces ppp que les diffrents dmons pppd peuvent utiliser. Ils sont galement utiliss lors de l'tablissement d'une connexion en tant que client. Leur modification devra donc tre entoure d'un soin extrme. Afin de distinguer les diffrents cas d'utilisation, ces scripts sont appels avec les paramtres suivants : Paramtre $1 $2 $3 $4 Signification Nom de l'interface rseau (par exemple, ppp0 . Nom du fichier spcial de priphrique de la ligne srie utilise (par exemple, ttyS0 ). Vitesse de la ligne srie. Adresse IP locale de l'interface rseau.
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 247

M. Elie Degny Raphael

Paramtre $5 $6

Signification Adresse IP du client. Paramtre complmentaire, que l'on peut passer au script l'aide de l'option ipparam de pppd. Un script classique fait un test sur le nom de l'interface rseau et ajuste les rgles de routage en fonction de cette interface, en se basant sur les adresses IP locales et distantes reues en paramtre. La plupart des distributions fournissent un script d'exemple que vous pouvez bien entendu modifier soit directement, soit l'aide de leur outil de configuration. Le dmon pppd se termine chaque fois que la liaison PPP se termine. Ce comportement est normal pour un client, mais ce n'est pas gnralement ce que l'on cherche faire pour un serveur. Il faudra donc relancer pppd rgulirement lorsqu'il se terminera. Cela peut tre ralis en ajoutant sa ligne de commande dans le fichier de configuration /etc/inittab dans les niveaux d'excution adquats. Comme init impose une taille rduite sur les lignes de commandes des programmes qu'il peut lancer, il est ncessaire d'utiliser les fichiers d'options de pppd. Par exemple, si l'on veut assurer le service PPP pour une ligne entrante sur le deuxime port srie dans les niveaux d'excution 2 et 3, on utilisera la ligne suivante : ppp1:23:respawn:/usr/sbin/pppd /dev/ttyS1 115200 \ 192.168.30.1:192.168.31.1" avec les options suivantes actives dans le fichier /etc/ppp/options.ttyS1 : # Initialisation du modem : init "/usr/sbin/chat -v -f /etc/ppp/client.ttyS1 # Protocole d'authentification : require-pap # Contrle de la ligne matriel : modem # Contrle de flux matriel : crtscts Liaison de deux ordinateurs par un cble srie La connexion entre deux ordinateurs par l'intermdiaire d'un cble srie est un cas particulier des liaisons PPP. Les techniques utilises sont les mmes, mais plusieurs simplifications importantes peuvent tre faites :

d'options

les deux ordinateurs sont relis directement par un cble null-modem, et aucun modem ne s'intercale pour compliquer les choses. Par consquent, on peut supprimer les scripts chat d'initialisation et de connexion ; on a le contrle physique sur les deux ordinateurs, ce qui implique que les mcanismes d'identification et d'authentification sont superflus. Il est donc inutile de prciser les secrets PAP ou CHAP sur chaque machine ;

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

248

M. Elie Degny Raphael


il n'y a que deux ordinateurs relier, donc les rgles de routages sont lmentaires ; enfin, les adresses choisies sont connues d'avance et peuvent tre spcifies de manire symtrique sur le client et le serveur.

Il dcoule de ces simplifications que l'tablissement d'une liaison PPP au travers d'un cble null-modem est une opration trs facile. Comme vous allez le constater, le protocole PPP est effectivement symtrique. Sur le serveur , il suffit de lancer par exemple la commande suivante : pppd /dev/ttyS0 115200 192.168.30.1:192.168.31.1 detach crtscts & Cette commande permet de lancer le dmon pppd sur le port srie COM1 (fichier spcial de priphrique /dev/ttyS0) en utilisant la vitesse de 115200 bauds (vitesse maximale gnralement supporte par les ports srie des ordinateurs), en utilisant l'adresse IP locale 192.168.30.1 et l'adresse IP distante 192.168.31.1. Le dmon pppd doit se dtacher du terminal, car il est lanc en arrire plan. Enfin, le contrle de flux matriel est utilis (option crtscts). La commande sur le client est absolument symtrique, puisque seules les adresses locales et distantes sont interverties : pppd /dev/ttyS0 115200 192.168.31.1:192.168.30.1 detach crtscts & Bien entendu, le port srie utilis peut tre diffrent de celui du serveur. Une fois ces deux commandes lances, la connexion PPP est tablie. Le dmon pppd ajoute alors automatiquement une rgle de routage pour acheminer les paquets d'un ordinateur l'autre. Vous n'aurez donc pas modifier les scripts /etc/ppp/ip-up et /etc/ppp/ip-down. Comme vous pouvez le constater, l'utilisation de PPP pour relier simplement deux ordinateurs n'est pas une opration trs complique... Installation d'un proxy Lors d'une connexion Internet, bon nombre d'informations sont changes entre le serveur et le client. En particulier, lorsqu'on navigue, un certain nombre d'images et d'informations plus ou moins lentes tlcharger transitent systmatiquement. Or la plupart des gens visitent rgulirement les mmes sites, dont seulement quelques pages sont modifies entre deux visites successives. Par consquent, on peut se demander pourquoi les pages compltes devraient tre recharges chaque visite, si seulement quelques informations ont t modifies. Cette question prend encore plus de sens lorsqu'on ralise un partage de connexion Internet. Il est tout fait concevable que plusieurs clients du mme rseau demandent plusieurs fois les mmes informations, ce qui provoque l'engorgement du lien partag

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

249

M. Elie Degny Raphael

inutilement. C'est pour rsoudre ce genre de problme que les programmes que l'on nomme proxies ont t dvelopps. Un proxy n'est rien d'autre qu'un programme qui s'intercale entre des clients et un serveur. Il a pour principale fonction de mmoriser les rponses les plus courantes renvoyes par le serveur, afin de rpondre la fois plus rapidement au serveur et d'viter de surcharger le serveur. Il existe diffrents types de proxy, mais nous allons nous intresser uniquement aux proxies Web, qui permettent donc de stocker des pages Web en local afin de soulager une liaison trop faible. Le principe de fonctionnement d'un proxy est le suivant. Les navigateurs utiliss par les clients se connectent, en temps normal, directement sur le port 80 des serveurs Web. Leur configuration doit tre modifie pour utiliser le proxy la place. De leur point de vue, le proxy se comporte comme un serveur Web capable de rpondre aux requtes des clients. Lorsqu'il peut le faire, il renvoie les donnes qu'il a stockes dans son cache, sinon, il va les chercher directement sur Internet la place du client. Le cache est maintenu de telle manire que les donnes obsoltes ou les donnes les moins utilises sont supprimes, afin de laisser la place aux donnes qui changent qui sont le plus souvent demandes. Pour utiliser un proxy, il faut donc modifier la configuration des navigateurs des clients, afin de donner l'adresse de la machine sur laquelle le proxy fonctionne, ainsi que le port sur lequel il peut tre contact (gnralement, c'est le port 8080). Il existe plusieurs proxies sur le march, mais le plus utilis sous Linux est sans doute squid. C'est un logiciel performant, puissant et libre, fourni avec la plupart des distributions modernes. Sa configuration peut tre relativement technique, mais nous n'allons pas entrer dans tous les dtails de sa configuration. Il s'agit simplement ici de donner un aperu des fonctionnalits disponibles. squid utilise le fichier de configuration /etc/squid.conf pour lire ses options de fonctionnement. Ce fichier contient en particulier les informations concernant le rseau, une liste de rgles indiquant qui a le droit de lui demander des pages Web, et l'emplacement du cache dans lequel les donnes partages seront enregistres. L'option la plus importante dans ce fichier de configuration est sans doute cache_dir, qui indique l'emplacement du cache ainsi que sa taille et sa structure. La syntaxe de cette option est la suivante : cache_dir rpertoire taille n m O rpertoire est le rpertoire dans lequel le cache sera stock (usuellement /var/squid/cache/), taille est la taille de ce cache en mga-octets, et n et m deux nombres donnant la structure de l'arborescence du cache. La signification de ces deux nombres doit tre explique un peu plus en dtail. Par dfaut, squid essaie de rpartir tous les objets qu'il place dans le cache de manire uniforme dans plusieurs rpertoires, afin d'acclrer les temps de recherche sur ces objets lorsqu'un client les demande. Il utilise cette fin une fonction de rpartition
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 250

M. Elie Degny Raphael

(les programmeurs disent souvent une fonction de hash) qui indique dans quel rpertoire se trouve un objet. La recherche dans ce rpertoire se fait donc plus rapidement, car si la fonction de rpartition est bien faite (et c'est le cas), les objets sont rpartis de manire quilibre dans tous les rpertoires du cache, qui sont donc tous relativement peu peupls. En fait, squid peut stocker tellement d'objets que le nombre de rpertoires peut lui-mme devenir trs grand. Il utilise donc un dcoupage deux niveaux, les rpertoires du deuxime niveau tant rpartis dans les rpertoires du premier niveau. Le premier nombre spcifi dans l'option cache_dir indique le nombre de rpertoire du premier niveau, et le deuxime nombre indique le nombre de sousrpertoires dans chacun de ces rpertoires. En gnral, on utilise respectivement les valeurs 16 et 256 : cache_dir /var/squid/cache 100 16 256 Cette ligne permet de cacher 100 Mo, en rpartissant les objets dans 4096 rpertoires rpartis en 16 groupes de 256 rpertoires. Les options suivantes spcifient les paramtres rseau du cache :

l'option http_port indique le port TCP que les clients doivent utiliser pour accder au proxy ; l'option ftp_user permet de donner l'adresse email utiliser comme mot de passe dans les connexion FTP anonymes ; l'option cache_peer permet d'intgrer le proxy local dans une hirarchie de proxies. Les proxies peuvent en effet tre organiss dans une structure arborescente. Lorsqu'un proxy d'un niveau ne dispose pas d'une donne demande par un client, il peut contacter ses frres pour le cas o ceux-ci auraient cette donne dans leurs caches, ou demander son proxy pre de rcuprer cette donne pour lui. Les proxies communiquent entre eux en utilisant un protocole ddi, le protocole ICP (abrviation de l'anglais Inter Cache Protocol ). En gnral, les petits rseaux ne disposent que d'un seul proxy, l'option cache_peer est donc souvent utilise de la manire suivante : cache_peer pre parent port port_icp options O pre est le nom du cache pre, port est son port, port_icp est le port utiliser pour les communications ICP, et options sont des options complmentaires. Parmi toutes les options possibles, on utilisera le plus souvent l'option default, qui spcifie les valeurs par dfaut des options, et no-query, qui permet de dire au cache de ne pas utiliser le protocole ICP (dans ce cas, le paramtre port_icp sera inutilis) ;

L'option prefer_direct permet d'indiquer au proxy s'il doit chercher avant tout rcuprer lui-mme les donnes qui lui manquent (valeur on) ou s'il doit

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

251

M. Elie Degny Raphael

contacter d'abord son proxy pre (valeur off). Si l'on a spcifi un proxy pre l'aide de l'option cache_peer, on aura intrt utiliser la valeur off ; L'option dns_children permet de donner le nombre de processus en charge de cacher les requtes sur les DNS. Les requtes de DNS font partie des requtes les plus courantes lorsqu'on navigue sur Internet. En effet, la moindre adresse, le moindre lien suivi ncessite une requte DNS. On pourrait limiter ce traffic en installant un serveur DNS local, mais c'est un peu compliqu et peut poser des problmes de scurit. squid propose donc une autre solution, qui consiste cacher les requtes DNS et fournir des processus locaux prenant en charge la rsolution de noms. Plus le rseau local est important, plus il faudra de tels processus, afin que tous les clients puissent obtenir les adresses IP des machines partir de leur noms. La valeur par dfaut est de 5 processus, ce qui devrait convenir dans la plupart des cas.

Les valeurs donnes par dfaut toutes ces options conviennent dans la plupart des cas. Elles sont parfaitement documentes dans le fichier de configuration squid.conf. Par dfaut, squid n'autorise personne accder au cache. Il est donc ncessaire de donner les droits ncessaires pour permettre aux machines de votre rseau d'accder au cache. La gestion de la scurit se fait par l'intermdiaire de ce que l'on appelle des ACL (abrviation de l'anglais Access Control List ). Une ACL est simplement un critre permettant de classifier les requtes que le proxy reoit. Ces critres sont dfinis l'aide du mot-cl acl, suivi du nom de la liste, suivi luimme d'un critre que toutes les requtes concernes par cette ACL devront vrifier. Les critres sont eux-mmes exprims l'aide d'un mot-cl qui indique sur quoi porte le critre et des options de ce critre. Les principaux mots-cls que vous pourrez utiliser sont les suivants :

src, qui permet de filtrer les requtes par les adresses des machines qui les ont mises, en indiquant l'adresse de leur rseau, donne sous la forme adresse/masque ; dst, qui permet de filtrer les requtes par leurs adresses destination ; port, qui permet de slectionner les requtes s'adressant sur les ports fournis en paramtres ; proto, qui permet de spcifier la liste des protocoles utiliss par les requtes ; method, qui permet de slectionner les requtes HTTP par la mthode utilise dans la requte.

Ce tableau n'est pas exhaustif, mais il permet d'avoir une ide des capacits de filtrage des requtes dont dispose squid. Vous trouverez ci-dessous quelques exemples pratiques de dfinitions d'ACL : # ACL caractrisant toutes les machines :
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 252

M. Elie Degny Raphael

acl all src 0.0.0.0/0.0.0.0 # ACL dfinissant la machine locale : acl localhost src 127.0.0.1/255.255.255.255 # ACL dfinissant les machines d'un rseau priv local : acl localnet src 192.168.0.0/255.255.255.0 # ACL caractrisant le proxy lui-mme : acl manager proto cache_object # ACL spcifiant les ports accepts par le proxy : acl safe_ports port 80 21 443 563 70 210 1025-65535 # ACL dfinissant les requtes de connexions : acl connect method CONNECT La dfinition des rgles de scurit utilise les ACL de manire squentielle. Les rgles doivent tre donnes les unes aprs les autres, suivant le format suivant : ressource politique ACL o ressource est un mot-cl indiquant la ressource sur laquelle la rgle de scurit porte, politique est l'action prise pour les requtes vrifiant cette rgle, et ACL une liste d'ACL permettant de spcifier les requtes concernes par cette rgle. La ressource la plus utilise est sans doute le protocole HTTP, que l'on peut spcifier l'aide du motcl http_access. Les actions peuvent tre l'acceptation (mot-cl allow) ou le refus (mot-cl deny) de la requte. Enfin, les requtes concernes par une rgle sont celles qui appartiennent toutes les ACL de la liste d'ACL indique. Vous trouverez ci-dessous quelques exemples de rgles de scurit courantes : # Autorise les accs au gestionnaire de cache local : http_access allow manager localhost # Interdit les accs aux trangers : http_access deny manager gestionnaires de cache

# Interdit les accs pour toutes les requtes provenant de port non autoriss : http_access deny !safe_ports http_access deny connect !safe_ports # Autorise les accs aux clients de la machine locale : http_access allow localhost

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

253

M. Elie Degny Raphael

# Autorise les accs aux machines du rseau local : http_access allow localnet # Politique par dfaut : http_access deny all Notez que si une requte ne correspond aucune rgle, la politique par dfaut utilise par squid est de prendre l'action oppose la dernire rgle spcifie. En pratique, il est plus sage de toujours indiquer une politique par dfaut pour toutes les requtes restantes, par exemple en utilisant l'ACL all dfinie ci-dessus. L'exemple de jeu de rgles de scurit donn ci-dessous convient pour un rseau local d'adresses 192.168.0.0. Vous pouvez bien entendu modifier les options de scurit comme bon vous semble. Encore une fois, rappelons que le fichier de configuration de squid est trs bien documente et que sa lecture est relativement facile. Je ne saurais que trop vous recommander de le consulter si vous dsirez en savoir plus. Configuration d'un serveur DHCP Le protocole DHCP est gr, au niveau serveur, par le dmon dhcpd. Ce dmon se configure par l'intermdiaire du fichier de configuration /etc/dhcpd.conf, dans lequel se trouvent les dfinitions des rseaux configurer, ainsi que les diffrentes informations qui doivent tre communiques aux clients. Ce fichier de configuration peut contenir plusieurs dclarations de rseau diffrentes, chacune tant introduite par le mot-cl subnet. Ces dclarations permettent de dfinir les options pour les clients de diffrents rseaux de manire indpendante, mais si certaines de ces options sont communes tous vos sous-rseaux, vous pouvez les factoriser en tte du fichier dhcpd.conf. Par exemple, le fichier de configuration suivant : # Exemple de fichier de configuration dhcpd.conf : default-lease-time 600; max-lease-time 86400; option subnet mask 255.255.255.0; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.10 192.168.1.100; range 192.168.1.150 192.168.1.200; option broadcast-address 192.168.1.255; option routers 192.168.1.1; option domain-name "monrezo.perso"; } subnet 192.168.53.0 netmask 255.255.255.0 { range 192.168.53.10 192.168.53.254; option broadcast-address 192.168.53.255; option routers 192.168.53.2;

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

254

M. Elie Degny Raphael

option domain-name "autrerezo.org"; } permet de configurer les deux rseaux 192.168.1.0 et 192.168.53.0 en spcifiant un masque de sous-rseau gal 255.255.255.0 et une dure de bail d'adresse IP par dfaut de 10 minutes (option default-lease-time) et maximale d'un jour (option max-lease-time). Vous remarquerez que ces dernires options utilisent la seconde comme unit de temps. Comme vous pouvez le constater, la syntaxe du fichier de configuration dhcpd.conf n'est pas bien complique. Le mot-cl subnet doit tre suivi de l'adresse du rseau sur lesquels les clients configurer par DHCP se trouvent. Le mot-cl netmask doit tre suivi quant lui par le masque de ce sous-rseau. Les adresses IP attribues aux clients peuvent tre choisies dans diffrentes plages de valeurs, chacune tant spcifie par le mot-cl range suivi de l'adresse de dbut et de l'adresse de fin de la plage. Il est galement possible d'attribuer des adresses fixes certaines machines, avec la syntaxe suivante : hardware ethernet 08:00:2b:4c:59:23; fixed-address 192.168.1.101; o les mots-cls hardware ethernet introduisent l'adresse Ethernet de l'interface rseau de la machine cliente, et o fixed-address spcifie l'adresse IP que cette machine doit utiliser pour cette interface. Enfin, un grand nombre d'options peuvent galement tre spcifies afin de dfinir les adresses de diffusion (mot-cl broadcast-address), les adresses des passerelles (mot-cl routers), les noms de domaines (mot-cl domain-name) ou encore les dures des bails accords aux machines clientes (mots-cls default-lease-time et max-lease-time). La liste complte des options utilisables est donne dans la page de manuel dhcpd.conf et je vous invite la consulter si vous dsirez en savoir plus. Lorsque vous aurez rdig le fichier de configuration adapt votre installation, il ne vous restera plus qu' lancer le dmon dhcpd. Celui-ci utilise la syntaxe suivante : dhcpd interface0 [interface1 [...]] o interface0, interface1, etc., sont les interfaces rseau utilises pour accder aux rseaux configurer en DHCP. Ces interfaces doivent tre configures avec des adresses de rseau pour lesquelles il est possible de trouver une section subnet correspondante dans le fichier de configuration /etc/dhcpd.conf. Enfin, la commande de dmarrage du dmon dhcpd pourra tre place dans les fichiers d'initialisation du serveur DHCP. Note : Le dmon dhcpd utilise les fonctionnalits d'accs direct aux cartes rseau et de filtrage des paquets du noyau Linux pour couter sur le rseau les demandes de configuration par DHCP des clients. Par consquent, vous devrez activer ces options dans la configuration du noyau si ce n'est dj fait. Pour cela, il vous faudra cocher les options Packet socket , Packet socket: mmapped IO et Socket Filtering du menu Networking options . Vous devrez galement activer l'option

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

255

M. Elie Degny Raphael

IP: multicasting dans la liste des options pour le protocole IP afin de permettre au dmon d'effectuer des missions de paquets en mode broadcast. Le dtail de la configuration et de la compilation du noyau sera vu dans le Chapitre 9. Systmes de fichiers en rseau L'une des utilits principales d'un rseau est de permettre le partage des fichiers entre plusieurs ordinateurs. Cela ncessite de disposer d'un systme de fichiers rseau sur les machines qui dsirent accder des fichiers d'une autre machine, et d'un programme serveur sur les machines ainsi accdes par les clients. Il existe deux grands standards de protocole pour les systmes de fichiers en rseau. Le premier standard fonctionne quasiment exclusivement sous Unix, il s'agit du protocole NFS (abrviation de l'anglais Network File System ), introduit originellement par Sun Microsystems et repris par la suite par les autres diteurs de systmes Unix. Le deuxime protocole est le protocole SMB (abrviation de l'anglais Server Message Block ), qui a t introduit par Microsoft pour les systmes DOS et Windows. Les deux protocoles sont incompatibles, et si les deux solutions fonctionnent parfaitement en environnements homognes, il est assez difficile de faire communiquer les deux types de systmes. Les principaux problmes proviennent de l'impossibilit d'utiliser le protocole rseau NetBIOS d'IBM sur les machines Unix, et des limitations des systmes Microsoft en ce qui concerne la gestion des utilisateurs, les droits d'accs et les liens symboliques. De plus, la diffrence de gestion des fins de lignes dans les fichiers textes entre Unix et les systmes Microsoft pose des problmes qui peuvent difficilement tre rsolus de manire systmatique. Malgr ces limitations, les machines fonctionnant sous DOS ou Windows peuvent accder aux systmes de fichiers NFS des machines Unix grce des programmes spciaux. Ces programmes sont souvent des extensions propritaires aux systmes Microsoft, et peuvent tre relativement coteux sans pour autant garantir une grande fiabilit et des performances honntes. L'utilisation de NFS sur les machines Windows ne sera donc pas traite ici. Inversement, les machines Unix peuvent accder aux partages Microsoft, mais l encore, il peut se prsenter des difficults. La principale difficult est ici la ncessit d'encapsuler NetBIOS dans le protocole TCP/IP. En effet, le protocole SMB utilise les messages NetBIOS, protocole qui n'est pas gr nativement par les machines Unix. Dans tous les cas, des logiciels complmentaires sont ncessaires. Installation d'un serveur de fichiers NFS L'installation d'un serveur NFS est la solution de prdilection pour le partage des fichiers sous Unix. Il faut savoir cependant que NFS n'offre pas des performances remarquables d'une part, et qu'il ouvre des brches dans la scurit du systme d'autre part. Comme il l'a t dit ci-dessus, l'installation d'un serveur NFS requiert l'utilisation de programmes spcifiques. Plus prcisment, NFS utilise deux dmons pour fournir les
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 256

M. Elie Degny Raphael

services NFS aux machines clientes. Ces deux dmons se nomment respectivement mountd et nfsd . Le premier dmon prend en charge les requtes de montage des systmes de fichiers NFS, et nfsd effectue les requtes d'accs aux fichiers pour les clients. Par ailleurs, ces deux dmons utilisent les mcanismes d'appels de procdure distance RPC (abrviation de l'anglais Remote Procedure Call de Sun Microsystems. Ces services sont dsormais disponibles sur toutes les machines Unix et constitue la norme en la matire. Il est donc galement ncessaire de mettre en place les services RPC avant de lancer les dmons NFS. Le principe de fonctionnement des appels de procdures distance est le suivant. Chaque programme dsirant fournir des services RPC coute sur un port TCP ou UDP pour des requtes ventuelles. Les clients qui veulent utiliser ces services doivent envoyer leurs requtes sur ce port, en prcisant toutes les informations ncessaires l'excution de cette requte : numro de la requte et paramtres de la requte. Le serveur excute cette requte et renvoie le rsultat. Les bibliothques RPC fournissent les fonctions ncessaires pour effectuer le transfert des paramtres et les appels distance eux-mmes. En pratique cependant, les clients ne savent pas sur quel port le serveur RPC attend leurs requtes. Un mcanisme a donc t mis en place pour leur permettre de rcuprer ce port et communiquer ensuite avec le serveur. Chaque serveur RPC est identifi par un numro de programme unique, ainsi qu'un numro de version. Lorsqu'ils dmarrent, les serveurs s'enregistrent dans le systme en prcisant le port sur lequel ils couteront les requtes. Les clients peuvent alors interroger le systme distant pour demander le port sur lequel ils trouveront un serveur donn, partir du numro de programme et du numro de version de celui-ci. Il existe donc un service RPC particulier, nomm portmapper , qui fournit aux clients qui le demandent les numros de ports des autres serveurs. Bien entendu, le portmapper doit tre toujours contactable, ce qui implique qu'il utilise systmatiquement le mme numro de port. Par convention, le portmapper est identifi par le numro de programme 100000, et il coute les requtes des clients sur les ports 111 des protocoles TCP et UDP. La mise en place des serveurs de fichiers passent donc par le lancement de ces trois dmons : le dmon RPC, le dmon mountd et le dmon nfsd. Les fichiers excutables de ces dmons sont respectivement portmap, rpc.mountd et rpc.nfsd. Ils sont normalement placs dans le rpertoire /sbin/ ou /usr/sbin/. Vous devrez donc lancer ces trois dmons sur la machine serveur de fichiers, il est probable que votre distribution fasse le ncessaire dans ses scripts de dmarrage. Note : Il est prvu d'intgrer les fonctionnalits de serveur NFS dans le noyau de Linux. Cependant, le serveur de fichiers du noyau n'est pas encore finalis, et ne sera donc pas dcrit ici. Une fois les dmons lancs, vous pourrez configurer les systmes de fichiers exports par votre serveur. Ces systmes de fichiers sont en fait de simples rpertoires, que vous
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 257

M. Elie Degny Raphael

mettez disposition certaines machines. La liste de ces rpertoires est place dans le fichier de configuration /etc/exports. Chaque ligne de ce fichier caractrise un rpertoire accessible par les autres machines du rseau. Ces lignes utilisent le format suivant : rpertoire machines O rpertoire est le chemin sur le rpertoire exporter, et machines est une liste de machines pouvant accder ce rpertoire. Cette liste contient des noms de machines, des adresses IP ou des noms de rseaux, spars par des espaces. Il est galement possible d'utiliser les caractres gnriques '?' et '*' afin de spcifier des groupes de machines. Des options peuvent tre utilises pour chaque machine, l'aide de la syntaxe suivante : machine(options) O machine est l'une des entres de la liste de machines d'une ligne du fichier exports, et options est la liste des options pour cette entre, spares par des virgules. Les options les plus utilises sont bien entendu ro et rw, qui permettent de fournir cette machine ou ce groupe de machine respectivement un accs en lecture seule et en lecture et criture sur le rpertoire. Le problme fondamental de NFS est la scurit. En effet, les fichiers sont exports par dfaut avec un identificateur d'utilisateur qui est celui qui possde le fichier sur la machine serveur. Or il est tout fait possible que cet identificateur ne correspondent pas au mme utilisateur sur tous les clients. Cela signifie que les utilisateurs des machines clientes peuvent parfaitement avoir accs des fichiers qui ne leur appartient pas sur le serveur. Ce problme est fondamental, aussi faut-il le prendre en considration srieusement. NFS fourni plusieurs solutions pour assurer la scurit sur les systmes de fichiers exports. La premire, qui est aussi la plus restrictive, est d'attribuer les fichiers exports un utilisateur ne disposant de quasiment aucun droit (opration que l'on nomme souvent squashing de l'utilisateur ). Cet utilisateur spcial est l'utilisateur nobody , dont l'identificateur est 65534 par dfaut. Ainsi, tous les clients accdent ces fichiers au nom de l'utilisateur nobody, et ne peuvent donc pas modifier les fichiers du serveur. Le squashing de l'utilisateur root est toujours ralis par dfaut, pour des raisons de scurit videntes. La deuxime solution est nettement moins sre. Elle ncessite de lancer le dmon ugidd sur chaque machine client. Ce dmon est appel par le serveur NFS pour dterminer l'identificateur des utilisateurs du client partir de leur nom. Ainsi, chaque fichier est export avec l'identificateur de l'utilisateur qui porte le mme nom que celui qui possde le fichier accd sur le serveur. Les problmes de scurit poss par cette solution sont normes : rien ne garantit que deux utilisateurs distincts sur deux machines diffrentes ne puissent pas avoir le mme nom d'une part, et un attaquant potentiel peut utiliser le dmon ugidd pour obtenir la liste des utilisateurs de la machine cliente d'autre part (ce qui constitue dj la moiti du travail pour s'introduire dans le systme de la machine cliente). Cependant, cette solution est trs pratique pour les rseaux dont on
www.linux-kheops.com/doc/.../c148.htm Cours de LINUX 258

M. Elie Degny Raphael

contrle chaque machine, condition de restreindre l'accs au dmon ugidd au serveur uniquement, par exemple en ayant recours tcpd. La troisime solution est de dfinir sur le serveur l'association entre les identificateurs des utilisateurs du serveur et les identificateurs du client, ce pour chaque machine cliente. Cette technique est sre, mais nettement plus complique mettre en uvre. Enfin, la dernire solution est d'utiliser les services d'information du rseau NIS (abrviation de l'anglais Network Information Service ), qui permettent de dfinir un certain nombre d'information de manire globale sur un rseau. En particulier, il est possible de centraliser la dfinition des utilisateurs et des mots de passe. Cette solution est trs lourde mettre en uvre, puisqu'elle ncessite de configurer NIS au pralable. Elle n'est donc mise en place que sur les grands rseaux, et un particulier n'a pas de raisons d'y recourir ( moins de vouloir explorer ces mcanismes bien entendu). Nous n'en parlerons donc pas. Toutes ces techniques peuvent tre actives l'aide d'options fournies dans la liste des options pour chaque machine dclares dans le fichier de configuration /etc/exports. Les options utilises sont dcrites ci-dessous :

l'option all_squash permet d'exporter tous les fichiers comme appartenant l'utilisateur nobody. C'est l'option la plus sre, mais aussi la plus restrictive ; l'option map_daemon permet d'utiliser le dmon ugidd, qui doit tre lanc sur les machines clientes et accessibles du serveur. L'accs aux rpertoires exports sera refus si ce dmon ne peut tre contact par le serveur NFS. C'est certainement la solution la plus pratique pour un particulier ; l'option map_static=fichier permet d'utiliser un fichier de correspondance des identificateurs des utilisateurs du serveur NFS sur les identificateurs des utilisateurs de la machine cliente.

Comme on peut le voir, cette dernire option permet de dfinir spcifiquement, pour chaque machine, la correspondance des identificateurs d'utilisateurs. Le fichier fourni en paramtre l'option map_static contient un certain nombre de lignes, chacune dfinissant l'association entre les identificateurs d'utilisateurs de la machine distante et les identificateurs de ces utilisateurs sur le serveur. Ces lignes sont introduites l'aide du mot-cl uid. Il est galement possible de donner les correspondances sur les groupes des utilisateurs avec le mot-cl gid : # Exemple de d'identificateurs : # client serveur uid 0-99 uid 500-1000 1000 gid 0-49 gid 50-100 1000 fichier de correspondance

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

259

M. Elie Degny Raphael

Dans l'exemple donn ci-dessus, les utilisateurs ayant un identificateur compris entre 0 et 99 inclus seront associs l'utilisateur nobody (ils subissent le squashing ). Il en est de mme pour les groupes allant de 0 49. En revanche, les utilisateurs dont les identificateurs vont de 500 1000 sur la machine cliente se voient respectivement considrs comme les utilisateurs d'identificateur 1000 1500 par le serveur NFS. De mme, les groupes d'identificateurs 50 100 sont considrs comme les groupes d'identificateurs 1000 1050. L'exemple qui suit va permettre d'claircir un peu ces notions. Il montre comment les trois types de contrle des identificateurs peuvent tre mis en place, pour trois types de clients diffrents : # Exemple de fichier /etc/exports : # Rpertoire /pub : accessible de tout le monde, avec les droits # de l'utilisateur nobody : /pub (ro,all_squash) # Rpertoire /home : accessible de toutes les machines du rseau local, # avec contrle des utilisateurs effectue par le dmon rpc.ugidd : /home *.monrezo.org(map_daemon) # Rpertoire /usr : accessible par la machine 192.168.5.2, avec mapping # des utilisateurs : /usr 192.168.5.2(map_static=/etc/nfs/192.168.5.2.map) Le fichier /etc/nfs/192.168.5.2.map utilis dans la troisime ligne dfinit la correspondance entre les utilisateurs de la machine 192.168.5.2 et le serveur NFS : # Fichier de correspondance pour 192.168.5.2 : # client serveur uid 0-99 uid 500 507 gid 0-49 gid 50 50 Notez que toute modification du fichier /etc/exports doit tre signale aux dmons mountd et nfsd, pour qu'ils puissent le relire. Cette notification peut tre effectue en envoyant le signal SIGHUP ces deux dmons. Les deux commandes suivantes suffiront effectuer cette tche :

www.linux-kheops.com/doc/.../c148.htm Cours de LINUX

260

M. Elie Degny Raphael

killall -HUP rpc.mountd killall -HUP rpc.nfsd Configuration d'un client NFS Une fois la configuration du serveur NFS effectue, il ne reste plus qu' configurer les postes clients. Bien entendu, la manire de raliser cela dpend du systme utilis. Nous allons voir ici comment accder un rpertoire export par un serveur partir d'une machine fonctionnant sous Linux. Du point de vue du client, les fichiers accds par NFS sont considrs comme des fichiers normaux d'un systme de fichiers classique. Ils sont donc grs directement par le noyau, en tant que systme de fichiers part entire. L'utilisation de NFS est donc directe, pour peu que l'on ait activ les fonctionnalits NFS dans le noyau. Encore une fois, vous devrez modifier la configuration du noyau si celui fourni avec votre distribution ne gre pas les systmes de fichiers NFS (ce qui est fort peu probable). La seule fonctionnalit activer, en plus de la gestion du rseau bien entendu, est l'option NFS filesystem support du menu Net