Vous êtes sur la page 1sur 386

Cours SII

Anne 20112012

Stage dinformatique pour lingnieur

Marc Baudoin

cole nationale suprieure de techniques avances

Cours SII
Anne 20112012

Stage dinformatique pour lingnieur

Marc Baudoin

cole nationale suprieure de techniques avances


32 boulevard Victor - 75739 PARIS CEDEX 15 - France

Marc Baudoin, 2009, 2010, 2011 Ce document est mis disposition selon les termes du contrat c Creative Commons Paternit - Pas dutilisation commerciale - Partage des conditions initiales lidentique 2.0 France :
http://creativecommons.org/licenses/by-nc-sa/2.0/fr/

cbea
Vous tes libre : de reproduire, distribuer et communiquer cette cration au public ; de modier cette cration. Selon les conditions suivantes :

b e a

Paternit. Vous devez citer le nom de lauteur original de la manire indique par lauteur de luvre ou le titulaire des droits qui vous confre cette autorisation (mais pas dune manire qui suggrerait quils vous soutiennent ou approuvent votre utilisation de luvre). Pas dutilisation commerciale. Vous navez pas le droit dutiliser cette cration des ns commerciales. Partage des conditions initiales lidentique. Si vous modiez, transformez ou adaptez cette cration, vous navez le droit de distribuer la cration qui en rsulte que sous un contrat identique celui-ci.

chaque rutilisation ou distribution de cette cration, vous devez faire apparatre clairement au public les conditions contractuelles de sa mise disposition. La meilleure manire de les indiquer est un lien vers cette page Web. Chacune de ces conditions peut tre leve si vous obtenez lautorisation du titulaire des droits sur cette uvre. Rien dans ce contrat ne diminue ou ne restreint le droit moral de lauteur ou des auteurs. Ce qui prcde naffecte en rien vos droits en tant quutilisateur (exceptions au droit dauteur : copies rserves lusage priv du copiste, courtes citations, parodie...).

Patrick Rougeau, qui ma permis de devenir ce que je suis.

Sommaire

Sommaire Avant-propos

9 11

I
1 2 3

Introduction
Le stage dinformatique pour lingnieur Reprsentation et mesure de linformation Premier contact

15
17 23 29

II
4 5 6

Du texte et des diteurs de texte


Le texte et son codage Lditeur de texte Emacs Les diteurs de texte vi et Vim

41
43 53 67

III Linterprteur de commandes


7 8 9 10 Linterprteur de commandes Gestion, organisation et traitement des chiers Commandes, processus et redirections Impression 9

77
79 97 157 207

11 12

Connexion distance Programmation

221 231

IV Cration dun site Web


13 14 15 Formats de documents et historique de la toile HTML, XHTML Feuilles de style CSS

251
253 263 283 331 333 337 341 345 353 355 357 363 367 369 371 373

Annexes A B C Rcapitulatif des commandes des diteurs de texte Rcapitulatif des commandes Rcapitulatif des lments HTML et des proprits CSS

Bibliographie Index Index Du texte et des diteurs de texte Index Linterprteur de commandes Index Cration dun site Web Liste des tableaux Table des gures Table des listages Table des matires

Avant-propos

Former des ingnieurs capables dassurer la conception, la ralisation et la direction de systmes complexes, sous des contraintes conomiques fortes et dans un environnement international. ENSTA PARISTECH

est le support de cours du stage dinformatique pour lingnieur (SII) de lcole nationale suprieure de techniques avances 1 (ENSTA ParisTech), destin enseigner aux futurs ingnieurs les rudiments de lutilisation dun systme informatique. Il se veut le plus universel possible et une grande partie de son contenu sapplique tout environnement informatique sous UNIX.
E DOCUMENT

Certaines particularits propres celui de lENSTA ParisTech doivent nanmoins tre mentionnes. An de les distinguer clairement, elles seront composes comme ce paragraphe, avec une barre verticale grise en bordure de la marge gauche et le logo de lENSTA ParisTech dans celle-ci. En revanche, ce document ne se veut en aucun cas complet ou exhaustif. Il sagit dun document dintroduction que les plus curieux pourront complter par les ouvrages mentionns dans la bibliographie en particulier le livre La machine UNIX [53], qui tait le support du prcdent professeur responsable de ce cours ainsi que par les pages Web indiques en n de certaines sections et qui sont repres par une barre verticale grise en bordure de la marge gauche. Beaucoup de ces pages sont des articles de la version franaise de lencyclopdie Wikipdia. Il peut tre intressant de consulter galement les articles correspondants en anglais accessibles grce llment Autres langues du menu de navigation situ la gauche de chaque page car ils sont parfois plus dtaills. Le ton de ce document est volontairement incisif. Il faut admettre que la situation de linformatique aujourdhui ne laisse augurer rien de bon pour le futur. En effet,
1.
http://www.ensta-paristech.fr/

11

Avant-propos depuis quelques annes, toute diversit a quasiment disparu du march informatique et un ordinateur a maintenant toutes les chances dtre un PC (dont le nombre de constructeurs est de plus en plus restreint) dot dun microprocesseur Intel et fourni obligatoirement avec Windows (quon peut se faire rembourser avec les pires difcults du monde si lon souhaite utiliser un autre systme dexploitation). Aucun autre domaine industriel nest victime dune telle rduction des choix. Accepterait-on, au niveau mondial, de navoir quune poigne de constructeurs automobiles, un seul fabricant de pneus et un seul ptrolier ? videmment non. Cependant, cela ne choque absolument personne au niveau de linformatique... Une certaine diversit existe encore dans linformatique embarque (tlphones mobiles, baladeurs MP3, GPS, botiers de raccordement ADSL, quipements de tlcommunication, sondes spatiales, etc.) mais malheureusement sans que le grand public en ait rellement conscience. Bien entendu, les positions exprimes par lauteur 2 de ce document nengagent que lui.

Comment lire ce document ?


Le stage dinformatique pour lingnieur tant une introduction pratique linformatique, il sera bien plus efcace de lire ce document devant un ordinateur, en reproduisant les exemples et en effectuant les commandes proposes. On a beau regarder le rugby la tlvision, on aura lair malin sur un terrain si on na jamais pratiqu, cest pareil en informatique, on apprend bien mieux en pratiquant. Il est donc vivement conseill de lire la suite de ce document proximit dun ordinateur. Par ailleurs, la version PDF de ce document offre lavantage sur la version imprime que les hyperliens (rfrences croises, liens vers les pages Web) y sont actifs et permettent donc de naviguer plus facilement en son sein et vers les pages Web indiques.

Sur la toile
Le site de rfrence concernant ce cours est :
http://www.babafou.eu.org/ensta/sii/

Vous y trouverez : la dernire version de ce document au format PDF ; le programme des sances de petite classe ; les consignes pour le projet ; les prsentations utilises en cours magistral.
2. Et lauteur en question a quelques avis bien tranchs en matire dinformatique...

12

Avant-propos

Terminologie
Linformatique fait un usage intensif de termes en anglais. On lit parfois et on entend souvent son sujet une sorte de magma mlangeant sans vergogne franais, anglais, nologismes et barbarismes 3 . Jessaierai autant que possible demployer un franais chti, en indiquant les termes anglais quivalents lorsque cela savrera ncessaire.

Pour faire avancer le Schmilblick 4


Je vous invite me faire part de vos remarques concernant ce document par courriel ladresse <babafou+sii@babafou.eu.org> .

3. Jentends rgulirement des gens qui parlent de dlter un chier. Quelle horreur... 4. Comme disait Pierre Dac : Le Schmilblick des frres Fauderche est, il convient de le souligner, rigoureusement intgral, cest--dire quil peut la fois servir de Schmilblick dintrieur, grce la taille rduite de ses gorgomoches, et de Schmilblick de campagne grce sa mostoblase et ses deux glotosifres qui lui permettent ainsi durnapouiller les istioplocks mme par les plus basses tempratures. a cest clair, jusque l !

13

Premire partie

Introduction

1
Le stage dinformatique pour lingnieur

ce soit pour communiquer par courrier lectronique, pour consulter des sites Web, pour rdiger des documents, pour utiliser des bases de donnes, pour faire de la CAO, pour effectuer des simulations, pour programmer, etc. Lordinateur est un instrument incontournable. Nanmoins, on en est venu oublier le but de linformatique. Rappelons que le mot informatique est un mot-valise n de la fusion des mots information et automatique . Si linformatique donne effectivement accs, grce lInternet, une masse dinformation considrable (o il est parfois difcile de faire la part des choses), le ct automatique est bien souvent oubli et un ordinateur nest pour beaucoup quun appareil avec lequel on passe son temps agiter une souris pour dplacer des icnes... Lutilisation dun ordinateur est de plus en plus rptitive alors quelle devrait tre efcace. La faute en revient pour beaucoup aux interfaces graphiques qui, si elles ont lavantage de la simplicit, ont beaucoup perdu en efcacit par rapport ce qui existait avant lintroduction de la souris et des fentres. Lorsquon parle dinterfaces graphiques, cest souvent pour citer leur ergonomie et leur intuitivit. On oublie malheureusement que ce sont deux notions relatives un environnement culturel donn. Utiliser une interface graphique est intuitif lorsquon en connat dj une autre, relativement semblable. Donnez des couverts un Chinois, qui na jamais connu que des baguettes, il aura les pires difcults manger avec. Donnez-moi des baguettes, je nirai par avoir une crampe au poignet. Et chacun vous dira que sa faon de manger est plus ergonomique et intuitive que celle de lautre. Tout est relatif.
http://fr.wikipedia.org/wiki/Informatique

OUT INGNIEUR utilise aujourdhui quotidiennement loutil informatique. Que

1.1

Objectifs du cours

Dans la mesure o une grande partie des cours de lENSTA ParisTech utilise loutil informatique, le premier objectif de ce cours est de permettre aux lves 17

Chapitre 1. Le stage dinformatique pour lingnieur dutiliser au mieux les moyens informatiques de lENSTA ParisTech. Mais nous essaierons nanmoins de dgager des principes gnraux applicables tout systme informatique ds que possible. En particulier, seront abords : lutilisation dun diteur de texte ; linterprteur de commandes sous UNIX ainsi quun certain nombre de commandes usuelles ; la conception de pages Web, ce qui donnera lieu la ralisation dun projet not.

1.2
1.2.1

Quest-ce quun systme dexploitation ?


Gnralits

Un ordinateur est un ensemble de composants matriels destin faire fonctionner des logiciels. Entre ces composants (microprocesseur, disque dur, etc.) et les logiciels dapplication (ceux qui sont visibles pour lutilisateur, tels les logiciels de bureautique), on intercale un logiciel particulier appel systme dexploitation (operating system en anglais). Celui-ci permet de masquer aux logiciels les particularits du matriel, il gre les ressources et arbitre les demandes des logiciels. Il existe plusieurs systmes dexploitation, le plus rpandu (mais certainement pas le mieux conu) tant Windows. Les ordinateurs de lENSTA ParisTech, quant eux, fonctionnent avec un systme dexploitation appel UNIX.
http://fr.wikipedia.org/wiki/Systme_dexploitation http://fr.wikipedia.org/wiki/Liste_des_systmes_dexploitation

1.2.2

UNIX

UNIX a t cr en 1969 dans le cadre dun programme de recherche des Laboratoires Bell. Il emprunte de nombreux concepts un autre systme dexploitation appel Multics (Multiplexed Information and Computing Service). UNIX sappelait dailleurs lorigine Unics (pour Uniplexed Information and Computing Service), par drision pour la complexit de Multics, alors que les crateurs dUnics visaient la simplicit. Distribu trs librement lpoque, UNIX a engendr toute une famille de systmes dexploitation et de nombreux concepts introduits par UNIX ont t repris par dautres systmes dexploitation. Aujourdhui, UNIX nexiste plus en tant que systme dexploitation, il sagit dune spcication laquelle sont conformes un certain nombre de systmes dexploitation. Parmi ceux-ci, on peut citer (par ordre alphabtique) : AIX, lUNIX dIBM ; 18

1.2. Quest-ce quun systme dexploitation ? les drivs de BSD (Berkeley Software Distribution, un UNIX grandement redvelopp par luniversit de Berkeley) : Darwin (qui est au cur de Mac OS X), FreeBSD, NetBSD et OpenBSD ; HP-UX, lUNIX dHP ; Linux, dont il existe de nombreuses distributions (Debian, Fedora, Gentoo, Mandriva, openSUSE, Red Hat, Slackware, Ubuntu, etc.) ; Oracle Solaris, lUNIX dOracle (conu lorigine par Sun Microsystems, entreprise rachete par Oracle en 2010).
http://www.unix.org/ http://fr.wikipedia.org/wiki/UNIX http://fr.wikipedia.org/wiki/Philosophie_dUnix http://www.levenez.com/unix/ http://fr.wikipedia.org/wiki/Type_Unix http://fr.wikipedia.org/wiki/Multics http://fr.wikipedia.org/wiki/AIX http://fr.wikipedia.org/wiki/Berkeley_Software_Distribution http://www.freebsd.org/ http://www.netbsd.org/ http://www.openbsd.org/ http://www.hp.com/go/hpux/ http://www.kernel.org/ http://www.oracle.com/us/products/servers-storage/solaris/ http://cm.bell-labs.com/cm/cs/who/dmr/otherunix.html http://en.wikipedia.org/wiki/The_UNIX-HATERS_Handbook

1.2.3

Pourquoi UNIX lENSTA ParisTech ?

Dans la mesure o lon estime que Windows quipe 95 % des ordinateurs de la plante, pourquoi donc utiliser UNIX lENSTA ParisTech ? Il est en effet raisonnable de penser que les ingnieurs ENSTA ParisTech, dans leur grande majorit, travailleront sur un PC quip de Windows ds leur premier emploi et nauront plus de contact direct avec un systme UNIX. Il y a plusieurs raisons cela. On pourrait dire quon utilisait UNIX lENSTA ParisTech bien avant la premire version de Windows. Bien sr, les ordinateurs navaient rien voir avec ceux daujourdhui et lUNIX de lpoque tait plus dpouill. En particulier, il ne disposait daucune interface graphique. Dailleurs, il est intressant de sarrter un moment sur ce point. Windows a le dfaut dtre un systme conu de manire relativement monolithique, o linterface graphique est indissociable des autres services du systme. Ceci peut sembler comprhensible pour un ordinateur de bureau, dont linterface graphique est llment le plus utilis mais quen est-il pour un serveur ? Un serveur, trs souvent, est un ordinateur sans clavier, sans souris, sans cran, entrepos dans un 19

Chapitre 1. Le stage dinformatique pour lingnieur local rarement visit par des tres humains. En consquence, un serveur est gnralement gr via une connexion distance, habituellement non graphique. On peut alors douter de lutilit dune interface graphique sur un serveur. Pourtant, beaucoup dentreprises ont un parc de serveurs fonctionnant exclusivement sous Windows. Sous UNIX, en revanche, linterface graphique est clairement dissocie du systme dexploitation et elle nest pas ncessaire son bon fonctionnement. Sur les serveurs sous UNIX, elle nest dailleurs simplement pas installe. Voil donc un premier argument en faveur dUNIX : sa conception est bien plus propre que celle de Windows. Et, dans le cadre de lenseignement de linformatique, il est prfrable dtudier des systmes dexploitation bien conus. Pour continuer dans les raisons historiques, UNIX est depuis toujours un systme dexploitation multitche, cest--dire quil est capable de faire fonctionner plusieurs logiciels en mme temps. Il aura fallu attendre Windows 95 pour avoir une bauche de fonctionnement multitche. UNIX est galement un systme dexploitation multi-utilisateur, cest--dire quil permet plusieurs personnes dutiliser le mme ordinateur simultanment, soit par la connexion de plusieurs terminaux sur lordinateur (un terminal est un appareil regroupant un cran et un clavier, voire galement une souris pour les terminaux graphiques), soit au moyen dune connexion via un rseau. Il aura fallu attendre Windows NT 4.0 Terminal Server en 1998 pour quil soit possible douvrir une session distance (uniquement par dport de linterface graphique). Un autre argument en faveur dUNIX est quil en existe des versions gratuites (ce qui est nancirement intressant lorsquon dispose dun parc de 200 ordinateurs, comme lENSTA ParisTech). FreeBSD, Linux, NetBSD et OpenBSD sont disponibles gratuitement. Mieux encore, leur code source est galement disponible, ce qui permet de le dcortiquer des ns pdagogiques. Il faut galement insister sur la scurit des systmes UNIX, bien plus volue que celle de Windows. Il nexiste en effet pas de virus pour UNIX, pas quon ne puisse en concevoir mais leur porte serait extrmement limite en raison des contrles daccs imposs par UNIX. Bref, mme sil faut, avec un ralisme dsabus, reconnatre que de nombreuses entreprises ont une informatique 100 % Windows et que la majorit des ingnieurs ENSTA ParisTech devra sen contenter, les vertus dUNIX pour lenseignement justient pleinement son choix. Par ailleurs, lexprience montre que quelquun matrisant UNIX na aucun mal utiliser Windows. Le contraire est faux...
http://fr.wikipedia.org/wiki/Multitche http://fr.wikipedia.org/wiki/Multi-utilisateur

1.3

Linformatique efcace

Il faut peut-tre relativiser lafrmation premptoire clturant le paragraphe prcdent. Il existe pour UNIX des interfaces graphiques quivalentes, voire suprieures, 20

1.3. Linformatique efcace celle de Windows permettant ses habitus de pouvoir utiliser un systme UNIX de la mme faon. Nanmoins, est-ce la faon la plus efcace dutiliser un systme informatique ? Dans le cas dune utilisation pisodique, cela ne fait pas de diffrence mais, pour une utilisation plus soutenue, il existe des outils bien plus efcaces. En particulier, dans le cadre de ce cours, nous allons utiliser un interprteur de commandes. Un interprteur de commandes est un logiciel dans lequel on exprime par crit ce quon veut faire en tapant des commandes au clavier. La souris ne sert quasiment jamais et il ny a aucun lment graphique (pas dicnes). Les interprteurs de commandes sont utiliss en informatique depuis une cinquantaine dannes, bien avant lapparition des premires interfaces graphiques. On peut estimer quil sagit dun outil barbare et rtrograde, qui ncessite un apprentissage certain et qui na pas les qualits ergonomiques dune interface graphique. Cest en partie vrai. En revanche, linterprteur de commandes est particulirement efcace pour traiter un grand nombre de chiers et enchaner les traitements les uns aux autres, ce que les interfaces graphiques ne font pas ou alors difcilement et de manire limite. En effet, lautomatisation dun ensemble de commandes est trs simple faire (en gros, on les rassemble dans un chier et on soumet ce chier linterprteur de commandes) alors que lautomatisation dun ensemble de clics dans une interface graphique, sil est parfois possible, pose nanmoins des problmes (position des objets sur lcran, diffrences dune version dun logiciel un autre, voire dun ordinateur un autre, traitement des erreurs, etc.).

21

2
Reprsentation et mesure de linformation

ANS UN ORDINATEUR , linformation est reprsente sous forme numrique.

Le microprocesseur ne sachant raliser que des oprations sur des nombres et des dplacements de donnes en mmoire, toute information traiter doit tre exprime sous une forme numrique. En informatique, on ramne donc tout des nombres. Dans ce chapitre, nous allons tudier plusieurs systmes de reprsentation des nombres, en nous limitant aux entiers naturels. Seront en particulier abords les systmes de reprsentation des nombres couramment utiliss en informatique. Nous tudierons galement les units permettant de mesurer la quantit dinformation.

2.1

Reprsentation des nombres

La reprsentation des nombres fait appel un ensemble de signes et des rgles permettant de les associer an de transcrire chaque nombre en une suite de signes. Ces signes et ces rgles forment un systme de numration. Les premiers systmes de numration remontent plusieurs milliers dannes. Les Romains, par exemple, utilisaient le systme de numration que tout le monde connat. Sept lettres ayant chacune une valeur croissante et combines entre elles avec un systme dcriture additif ou soustractif en fonction de la position des lettres, permettent dexprimer les entiers naturels non nuls allant jusqu quelques milliers. Il est difcile avec un tel systme de numration deffectuer des additions et des soustractions, encore plus des multiplications (ne parlons pas des divisions).
http://fr.wikipedia.org/wiki/Systme_de_numration http://fr.wikipedia.org/wiki/Numration_romaine

2.1.1

Systme dcimal

Nous utilisons un systme de numration beaucoup plus efcace que celui des Romains, bas sur la position des chiffres dans la reprsentation dun nombre. Comme 23

Chapitre 2. Reprsentation et mesure de linformation il y a dix chiffres, on appelle cette numration le systme dcimal (quon abrge en dcimal dans le langage courant). Ainsi, le nombre 1 664 doit se comprendre comme : 1 664 = 1 103 + 6 102 + 6 101 + 4 100 De manire gnrale, un nombre dcimal crit sous la forme cn . . . c2 c1 c0 (cn . . . c2 , c1 et c0 tant les chiffres composant le nombre, de gauche droite) doit se comprendre comme :
n i =0

ci 10i

Un tel systme de numration permet deffectuer facilement les oprations arithmtiques usuelles (addition, soustraction, multiplication et division).
http://fr.wikipedia.org/wiki/Systme_dcimal

2.1.2

Notation positionnelle et bases de numration

Dans le systme dcimal, la position de chaque chiffre dans un nombre dtermine donc par quelle puissance de 10 il doit tre multipli. Cette faon de reprsenter les nombres est appele notation positionnelle. Lutilisation des puissances de 10 est un cas particulier, il est possible de gnraliser ce systme de numration en utilisant les puissances de nimporte quel entier suprieur ou gal 2, quon appelle base de numration, et un ensemble de chiffres en nombre gal la base. Ainsi, un nombre en base b crit sous la forme cn . . . c2 c1 c0 (cn . . . c2 , c1 et c0 tant les chiffres composant le nombre, de gauche droite) doit se comprendre comme :
n i =0

ci b i

http://fr.wikipedia.org/wiki/Notation_positionnelle http://fr.wikipedia.org/wiki/Base_(arithmtique)

2.1.3

Systmes de numration utiliss en informatique

Trois systmes de numration utilisant la notation positionnelle sont utiliss en informatique. 24

2.1. Reprsentation des nombres 2.1.3.1 Systme binaire

Le systme binaire (quon abrge en binaire dans le langage courant) utilise la base 2, qui est la plus petite des bases de numration. Les deux chiffres utiliss en binaire sont le 0 et le 1, quon dsigne conjointement sous le nom bit (contraction de langlais binary digit). Par consquent, n bits permettent de reprsenter les nombres allant de 0 2n 1. Pour simplier lcriture des nombres cods sous forme binaire, on utilise dautres bases de numration qui sont des puissances de 2. Ainsi, un nombre binaire cod sur n bits peut galement tre reprsent par un unique chiffre en base 2n . Les systmes de numration utiliss en informatique selon ce principe sont le systme octal (voir le paragraphe 2.1.3.2) et le systme hexadcimal (voir le paragraphe 2.1.3.3). Le binaire est bien adapt la reprsentation des nombres en lectronique (et donc en informatique) parce quil nutilise que deux chiffres, qui sont faciles traduire en phnomnes physiques (prsence ou absence de charge lectrique ou de lumire, tant passant ou non passant, etc.). En informatique, les bits sont gnralement regroups par huit pour former des octets (voir le paragraphe 2.2.1 page suivante).
http://fr.wikipedia.org/wiki/Systme_binaire http://fr.wikipedia.org/wiki/Bit

2.1.3.2

Systme octal

Le systme octal (quon abrge en octal dans le langage courant) utilise la base 8. Les huit chiffres utiliss en octal vont de 0 7 et ont la mme valeur quen dcimal. Un chiffre octal permet de reprsenter un nombre binaire cod sur trois bits (puisque 23 = 8). Loctal est utilis, entre autres, pour la reprsentation numrique des droits daccs aux chiers sous UNIX (voir le paragraphe 8.5.2 page 129).
http://fr.wikipedia.org/wiki/Systme_octal

2.1.3.3

Systme hexadcimal

Le systme hexadcimal (quon abrge en hexadcimal dans le langage courant) utilise la base 16. Les seize chiffres utiliss en hexadcimal vont de 0 9 (et ont la mme valeur quen dcimal) et de A F (quon peut galement crire en minuscules) pour les valeurs de 10 15. Ceci est rsum dans le tableau 2.1 page suivante. Un chiffre hexadcimal permet de reprsenter un nombre binaire cod sur quatre bits (puisque 24 = 16). En informatique, le systme hexadcimal est couramment utilis car il permet de reprsenter les octets sur deux chiffres (voir le paragraphe 2.2.2 page suivante). 25

Chapitre 2. Reprsentation et mesure de linformation hexadcimal dcimal 0 ... 9 0 ... 9 A 10 B 11 C 12 D 13 E 14 F 15

TABLE 2.1 Chiffres utiliss en hexadcimal.

http://fr.wikipedia.org/wiki/Systme_hexadcimal

2.2
2.2.1

Units de mesure de linformation


Loctet

Un bit (voir le paragraphe 2.1.3.1 page prcdente) ne pouvant reprsenter que deux valeurs, il est rarement utilis comme unit de mesure de linformation, mme sil sagit de la quantit lmentaire dinformation utilise en informatique. On lui prfre un ensemble de huit bits, appel octet. Un octet contenant huit bits, il peut donc reprsenter les nombres allant de 0 28 1 = 255.
http://fr.wikipedia.org/wiki/Octet

2.2.2

Reprsentation dun octet en hexadcimal

Lhexadcimal est bien adapt la reprsentation numrique des octets. En effet, chaque demi-octet contenant quatre bits, il peut tre reprsent par un chiffre en base 24 = 16, cest--dire en hexadcimal. Un octet complet peut donc tre reprsent par deux chiffres hexadcimaux, allant de 00 FF (255 en dcimal). Rciproquement, tout nombre pouvant tre reprsent sous la forme de deux chiffres hexadcimaux (cest--dire compris entre 00 et FF) est assur de pouvoir tre stock dans un octet.

2.2.3

Units multiples de loctet

Les units multiples de loctet sont traditionnellement dnies au moyen de puissances de 2, contrairement lusage tabli par le systme international dunits (abrg par la suite en SI), qui utilise des puissances de 10. Ainsi, selon lusage habituel, 1 kilooctet ne contient pas 103 = 1 000 octets mais 10 2 = 1 024 octets. De mme, 1 mgaoctet ne contient pas 106 = 1 000 000 octets mais 220 = 1 048 576 octets et ainsi de suite. An dviter toute confusion, il serait prfrable dutiliser les prxes multiplicatifs indiqus dans la partie droite du tableau 2.2 page suivante. Ainsi, ce quon appelle habituellement kilooctet est en fait un kibioctet. En pratique, ces units sont rarement utilises et lon continue utiliser tort le kilooctet pour dsigner un kibioctet, le mgaoctet pour dsigner un mbioctet, etc. 26

2.2. Units de mesure de linformation Prxe SI Nom kilooctet mgaoctet gigaoctet traoctet ptaoctet exaoctet zettaoctet yottaoctet Symbole ko Mo Go To Po Eo Zo Yo Valeur 103 106 109 1012 1015 1018 1021 1024 Prxe binaire Nom kibioctet mbioctet gibioctet tbioctet pbioctet exbioctet zbioctet yobioctet Symbole Kio Mio Gio Tio Pio Eio Zio Yio Valeur 210 220 230 240 250 260 270 280

TABLE 2.2 Units multiples de loctet.

Les fabricants de disques durs lont dailleurs parfaitement compris. Ainsi, un disque dur vendu comme ayant une capacit de 500 Go, cest--dire 466 Gio, sera reconnu par une grande partie des systmes dexploitation comme disposant dune capacit de 466 Go (en utilisant la dnition traditionnelle et incorrecte du gigaoctet). Bien que la mesure de la capacit du disque dur par le fabricant soit rigoureusement exacte, elle ne correspond malheureusement pas aux habitudes et de nombreux acheteurs se sentent lss en constatant que la capacit annonce par le systme dexploitation est sensiblement infrieure celle annonce par le fabricant du disque dur.
http://fr.wikipedia.org/wiki/Octet http://fr.wikipedia.org/wiki/Systme_international_dunits

27

3
Premier contact

dentrer dans le vif du sujet, il convient de prendre rapidement contact avec les ordinateurs de lENSTA ParisTech et leur environnement. Le fonctionnement extrieur dun ordinateur utilisant le systme dexploitation UNIX est en effet trs semblable celui dautres systmes dexploitation mais certaines particularits doivent tre signales. Nous en proterons pour faire connaissance avec linterprteur de commandes, qui sera tudi plus en dtail au chapitre 7 page 79, an de changer le mot de passe provisoire fourni chaque nouvel utilisateur dun systme informatique, qui doit ltre rapidement an dviter toute tentative dusurpation didentit.
VANT

3.1

La babasse

Dans le jargon des ingnieurs, le terme babasse dsigne un ordinateur 1 . Les ordinateurs de lENSTA ParisTech sont en pratique des PC, identiques ceux quon peut trouver dans le commerce, cette diffrence prs que leur systme dexploitation est UNIX (plus prcisment, cest lune des distributions de Linux) et non pas Windows. Ils sont quips de claviers AZERTY, comme il est dusage en France.

3.1.1

Le clavier

Lhabitude est pourtant dutiliser des claviers QWERTY sous UNIX car de nombreux signes frquemment utiliss y sont directement accessible alors que leur saisie ncessite lutilisation de la touche Shift ou de la touche AltGr sur un clavier AZERTY. Par ailleurs, les symboles utiliss en programmation (parenthses, crochets, accolades, par exemple) sont regroups par paire et sont aisment accessibles sur un clavier QWERTY, ce qui nest pas le cas sur un clavier AZERTY, o ces symboles sont parpills faon puzzle. On pourrait objecter que les claviers QWERTY ne
1. Jai cru comprendre qu Lyon, le mme terme dsignait un ipper et que Frdric Dard lutilisait de faon particulirement potique...

29

Chapitre 3. Premier contact disposent pas des touches permettant de saisir directement les lettres accentues utilises en franais (du moins les claviers amricains parce que les Qubcois utilisent des claviers QWERTY adapts notre langue) mais il existe plusieurs mthodes pour saisir des lettres accentues avec un clavier QWERTY. Il est noter quil nexiste travers le monde que trois dispositions rpandues pour les claviers utilisant lalphabet latin. La disposition QWERTY, utilise dans quasiment tous les pays (avec des variantes en fonction des caractres propres chaque langue), la disposition AZERTY, utilise en France et en Belgique, et la disposition QWERTZ, utilise en Allemagne et dans plusieurs pays dEurope centrale. Les diffrences entre ces trois dispositions sont par ailleurs peu nombreuses, quelques lettres tant seulement places des endroits diffrents sur le clavier. Les dispositions AZERTY et QWERTZ sont en effet drives de la disposition QWERTY, mise au point dans les annes 1870 an de ralentir la frappe pour viter des blocages mcaniques sur les premires machines crire, ce qui est un comble maintenant que les mmes claviers sont utiliss sur des ordinateurs qui ne prsentent videmment pas ce genre de problme. Il existe bien des dispositions, dites dispositions Dvorak, du nom de leur inventeur, permettant une frappe rapide mais elles sont peu utilises. Les dispositions Dvorak sont bases sur lanalyse frquentielle des caractres, qui varie en fonction de la langue et il existe donc une disposition pour chaque langue. La disposition bpo, inspire des dispositions Dvorak, a t conue au cours des annes 2000 spciquement pour la saisie du franais. Enn, remarquez que lutilisation de la touche Caps Lock et dune lettre accentue gnre sous UNIX la majuscule accentue correspondante (ce qui est ncessaire lcriture dun franais correct, contrairement une croyance rpandue, voir dans la bibliographie le Lexique des rgles typographiques en usage lImprimerie nationale, page 12, et Orthotypographie, rubrique Accentuation 2 ). Sous Windows, cela est facile pour laccent circonexe et le trma, qui sont obtenus grce une touche morte, mais la saisie des autres majuscules accentues ncessite une gymnastique particulirement dsagrable.
http://fr.wikipedia.org/wiki/Disposition_des_touches_des_claviers_ informatiques http://fr.wikipedia.org/wiki/AZERTY http://fr.wikipedia.org/wiki/QWERTY http://fr.wikipedia.org/wiki/QWERTZ http://fr.wikipedia.org/wiki/Disposition_Dvorak http://bepo.fr/ http://fr.wikipedia.org/wiki/Disposition_bpo http://www.artlebedev.com/everything/optimus/

2.

http://www.orthotypographie.fr/volume-I/academie-accentuation.html#Accentuation

30

3.2. Le compte

3.1.2

Le gestionnaire dafchage

Le gestionnaire dafchage (display manager en anglais) est le logiciel qui contrle louverture dune session (voir le paragraphe 3.3 page suivante) sur un ordinateur, cest--dire le fait de pouvoir lutiliser au moyen de son cran, de son clavier et de sa souris. Le gestionnaire dafchage apparat sur lcran de tout ordinateur disponible. Le gestionnaire dafchage utilis lENSTA ParisTech est reprsent dans la gure 3.1.

FIGURE 3.1 Gestionnaire dafchage utilis lENSTA ParisTech.

http://en.wikipedia.org/wiki/X_display_manager_(program_type)

3.2

Le compte

Avant de pouvoir utiliser un ordinateur sous UNIX, il faut y disposer dun compte (account en anglais). Ceci comprend : un identiant (login en anglais) ; un mot de passe (password en anglais) ; un espace de stockage pour vos chiers, quon appelle rpertoire personnel (home directory en anglais). 31

Chapitre 3. Premier contact Ce compte est cr par le service informatique. Le mot de passe qui vous est fourni la cration de votre compte est provisoire et il convient den changer rapidement (voir le paragraphe 3.6 page 36) pour un mot de passe connu de vous seul.
http://fr.wikipedia.org/wiki/Compte#Informatique

3.3

Ouverture de session

Une session reprsente le fait dattribuer des ressources informatiques un utilisateur. Dans notre cas, il sagit de pouvoir utiliser un ordinateur au moyen de son cran, de son clavier et de sa souris. Louverture de session se fait en saisissant son identiant et son mot de passe dans le gestionnaire dafchage. Selon les environnements, le mot de passe napparat pas lcran ou alors seulement sous forme de points ou dastrisques, pour des raisons videntes de condentialit. Attention, UNIX fait la diffrence entre majuscules et minuscules dans lidentiant et le mot de passe. Si lidentiant et le mot de passe sont corrects, lutilisateur se retrouve dans un environnement de bureau (voir le paragraphe 3.4.4 page 34), qui est lun des composants de linterface graphique.
http://fr.wikipedia.org/wiki/Session_(informatique)

3.4

Linterface graphique

Linterface graphique sest rpandue partir du milieu des annes 1980. En microinformatique, lintroduction du Macintosh, en 1984, a marqu le dbut de lre de linterface graphique. La premire version de Windows, en 1985, est passe plutt inaperue et il a fallu attendre Windows 3.0, en 1990, pour que linterface graphique se gnralise sur PC. Sous UNIX, linterface graphique repose habituellement sur le X Window System, dont la premire version date de 1984.
http://en.wikipedia.org/wiki/History_of_the_graphical_user_interface

3.4.1

X Window System

X Window System (galement connu sous les noms X11 et X, nous utiliserons ce dernier par la suite) est un ensemble logiciel permettant la gestion des services de base de linterface graphique sous UNIX. X sait uniquement afcher des fentres, grer les interactions avec lutilisateur (dplacement de la souris et utilisation de ses boutons, saisie au clavier) et dessiner des objets graphiques lmentaires (pixels, lignes, rectangles, arcs de cercle ou dellipse, texte). 32

3.4. Linterface graphique Le serveur X est le logiciel qui contrle lafchage sur lcran et qui gre le clavier et la souris. Les clients X sont les logiciels qui utilisent le serveur X pour permettre leur afchage. Serveur X et clients X peuvent fonctionner sur des ordinateurs diffrents et communiquer via le rseau informatique. En pratique, lorsquon travaille sur un ordinateur (celui sur lequel fonctionne le serveur X), on peut donc excuter des logiciels (les clients X) sur dautres ordinateurs et les faire safcher sur son cran. Si lon travaille sur un poste de bureau banal, on peut donc excuter des logiciels rclamant une grande puissance de calcul sur des serveurs adquats et les faire safcher sur lcran de son poste.
http://www.x.org/ http://en.wikipedia.org/wiki/X_Window_System

3.4.2

Les botes outils

Comme indiqu prcdemment, X ne sait dessiner que des objets graphiques lmentaires. Il ne sait pas ce quest un bouton, un menu, ou tout autre composant dinterface graphique (widget en anglais). Pour cela, on lui superpose une bote outils (toolkit en anglais), qui va permettre de grer des composants dinterface graphique. Les botes outils les plus rpandues aujourdhui sont GTK+ et Qt. Une bote outils utilise les services de bas niveau fournis par X pour proposer des services de plus haut niveau au logiciel qui lutilise. Par exemple, lafchage dun bouton par une bote outils utilise des tracs de rectangles de diffrentes couleurs pour obtenir un effet de relief. Une telle architecture, compose de plusieurs niveaux et o chaque niveau utilise les services fournis par le niveau infrieur pour proposer des services plus complexes au niveau suprieur, est dite architecture en couches. Ce type darchitecture est trs utilis en informatique.
http://fr.wikipedia.org/wiki/Composant_dinterface_graphique http://fr.wikipedia.org/wiki/Xaw http://www.opengroup.org/motif/ http://fr.wikipedia.org/wiki/Motif_(bibliothque_graphique) http://en.wikipedia.org/wiki/XView http://www.gtk.org/ http://fr.wikipedia.org/wiki/GTK+ http://qt.nokia.com/ http://fr.wikipedia.org/wiki/Qt

33

Chapitre 3. Premier contact

3.4.3

Le gestionnaire de fentres

Le gestionnaire de fentres (window manager en anglais) est le logiciel qui entoure les fentres dune bordure permettant de les dplacer et den modier les dimensions. Il permet galement de saffranchir des limites imposes par la taille de lcran en proposant des bureaux virtuels. Un bureau virtuel (virtual desktop en anglais) est un espace de la taille de lcran o lon peut agencer ses fentres comme on le fait habituellement. Nanmoins, dans la mesure o lon dispose de plusieurs bureaux virtuels, il nest pas ncessaire de superposer ses fentres lorsquil y en a beaucoup, on peut tout fait les rpartir sur plusieurs bureaux virtuels an davoir sur chacun des fentres juxtaposes et non superposes, ce qui vite davoir chercher la fentre dont on a besoin et qui, bien videmment, est cache sous plusieurs autres fentres. Certains gestionnaires de fentres disposent galement de barres doutils places le long dun ou de plusieurs bords de lcran.
http://fr.wikipedia.org/wiki/Gestionnaire_de_fentres http://fr.wikipedia.org/wiki/Bureau_virtuel_(interface_graphique) http://xwinman.org/

3.4.4

Lenvironnement de bureau

Un environnement de bureau (desktop environment en anglais) est un ensemble logiciel comprenant un gestionnaire de fentres, un gestionnaire de chiers et diverses applications utilisant la mme bote outils an davoir une apparence cohrente. Sous UNIX, les environnements de bureau les plus rpandus sont GNOME, KDE et Xfce. Lenvironnement de bureau utilis par dfaut lENSTA ParisTech, reprsent dans la gure 3.2 page suivante, est GNOME. Il est possible de choisir dautres environnements depuis le gestionnaire dafchage.
http://fr.wikipedia.org/wiki/Environnement_de_bureau http://www.gnome.org/ http://fr.wikipedia.org/wiki/GNOME http://www.kde.org/ http://fr.wikipedia.org/wiki/KDE http://www.xfce.org/ http://fr.wikipedia.org/wiki/Xfce

3.5

Linterprteur de commandes

Mme sil sera tudi au chapitre 7 page 79, il est ncessaire de prsenter ds maintenant les rudiments du fonctionnement de linterprteur de commandes. 34

3.5. Linterprteur de commandes

FIGURE 3.2 Environnement de bureau utilis lENSTA ParisTech.

Dans lenvironnement de bureau GNOME utilis lENSTA ParisTech, le lancement de linterprteur de commandes seffectue en cliquant sur le fond de lcran avec le bouton droit de la souris puis en choisissant llment Ouvrir un terminal . Linterprteur de commandes ouvre une fentre quasiment vide, lexception de sa premire ligne qui contient une invite (prompt en anglais) suivie du curseur symbolisant lemplacement du prochain caractre qui sera tap au clavier. Linvite est un repre visuel indiquant que linterprteur de commandes attend que lutilisateur lui ordonne quoi faire. La signication du contenu de linvite sera dtaille au paragraphe 7.2.2 page 83. Pour simplier les choses, nous utiliserons simplement par la suite $ comme invite. Lorsquon tape la commande date (ce que lutilisateur tape au clavier est gur en gras dans les exemples), suivie de la touche Enter , linterprteur de commandes afche la ligne suivante la date et lheure puis une nouvelle invite, indiquant quil attend nouveau que lutilisateur lui demande quelque chose :
$ date Enter Thu Jun 25 15:16:19 CEST 2009 $

Ceci nous sufra pour le moment. Rendez-vous au chapitre 7 page 79 pour de nouvelles aventures. 35

Chapitre 3. Premier contact

3.6

Changement du mot de passe

Avant toute chose, il faut choisir un nouveau mot de passe. Lobjectif du mot de passe est de protger laccs votre compte, il est donc essentiel que ce mot de passe ne puisse pas tre facilement devin par autrui. Il existe galement des logiciels qui tentent de trouver les mots de passe en essayant diverses combinaisons partir de mots du dictionnaire, ce qui rend le choix du mot de passe encore plus difcile. Certains systmes informatiques imposent une longueur minimale, la prsence dau moins quelques lettres (attention, on fait la diffrence entre majuscules et minuscules), chiffres ou signes de ponctuation. En particulier, lENSTA ParisTech, le mot de passe doit respecter les contraintes suivantes : comprendre entre 8 et 20 caractres ; comporter au moins 4 caractres diffrents ; contenir au moins une lettre minuscule ; contenir au moins un chiffre. En revanche, il faut viter les lettres accentues, car elles peuvent tre codes diffremment dun systme un autre (voir le paragraphe 4.3 page 45). Comment donc choisir un bon mot de passe ? Un bon mot de passe est un mot de passe sufsamment compliqu pour quil ne puisse pas tre devin mais avec un truc qui permette de sen souvenir. En effet, si lon oublie son mot de passe, il ny a aucun moyen technique simple pour le retrouver, il faut demander au service informatique de le rinitialiser. Pour viter cela, il ne faut surtout pas noter son mot de passe quelque part (le grand classique est le pense-bte coll sur lcran ou sous le clavier), il faut sen souvenir, cest tout. Quels trucs peut-on donc utiliser pour se souvenir de son mot de passe ? Chacun a les siens mais voici quelques exemples : une formule mathmatique, physique ou chimique, par exemple eipi+1=0 (ei + 1 = 0, identit dEuler) ou CnH2n+2 (Cn H2n+2 , formule des alcanes non cycliques) ; les initiales de chaque mot dune citation, dun proverbe ou dun vers, par exemple Qjaafa1nuas! (Que jaime faire apprendre un nombre utile aux sages !) ; une phrase en criture phontique ou approximative, par exemple Jai2loq (que la dcence minterdit dexpliquer). Par ailleurs, plus un mot de passe est ancien, plus il a de chances dtre dcouvert. Il convient donc den changer rgulirement. Certains centres informatiques imposent leurs utilisateurs de changer leur mot de passe intervalle rgulier. Ce nest pas le cas lENSTA ParisTech mais ce nest pas une raison pour passer toute votre scolarit avec le mme mot de passe. 36

3.6. Changement du mot de passe Enn, vitez de changer votre mot de passe le soir, en n de semaine ou avant de partir en vacances. Le fait de ne pas lutiliser tout de suite est propice son oubli. Il est maintenant possible de changer votre mot de passe. Pour cela, utilisez la commande passwd (pour password) :
$ passwd Enter Changing password for user sii. Enter login(LDAP) password: mot de passe actuel Enter New UNIX password: nouveau mot de passe Enter Retype new UNIX password: nouveau mot de passe Enter LDAP password information changed for sii passwd: all authentication tokens updated successfully. $

Enter

Il vous est demand de saisir (chaque saisie est valider au moyen de la touche ):

1. votre mot de passe actuel ; 2. votre nouveau mot de passe (une premire fois) ; 3. votre nouveau mot de passe (une seconde fois). Aucun des trois mots de passe napparat lcran, ni de manire directement lisible, ni en afchant quelque chose (un gros point ou un astrisque) la place de chaque caractre. Ceci est parfaitement normal et a pour but de ne fournir aucune information concernant les mots de passe, pas mme leur longueur, un observateur indiscret. Notez galement que le nouveau mot de passe est saisir deux fois lidentique pour se prmunir dune possible erreur dinattention lors de sa saisie ou de lappui inopin sur une mauvaise touche. Si la commande passwd nafche pas de message derreur et revient linvite, votre mot de passe a t correctement chang. Dans le cas contraire, le message derreur indique la nature du problme, par exemple :
$ passwd Enter Changing password for user sii. Enter login(LDAP) password: mot de passe erron Enter LDAP Password incorrect: try again Enter login(LDAP) password:

ou bien : 37

Chapitre 3. Premier contact

$ passwd Enter Changing password for user sii. Enter login(LDAP) password: mot de passe actuel Enter New UNIX password: nouveau mot de passe Enter BAD PASSWORD: it is too short New UNIX password:

ou bien encore :
$ passwd Enter Changing password for user sii. Enter login(LDAP) password: mot de passe actuel Enter New UNIX password: nouveau mot de passe Enter Retype new UNIX password: mot de passe diffrent Enter Sorry, passwords do not match. New UNIX password: http://fr.wikipedia.org/wiki/Mot_de_passe http://en.wikipedia.org/wiki/Passwd_(command)

3.7

Verrouillage et n de session

Si vous quittez temporairement ou dnitivement lordinateur que vous utilisez, il est respectivement ncessaire de verrouiller ou de fermer votre session. En effet, en votre absence, nimporte qui pourrait lutiliser et, en particulier, manipuler vos chiers, ce qui nest pas souhaitable. Le verrouillage de la session permet de la protger des curieux en masquant lcran. Il est ensuite ncessaire de saisir votre mot de passe pour dverrouiller la session. Fermer la session permet de revenir au gestionnaire dafchage. Quelquun dautre peut alors se connecter pour utiliser lordinateur. Le verrouillage de la session na de sens que si vous vous absentez pendant peu de temps (ce qui est toujours subjectif). En cas dabsence plus longue, fermer la session est prfrable car ceci permet quelquun dautre de pouvoir utiliser lordinateur. Dans lenvironnement de bureau GNOME utilis lENSTA ParisTech, ces oprations seffectuent en allant dans le menu Systme , en haut de lcran, puis en choisissant : soit llment Verrouiller lcran ; soit llment Fermer la session . Encore une fois, il est impratif de verrouiller ou de fermer la session en cas dabsence sinon gare aux JBM... 38

3.8. Lenvironnement informatique de lENSTA ParisTech Nteignez lordinateur en aucun cas. Non seulement, cela ncessite dutiliser une procdure non accessible aux utilisateurs mais lordinateur peut tre utilis par quelquun dautre via le rseau (voir ci-aprs).

3.8

Lenvironnement informatique de lENSTA ParisTech

Tous les ordinateurs de lENSTA ParisTech sont relis entre eux par un rseau local, lui-mme reli lInternet. Les ordinateurs des salles de cours sont banaliss, cest--dire que vous pouvez les utiliser indiffremment au moyen du mme identiant et du mme mot de passe. Vous retrouverez alors vos chiers et votre environnement de travail. Ceci est possible en raison de lutilisation dun systme dauthentication centralis (qui fait que tous les ordinateurs peuvent reconnatre identiant et mot de passe) et de serveurs de chiers (qui font que vos chiers ne sont pas stocks sur les ordinateurs des salles de cours mais sur ces serveurs, eux-mmes accds par ces ordinateurs). En revanche, les ordinateurs des salles de cours ne sont pas tous semblables, certains sont plus anciens (donc moins puissants) que dautres. Nanmoins, il est possible de se connecter via le rseau dun ordinateur un autre (pour exploiter les capacits dun ordinateur plus puissant mais situ dans une salle de cours loigne, par exemple), de lancer des logiciels sur lordinateur distant et de les faire safcher sur lcran du sien. Cest en particulier pour cela quil ne faut pas teindre un ordinateur, quelquun dautre peut lutiliser distance. Sur un rseau informatique, chaque ordinateur est repr au moyen dun nom, choisi arbitrairement. Celui-ci est afch dans le gestionnaire dafchage. lENSTA ParisTech, pour faire simple, les noms des ordinateurs sont construits partir du nom de la salle, suivi dun numro partir de 1, croissant selon la disposition des ordinateurs dans la salle. Par ailleurs, de nombreuses informations concernant lenvironnement informatique de lENSTA ParisTech sont accessibles, aprs identication et authentication avec les mmes identiant et mot de passe que pour utiliser son compte, sur le site du service informatique dition :
https://sie.ensta.fr/

39

Deuxime partie

Du texte et des diteurs de texte

4
Le texte et son codage

UNIX, on aime bien manipuler des chiers contenant du texte et on ramne beaucoup de choses cela. Par exemple, l o sous Windows, beaucoup de logiciels se congurent exclusivement au moyen de formulaires contenant des boutons cliquer et des cases remplir, stockant le rsultat on ne sait o ni de quelle faon, sous UNIX, on prfre utiliser un chier contenant ces informations sous forme de texte (quitte avoir des formulaires graphiques permettant de gnrer ce chier pour les utilisateurs novices). Lavantage des chiers texte est quils sont facilement comprhensibles et quil est possible au besoin de gnrer ou de modier de tels chiers par des procdures automatiques, ce qui est impossible faire si la seule faon de grer ces informations est dutiliser une interface graphique.
OUS

4.1

Le texte, cest quoi ?

Avant de poursuivre, il faut dnir un certain nombre de choses et comprendre ce quon entend par texte . Tout dabord, un chier texte est, tout simplement, un chier qui contient du texte. Mais alors, un chier Word, qui contiendrait par exemple un document tout simple, sans images, est-il un chier texte ? Vous pouvez faire lexprience, ouvrez Word, tapez coucou suivi dun retour la ligne, sauvez le document et regardez la taille du chier. Faute 1 de disposer de Word, OpenOfce fait galement laffaire, condition de sauvegarder le chier au format Word 97/2000/XP, ce qui produit un chier dun peu plus de 9 ko. Nous reviendrons dessus mais, gnralement, un caractre est cod sur un octet et, coucou faisant six caractres, notre chier devrait donc avoir une taille avoisinant les sept octets (en comptant le retour la ligne), en tout cas de cet ordre de grandeur. Si la taille du chier est de 9 ko, cest quil contient bien plus que son contenu visible. En pratique, cest le cas, un chier Word contient
1. Mais est-ce vraiment une faute ?

43

Chapitre 4. Le texte et son codage galement des informations sur lauteur dun document, ses versions successives, les informations de prsentation (gras, italique, savoir si un paragraphe est justi, etc.). Un chier Word nest donc pas un chier texte, bien quil en contienne un peu. On peut alors afner notre dnition en disant quun chier texte est un chier qui ne contient que du texte. Cest un peu mieux. Il nous reste encore dnir ce quest un chier et ce quest du texte.
http://fr.wikipedia.org/wiki/Fichier_texte

4.2

Quest-ce quun chier ?

Pour quasiment tous les systmes dexploitation, dont UNIX, un chier est simplement une suite doctets (voir le paragraphe 2.2.1 page 26) donc de nombres entre 0 et 255. La signication qui est faite de ces nombres dpend du format du chier. Considrons le chier indiqu en gure 4.1 (les espaces et retours la ligne ne sont l que pour en faciliter la lecture).
10 10 76 70 74 84 77 32 48 97 64 76 76 76 70 74 84 77 32 48 97 64 64 76 76 70 74 84 77 32 48 97 97 64 76 76 70 74 84 77 32 48 48 97 64 76 76 70 74 84 77 32 32 48 97 64 76 76 70 74 84 77 77 32 48 97 64 76 76 70 74 84 84 77 32 48 97 64 76 76 70 74 74 84 77 32 48 97 64 76 76 70 70 74 84 77 32 48 97 64 76 76

FIGURE 4.1 Exemple de chier. Sans informations supplmentaires sur sa nature, ce chier pourrait contenir nimporte quoi : la temprature de mon four mesure toutes les minutes, la vitesse du vent pendant une tempte... Maintenant, disons que ce chier contient une image en niveaux de gris. Les deux premiers octets indiquent sa largeur et sa hauteur (ce qui limite de fait la taille des images 256 pixels par 256 mais ce nest pas bien grave) et les octets suivants indiquent le niveau de gris du pixel en question : 0 pour noir, 255 pour blanc, en passant par tous les gris intermdiaires. Cet ensemble dinformations, permettant de savoir comment interprter les octets dun chier, cest ce quon appelle son format. 44

4.3. Codage du texte On peut poursuivre en imaginant un format pour des images en couleurs, indiqu en gure 4.2.
10 10 --- --- --- --- --- --- --- --- --- ----- --- --- --- --- --- --- --- --- ----- --- --- --- --- --- --- --- --- ----- --- --- --- --- --- --- --- --- ----- --- --- --- --- --- --- --- --- ----- --- --- --- --- --- --- --- --- ----- --- --- --- --- --- --- --- --- ----- --- --- --- --- --- --- --- --- ----- --- --- --- --- --- --- --- --- ----- --- --- --- --- --- --- --- --- ---

FIGURE 4.2 Exemple de chier contenant une image en couleurs. Il sagit toujours dune image de 10 pixels par 10, chaque bloc de trois octets (ici, chaque tiret gure un octet) reprsente un pixel et, dans chaque bloc, le premier octet le niveau de rouge (entre 0 et 255), le deuxime le niveau de vert et le troisime le niveau de bleu (en synthse additive des couleurs).
http://fr.wikipedia.org/wiki/Fichier_informatique http://fr.wikipedia.org/wiki/Format_de_donnes

4.3

Codage du texte

De la mme faon, on peut vouloir reprsenter du texte sous forme dune suite de nombres et stocker tout ceci dans un chier. Il sagira donc dun chier au format texte (ou chier texte, on y arrive). chaque caractre, on associe un nombre, cest ce quon appelle le codage du texte, et laffaire est rgle. Sauf que les choses ne sont pas si simples, on va le voir.
http://fr.wikipedia.org/wiki/Codage_des_caractres

4.3.1

Le codage ASCII

Le codage ASCII (American Standard Code for Information Interchange), historiquement lun des premiers codages du texte, puisquil date de 1967, est encore largement utilis aujourdhui. Comme indiqu dans le tableau 4.1 page suivante, les nombres de 0 31 servent coder des caractres dits de contrle (retour la ligne, saut de page, etc.). 32 code lespace, suivie par des signes de ponctuation, les chiffres, encore de la ponctuation, 45

Chapitre 4. Le texte et son codage

0 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120


nul bs dle can sp ( * 2 : B J R Z a i q y b j r z 0 8 @ H P X h p x Y Q I A 9 1 ) ! " em sub esc # + 3 ; C K S [ c k s { dc1 dc2 dc3 ht nl vt soh stx etx

1 9 17 25 33 41 49 57 65 73 81 89 97 105 113 121

2 10 18 26 34 42 50 58 66 74 82 90 98 106 114 122

3 11 19 27 35 43 51 59 67 75 83 91 99 107 115 123

4 12 20 28 36 44 52 60 68 76 84 92 100 108 116 124

eot np dc4 fs $ , 4 < D L T \ d l t |

5 13 21 29 37 45 53 61 69 77 85 93 101 109 117 125 TABLE 4.1 Le codage ASCII.

enq cr nak gs % 5 = E M U ] e m u }

6 14 22 30 38 46 54 62 70 78 86 94 102 110 118 126

ack so

syn rs & . 6 > F N V ^ f n v ~

7 15 23 31 39 47 55 63 71 79 87 95 103 111 119 127

bel

si

etb

us

del

46

4.3. Codage du texte les majuscules dans lordre alphabtique, quelques symboles, les minuscules dans lordre alphabtique et quelques derniers symboles. Tout ceci occupe en pratique les nombres de 0 127, soit 128 valeurs, ce qui tient donc sur 7 bits. (128 = 27 ). En ASCII, le huitime bit est toujours inutilis. Le codage ASCII prsente un problme majeur. Il ne permet de coder que les lettres non accentues de lalphabet latin et est donc insufsant pour quasiment toutes les langues autres que langlais.
http://fr.wikipedia.org/wiki/American_Standard_Code_for_Information_ Interchange

4.3.2

Les codages ISO 8859

Or lASCII nutilise que la moiti des nombres quon peut reprsenter avec un octet. Lenvie a donc t forte dtendre lASCII pour coder dautres caractres dans cette plage libre allant de 128 255. Cest lobjet dun ensemble de normes internationales, les normes ISO 8859 (dveloppes de 1987 2004), qui sont dcrites dans le tableau 4.2. ISO 8859-1 ISO 8859-2 ISO 8859-3 ISO 8859-4 ISO 8859-5 ISO 8859-6 ISO 8859-7 ISO 8859-8 ... ISO 8859-15 langues de lEurope de louest langues de lEurope du centre et de lest langues de lEurope du sud langues de lEurope du nord langues utilisant lalphabet cyrillique langue arabe langue grecque moderne (monotonique) langue hbraque quasiment identique ISO 8859-1

TABLE 4.2 Les codages ISO 8859. Sans rentrer dans les dtails, la partie basse (de 0 127) de chaque norme ISO 8859 est en fait exactement lASCII et la partie haute (de 128 255) code pour les lettres accentues de chaque ensemble de langues (ISO 8859-1 pour le franais, litalien, etc., ISO 8859-2 pour le hongrois, le polonais, etc.) ou les alphabets des langues non latines (ISO 8859-5 ISO 8859-8). Cest un progrs indniable par rapport lASCII mais il reste deux problmes : on ne peut pas facilement mlanger plusieurs codages dans un mme chier texte ou alors il faut indiquer quelque part quel codage est utilis et les ventuels changements en cours de chier mais, dans ce cas, ce nest plus un chier texte puisquil comporte des indications en plus du texte ; 47

Chapitre 4. Le texte et son codage les 128 codes supplmentaires ne sufsent pas pour coder les caractres des langues asiatiques (chinois, japonais et coren, par exemple). Concernant ce dernier point, il faut savoir quil existe par ailleurs de nombreux codages sur 16 bits compte tenu du nombre de symboles coder pour les langues asiatiques.
http://fr.wikipedia.org/wiki/ISO_8859

4.3.3

Unicode et le codage UTF-8

Avec le dveloppement de linformatique et des tlcommunications, le besoin se t rapidement sentir de disposer dun systme de codage universel des caractres, permettant de coder de manire homogne lensemble des caractres, glyphes et symboles des langues de la plante. Ceci aboutit en 1991 la norme internationale ISO 10646, plus connue sous son petit nom : Unicode. Cette norme dnit un systme de codage universel des caractres, Universal Character Set (UCS). Il semblait vident que continuer utiliser des nombres sur 8 bits ne sufrait pas donc les premires versions dUnicode utilisaient des valeurs sur 16 bits et les suivantes sont rapidement passes 32 bits. 232 est de lordre de 4 109 donc cela devrait laisser sufsamment de marge an de coder une bonne fois pour toutes lensemble des systmes dcriture de la plante 2 . Comme pour les codages ISO 8859, an de faciliter la reprise de lexistant, les codes de 0 127 dUnicode correspondent aux caractres ASCII quivalents, la diffrence quils sont cods sur quatre octets et non plus sur un seul. Unicode est une excellente ide sur le papier mais, en pratique, le codage des caractres sur 32 bits est tout sauf optimal. Prenons un exemple. La chane de caractres coucou est code en ASCII par les nombres : 99 111 117 99 111 117, sur six octets, comme on peut le voir dans le tableau 4.3 (o chaque case correspond un octet). c 99 o 111 u 117 c 99 o 111 u 117

TABLE 4.3 Codage de la chane de caractres coucou en ASCII. En Unicode, la chane de caractres coucou est code par les mmes nombres mais, chacun occupant quatre octets, le total ncessite 6 4 = 24 octets, comme on peut le voir dans le tableau 4.4 page ci-contre.
2. Et mme plus. Certaines plages dUnicode sont rserves pour des utilisations exotiques . Ainsi le tengwar de Tolkien et le klingon de Star Trek disposent de plages rserves permettant de les coder...

48

4.3. Codage du texte c 0 0 0 c 0 0 99 0 0 99 0 o 0 0 o 0 0 u 0 0 u 0 0

111 111

0 0

117 117

TABLE 4.4 Codage de la chane de caractres coucou en Unicode.

Ceci fait quun chier texte cod initialement en ASCII verrait sa taille quadruple si on le codait en Unicode et ce pour rajouter trois octets nuls entre chaque octet signicatif. Ce nest pas acceptable. En ralit, aucun chier nest cod directement en Unicode sur 32 bits par caractre parce que, malgr ses vertus, Unicode en lui-mme est loin doffrir un stockage optimal. Cest pourquoi des mthodes de codages plus conomes mais plus complexes sont utilises. La plus rpandue est UCS Transformation Format - 8 bits (quon abrge en UTF8). Invente en 1992 par Ken Thompson, lun des crateurs dUNIX, UTF-8 peut paratre droutant par rapport aux codages prcdents. En effet, les caractres ny sont pas cods sur une longueur xe mais sur un, deux, trois ou quatre octets. Les caractres ASCII conservent les mmes codes et sont stocks dans un octet (qui a donc son huitime bit zro). Tout chier ASCII est donc un chier UTF-8. Les autres caractres sont stocks dans deux, trois ou quatre octets, dont le premier a son huitime bit un et dont la valeur indique le nombre doctets qui le suivent. Sans rentrer dans les dtails, donnons juste un exemple permettant dillustrer le codage en UTF-8. Le tableau 4.5 illustre comment la chane de caractres pt est code en ISO 8859-1, un octet par caractre. p 112 226 t 116 233

TABLE 4.5 Codage de la chane de caractres pt en ISO 8859-1. Le tableau 4.6 page suivante illustre comment la mme chane de caractres est code en UTF-8. Les deux caractres accentus sont cods chacun sur deux octets, dont le premier a une valeur strictement suprieure 127, alors que les deux autres caractres sont cods sur un seul octet, dont la valeur est infrieure ou gale 127, puisquil sagit de caractres ASCII. On le voit bien dans cet exemple, un texte rdig en franais et cod en UTF-8 donne donc un chier plus volumineux que sil tait cod en ISO 8859-1, puisque chaque caractre accentu est cod sur deux octets en UTF-8 contre un seul en ISO 8859-1. 49

Chapitre 4. Le texte et son codage p 112 195 162 t 116 195 169

TABLE 4.6 Codage de la chane de caractres pt en UTF-8.

Cest dailleurs le cas gnral pour toutes les langues utilisant des caractres en dehors de lASCII, leur codage en UTF-8 produit des chiers un peu plus volumineux quavec dautres codages plus limits (ISO 8859 ou codages sur 16 bits pour les langues asiatiques). En contrepartie, avec UTF-8, il est possible dutiliser tous les caractres possibles et imaginables dans le mme chier, ce qui est plus quapprciable. Tous les logiciels modernes grent parfaitement lUTF-8 et cest sans conteste le codage utiliser dornavant.
http://www.unicode.org/ http://fr.wikipedia.org/wiki/UTF-8

4.4

Codage des chiers

Lorsquon dispose dun chier texte, comment dterminer son codage ? Lidal est quil soit indiqu directement dedans. Cest le cas par exemple des chiers XML, dont la premire ligne indique quel codage est utilis pour le chier :
<?xml version="1.0" encoding="UTF-8"?> [...]

Le codage peut galement tre indiqu lextrieur du document. Cest le cas pour les messages lectroniques, dont le codage est indiqu dans len-tte :
[...] MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit [...] [ corps du message ]

50

4.5. Conversion dun codage vers un autre

4.5
4.5.1

Conversion dun codage vers un autre


La commande iconv

Il peut tre utile de convertir du texte dun codage vers un autre. Imaginez par exemple que avez un chier cod en ISO 8859-1 que vous voulez convertir en UTF-8. Il existe pour cela sous UNIX un petit utilitaire appel iconv et qui sutilise comme ceci :
$ iconv -f iso8859-1 -t utf-8 -o tata toto

Nous naborderons lutilisation de linterprteur de commandes quau chapitre 7 page 79 mais la squence ci-dessus est assez simple comprendre. Elle appelle la commande iconv en lui demandant de convertir le chier toto (indiqu en n de ligne), dont le codage dorigine (option -f pour from) est ISO 8859-1 vers le codage de destination (option -t pour to) UTF-8 et de stocker le rsultat (option -o pour output) dans le chier tata.
http://en.wikipedia.org/wiki/Iconv

4.5.2

Dans un logiciel

On peut galement tre amen effectuer des conversions directement au sein dun logiciel. Il est en effet possible davoir manipuler des fragments de texte provenant dorigines diverses et cods de faons diffrentes. Ces fragments sont habituellement convertis le plus tt possible vers un codage plus universel, UTF-8 tant en loccurrence un bon candidat. Le listage 4.1 montre un exemple de conversion de codage de caractres dans le langage de programmation Perl.
use Encode ; [...] # conversion en UTF-8 $nom = Encode::encode ( utf8 , $nom ) ; $prenom = Encode::encode ( utf8 , $prenom ) ;

LISTAGE 4.1 Conversion de codage de caractres en Perl.

51

Chapitre 4. Le texte et son codage

4.6

Les diteurs de texte

Un diteur de texte est un logiciel permettant de saisir et de modier des chiers texte. ne pas confondre avec un logiciel de traitement de texte, qui, comme indiqu au paragraphe 4.1 page 43, ne travaille pas sur des chiers texte. En raison de lomniprsence des chiers texte sous UNIX, il y existe de trs nombreux diteurs de texte. Nous tudierons par la suite les deux plus rpandus, et dont beaucoup dautres ont repris les caractristiques : Emacs et vi (prononcer les lettres langlaise : vie ail ). Il existe aussi des diteurs de texte sur dautres systmes dexploitation quUNIX. Cest le cas pour Windows, qui est fourni avec lditeur de texte Notepad, ainsi que pour Mac OS X, qui est fourni avec lditeur de texte TextEdit.
http://fr.wikipedia.org/wiki/diteur_de_texte http://fr.wikipedia.org/wiki/Guerre_dditeurs http://en.wikipedia.org/wiki/Comparison_of_text_editors http://fr.wikipedia.org/wiki/Bloc-notes_(Windows) http://fr.wikipedia.org/wiki/TextEdit

52

5
Lditeur de texte Emacs

est probablement lditeur de texte le plus rpandu sous UNIX. Simple demploi et nanmoins trs puissant, il convient aux dbutants comme aux utilisateurs expriments. Emacs dpasse mme la simple fonction dditeur de texte puisquun langage dextension (que nous naborderons pas ici) permet de lui faire faire peu prs nimporte quoi.
MACS
http://www.gnu.org/software/emacs/ http://fr.wikipedia.org/wiki/Emacs

5.1
emacs

Lancement dEmacs

Emacs se lance depuis un interprteur de commandes au moyen de la commande suivie du nom du chier diter (les chiers texte ont traditionnellement une extension .txt) :
$ emacs toto.txt Enter

Si le chier toto.txt existe, son contenu est afch et peut tre modi. Sil nexiste pas, Emacs afche un contenu vierge et le chier sera cr lors de sa premire sauvegarde. En ce qui nous concerne, le chier toto.txt nexiste pas donc Emacs ouvre une nouvelle fentre semblable celle de la gure 5.1 page suivante. Vous remarquez, en haut de la fentre, des menus et une range dicnes. Nous nutiliserons quasiment pas ces outils. Pourquoi ? Emacs est un diteur de texte. Le priphrique dentre privilgi pour saisir du texte est, bien videmment, le clavier. Lorsquon utilise un diteur de texte, les deux mains sont donc principalement situes sur le clavier. Dplacer une main pour agiter la souris puis la ramener vers le clavier reprsente donc une perte de temps. Cest pourquoi nous allons apprendre utiliser Emacs quasi exclusivement au moyen du clavier. Certaines rares manipulations sont plus efcacement faites avec la souris et ce seront les seules occasions o celle-ci sera utilise. 53

Chapitre 5. Lditeur de texte Emacs

FIGURE 5.1 Emacs.

Vous remarquez galement deux lignes au bas de la fentre. La dernire, tout en bas, est appele minibuffer (cest le terme consacr et il na pas dquivalent tabli en franais). Le minibuffer sert Emacs pour communiquer avec lutilisateur, soit pour lui afcher des informations soit pour lui poser des questions. La ligne du dessus est appele ligne de mode (mode line en anglais). Elle afche diverses informations qui sont mises jour automatiquement si ncessaire. Enn, la partie principale de la fentre est vide. Si le chier toto.txt avait exist, son contenu y aurait t afch. Revenons la ligne de mode. Elle contient : des indicateurs, ici -U:--- : le U indique que le chier est (ou sera sil nexiste pas encore) cod en UTF-8 (ce serait un 1 pour de lISO 8859-1), les deux tirets suivant le deux-points se transforment en astrisques ** lorsque le contenu du chier a t modi mais pas encore sauvegard sur disque, il sagit dun repre visuel permettant de savoir si le chier a t sauvegard ou 54

5.2. Saisie du texte pas ; le nom du chier, ici toto.txt ; la position dans le chier, qui peut tre : All lorsque lensemble du chier est visible dans la fentre, Top lorsque le chier est trop long pour tre entirement visible dans la fentre et quon en voit le haut, Bot (pour bottom) lorsque le chier est trop long pour tre entirement visible dans la fentre et quon en voit le bas, un pourcentage indiquant o lon se trouve dans le chier si lon est quelque part lintrieur ; le numro de la ligne sur laquelle se trouve le curseur ; le mode ddition du chier entre parenthses, cest de l que la ligne de mode tire son nom. Emacs est en effet capable de reconnatre sur quel type de chier texte on travaille (texte simple, programme, etc.) et dadapter son comportement en fonction. Le mode entre parenthses indique ce type. Ici, Emacs a reconnu son extension que le chier toto.txt est un chier texte simple et sest donc mis en mode Text.

5.2

Saisie du texte

Dans Emacs, la saisie du texte se fait de manire habituelle. La touche efface le caractre prcdant le curseur, Enter permet de passer la ligne et les touches ches de se dplacer. An dexprimenter les fonctionnalits dEmacs, nous aurons besoin dun peu de texte. Tapez ce qui vous passe par la tte, au moins trois paragraphes (un paragraphe est spar du suivant par une ligne blanche) contenant chacun trois lignes de texte, avant daller plus loin. Si lune des lignes est trop longue pour tenir dans la fentre, elle se continue sur la ligne suivante, comme on peut voir dans la gure 5.2 page suivante. Il ne sagit pas de deux lignes mais bien dune seule et mme ligne. Les petites ches recourbes prsentes dans les marges (et qui sont agrandies dans la gure) sont des repres visuels permettant de le savoir. Les lignes dpassant du bord de la fentre donnent un aspect inesthtique au chier, il est donc prfrable de les viter.

5.3

Les commandes

Les manipulations plus compliques que la simple saisie du texte sont faites grce des combinaisons de touches appeles commandes. Celles-ci font appel deux touches du clavier, la touche Ctrl et la touche Meta . Autant la touche Ctrl vous est familire, autant il est inutile de chercher la touche Meta sur le clavier, elle ny gure pas. Elle existait sur le clavier de lauteur dEmacs, 55

Chapitre 5. Lditeur de texte Emacs

FIGURE 5.2 Emacs : continuation de ligne.

56

5.3. Les commandes Richard Stallman, et elle gure sous ce nom dans toutes les documentations sur Emacs donc le terme est rest. Sur des claviers modernes, la touche Meta est remplace par deux touches, quon peut utiliser indiffremment en fonction de ses prfrences : la touche Alt utilise en conjonction avec une autre touche, cest--dire quon appuie dabord sur Alt et on la laisse enfonce pendant quon appuie sur lautre touche puis on relche les deux touches ; la touche Esc suivie dune autre touche, cest--dire quon tape dabord sur Esc (en la relchant) puis sur lautre touche. La notation des commandes est particulire aux documentations sur Emacs et vous les trouverez partout reprsentes de la mme faon. Une commande introduite par la touche Ctrl se note C- suivi du caractre saisir, une commande introduite par la touche Meta se note M- suivi du caractre saisir. Par exemple, C-a reprsente lappui sur la touche Ctrl , quon maintient enfonce en appuyant sur A . On parle bien ici de caractre et pas seulement de touche. Ainsi, il existe une commande M-% (il sagit de la commande de recherche et de remplacement, qui sera aborde plus loin). M-% reprsente lappui sur la touche Alt , quon maintient enfonce en appuyant sur Shift et % (ou Esc puis Shift et % comme indiqu plus haut). Lemploi de la touche Shift a son importance car, sans elle, on aurait un 5 sur un clavier QWERTY ou un sur un clavier AZERTY et pas un %. Les commandes les plus utilises sont introduites directement par C- ou M-, ce qui revient comme on vient de le voir lappui sur deux touches, voire trois. Malheureusement, le nombre de caractres disponibles sur le clavier est limit et il est en pratique ncessaire davoir plus de commandes quil ny a de caractres sur le clavier. Certaines commandes moins utilises sont donc formes de deux combinaisons de touches, dont la premire est appele prxe. Par exemple, la commande C-x C-c permet de quitter Emacs. Dans celle-ci, C-x est le prxe. Un prxe nest jamais utilis seul, il a toujours besoin dtre suivi par quelque chose pour former une commande complte. Emacs attend que la commande complte ait t saisie avant de faire quoi que ce soit. Si lon tarde nir la commande aprs avoir saisi le prxe, Emacs afche celui-ci dans le minibuffer, comme indiqu dans la gure 5.3 page suivante. On peut donc reprendre o lon tait si lon a t distrait ou interrompu. Il existe gnralement un moyen mnmotechnique pour retenir les commandes dEmacs, bas sur la signication (en anglais) du caractre suivant C- ou M-. Par exemple, C-d est la commande permettant deffacer (d pour delete) un caractre. Certaines commandes existent en deux versions, lune introduite par C-, lautre par M-. Dans ce cas, la version introduite par M- a toujours une porte plus importante que celle introduite par C-. Pour reprendre le mme exemple, l o C-d efface un caractre, M-d efface la n du mot. Dans la suite de ce tour dhorizon, nous nallons pas aborder toutes les commandes 57

Chapitre 5. Lditeur de texte Emacs

FIGURE 5.3 Emacs : afchage dans le minibuffer dune commande partiellement saisie.

58

5.4. Commandes de dplacement dEmacs mais seulement la vingtaine de commandes qui sert le plus. Il est important dexprimenter ces commandes sur les quelques lignes de texte saisies plus haut, an de bien comprendre leur fonctionnement.

5.4

Commandes de dplacement

Il est rare de rdiger un document de manire linaire. Il est donc utile de pouvoir se dplacer dans le texte de manire efcace. Les touches ches peuvent tre utilises pour les petits dplacements mais elles ne permettent pas de grands dplacements rapides. Utiliser la souris nest pas non plus une bonne solution en raison de la perte de temps lie aux dplacements de la main. Heureusement, Emacs fournit plusieurs commandes permettant des dplacements efcaces. La commande C-a permet de se dplacer en dbut de ligne (a est la premire lettre de lalphabet), la commande C-e en n de ligne (e pour end). La commande C- suivie dune touche che permet de se dplacer de mot en mot (un mot tant spar dun autre par une espace) pour les ches horizontales et de paragraphe en paragraphe (un paragraphe tant spar dun autre par une ligne blanche) pour les ches verticales. Dans un long document, il est frquent de devoir se positionner sur une ligne prcise, identie par son numro, par exemple parce quune erreur a t dtecte cet endroit. La commande M-g M-g (ou M-g g) afche Goto line: dans le minibuffer, demandant quon saisisse le numro de la ligne o aller, suivi de Enter .
http://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point. html

5.5

Commandes de suppression

La commande C-d (d pour delete) permet de supprimer le caractre situ sous le curseur, la commande M-d la n du mot partir de la position du curseur jusqu la prochaine espace ou jusquau prochain signe de ponctuation. partir de la position du curseur, la commande C-k (k comme kill) supprime la n de la ligne.
http://www.gnu.org/software/emacs/manual/html_node/emacs/Deletion.html http://www.gnu.org/software/emacs/manual/html_node/emacs/Words.html http://www.gnu.org/software/emacs/manual/html_node/emacs/ Killing-by-Lines.html

59

Chapitre 5. Lditeur de texte Emacs

5.6

Excution multiple dune commande

Il est possible dexcuter n fois la mme commande en la prxant par M-n. Ainsi, on peut effacer 5 lignes au moyen de M-5 C-k. On peut rpter la dernire commande lidentique, sans avoir besoin de la retaper, au moyen de C-x z (attention, cest C-x z, pas C-x C-z). Immdiatement aprs avoir utilis C-x z, il suft de taper une nouvelle fois z pour rpter la mme commande et ainsi de suite.
http://www.gnu.org/software/emacs/manual/html_node/emacs/Arguments.html http://www.gnu.org/software/emacs/manual/html_node/emacs/Repeating.html

5.7

Copier-coller

La procdure dcrite ci-dessous, permettant de copier puis de coller du texte, nest pas spcique Emacs, mme sil semble opportun de la dcrire ici. En effet, cette procdure fonctionne avec nimporte quel logiciel manipulant du texte sous UNIX. Cest lune des rares occasions o nous allons utiliser la souris. Il existe bien des commandes dEmacs permettant de slectionner puis de coller du texte en nutilisant que le clavier mais il faut reconnatre quutiliser la souris est, dans ce cas prcis, plus efcace. Pour copier du texte, il suft de le slectionner la souris. On positionne la souris au dbut du texte copier, on appuie sur le bouton de gauche, on le maintient ainsi et on dplace la souris la n du texte copier puis on relche le bouton. Rien que de plus classique ici. Petite astuce, lorsquon souhaite copier un mot, un double clic quelque part sur ce mot le slectionne sans avoir faire tout cela. Pour copier une ligne, cest laffaire dun triple clic. Pour coller le texte pralablement copi, il suft de dplacer la souris lendroit o lon veut le voir apparatre et dappuyer sur le bouton du milieu (qui est bien souvent la molette). Si le mme texte est coller plusieurs endroits, il suft de se repositionner et de cliquer nouveau sur le bouton du milieu, le texte copi restant en mmoire tant quune autre portion de texte nest pas copie. Et cest tout ! Cette mthode est bien plus simple que ce qui se fait sur Macintosh ou sous Windows, qui implique lutilisation de la souris et du clavier. Sous UNIX, tout se fait la souris.

5.8

Couper-coller

En revanche, il nexiste pas de procdure quivalente utilisant uniquement la souris pour raliser un couper-coller. La slection du texte se fait de la mme manire 60

5.9. Commande dannulation des modications que pour le copier-coller. Puis on utilise la commande slectionn et on le colle comme pour le copier-coller.
C-w

pour couper le texte

http://www.gnu.org/software/emacs/manual/html_node/emacs/ Other-Kill-Commands.html

5.9

Commande dannulation des modications

Lerreur est humaine. Et il arrive rgulirement de commettre une erreur par mgarde. Il est alors possible dannuler la dernire modication apporte au document en utilisant la commande C-/ ou la commande C-_ (les deux commandes ont le mme effet, la premire est plus facile saisir sur un clavier QWERTY, la seconde est plus facile saisir sur un clavier AZERTY). En rptant cette commande, on annule lavant-dernire modication et ainsi de suite.
http://www.gnu.org/software/emacs/manual/html_node/emacs/Undo.html

5.10

Commandes de gestion de chiers

Nous avons maintenant sufsamment travaill sur notre document pour vouloir le sauvegarder sur disque. Il est important, et ceci vaut pour tous les logiciels, deffectuer des sauvegardes rgulires. En effet, entre deux sauvegardes, les modications apportes au document ne sont stockes que dans la mmoire vive de lordinateur et lon nest jamais labri dune coupure de courant ou de quelquun qui trbuche sur le cble dalimentation en le dbranchant au passage, ce qui fait irrmdiablement perdre ces modications. Par ailleurs, il vaut mieux ne pas compter sur les sauvegardes automatiques que certains logiciels effectuent, elle se font rarement quand il le faut. La commande C-x C-s (s pour save) permet de sauvegarder le chier sur disque. loccasion de la sauvegarde du chier, on peut remarquer que les deux astrisques des indicateurs de la ligne de mode ont t remplacs par deux tirets, comme on peut le voir dans la gure 5.4 page suivante. Si jamais on a lanc Emacs sans argument, ce qui est mal, et quon souhaite sauvegarder le chier, il faut lui donner un nom en le sauvegardant. Pour cela, on utilise la commande C-x C-w (w pour write). Elle demande de saisir le nom donner au chier, suivi de Enter , dans le minibuffer. Si jamais on a lanc Emacs sans argument et quon souhaite charger un chier, on utilise la commande C-x C-f (f poue nd). Elle demande de saisir le nom du chier charger, suivi de Enter , dans le minibuffer.
http://www.gnu.org/software/emacs/manual/html_node/emacs/Save-Commands. html http://www.gnu.org/software/emacs/manual/html_node/emacs/Visiting.html

61

Chapitre 5. Lditeur de texte Emacs

FIGURE 5.4 Emacs : tat de la ligne de mode aprs sauvegarde du chier.

62

5.11. Commandes de recherche et de remplacement

5.11

Commandes de recherche et de remplacement

Emacs a une faon particulire et extrmement efcace deffectuer une recherche par mot cl. La commande C-s (s pour search) permet de commencer une recherche partir du curseur en descendant (la commande C-r (r pour reverse) effectue une recherche en remontant). Elle afche I-search: dans le minibuffer pour indiquer quon se trouve maintenant en mode de recherche interactive. En quoi la recherche est-elle interactive ? Supposons quon recherche le mot toto . Au moment o lon tape t , Emacs dplace le curseur sur le premier t suivant la prcdente position du curseur et afche les autres sur un fond color. Lorsquon tape o , Emacs dplace le curseur sur la premire chane de caractres to suivant sa position prcdente (ou ne bouge pas si lon y tait dj) et, de mme, afche les autres sur un fond color. Et ainsi de suite. En pratique, pour rechercher un mot, il suft bien souvent den taper les premires lettres et on le trouve sans avoir besoin de le saisir en entier. Cest pratique si lon cherche anticonstitutionnellement , il doit sufre de taper anticon ... Pour stopper la recherche, on appuie sur la touche Enter . Le curseur reste alors sur le premier mot trouv. Il est alors possible de passer au prochain mot correspondant la mme recherche grce la commande C-s C-s. Un simple C-s passe alors au mot suivant et ainsi de suite. La recherche sarrte en tapant Enter . Le remplacement seffectue au moyen de la commande M-% (qui utilise donc trois touches du clavier, Meta , Shift et % ). Emacs afche alors Query replace: dans le minibuffer, demandant quon saisisse le mot remplacer. Pour prendre un exemple, disons quon veut remplacer toto par tata . On tape donc le mot remplacer, suivi de Enter . Emacs demande alors Query replace toto with: dans le minibuffer. On tape le mot de remplacement suivi de Enter . Emacs se place alors sur le premier mot trouv, qui safche sur un fond color an de le distinguer facilement. On a alors la possibilit de taper : y pour effectuer le remplacement et passer loccurrence suivante ; n pour ne pas effectuer le remplacement et passer loccurrence suivante ; ! pour effectuer tous les remplacements sans poser de question ; q pour quitter. En n de procdure, Emacs afche le nombre doccurrences remplaces dans le minibuffer.
http://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Isearch. html

63

Chapitre 5. Lditeur de texte Emacs


http://www.gnu.org/software/emacs/manual/html_node/emacs/Query-Replace. html

5.12

Saisie de caractres ne gurant pas sur le clavier

Les claviers, quels quils soient, ne permettent pas de saisir directement la totalit des caractres utiliss en franais. Le problme est encore plus agrant lorsquil sagit de rdiger tout ou partie dun document dans une langue trangre autre que langlais. Emacs permet de saisir de nombreux caractres absents des claviers au moyen de la commande C-x 8 (attention, cest C-x 8, pas C-x C-8) suivi dun ou deux caractres (pour les signes gurant dans le codage ISO 8859-1) ou de Enter puis du nom complet du signe voulu (pour les autres). Par exemple, C-x 8 / e permet de saisir et C-x 8 Enter EURO SIGN permet de saisir . La liste des combinaisons dun ou deux caractres pouvant suivre C-x 8 est accessible au moyen de la commande C-x 8 C-h. Le tableau 5.1 indique les combinaisons les plus utiles en franais.
C-x 8 / e C-x 8 / E C-x 8 < C-x 8 >

C-x 8 C-x 8 C-x 8 C-x 8 o

Enter Enter Enter

LATIN SMALL LIGATURE OE LATIN CAPITAL LIGATURE OE EURO SIGN

TABLE 5.1 Combinaisons permettant de saisir des caractres usuels en franais avec Emacs.

http://www.gnu.org/software/emacs/manual/html_node/emacs/Unibyte-Mode. html

5.13

Commande dannulation de la commande en cours de saisie

Nous avons vu prcdemment la commande C-/, qui permet dannuler la dernire modication apporte au document. Il existe une autre commande dannulation, dans un autre contexte. Il peut en effet tre utile dannuler la saisie dune commande demandant quelque chose dans le minibuffer. Supposons par exemple quon utilise la commande C-x C-w par erreur et quon souhaite lannuler. Il ne sagit pas dannuler la dernire modication apporte au document, quon souhaite conserver tel quel, mais dannuler la commande en cours, qui est en attente dinformations supplmentaires. 64

5.14. Commandes diverses Dans ce cas, on utilise la commande C-g. Celle-ci annule toute commande en attente dinformations via le minibuffer et laisse le document en ltat.

5.14

Commandes diverses

Lorsquon travaille sur un chier texte contenant un document crit dans une langue telle que le franais, il arrive frquemment dapporter des modications un paragraphe rdig auparavant. Tant et si bien quau bout dun moment, on se retrouve avec des paragraphes contenant des lignes ayant des longueurs disparates, ce qui provoque un effet visuel disgracieux. La commande M-q, tape nimporte o lintrieur dun paragraphe, permet de le reformater an dharmoniser la longueur des lignes, par dfaut 70 caractres au plus. Elle ne fonctionne que dans les documents pour lesquels le mode dEmacs est Text. Il peut tre utile de travailler simultanment sur deux parties dun mme chier ou sur deux chiers diffrents, le tout dans la mme fentre, an par exemple de copier du texte de lun vers lautre. La commande C-x 2 (attention, cest C-x 2, pas C-x C-2) permet de sparer la fentre en deux parties prsentant le mme chier. Il est alors possible de se positionner dans chaque partie un endroit diffrent du chier, voire de charger un autre chier dans lune des parties au moyen de la commande C-x C-f. On peut passer de lune lautre partie au moyen de la commande C-x o. Enn, la commande C-x 0 ramne la fentre dEmacs son tat initial. Signalons quil existe aussi une commande C-x 3, dont le rsultat est laiss la curiosit du lecteur. Pour nir, il faut dire quelques mots sur la commande M-x. Les commandes abordes jusqu prsent lont t via leur raccourci. Les commandes dEmacs ont galement un nom et elles peuvent tre excutes au moyen de ce nom, introduit par la commande M-x. Par exemple, la commande kill-line a pour raccourci C-k et peut tre galement excute en tapant M-x, puis kill-line dans le minibuffer. En pratique, rares sont les commandes dEmacs disposant dun raccourci. Seules les plus utilises en ont un. M-x est donc le seul moyen dexcuter les autres. Vous pouvez par exemple essayer la commande M-x auto-fill-mode dans un chier texte. Le mode passera de Text Text Fill. Ceci permet, lorsquon arrive en bout de ligne, de faire en sorte quEmacs insre automatiquement un saut de ligne, ce qui vite davoir recours M-q lorsquon saisit un paragraphe (mais cette commande est nanmoins souvent utile au moment des retouches).
http://www.gnu.org/software/emacs/manual/html_node/emacs/Quitting.html http://www.gnu.org/software/emacs/manual/html_node/emacs/Fill-Commands. html http://www.gnu.org/software/emacs/manual/html_node/emacs/Split-Window. html http://www.gnu.org/software/emacs/manual/html_node/emacs/M_002dx.html

65

Chapitre 5. Lditeur de texte Emacs

5.15
C-c

Quitter

Comme nous lavons vu dans la prsentation des commandes, la commande C-x permet de quitter Emacs. Si le chier en cours ddition na pas t sauvegard, Emacs propose de le faire ou de quitter en perdant les modications effectues depuis la dernire sauvegarde. Vu la proximit des touches en question, il est dailleurs plus rapide de sauvegarder (C-x C-s) puis de quitter (C-x C-c) plutt que de quitter sans sauvegarder et de demander Emacs de le faire lorsquil ne manquera pas de poser la question.
http://www.gnu.org/software/emacs/manual/html_node/emacs/Exiting.html

5.16

Conclusion

Nous avons donc tudi la vingtaine de commandes permettant une utilisation efcace dEmacs. Celles-ci sont rsumes dans le tableau A.1 page 333. Il ne sagit que dun survol trs rapide de ce quoffre Emacs mais permettant de se dbrouiller dans la plupart des cas. Le lecteur curieux pourra se reporter aux ouvrages suivants de la bibliographie pour approfondir ses connaissances : GNU Emacs Manual [8] Learning GNU Emacs [2] GNU Emacs : UNIX Text Editing and Programming [6] GNU Emacs Pocket Reference [1]

66

6
Les diteurs de texte vi et Vim

DITEUR DE TEXTE vi (prononcer les lettres langlaise : vie ail ) est lun des plus anciens diteurs de texte sous UNIX. Dapproche difcile, il se rvle dune puissance extraordinaire pour peu quon prenne la peine den apprendre le fonctionnement. Cest dailleurs lditeur de texte favori des vrais amateurs dUNIX 1 . Il souffre nanmoins dun dfaut : il nvolue plus depuis de nombreuses annes et il lui manque certaines caractristiques bien utiles quon retrouve dans tous les diteurs de texte modernes. Le vi dorigine continue pourtant tre utilis par les ingnieurs systme pour sa simplicit et sa scurit. Ceux qui ont besoin de plus utilisent gnralement Vim (Vi IMproved). Il sagit dun logiciel inspir de vi et offrant de nombreuses amliorations. Ce document a dailleurs t rdig avec Vim. Dans la plupart des distributions Linux, Vim est install la place de vi. Cest le cas lENSTA ParisTech. Sauf indication particulire, ce que nous allons tudier par la suite concernera vi et tous ses drivs sans distinction, dont Vim. Nous indiquerons nanmoins quelques spcicits intressantes propres Vim.
http://fr.wikipedia.org/wiki/Vi http://www.vim.org/ http://fr.wikipedia.org/wiki/Vim

6.1

Lancement de vi et de Vim

vi se lance depuis un interprteur de commandes au moyen de la commande vi (tonnant, non ?) suivie du nom du chier diter :

$ vi toto.txt Enter

1. Daucuns diront : des unixiens barbus (plonasme).

67

Chapitre 6. Les diteurs de texte vi et Vim Vim, sans surprise, se lance au moyen de la commande vim suivie du nom du chier diter :
$ vim toto.txt Enter

Dans la plupart des distributions Linux, vi lance en fait vim (cest le cas lENSTA ParisTech). Contrairement Emacs, vi nouvre pas de fentre et reste conn dans celle de linterprteur de commandes. On peut voir dans la gure 6.1 ce quafche Vim sur un chier de deux lignes.
Il est joli mon fichier toto.txt et jaime bien les cours dinformatique de lENSTA ParisTech ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ "toto.txt" 2L, 96C 1,1 All

FIGURE 6.1 Vim. Quelques indications sont afches tout en bas : le nom du chier en cours ddition ; le nombre de lignes du chier ; 68

6.2. Saisie du texte la taille en octets du chier ; le numro de ligne et le numro de colonne du curseur (1,1 au moment du lancement) ; la position dans le chier, sur le mme principe quEmacs (All, Top, Bot ou un pourcentage). Remarquez que les lignes situes au-del de la n du chier dbutent par ~. Il sagit dune indication visuelle permettant de les distinguer dventuelles lignes vides en n de chier.

6.2

Saisie du texte

Contrairement Emacs, dans lequel on peut taper du texte ds son lancement, il est ncessaire dans vi de passer tout dabord en mode dinsertion de texte (quon appelle plus simplement mode insertion). En effet, vi a deux modes de fonctionnement : le mode de saisie des commandes (mode commande) ; le mode dinsertion de texte (mode insertion). Aprs son lancement, vi est en mode commande et il nexiste pas moins de six faons de passer en mode insertion en fonction de lendroit auquel on souhaite voir apparatre le texte quon va saisir. Le passage en mode insertion se fait en tapant un caractre au clavier : i (insert) pour passer en mode insertion lendroit o se trouve le curseur, cest--dire que le texte quon saisira par la suite apparatra partir de la position actuelle du curseur ; a (after) pour passer en mode insertion immdiatement aprs le curseur, cest-dire que le texte quon saisira par la suite apparatra droite de la position actuelle du curseur ; I pour passer en mode insertion au dbut de la ligne sur laquelle se situe le curseur ; A pour passer en mode insertion la n de la ligne sur laquelle se situe le curseur ; o (open) pour crer une nouvelle ligne au-dessous de celle sur laquelle se situe le curseur (le reste du document est alors dcal dune ligne vers le bas) et passer en mode insertion au dbut de cette ligne ; O pour crer une nouvelle ligne au-dessus de celle sur laquelle se situe le curseur (le reste du document est alors dcal dune ligne vers le bas) et passer en mode insertion au dbut de cette ligne ; Le tableau 6.1 page suivante rsume les six faons de passer en mode insertion. Pourquoi proposer autant de faons de passer en mode insertion ? En effet, compte tenu des possibilits de dplacement du curseur, seules les deux premires faons sont rellement ncessaires. Dans vi, contrairement Emacs, on ne peut pas dplacer le 69

Chapitre 6. Les diteurs de texte vi et Vim au caractre situ sous le curseur au caractre situ aprs le curseur en dbut de ligne en n de ligne au-dessous de la ligne actuelle au-dessus de la ligne actuelle

i a I A o O

TABLE 6.1 Les six faons de passer en mode insertion dans vi.

curseur au-del du dernier caractre dune ligne donc i ne suft pas. En revanche, en combinant dplacements, i, a et le retour la ligne, on peut muler I, A, o et O. En observant la faon dont on utilise gnralement un diteur de texte, on se rend compte quil arrive frquemment davoir ajouter du texte en dbut de ligne ou en n de ligne et davoir rajouter du texte entre deux lignes existantes. Les six faons de passer en mode insertion permettent de le faire rapidement sans avoir dabord se dplacer, puis passer en mode insertion (et ventuellement rajouter une ligne blanche). Cest l une des caractristiques de vi, qui fait tout son attrait. Il existe de nombreuses commandes superues mais qui correspondent un usage rpandu et qui permettent une utilisation efcace. Le passage en mode insertion est matrialis par lindication Insert en bas droite de la fentre dans vi et par lindication -- INSERT -- en bas gauche de la fentre dans Vim. Une fois en mode insertion, la saisie du texte se fait de manire habituelle. La touche efface le dernier caractre saisi, Enter permet de passer la ligne et les touches ches de se dplacer. An dexprimenter les fonctionnalits de vi, nous aurons besoin dun peu de texte. Tapez ce qui vous passe par la tte, au moins trois paragraphes (un paragraphe est spar du suivant par une ligne blanche) contenant chacun trois lignes de texte, avant daller plus loin.

6.3

Les commandes

Lorsquon est en mode insertion, il faut appuyer sur la touche Esc pour passer en mode commande. Le passage en mode commande est matrialis par le remplacement de lindication Insert par Command en bas droite de la fentre dans vi et par la disparition de lindication -- INSERT -- en bas gauche de la fentre dans Vim. Lorsquon utilise vi, on alterne donc entre le mode commande et le mode insertion. 70

6.4. Commandes de dplacement Puisque vi dispose de deux modes de fonctionnement, l o Emacs nen a quun, il nest pas ncessaire dintroduire les commandes par une touche particulire. Nous avons dailleurs dj vu que les commandes de passage en mode insertion utilisaient directement des caractres usuels, sans touche dintroduction. Certaines commandes utilisent un seul caractres et produisent un rsultat immdiat (cest par exemple le cas des commandes de passage en mode insertion), dautres en utilisent plusieurs. Dans ce cas, au fur et mesure que lon en saisit les caractres, Vim les indique au bas de la fentre gauche de la position du curseur alors que vi nen fait rien. Dans la suite de ce tour dhorizon, nous nallons pas aborder toutes les commandes de vi mais seulement la vingtaine de commandes qui sert le plus. Il est important dexprimenter ces commandes sur les quelques lignes de texte saisies plus haut, an de bien comprendre leur fonctionnement.

6.4

Commandes de dplacement

Il est possible de se dplacer dans un document au moyen des touches ches, que ce soit en mode commande ou en mode insertion. noter que danciennes versions de vi ne permettaient les dplacements quen mode commande. En mode commande, on peut galement utiliser h, j, k et l pour se dplacer respectivement vers la gauche, vers le bas, vers le haut et vers la droite. La commande 0 permet de se dplacer en dbut de ligne, $ en n de ligne ($ dsigne toujours la n de quelque chose pour vi). Les commandes W (pour word) et B (pour back) permettent de se dplacer de mot en mot (respectivement en avant et en arrire). Les commandes { et } permettent de se dplacer de paragraphe en paragraphe (respectivement en montant et en descendant). La commande G (pour go) permet de se dplacer sur la dernire ligne du document. Prcde dun nombre, elle permet de se dplacer sur la ligne ayant ce numro. Par exemple, la commande 33G permet de se dplacer sur la ligne numro 33.

6.5

Commandes de suppression

La commande x permet de supprimer le caractre situ sous le curseur, la commande dw (pour delete word) la n du mot partir de la position du curseur jusqu la prochaine espace ou jusquau prochain signe de ponctuation. La commande D (pour delete) supprime la n de la ligne partir de la position du curseur. La commande dd supprime totalement la ligne, o que le curseur y soit situ.

6.6

Excution multiple dune commande

Il est possible dexcuter n fois la mme commande en la prxant par ce nombre. Ainsi, on peut effacer 5 lignes au moyen de 5dd. 71

Chapitre 6. Les diteurs de texte vi et Vim On peut rpter la dernire commande lidentique, sans avoir besoin de la retaper, au moyen de . (point). Cest lune des caractristiques les plus apprcies des amateurs de vi.

6.7

Copier-coller

Le copier-coller la souris seffectue exactement comme avec Emacs. Il faut nanmoins prendre la prcaution de positionner le curseur au bon endroit (cest en effet la position du curseur que le texte sera coll et non celle de la souris) et de passer en mode insertion avant de coller le texte (sinon vi interprtera le texte coll comme une suite de commandes, ce qui ne produira pas le rsultat attendu). Il est galement possible de copier-coller une ou plusieurs lignes grce deux commandes. La commande yy (pour yank) copie la ligne sur laquelle se situe le curseur. Comme vu au paragraphe 6.6 page prcdente, on peut prxer cette commande par un nombre an de copier autant de lignes. Ainsi, la commande 5yy copie cinq lignes (celle sur laquelle se situe le curseur et les quatre situes au-dessous). Aprs stre dplac au bon endroit, on utilise la commande p (pour paste) an de coller la ou les lignes copies sous la ligne sur laquelle se situe le curseur (ce qui dcale la suite du texte vers le bas).

6.8

Couper-coller

Le couper-coller seffectue selon le mme principe. Il utilise la commande dd vue au paragraphe 6.5 page prcdente pour couper la ligne sur laquelle se situe le curseur. Comme vu au paragraphe 6.6 page prcdente, on peut prxer cette commande par un nombre an de couper autant de lignes. Ainsi, la commande 5dd coupe cinq lignes (celle sur laquelle se situe le curseur et les quatre situes au-dessous). Aprs stre dplac au bon endroit, on utilise la commande p pour coller la ou les lignes coupes sous la ligne sur laquelle se situe le curseur (ce qui dcale la suite du texte vers le bas).

6.9

Commande dannulation des modications

Lerreur est humaine. Et il arrive rgulirement de commettre une erreur par mgarde. Il est alors possible dannuler la dernire modication apporte au document en utilisant la commande u (pour undo). En rptant cette commande, on annule lavant-dernire modication et ainsi de suite.

6.10

Commandes de gestion de chiers

La commande :w (pour write) permet de sauvegarder le chier, si celui-ci a dj un nom. Sil nen a pas, parce quon a lanc vi sans le faire suivre dun nom de chier, 72

6.11. Commandes de recherche et de remplacement ce qui est mal, on peut utiliser :w, suivie dune espace, du nom donner au chier et de Enter . La commande :e (pour edit), suivie dune espace, dun nom de chier et de Enter permet de charger le chier en question dans vi.

6.11

Commandes de recherche et de remplacement

La recherche par mot cl seffectue en tapant / immdiatement suivi du mot rechercher, puis Enter . Elle seffectue depuis la position du curseur vers la n du chier. Pour faire une recherche en remontant, il faut taper ? immdiatement suivi du mot rechercher, puis Enter . Pour rpter la recherche prcdente, on utilise la commande n. Le remplacement a une syntaxe un peu complique de prime abord. Pour remplacer toto par tata dans tout le chier, on utilise :
:1,$s/toto/tata/g

vi,

La commande de remplacement, comme toutes les commandes complexes dans commence par : et se conclut par Enter . On indique ensuite do o effectuer lopration sous la forme de deux numros de ligne, spars par une virgule. On peut utiliser $ pour indiquer la n du chier. Ici, le remplacement seffectue donc de la premire ligne jusqu la n du chier. Vient ensuite s (pour substitute) qui indique quon souhaite effectuer un remplacement. Suivent le mot rechercher et celui devant le remplacer, encadrs et spars par des /. Enn, on indique g (pour global) an deffectuer un remplacement global. Sans cette indication, en cas de prsence de plusieurs occurrences du mot recherch sur une mme ligne, le remplacement ne concernerait que la premire.

6.12

Saisie de caractres ne gurant pas sur le clavier


Les fonctionnalits dcrites dans cette section sont spciques Vim.

Vim permet trs facilement de saisir de nombreux caractres absents des claviers. Le principe est, en mode insertion, de taper CTRL-K suivi de deux caractres ASCII quon peut trouver sur nimporte quel clavier. CTRL-K est la notation utilise dans la documentation de Vim pour reprsenter lappui sur la touche Ctrl , quon maintient enfonce en appuyant sur K . Par exemple, CTRL-K oe permet de saisir . La liste des combinaisons de caractres pouvant suivre CTRL-K est accessible au moyen de la commande : 73

Chapitre 6. Les diteurs de texte vi et Vim

:digraphs

quon peut abrger en :dig pour aller plus vite. La navigation dans cette liste seffectue de la mme faon quavec la commande more (voir le paragraphe 7.4.2 page 92 pour en avoir lexplication). Force est de constater la lecture de cette liste que la faon de faire de Vim est bien plus complte et bien plus simple que celle dEmacs. Le tableau 6.2 indique les combinaisons les plus utiles en franais.
CTRL-K ae CTRL-K AE CTRL-K << CTRL-K >>

CTRL-K oe CTRL-K OE CTRL-K Eu CTRL-K DG

TABLE 6.2 Combinaisons permettant de saisir des caractres usuels en franais avec Vim.

http://vimdoc.sourceforge.net/htmldoc/digraph.html

6.13

Commande dannulation de la commande en cours de saisie

Nous avons vu prcdemment la commande u, qui permet dannuler la dernire modication apporte au document. Comme pour Emacs, il existe une autre forme dannulation, permettant dannuler la saisie dune commande comprenant plusieurs caractres (celles ne consistant que dun caractre ayant un effet instantan). Il sagit tout simplement de la touche Esc .

6.14

Commandes diverses

La commande J (pour join) permet de joindre deux lignes. La ligne sur laquelle se situe le curseur et la ligne suivante fusionnent pour nen plus former quune seule. Une espace est automatiquement ajoute entre les deux anciennes lignes. Spcicit de Vim, il est possible de faire en sorte que, lors de la saisie du texte, un saut de ligne soit insr automatiquement lorsquon dpasse une certaine longueur de ligne. Ceci se fait au moyen de la commande :
:set textwidth=65

74

6.15. Quitter Ici, un saut de ligne sera automatiquement insr lors de la saisie dune ligne si celle-ci dpasse 65 caractres. Le saut de ligne sera insr la place de la dernire espace prcdant cette limite, repoussant le mot en cours de saisie sur la ligne suivante. Une fois cette limite dnie, la commande gqap (toujours spcique Vim) permet de reformater un paragraphe an dharmoniser la longueur des lignes, au plus la longueur dnie par la commande prcdente.

6.15

Quitter

Enn, il existe plusieurs commandes permettant de quitter vi. La plus simple est la commande :q (pour quit). Elle naccepte de quitter vi que si le chier en cours ddition a t sauvegard. Sil ne la pas t, elle afche un message derreur. On peut sauvegarder le chier puis quitter vi grce aux commandes :wq (pour write and quit), :x (pour exit) et ZZ (il y en a trois mais elles donnent exactement le mme rsultat). Si lon souhaite quitter vi sans sauvegarder le chier, on utilise la commande :q! (le point dexclamation force quitter sans sauvegarder le chier).

6.16

Conclusion

Nous avons donc tudi la vingtaine de commandes permettant une utilisation efcace de vi. Celles-ci sont rsumes dans le tableau A.2 page 334. Il ne sagit que dun survol trs rapide de ce quoffre vi mais permettant de se dbrouiller dans la plupart des cas. Le lecteur curieux pourra se reporter aux ouvrages suivants de la bibliographie pour approfondir ses connaissances : Learning the vi and Vim Editors [5] Hacking Vim 7.2 [7] Vi IMprovedVim [3] vi Editor Pocket Reference [4]

75

Troisime partie

Linterprteur de commandes

7
Linterprteur de commandes

un ordinateur se manipule principalement avec la souris, au moyen dune interface graphique prsentant lutilisateur des fentres, des menus, des boutons, etc. Cela na pas toujours t le cas. Autrefois, on exprimait ce quon voulait faire faire lordinateur par crit, grce un vocabulaire spcique, les commandes, qui taient comprises par un logiciel particulier appel interprteur de commandes (shell en anglais). Mais pourquoi diable sintresser un logiciel du pass ? Cest que linterface graphique, si elle est bien adapte des manipulations simples, ne lest pas du tout ds quil sagit deffectuer des actions complexes ou rptitives. Il convient dinsister trs lourdement sur ce dernier point. Souvenons-nous que le mot informatique est n de la fusion des mots information et automatique . Or ce dernier aspect est encore largement sous-exploit et il est frquent de voir des utilisateurs dordinateur effectuer des actions rptitives sans que cela les drange. La faute en revient principalement linterface graphique, qui nest gnralement pas adapte lautomatisation des tches rptitives. Linterprteur de commandes, en revanche, est construit autour de concepts permettant de simplier au maximum ces tches rptitives. Il dispose en effet dun langage de programmation comprenant variables, tests, boucles, etc., permettant denchaner automatiquement des commandes complexes. Il peut tre utilis : soit de manire interactive, lutilisateur tapant directement les commandes excuter, voire des programmes simples ; soit en lisant un chier contenant les commandes excuter, ce qui permet de conserver des enchanements de commandes pour les rutiliser et de concevoir des programmes complexes. Cest pour cela que linterprteur de commandes est toujours rest populaire auprs des informaticiens purs et durs, qui ont besoin dun outil de travail efcace, alors mme que linterface graphique le remplaait vis--vis du grand public. Les annes 1990 ont sonn le glas de linterprteur de commandes, dtrn par des interfaces graphiques toujours plus intuitives et ergonomiques. 79

E NOS JOURS ,

Chapitre 7. Linterprteur de commandes Et puis, bizarrement, certains des plus farouches partisans du tout graphique ont fait marche arrire. Par exemple, Microsoft a sorti en 2006 un interprteur de commandes nomm Windows PowerShell. De diffusion assez condentielle lorigine, celui-ci est disponible depuis mars 2009 via le systme de mises jour de Microsoft pour Windows XP et Windows Vista et est distribu dorigine avec Windows 7. Sous UNIX, en tout cas, linterprteur de commandes na jamais t en voie de disparition. En pratique, il en existe mme plusieurs. Partageant des anctres communs, leur syntaxe est relativement proche. Cette partie sattachera dcrire autant que possible les caractristiques et syntaxes communes lensemble des interprteurs de commandes, en indiquant leurs diffrences lorsque cela sera ncessaire. Nous tudierons galement un certain nombre de commandes, parmi les plus utilises.
http://fr.wikipedia.org/wiki/Shell_(informatique) http://fr.wikipedia.org/wiki/Shell_Unix http://fr.wikipedia.org/wiki/Windows_PowerShell http://fr.wikipedia.org/wiki/Commandes_Unix

7.1

Historique des interprteurs de commandes

Historiquement, le premier interprteur de commandes pour UNIX fut en 1971 le Thompson shell, crit par Ken Thompson, lun des crateurs dUNIX. Celui-ci nest plus utilis aujourdhui, contrairement ses six descendants, dont larbre gnalogique est reprsent dans la gure 7.1. prhistoire Thompson shell

1re gnration

sh

csh

2e gnration

ksh

tcsh

3e gnration

bash

zsh

FIGURE 7.1 Arbre gnalogique des interprteurs de commandes. Les interprteurs de commandes sont souvent dsigns par leur diminutif. Ce sont ces diminutifs qui sont indiqus dans la gure 7.1. Le tableau 7.1 page ci-contre 80

7.1. Historique des interprteurs de commandes dtaille, pour chaque interprteur de commandes, son diminutif ainsi que son nom complet et son crateur. Diminutif
sh csh tcsh ksh bash zsh

Nom Bourne shell C shell TENEX C shell Korn shell Bourne-again shell Z shell

Crateur Steve Bourne Bill Joy Ken Greer David Korn Brian Fox Paul Falstad

TABLE 7.1 Diminutifs, noms et crateurs des interprteurs de commandes. Nayant pas encore de bonnes connaissances du fonctionnement des interprteurs de commandes, nous nallons pas pouvoir rentrer dans les dtails des diffrences entre ces six logiciels mais nous allons en faire un tour dhorizon rapide. Le premier successeur du Thompson shell est le Bourne shell (sh), cr par Steve Bourne en 1977. Il dispose dun langage de programmation trs complet et toujours utilis de nos jours. En revanche, son utilisation en mode interactif est particulirement fastidieuse, puisquaucune aide ne permet de simplier la saisie des commandes. Autre descendant direct du Thompson shell, le C shell (csh), cr par Bill Joy (galement auteur de vi) en 1978, dispose lui aussi dun langage de programmation trs complet, dont la syntaxe est inspire de celle du langage de programmation C et incompatible avec celle du Bourne shell. Il a t peu utilis pour faire de la programmation et est quasiment abandonn pour cela aujourdhui. En revanche, il dispose daides permettant de simplier la saisie des commandes, aides qui ont t reprises et amliores par ses successeurs. Le TENEX C shell (tcsh), cr par Ken Greer en 1981, est driv du C shell et apporte de nombreuses astuces rendant son utilisation interactive particulirement agrable. Extension du Bourne shell, le Korn shell (ksh), cr par David Korn en 1982, a amlior les possibilits de programmation du Bourne shell. Il a galement repris quelques caractristiques du C shell. Le Bourne-again shell (bash), cr par Brian Fox en 1987, se veut un Bourne shell moderne et est driv du Korn shell et du C shell. Il a par ailleurs repris les amliorations apportes par le TENEX C shell a son mode interactif. Il sagit de linterprteur de commandes standard sous Linux et cest galement linterprteur de commandes utilis par dfaut lENSTA ParisTech. Enn, le Z shell (zsh), cr par Paul Falstad en 1990, reprend des caractristiques du TENEX C shell, du Korn shell et du Bourne-again shell. Sa spcicit principale est de comprendre les syntaxes de programmation du Bourne shell et du C shell. 81

Chapitre 7. Linterprteur de commandes Aujourdhui, linterprteur de commandes le plus utilis pour la programmation reste le Bourne shell. En utilisation interactive, on retrouve les TENEX C shell, Bourne-again shell et Z shell. Le lecteur curieux pourra se reporter aux ouvrages suivants de la bibliographie pour approfondir ses connaissances des diffrents interprteurs de commandes : UNIX Shells by Example [20] The UNIX C Shell Field Guide [11] Using csh & tcsh [16] Learning the Korn Shell [25] Learning the bash Shell [19] bash Cookbook [10] bash Quick Reference [23]
http://en.wikipedia.org/wiki/Thompson_shell http://en.wikipedia.org/wiki/Bourne_shell http://en.wikipedia.org/wiki/C_shell http://www.tcsh.org/Welcome http://fr.wikipedia.org/wiki/Tcsh http://www.kornshell.com/ http://fr.wikipedia.org/wiki/Korn_shell http://www.gnu.org/software/bash/ http://fr.wikipedia.org/wiki/Bourne-Again_shell http://zsh.sourceforge.net/ http://fr.wikipedia.org/wiki/Zsh

7.2
7.2.1

Concepts fondamentaux
Lmulateur de terminal

Comme nous lavons dj vu dans lintroduction de ce document, le lancement dun interprteur de commandes ouvre une fentre quasiment vide, hormis sa premire ligne. En ralit, nous avons affaire deux logiciels : linterprteur de commandes lui-mme, qui est la partie la plus interne de la fentre ; un mulateur de terminal, qui permet dutiliser linterprteur de commandes dans un environnement graphique. En effet, linterprteur de commandes est conu pour tre utilis au moyen dun priphrique des annes 1970 appel terminal. Un terminal tait simplement compos dun clavier et dun cran nafchant que du texte, le tout reli un systme informatique. Les logiciels fonctionnant dans un terminal lisaient du texte, entr au moyen du clavier et afchaient en rsultat du texte lcran. Souvenez-vous : sous UNIX, on aime bien le texte. 82

7.2. Concepts fondamentaux Mais pourquoi utilise-t-on encore au XXIe sicle des logiciels conus pour des environnements dpasss ? Linterprteur de commandes nest en effet pas le seul logiciel sattendre fonctionner dans un terminal, il en existe des centaines dautres et ils sont dailleurs largement majoritaires sous UNIX. Ceci a lavantage de la simplicit. Beaucoup de logiciels usuels effectuent des fonctions simples (copier un chier, dplacer un chier, effacer un chier, etc.) qui ne ncessitent en rien lutilisation dune interface graphique. Il est donc commode de conserver un mode de fonctionnement simple pour ces logiciels, savoir lire et crire du texte et de dporter la gestion graphique dans lmulateur de terminal, an que tous ces logiciels puissent tre utiliss par ce biais, plutt que de tous les modier pour fonctionner nativement en environnement graphique. Par ailleurs, ceci permet dutiliser les fonctions de redirection, fondamentales sous UNIX, qui seront abordes au paragraphe 9.4 page 174.
http://fr.wikipedia.org/wiki/Terminal_informatique http://fr.wikipedia.org/wiki/mulateur_de_terminal

7.2.2

Linvite

Revenons linterprteur de commandes. son ouverture, celui-ci afche une invite (prompt en anglais) suivie du curseur indiquant lemplacement du prochain caractre qui sera tap au clavier. Linvite est un repre visuel indiquant que linterprteur de commandes attend que lutilisateur saisisse une commande. Linvite par dfaut des Bourne shell et Korn shell est $, celle du Bourne-again shell est bash-x.y$ (o x.y est le numro de version du Bourne-again shell utilis), celle des C shell, TENEX C shell et Z shell est %. Le contenu de linvite est congurable et beaucoup dadministrateurs de systmes informatiques en protent pour y faire gurer quelques informations utiles. En particulier, lENSTA ParisTech, linvite est de la forme (les parties en gras variant dune personne une autre) :
identifiant@ordinateur:/home/promo/identifiant>

On reconnat : 1. lidentiant de lutilisateur ; 2. le caractre @ en tant que sparateur visuel ; 3. le nom de lordinateur sur lequel on est connect ; 4. le caractre
:

en tant que sparateur visuel ; 83

Chapitre 7. Linterprteur de commandes 5. le chemin daccs absolu du rpertoire courant (nous reviendrons respectivement sur ces concepts aux paragraphes 8.3.6 page 118 et 8.3.4 page 113), contenant la promotion de lutilisateur et son identiant ; 6. le caractre > en tant que sparateur visuel et dernier composant de linvite. An de simplier les exemples qui seront donns par la suite, nous utiliserons simplement $ comme invite, sauf dans certains cas particuliers.
http://en.wikipedia.org/wiki/Command-line_interface#Command_prompt

7.2.3

Pass, prsent et futur

Tapons une commande simple dans linterprteur de commandes (ce que lutilisateur tape au clavier est gur en gras dans les exemples) :
$ date Enter Wed Jul 29 12:58:31 CEST 2009 $

Puis une autre (la commande cal afche le calendrier du mois) :


$ cal Enter July 2009 S 5 M Tu 6 7 W Th 1 8 2 F 3 S 4

9 10 11

12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 $

On aboutit une fentre de terminal comme celle de la gure 7.2 page ci-contre, quon peut dcomposer comme indiqu en gure 7.3 page suivante. Tout ce qui se trouve au-dessus de la dernire invite, celle suivie du curseur, montre le pass. Il sagit de la trace des commandes saisies prcdemment et de leurs rsultats. Il nest pas rare de voir des utilisateurs dbutants agiter frntiquement leur souris en cherchant modier quelque chose dans cette zone. Cest bien videmment impossible, le pass est immuable, en histoire comme en informatique. La ligne contenant la dernire invite, suivie du curseur, reprsente le prsent. Cest la seule zone sur laquelle on peut agir. 84

7.2. Concepts fondamentaux

$ date Wed Jul 29 12:58:31 CEST 2009 $ cal July 2009 S 5 M Tu 6 7 W Th 1 8 2 F 3 S 4

9 10 11

12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 $

FIGURE 7.2 Quelques commandes.

$ date Wed Jul 29 12:58:31 CEST 2009 $ cal July 2009 S M Tu 6 7 W Th 1 5 8 2 F 3 S 4

pass

9 10 11

12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

prsent futur

FIGURE 7.3 Quelques commandes (dcomposition temporelle).

85

Chapitre 7. Linterprteur de commandes La zone situe dessous reprsente le futur. Elle est bien videmment vide. Comme la fentre de lmulateur de terminal a une taille nie et quil est prfrable, an de pouvoir sy rfrer, de montrer un pass certain plutt quun hypothtique futur, cette zone a vocation diminuer jusqu disparatre, laissant lensemble de la fentre au pass, hormis la dernire ligne ddie au prsent.

7.2.4

Notation des combinaisons de touches

Bien quutilisant les mmes touches du clavier, les combinaisons de touches ne se reprsentent pas de la mme faon en fonction des logiciels dans lesquels on les utilise. Ainsi, on notera ^A lappui sur les touches Ctrl (reprsente donc par ^) puis A dans linterprteur de commandes. Cest ce quon notait C-a avec Emacs.

7.2.5

Sensibilit la casse

Dans linterprteur de commandes, la sensibilit la casse, cest--dire la diffrence entre majuscules et minuscules, est systmatique. On utilise principalement des minuscules, plus faciles lire et saisir :
$ date Enter Sun Aug 9 12:57:00 CEST 2009 $ DATE Enter bash: DATE: command not found $

http://fr.wikipedia.org/wiki/Sensibilit__la_casse

7.2.6

dition de la ligne de commande et historique

Nous navons vu pour le moment que quelques commandes trs simples. Nous allons voir par la suite que dautres peuvent tre assez longues taper. Lerreur tant humaine, il arrive de se tromper et il est agaant de devoir effacer une partie de la ligne quon est en train de taper parce quon vient de se rendre compte quon a commis une erreur en dbut de ligne. Heureusement, les interprteurs de commandes modernes (TENEX C shell, Korn shell, Bourne-again shell et Z shell) permettent dditer la ligne de commande quon est en train de saisir. Il est possible de se dplacer au moyens des ches gauche et droite an daller modier quelque chose sans devoir effacer toute la n de la ligne. Cela semble assez vident pour qui a utilis un diteur de texte mais cette possibilit 86

7.2. Concepts fondamentaux nexiste pas dans les interprteurs de commandes les plus anciens (Bourne shell et C shell), ce qui rend leur utilisation interactive assez frustrante. Mieux encore, il est possible dutiliser certaines combinaisons de touches identiques celles dEmacs, dans la mesure o elles ont un sens lorsquon travaille sur une ligne unique. Parmi celles abordes au chapitre 5 page 53, ^A, ^E, ^D et ^K (quivalentes C-a, C-e, C-d et C-k) sont utilisables. Plus fort, les touches ches haut et bas permettent de naviguer dans lhistorique des commandes passes. Un appui sur rappelle la commande prcdente, en positionnant le curseur en n de ligne. Il est alors possible de lexcuter nouveau en appuyant simplement sur Enter ou dutiliser les ches et les commandes Emacs indiques ci-dessus an de la modier avant de lexcuter. Il nest dailleurs pas ncessaire que le curseur soit en n de ligne pour excuter une commande en appuyant sur Enter , cela fonctionne nimporte o. Si lon souhaite rappeler une commande passe pour lexcuter lidentique ou la modier, il suft de remonter avec jusquau bon endroit. Si lon est remont trop haut, on peut utiliser pour redescendre. Ceci est particulirement utile et doit tre utilis ds que possible, pour rappeler une commande rcente et lexcuter nouveau, telle quelle ou lgrement modie. Il existe dautres faons dutiliser lhistorique des commandes, qui seront tudies au paragraphe 9.1 page 157.

7.2.7

Forme des exemples dans la suite du document

partir de maintenant, an dallger les exemples, ceux-ci nindiqueront plus la commande taper en gras mais de faon normale. Par ailleurs, lappui sur la touche Enter ne sera plus indiqu, de mme que linvite et le curseur suivant lexcution dune commande. Ainsi, ce quon crivait :

$ date Enter Thu Jul 30 10:08:18 CEST 2009 $

devient simplement :

$ date Thu Jul 30 10:08:18 CEST 2009

87

Chapitre 7. Linterprteur de commandes

7.3

La commande ls, la syntaxe des commandes

La commande ls est probablement la plus utilise. On reconnat dailleurs les commandes frquemment utilises leur nom compos de deux caractres, an de pouvoir les saisir le plus vite possible. La commande ls (pour list) permet dafcher la liste de ses chiers :
$ ls toto.txt

On y reconnat le chier toto.txt cr lors de ltude des diteurs de texte. Il est difcile de sen rendre compte avec un seul chier mais, lorsquelle en a plusieurs afcher, la commande ls les trie dans lordre lexicographique.
http://en.wikipedia.org/wiki/Ls

7.3.1

Les options

Il est souvent ncessaire dafcher, pour chaque chier, des informations supplmentaires. Ceci se fait au moyen de loption -l de la commande ls :
$ ls -l total 4 -rw-r--r-- 1 babafou prof 334 Jul 30 17:02 toto.txt

La possibilit de modier le comportement dune commande grce une option nest pas spcique ls. Il sagit dun mcanisme gnral et, en pratique, quasiment toutes les commandes acceptent une ou plusieurs options. Loption est compose dun tiret suivi gnralement dun caractre. Il existe des options composes dun tiret suivi dun mot mais cela est plus rare. Loption est obligatoirement spare de la commande qui la prcde par une espace (on peut en mettre plusieurs mais cest inutile). Revenons loption -l de la commande ls. Celle-ci provoque lafchage des chiers au format long (-l pour long). La premire ligne du rsultat, sans grand intrt, indique le nombre de blocs occups sur disque par lensemble des chiers. La suite est plus intressante. On y retrouve nos chiers, un par ligne, dont le nom est indiqu en n de ligne. Auparavant, des informations supplmentaires sont alignes en colonnes. Cest une forme dafchage trs utilise sous UNIX et que nous retrouverons par la suite. Ces colonnes indiquent respectivement : 1. le type et les droits daccs du chier ; 88

7.3. La commande ls, la syntaxe des commandes 2. le nombre de liens sur le chier ; 3. le propritaire du chier ; 4. le groupe du chier ; 5. la taille du chiers en octets ; 6. la date de dernire modication du chier (les trois colonnes nen forment quune seule) ; 7. enn, le nom du chier. La premire colonne doit tre lue comme un caractre, indiquant le type du chier, suivi de trois groupes de trois caractres, indiquant les droits daccs du chier. Le type du chier peut tre lun de ceux indiqus dans le tableau 7.2.
b c d l p s

chier ordinaire chier spcial de type bloc chier spcial de type caractre rpertoire (directory en anglais) lien symbolique tuyau nomm (pipe en anglais) prise rseau (socket en anglais) TABLE 7.2 Types de chiers.

En pratique, les chiers quon rencontre le plus souvent sont les chiers ordinaires. Ceux-ci sont principalement des chiers de donnes, comme notre chier toto.txt, mais il peut galement sagir de chiers excutables (cest--dire de programmes). On rencontre galement beaucoup de rpertoires (voir le paragraphe 8.3 page 107) ainsi que quelques liens symboliques (voir le paragraphe 8.1.4 page 100), leur usage tant assez limit. Nous discuterons des chiers spciaux au paragraphe 9.4.1 page 174. Nous naborderons pas les autres types de chiers. Les droits daccs seront tudis au paragraphe 8.5 page 126. La signication de la deuxime colonne sera aborde au paragraphe 8.1.4 page 100. La troisime colonne indique lutilisateur qui est propritaire du chier et la quatrime le groupe du chier. Ces notions sont rapprocher des droits daccs et seront abordes en mme temps. La cinquime colonne indique, pour les chiers ordinaires, leur taille en octets. Nous verrons le moment donn la signication de cette colonne pour les rpertoires et les liens symboliques. La sixime colonne indique la date de dernire modication du chier. Il sagit du mois, du jour et, si le chier a t modi pour la dernire fois il y a moins de six mois, de lheure et de la minute, sinon de lanne. 89

Chapitre 7. Linterprteur de commandes La commande ls est trs souvent utilise avec loption -l. Cest pourquoi beaucoup de sites crent un alias pour ls -l. Un alias est un diminutif pour une commande plus longue frquemment utilise. lENSTA ParisTech, lalias pour ls -l est ll. Une autre option utile de ls est loption -a :
$ ls -a . .. .Xdefaults .bash_history .bash_logout .bash_profile .bashrc .cshrc .elm .mailrc toto.txt

Loption -a (pour all) permet dafcher tous les chiers, y compris ceux dont le nom commence par un point, ce que ls ne fait pas par dfaut. Il ne sagit pas de chiers cachs comme il peut en exister dans dautres systmes dexploitation, tout est transparent sous UNIX. En revanche, par convention, ls nafche simplement pas ces chiers. Les chiers dont le nom commence par un point sont traditionnellement des chiers de conguration pour divers logiciels (leur nom se termine gnralement par rc 1 ) ou des chiers permettant aux logiciels de sauvegarder des informations lors de leur fermeture. Ces chiers doivent exister mais il nest pas ncessaire de les avoir toujours sous les yeux. Cest pour cela que ls ne les afche pas si lon nutilise pas loption -a. Il est possible de combiner les options -a et -l :
$ ls -a -l total 108 drwxr-xr-x 6 babafou prof drwxr-xr-x 3 root root -rw-r--r-- 1 babafou prof -rw------- 1 babafou prof -rw-r--r-- 1 babafou prof -rw-r--r-- 1 babafou prof -rw-r--r-- 1 babafou prof -rw-r--r-- 1 babafou prof drwxr-xr-x 2 babafou prof -rw-r--r-- 1 babafou prof -rw-r--r-- 1 babafou prof 4096 Jul 30 17:02 . 4096 Jun 26 10:16 .. 576 Sep 3 2007 .Xdefaults 167 Jul 10 12:39 .bash_history 24 Sep 3 2007 .bash_logout 191 Feb 18 14:22 .bash_profile 176 Sep 48 Sep 4096 Sep 26 Sep 3 3 3 3 2007 .bashrc 2007 .cshrc 2007 .elm 2007 .mailrc

334 Jul 30 17:02 toto.txt

On a alors un afchage long de tous les chiers. Ceci est valable pour la plupart des commandes. Dans la mesure o elles ne sont pas antagonistes, il est possible de combiner les options an den cumuler les effets.
1. Le sufxe rc vient de RUNCOM, un lointain anctre des interprteurs de commandes.

90

7.4. Les commandes dafchage : cat, more et less Lordre des options est sans importance, donc ls -a -l et ls -l -a sont quivalentes et on peut les contracter en ls -al et ls -la. Tout ceci aboutit au mme rsultat. Il existe de nombreuses autres options pour ls, que nous naborderons pas.
http://en.wikipedia.org/wiki/Command-line_interface#Command-line_option

7.3.2

Les arguments

Si lon souhaite obtenir lafchage long des informations concernant un seul chier, sans avoir une fentre pollue par les informations concernant dautres chiers, il est possible de lindiquer en argument de la commande ls :
$ ls -l toto.txt -rw-r--r-- 1 babafou prof 334 Jul 30 17:02 toto.txt

Petit point de vocabulaire, -l est une option (nous venons de voir quil peut y en avoir plusieurs) et toto.txt un argument (il peut galement y en avoir plusieurs). Commande, option(s) et argument(s) doivent tre spars les uns des autres par des espaces. Autre exemple, si lon souhaite afcher les informations concernant toto.txt et .bashrc, on peut taper :
$ ls -l toto.txt .bashrc -rw-r--r-- 1 babafou prof 176 Sep 3 2007 .bashrc -rw-r--r-- 1 babafou prof 334 Jul 30 17:02 toto.txt

Notez quil nest pas ncessaire dindiquer loption -a dans la mesure o le nom du chier commenant par un point est donn en argument. Par ailleurs, lordre des arguments est sans effet sur lafchage de ls, qui est toujours tri dans lordre lexicographique. En rsum, les options modient le comportement de la commande, les arguments lui indiquent ce sur quoi elle doit travailler.
http://en.wikipedia.org/wiki/Command-line_interface#Arguments

7.4

Les commandes dafchage : cat, more et less

Il est souvent utile dafcher un chier texte lcran, an de lire son contenu sans pour autant vouloir le modier. Utiliser un diteur de texte pour cela nest donc pas la bonne solution. 91

Chapitre 7. Linterprteur de commandes

7.4.1

La commande cat

La commande cat (pour catenate) permet justement dafcher le contenu du ou des chiers texte passs en arguments :
$ cat tata.txt Ceci est le contenu du fichier tata.txt. Il est bien court mais tata.txt est un joli fichier.

Si plusieurs noms de chiers sont passs en arguments, leur contenu est afch dans le mme ordre, sans sparation particulire entre les chiers :
$ cat tata.txt titi.txt tutu.txt Ceci est le contenu du fichier tata.txt. Il est bien court mais tata.txt est un joli fichier. Ceci est le contenu du fichier titi.txt. Il est bien court mais titi.txt est un joli fichier. Ceci est le contenu du fichier tutu.txt. Il est bien court mais tutu.txt est un joli fichier.

Attention, cat ne permet dafcher que des chiers texte. Il nest pas question de lutiliser pour visualiser des images. Lorsquelle lit le contenu dun chier, la commande cat lafche tel quel. En pratique, cest lmulateur de terminal qui traduit la valeur de chaque octet envoy par cat pour afcher le glyphe correspondant chaque octet ou chaque groupe doctets, conformment au codage utilis (voir le paragraphe 4.1 page 43). Il convient donc dtre attentif au codage des chiers car afcher un chier cod en ISO 8859-15 dans un mulateur de terminal congur en UTF-8 (ou linverse) risque dafcher des choses tranges la place des caractres dont le code ne fait pas partie de lASCII.
http://fr.wikipedia.org/wiki/Cat_(Unix)

7.4.2

La commande more

La commande cat a un petit dfaut. Elle afche, elle afche, elle afche et elle ne sarrte que quand elle a ni. Lorsquon afche un chier relativement long, tout son contenu dle et lon nen voit nalement que la dernire page. Il est bien possible de remonter grce lascenseur de lmulateur de terminal mais celui-ci a une capacit limite et le dbut des chiers vraiment longs a gnralement dj disparu. Pour pouvoir lire des chiers texte un peu longs dans de bonnes conditions, il est prfrable dutiliser la commande more : 92

7.5. La commande man

$ more toto.txt

La commande more prend alors le contrle de la totalit de la fentre de lmulateur de terminal an dy afcher le contenu du chier toto.txt. Il est possible dy naviguer au moyen des touches : Enter , pour descendre dune ligne ; , pour descendre dune page (la hauteur dune page est la hauteur de la fentre) ; b , pour remonter dune page ; , , Page , Page fonctionnent galement comme attendu ; enn, la touche q permet de quitter more. La commande more tire son nom de ce quelle afche en bas de page an dindiquer la position actuelle dans le chier :
--More--( n %) http://fr.wikipedia.org/wiki/More_(Unix)

7.4.3

La commande less

La commande less nomme ainsi par jeu de mots avec more sutilise de la mme faon. Elle a nanmoins un avantage sur more. force de faire dler le contenu du chier, la commande more, lorsquelle afche sa dernire ligne, se termine automatiquement et lon revient linvite de linterprteur de commandes. Ceci peut tre gnant si lon est all trop vite et quon souhaite revenir en arrire. Il faut alors relancer la commande. En revanche, less na pas ce dfaut. Arrive en n de chier, cette commande ne se termine pas et il est possible soit de remonter soit de la quitter explicitement. Il est donc souvent plus pratique dutiliser less plutt que more. noter que more est une commande standard, fournie avec tout systme UNIX, ce qui nest pas le cas de less. Cette dernire est nanmoins trs rpandue et, en particulier, est fournie avec tous les systmes UNIX libres (BSD, Linux).
http://www.gnu.org/software/less/ http://www.greenwoodsoftware.com/less/ http://en.wikipedia.org/wiki/Less_(Unix)

7.5

La commande man

Nous navons abord au paragraphe 7.3 page 88 que deux des nombreuses options de la commande ls. Le lecteur curieux qui souhaite en apprendre davantage et luti93

Chapitre 7. Linterprteur de commandes lisateur qui a oubli le fonctionnement exact de telle commande ou de telle option peuvent se reporter au manuel en ligne disponible sur tout systme UNIX grce la commande man (pour manual). Elle sutilise en lui passant en argument le nom de la commande dont on souhaite consulter le manuel :
$ man ls

Ceci afche le manuel de la commande ls au moyen de more ou less. Toutes les commandes utilisables dans linterprteur de commandes ont systmatiquement un manuel en ligne, y compris man :
$ man man

http://fr.wikipedia.org/wiki/Man_(Unix)

7.6

La commande clear
La commande clear permet deffacer lcran de linterprteur de commandes :

$ date Mon Mar $ ls -l -rw-r--r-- 1 babafou prof $ clear 334 Jul 30 17:02 toto.txt 1 17:56:08 CET 2010

Aprs avoir appuy sur la touche Enter , on obtient un cran vide ne contenant plus, tout en haut, que linvite et le curseur :
$

Lhistorique (voir les paragraphes 7.2.6 page 86 et 9.1 page 157), en revanche, nest pas effac donc il est toujours possible de naviguer dans les commandes prcdentes au moyen des touches ches.
http://fr.wikipedia.org/wiki/Clear_(Unix)

94

7.7. La commande exit

7.7

La commande exit
La commande exit permet de quitter linterprteur de commandes :

$ exit

http://fr.wikipedia.org/wiki/Exit_(Unix)

95

8
Gestion, organisation et traitement des chiers

ont une trs grande importance sous UNIX. Ils forment la base du stockage de linformation et de nombreux concepts manipuls par le systme dexploitation peuvent tre assimilis des chiers. Nous tudierons les commandes fondamentales permettant de grer des chiers, puis de les organiser. Nous tudierons galement plusieurs mcanismes permettant de traiter des chiers efcacement ainsi que celui permettant den contrler laccs. Enn, nous tudierons comment conserver des donnes nayant plus dutilit immdiate, en occupant le moins de volume possible.
ES FICHIERS

8.1

Gestion des chiers

Nous allons aborder ici les commandes usuelles de gestion des chiers, qui en permettent la copie, le renommage, la suppression ainsi que la cration de liens.

8.1.1

Copie de chiers : la commande cp

La commande cp (pour copy) permet de crer une copie dun chier :

$ cp toto.txt tata.txt

La commande cp prend deux noms de chiers en arguments : 1. le chier dorigine, qui doit exister pralablement, ici toto.txt ; 2. le chier que lon souhaite crer comme une copie du premier, ici tata.txt. An de bien comprendre le fonctionnement de cp, il est utile de contrler la liste des chiers avant et aprs lopration, comme ceci : 97

Chapitre 8. Gestion, organisation et traitement des chiers

$ ll total 4 -rw-r--r-- 1 babafou prof 334 Jul 30 17:02 toto.txt $ cp toto.txt tata.txt $ ll total 8 -rw-r--r-- 1 babafou prof 334 Jul 31 15:11 tata.txt -rw-r--r-- 1 babafou prof 334 Jul 30 17:02 toto.txt

Remarquez que le chier tata.txt est dat du moment o lon a effectu la copie. Un chier copi est donc toujours plus rcent que le chier dorigine. La commande cp nafche rien si elle se droule correctement. Cest tout fait normal. La plupart des commandes que nous allons tudier sont destines raliser une fonction prcise, pas afcher quelque chose. Si un chier tata.txt existait avant deffectuer la copie, il est cras sans demander conrmation. Si lon souhaite tre prudent et viter dcraser un chier par mgarde, on peut utiliser loption -i (pour interactive) :
$ cp -i toto.txt tata.txt cp: overwrite tata.txt?

On peut alors rpondre y si lon souhaite craser le chier tata.txt ou n pour annuler lopration. Dans lenvironnement informatique de lENSTA ParisTech, la commande cp utilise est en ralit un alias sur cp -i. Elle demande donc toujours conrmation en cas dcrasement. La copie peut chouer, en particulier si chier dorigine nexiste pas. En cas derreur, un message appropri est afch :
$ cp tutu.txt tata.txt cp: cannot stat tutu.txt: No such file or directory

http://en.wikipedia.org/wiki/Cp_(Unix)

8.1.2

Renommage de chiers : la commande mv

La commande mv (pour move) permet de renommer un chier : 98

8.1. Gestion des chiers

$ mv toto.txt tata.txt

La commande mv prend deux noms de chiers en arguments : 1. le chier dorigine, qui doit exister pralablement, ici toto.txt ; 2. le nouveau nom que lon souhaite donner ce chier, ici tata.txt. la diffrence de cp, on a donc toujours un chier unique avant et aprs lopration. Il a seulement chang de nom entre temps :
$ ll total 4 -rw-r--r-- 1 babafou prof 334 Jul 30 17:02 toto.txt $ mv toto.txt tata.txt $ ll total 4 -rw-r--r-- 1 babafou prof 334 Jul 30 17:02 tata.txt

La commande mv nafche rien si elle se droule correctement. Si un chier tata.txt existait avant deffectuer le renommage, il est cras sans demander conrmation. Si lon souhaite tre prudent et viter dcraser un chier par mgarde, on peut utiliser loption -i (comme pour cp) :
$ mv -i toto.txt tata.txt mv: overwrite tata.txt?

On peut alors rpondre y si lon souhaite craser le chier tata.txt ou n pour annuler lopration. Dans lenvironnement informatique de lENSTA ParisTech, la commande mv utilise est en ralit un alias sur mv -i. Elle demande donc toujours conrmation en cas dcrasement. Le renommage peut chouer, en particulier si le chier dorigine nexiste pas. En cas derreur, un message appropri est afch :
$ mv tutu.txt tata.txt mv: cannot stat tutu.txt: No such file or directory

99

Chapitre 8. Gestion, organisation et traitement des chiers


http://en.wikipedia.org/wiki/Mv

8.1.3

Suppression de chiers : la commande rm

La commande rm (pour remove) permet de supprimer un ou plusieurs chiers, dont les noms sont passs en arguments :
$ rm toto.txt $ rm toto1.txt toto2.txt toto3.txt

La commande rm nafche rien si elle se droule correctement. Il nest demand aucune conrmation avant de supprimer un chier. Si lon souhaite tre prudent et viter de supprimer un chier par mgarde, on peut utiliser loption -i :
$ rm -i toto1.txt toto2.txt toto3.txt rm: remove regular file toto1.txt? y rm: remove regular file toto2.txt? n rm: remove regular file toto3.txt?

Si lun des chiers supprimer nexiste pas, rm afche un message derreur mais supprime correctement les chiers qui existent :
$ rm toto.txt tutu.txt tata.txt rm: cannot remove tutu.txt: No such file or directory

Lorsquun chier a t supprim, il ny a aucun moyen simple pour le rcuprr. Do limportance deffectuer des sauvegardes rgulires de ses donnes.
http://en.wikipedia.org/wiki/Rm_(Unix)

8.1.4

Cration de liens : la commande ln

La commande ln (pour link) permet de crer un lien (link en anglais) supplmentaire sur un chier. Pour comprendre son fonctionnement, il faut se pencher sur la faon dont les chiers sont stocks sur disque. Un chier est compos de trois lments : 1. un ou plusieurs noms (nous allons voir quun mme chier peut avoir plusieurs noms, cest tout lintrt de la commande ln) ; 2. un i-nud (inode en anglais) ; 100

8.1. Gestion des chiers 3. son contenu proprement dit. Le nom dun chier ainsi que son contenu vous sont familiers. Li-nud, en revanche, est un concept nouveau, bien que dj abord sans le savoir. Li-nud est une structure du systme de chiers permettant de stocker, pour un chier donn : ses droits daccs ; son nombre de liens ; son propritaire ; son groupe ; sa taille ; la date de dernire modication de son contenu ; la date de dernire modication de li-nud lui-mme ; sa date de dernier accs ; et enn un pointeur vers la localisation de son contenu sur le disque. En pratique, la majorit de ces informations se retouve dans lafchage de ls -l. Un numro unique est associ li-nud, permettant de le localiser sur le disque. Ce numro est appel index et son initiale donn son i au terme i-nud . Le nom du chier fait rfrence au numro de son i-nud. Cette relation est ce quon appelle un lien. Li-nud est lui aussi rattach son contenu. Le tout est schmatis dans la gure 8.1. Ce chanage permet de recoller tous les morceaux dun chier. nom
lien

i-nud

contenu FIGURE 8.1 Structure dun chier. Enn, on peut faire afcher le numro di-nud associ un chier au moyen de loption -i de la commande ls :
$ ls -i 68782057 toto.txt

Combine avec loption -l, elle fait apparatre le numro di-nud en premire colonne : 101

Chapitre 8. Gestion, organisation et traitement des chiers

$ ls -il total 4 68782057 -rw-r--r-- 1 babafou prof 334 Jul 30 17:02 toto.txt

Cette digression thorique nous ayant permis de prparer le terrain, revenons la commande ln. Celle-ci permet donc de crer un lien supplmentaire sur un chier existant, cest--dire un nom supplmentaire :
$ ls -il total 4 68782057 -rw-r--r-- 1 babafou prof 334 Jul 30 17:02 toto.txt $ ln toto.txt tata.txt $ ls -il total 8 68782057 -rw-r--r-- 2 babafou prof 334 Jul 30 17:02 tata.txt 68782057 -rw-r--r-- 2 babafou prof 334 Jul 30 17:02 toto.txt

La commande ln a cr un second nom, tata.txt, pour le chier ordinaire comme schmatis dans la gure 8.2. Il ne sagit pas dune copie car les deux noms correspondent au mme numro di-nud. Celui-ci, ainsi que le contenu du chier, nont donc pas t dupliqus, ce qui fait que la cration dun lien ne prend quasiment pas de place sur disque. On peut galement remarquer que la valeur de la colonne indiquant le nombre de liens a augment. Celle-ci indique donc le nombre de noms dont un chier dispose.
toto.txt, toto.txt tata.txt

lien

lien

i-nud

contenu FIGURE 8.2 Structure dun chier ayant deux noms. Supprimer lun des deux noms ne supprime pas le chier en tant que tel (i-nud et contenu), il supprime le lien correspondant. Tant quil existe au moins un lien sur un chier, celui-ci reste accessible. En revanche, supprimer lun des deux noms modie le nombre de liens du chier : 102

8.1. Gestion des chiers

$ ls -il total 8 68782057 -rw-r--r-- 2 babafou prof 334 Jul 30 17:02 tata.txt 68782057 -rw-r--r-- 2 babafou prof 334 Jul 30 17:02 toto.txt $ rm tata.txt $ ls -il total 4 68782057 -rw-r--r-- 1 babafou prof 334 Jul 30 17:02 toto.txt

Comme pour cp et mv, si un chier tata.txt existait, il est cras lors de la cration du lien. L encore, loption -i de ln permet de demander conrmation en cas dcrasement :
$ ln -i toto.txt tata.txt ln: replace tata.txt?

Il est possible de crer autant de liens dun chier quon le souhaite. Pour le moment, pouvoir disposer de plusieurs noms pour le mme chier peut paratre inutile. Nous y reviendrons au paragraphe 8.3.3 page 111. Toujours est-il quil est difcile de distinguer les liens correspondant un chier particulier si lon travaille avec un grand nombre de chiers. Pour cela, il existe un autre type de lien, le lien symbolique. Loption -s de ln permet de crer un lien symbolique :
$ ll total 4 -rw-r--r-- 1 babafou prof 334 Jul 30 17:02 toto.txt $ ln -s toto.txt tata.txt $ ll total 4 lrwxrwxrwx 1 babafou prof 8 Aug 3 2009 tata.txt -> toto.txt -rw-r--r-- 1 babafou prof 334 Jul 30 17:02 toto.txt

Remarquez que : il est clairement indiqu que tata.txt est un lien symbolique vers toto.txt ; un lien symbolique nest pas un chier ordinaire, comme lindique le caractre l en premire colonne, il sagit dun type de chier particulier ; le nombre de liens sur le chier toto.txt na pas chang. 103

Chapitre 8. Gestion, organisation et traitement des chiers Le lien symbolique est en fait un type de chier particulier contenant le nom dun autre chier, comme schmatis dans la gure 8.3. Le contenu de tata.txt est donc toto.txt, do sa taille de 8 octets et le fait que ls -l puisse afcher tata.txt -> toto.txt. Lorsquon tente de lire le contenu de tata.txt, le systme dexploitation remarque quil ne sagit pas dun chier ordinaire mais dun lien symbolique et accde en ralit au contenu de toto.txt. lien symbolique chier ordinaire
tata.txt toto.txt

i-nud

i-nud

toto.txt

contenu

FIGURE 8.3 Principe du lien symbolique. Lavantage par rapport au lien vu prcdemment est quil est clairement indiqu dans lafchage de ls -l, sans avoir comparer les numros di-nud, que tata.txt est un lien symbolique vers toto.txt. Linconvnient est que la relation entre les deux noms nest pas symtrique. En effet, dans la mesure o le lien symbolique contient le nom du chier de rfrence, le premier cessera de fonctionner si le second est supprim ou renomm. Nanmoins, le simple fait de pouvoir afcher la relation entre les deux chiers fait que les liens symboliques sont de loin les plus utiliss.
http://en.wikipedia.org/wiki/Ln_(Unix) http://fr.wikipedia.org/wiki/Inode

8.2

Le compltement

Vous laurez certainement remarqu, travailler avec linterprteur de commandes ncessite lutilisation constante de nombreux noms de chiers. Nous reviendrons au paragraphe 8.6 page 134 sur la bonne faon de nommer ses chiers mais on peut, sans trop dorer le sujet, deviner quun bon nom de chier est un nom qui permet den identier le contenu sans ambigut. Cest donc un nom relativement long et prcis. Or taper de longs noms de chiers en entier peut vite savrer fastidieux pour lutilisateur. 104

8.2. Le compltement Cest pourquoi les interprteurs de commandes modernes (TENEX C shell, Korn shell, Bourne-again shell et Z shell), en plus davoir une fonction ddition de la ligne de commande, qui fait dj gagner beaucoup de temps, proposent aussi le compltement 1 (completion en anglais) des noms de chiers. Lide est de taper le minimum de choses et de laisser linterprteur de commande complter automatiquement les noms des chiers, plutt que de les taper en entier. Voyons tout de suite un exemple. Le principe du compltement est de taper le dbut du nom de chier et de laisser linterprteur de commandes le terminer tout seul en appuyant sur la touche tabulation :
$ ll to

Dans la mesure o toto.txt est le seul chier commenant par to, linteprteur de commandes complte le nom du chier, le fait suivre dune espace (au cas o lon souhaite taper dautres noms de chiers) et positionne le curseur la suite :
$ ll toto.txt

On peut alors saisir un autre nom de chier ou simplement valider la commande avec Enter (lespace en n de ligne est alors ignore, il est inutile de la supprimer). Dans le cas o plusieurs chiers commencent de la mme faon, linterprteur de commandes va complter ce quil peut, puis demander lutilisateur de poursuivre manuellement. Commenons par prparer le terrain :
$ cp toto.txt toto1.txt $ cp toto.txt toto2.txt $ cp toto.txt toto3.txt

Nous avons donc maintenant quatre chiers commenant par to.


$ ll to

Linterprteur de commandes regarde quels sont les chiers dont le nom commence par to. Ils ont tous en commun la proprit de commencer par toto donc linterprteur de commandes est capable de complter le nom de chier jusqu ce point :
$ ll toto

1. On utilise galement langlicisme compltion, qui est vraiment laid.

105

Chapitre 8. Gestion, organisation et traitement des chiers Remarquez que le curseur est coll toto, sans espace comme nous avions dans le prcdent exemple. Ceci est un repre visuel indiquant que le nom du chier nest pas complet et que linterprteur de commandes a besoin que lutilisateur tape quelque chose pour laider faire la diffrence entre les noms des chiers commenant par toto. Si lon na plus en mmoire les noms des chiers, on peut les faire afcher en tapant deux fois sur la touche :
$ ll toto

toto

Linterprteur de commandes afche alors les noms des chiers commenant par et rafche la ligne de commande :

$ ll toto toto.txt $ ll toto toto1.txt toto2.txt toto3.txt

Si le chier dsir est toto1.txt, il suft de taper 1 puis une nouvelle fois pour que linterprteur de commandes termine le nom du chier : $ ll toto1

Ce qui donne :
$ ll toto1.txt

Avec des noms de chiers aussi courts, il est presque aussi rapide de les saisir en entier. Nanmoins, avec des noms de chiers plus longs, lutilisation du compltement fait vraiment gagner beaucoup de temps. Le rappel des commandes prcdentes et ldition de la ligne de commande, abords au paragraphe 7.2.6 page 86, ainsi que le compltement rendent lutilisation de linterprteur de commandes la plus rapide possible. Il est essentiel dutiliser ces fonctions ds que possible an de taper le minimum de choses et donc de travailler efcacement.
http://en.wikipedia.org/wiki/Command-line_completion

106

8.3. Organisation des chiers

8.3

Organisation des chiers

Lorsquon travaille avec de nombreux chiers, il est utile de pouvoir les organiser, les classer, les regrouper. Lobjet permettant dorganiser les chiers sappelle un rpertoire (directory en anglais). On rencontre galement les termes dossier (folder en anglais) et catalogue (catalog en anglais).
http://fr.wikipedia.org/wiki/Rpertoire_(informatique)

8.3.1

Cration de rpertoires : la commande mkdir

La commande mkdir (pour make directories) permet de crer un rpertoire, dont le nom lui est pass en argument :
$ ll total 4 -rw-r--r-- 1 babafou prof 334 Jul 30 17:02 toto.txt $ mkdir rep $ ll total 8 drwxr-xr-x 2 babafou prof 4096 Aug -rw-r--r-- 1 babafou prof 4 15:56 rep 334 Jul 30 17:02 toto.txt

On reconnat que rep est un rpertoire au d prsent en dbut de ligne de lafchage de ls. On peut afcher le contenu du rpertoire (qui est pour linstant vide) grce ls :
$ ls rep

Si lon souhaite en revanche obtenir lafchage long des informations du rpertoire lui-mme et non de son contenu, il faut utiliser loption -d de ls (qui na dintrt que couple loption -l) :
$ ll -d rep drwxr-xr-x 2 babafou prof 4096 Aug 4 15:56 rep

Si lon souhaite crer plusieurs rpertoires en mme temps, mkdir accepte plusieurs arguments :
$ mkdir rep1 rep2 rep3

107

Chapitre 8. Gestion, organisation et traitement des chiers


http://fr.wikipedia.org/wiki/Mkdir

8.3.2

Chemin daccs et structure arborescente

Nous navons pour le moment quun rpertoire rep vide mais supposons quil contienne un chier toto. Pour dsigner ce chier, il est ncessaire dindiquer le nom du rpertoire qui le contient, savoir rep, immdiatement suivi du caractre /, immdiatement suivi du nom du chier, ce qui donne :
rep/toto

Cest ce quon appelle le chemin daccs (path en anglais) au chier toto. Le terme est imag et dcrit bien la faon de le construire : on parcourt le chemin suivre pour accder au chier en indiquant le nom du rpertoire contenant le chier, le sparateur / puis le nom du chier. Donc, par exemple, pour afcher les informations concernant le chier toto, on peut utiliser la commande :
$ ll rep/toto

Pour supprimer le chier :


$ rm rep/toto

Et ainsi de suite. noter que le compltement fonctionne galement avec les noms de rpertoires. On peut donc faire :
$ ll r

Ce qui donnera :
$ ll rep/

On peut alors appuyer sur Enter si lon souhaite simplement afcher le contenu du rpertoire (le / en n de ligne est ignor) ou poursuivre :
$ ll rep/t

108

8.3. Organisation des chiers voire simplement :


$ ll rep/

dans la mesure o le rpertoire rep ne contient quun seul chier. On aura au bout du compte :
$ ll rep/toto

Supposons maintenant que le rpertoire rep contienne deux chiers, toto et tata. Leurs chemins daccs sont donc respectivement rep/toto et rep/tata. On peut reprsenter graphiquement la structure du rpertoire rep comme indiqu dans la gure 8.4.
rep

toto

tata

FIGURE 8.4 Structure du rpertoire rep. Supposons maintenant que lon cre un rpertoire rep2 dans rep. La commande permettant ceci est :
$ mkdir rep/rep2

Supposons que rep2 contienne deux chiers, titi et tutu. Leurs chemins daccs sont donc respectivement rep/rep2/titi et rep/rep2/tutu. L encore, on peut reprsenter graphiquement la structure du rpertoire rep contenant rep2 comme indiqu dans la gure 8.5 page suivante. Vous imaginez bien quon peut dvelopper cet exemple quasiment linni, par exemple avec une structure comme celle schmatise dans la gure 8.6 page suivante (qui nindique que les rpertoires, pas les chiers). Une structure de cette forme est ce quon appelle un arbre. Chaque chier correspond lune des extrmits de la structure, quon appelle une feuille (les rpertoires vides, qui nont dailleurs aucun intrt, sont galement des feuilles). Chaque rpertoire est un embranchement quon appelle un nud. Chaque nud peut tre raccord dautres nuds et des feuilles. En revanche, un nud donn na quun seul nud de niveau suprieur (voire aucun une fois quon se trouve tout en haut de la structure). 109

Chapitre 8. Gestion, organisation et traitement des chiers


rep

toto

rep2

tata

titi

tutu

FIGURE 8.5 Structure du rpertoire rep contenant rep2.


rep01

rep02

rep03

rep04

rep05

rep06

rep07

rep08

rep09

rep10

rep11

rep12

rep13

rep14

rep15

rep16

rep17

rep18

rep19

FIGURE 8.6 Arborescence imaginaire.

Il sagit exactement de la structure dun arbre, avec ses branches, ses ramications et ses feuilles, sauf que lhabitude en informatique est de le reprsenter lenvers. Au lieu de pousser vers le ciel, comme les arbres vgtaux, les arbres informatiques poussent vers le sol. Cest pour cette raison que le systme de chiers sous UNIX est souvent quali darborescence. Cette structure arborescente du systme de chiers a t introduite pour la premire fois dans Multics, popularise par UNIX puis reprise par tous les systmes dexploitation qui ont suivi. Terminons par une remarque de vocabulaire. Lorsquon considre un rpertoire, on utilise gnralement le terme sous-rpertoire pour dsigner un rpertoire contenu dans le premier. Ainsi, dans lexemple de la gure 8.6, le rpertoire rep01 a trois sous-rpertoires, rep02, rep03 et rep04. son tour, le rpertoire rep02 a trois sous110

8.3. Organisation des chiers rpertoires, rep05, rep06 et rep07. La notion de sous-rpertoire est donc relative. Par extension, on peut galement qualier de sous-rpertoire un rpertoire situ plus profondment dans larborescence. Toujours dans lexemple de la gure 8.6 page ci-contre, le rpertoire rep19 peut donc tre considr comme un sous-rpertoire du rpertoire rep01.
http://fr.wikipedia.org/wiki/Arbre_enracin http://fr.wikipedia.org/wiki/Sous-rpertoire

8.3.3

Retour sur les commandes de gestion des chiers

Maintenant que nous avons un rpertoire, comment y ranger des chiers ? Outre le fait de crer directement des chiers dans ce rpertoire, on peut y copier ou y dplacer des chiers existants. Pour cela, nous pouvons utiliser les commandes cp, mv et ln abordes respectivement aux paragraphes 8.1.1 page 97, 8.1.2 page 98 et 8.1.4 page 100. 8.3.3.1
rep

La commande cp et les rpertoires

Reprenons notre exemple habituel et copions le chier toto.txt dans le rpertoire :

$ ll total 8 drwxr-xr-x 2 babafou prof 4096 Aug -rw-r--r-- 1 babafou prof $ cp toto.txt rep $ ll rep total 4 -rw-r--r-- 1 babafou prof $ ll total 8 drwxr-xr-x 2 babafou prof 4096 Aug -rw-r--r-- 1 babafou prof 4 15:56 rep 334 Jul 30 17:02 toto.txt 334 Aug 4 17:45 toto.txt 4 15:56 rep 334 Jul 30 17:02 toto.txt

Lorsque son second argument est un rpertoire, la commande cp y copie le chier dont le nom est pass en premier argument. Nous avons donc maintenant deux chiers du mme nom : toto.txt. Comment les diffrencier ? Cest trs simple, ils nont pas le mme chemin daccs. Le chier dorigine a simplement pour chemin daccs toto.txt alors que sa copie a pour chemin daccs rep/toto.txt. Il est en effet tout fait possible davoir deux chiers du mme nom tant que leurs chemins daccs sont diffrents. 111

Chapitre 8. Gestion, organisation et traitement des chiers La commande de copie prcdente est donc quivalente :
$ cp toto.txt rep/toto.txt

Il est possible de nommer la copie diffremment du chier dorigine en indiquant explicitement son nom :
$ cp toto.txt rep/tata.txt

Enn, si lon dsire copier un ensemble de chiers sous le mme nom dans un rpertoire, il est possible de faire comme ceci :
$ cp fichier1 fichier2 fichier3 rpertoire

8.3.3.2

La commande mv et les rpertoires

De la mme faon, on peut dplacer un chier dans un rpertoire :


$ ll total 8 drwxr-xr-x 2 babafou prof 4096 Aug -rw-r--r-- 1 babafou prof $ mv toto.txt rep $ ll rep total 4 -rw-r--r-- 1 babafou prof $ ll total 4 drwxr-xr-x 2 babafou prof 4096 Aug 4 15:56 rep 334 Jul 30 17:02 toto.txt 4 15:56 rep 334 Jul 30 17:02 toto.txt

Cest dailleurs la fonction principale de la commande mv, comme son nom peut le laisser supposer. Le renommage nest quune forme particulire de dplacement. On peut galement renommer un chier tout en le dplaant :
$ mv toto.txt rep/tata.txt

Et, comme pour cp, on peut dplacer un ensemble de chiers dans un rpertoire :
$ mv fichier1 fichier2 fichier3 rpertoire

112

8.3. Organisation des chiers 8.3.3.3 La commande ln et les rpertoires

Lutilisation de liens prend tout son sens avec les rpertoires. Il semble en effet inutile de disposer de plusieurs noms pour le mme chiers sauf si ce chier doit exister de manire identique des endroits diffrents. La syntaxe dutilisation de ln avec des rpertoires est strictement identique celle de cp et de mv qui vient dtre indique. Nous nallons pas la rappeler une troisime fois mais donner un exemple de la faon dont on peut utiliser les liens. Considrons un laboratoire dont lquipe, compose de quatre personnes, doit analyser des chiers volumineux. Ces chiers sont stocks dans un rpertoire commun, accessible tous, et ne doivent pas tre dplacs. Or, pour faciliter lutilisation de ces chiers, il serait pratique que chaque personne ait les chiers utiles dans son rpertoire de travail (p1 pour la premire personne, p2 pour la deuxime et ainsi de suite). Copier les chiers serait possible mais cela gaspillerait de lespace de stockage puisque les chiers prsents dans les rpertoires de travail des personne seraient en double par rapport au rpertoire commun. Une solution lgante est, dans chaque rpertoire de travail, de crer des liens ou des liens symboliques vers les chiers analyser dans le rpertoire commun, comme schmatis dans la gure 8.7.
labo

p1

p2

p3

p4

commun

FIGURE 8.7 Exemple dutilisation de ln. Ainsi chacun dispose dans son rpertoire des chiers qui lui ont t attribus sans augmenter le volume des donnes stockes (un lien ou un lien symbolique ne prennent quasiment pas de place sur disque).

8.3.4

Se dplacer dans un rpertoire : la commande cd

Nous avons vu au paragraphe 8.3.2 page 108 comment dsigner un chier stock dans un rpertoire, ventuellement sur plusieurs niveaux de profondeur, en prxant son nom par ceux de la suite de rpertoires traverser, spars par des /. Cela convient si lon na que quelques commandes taper mais le fait de prxer les noms de chiers peut vite savrer fastidieux. Il serait plus utile de pouvoir se dplacer dans le rpertoire qui contient les chiers sur lesquels on veut travailler an de pouvoir les dsigner directement par leur nom. 113

Chapitre 8. Gestion, organisation et traitement des chiers Ceci se fait au moyen de la commande cd (pour change directory) :
$ cd rep

On se retrouve alors dans le rpertoire rep et lon peut dsigner les chiers qui sy trouvent directement par leur nom. Le rpertoire rep est maintenant le rpertoire courant (working directory en anglais), cest--dire celui dans lequel on se trouve et o lon peut dsigner les chiers sans les prxer. Un effet de bord intressant de la commande cd est quelle modie linvite de linterprteur de commandes :
babafou@babasse:/home/prof/babafou>cd rep babafou@babasse:/home/prof/babafou/rep>

Au paragraphe 7.2.2 page 83, nous navions pas dcrit la partie de linvite se situant entre : et >. Nous ne pouvons pas encore la dcrire totalement mais vous devez maintenant reconnatre des choses. Cela ressemble quelque part un chemin daccs. Cest en effet le cas, cest le chemin daccs absolu (nous reviendrons sur cette notion au paragraphe 8.3.6 page 118) du rpertoire courant. Le fait dindiquer le chemin daccs absolu du rpertoire courant dans linvite est spcique la conguration de lENSTA ParisTech mais cest une pratique assez rpandue parce quelle permet de savoir en un coup dil dans quel rpertoire on se trouve. dfaut, on peut utiliser la commande pwd (pour print work directory), qui afche le chemin daccs absolu du rpertoire courant :
babafou@babasse:/home/prof/babafou/rep>pwd /home/prof/babafou/rep

Protons-en pour faire le tour du propritaire :


$ ll -a total 12 drwxr-xr-x 2 babafou prof 4096 Aug -rw-r--r-- 1 babafou prof 334 Aug 5 16:00 . 4 17:45 toto.txt drwxr-xr-x 6 babafou prof 4096 Jul 30 17:02 ..

114

8.3. Organisation des chiers Alors que nous venons tout juste de crer le rpertoire rep et de recopier un chier dedans, voil dj que deux autres rpertoires le squattent ! Mais do viennent-ils ? Et pourquoi ont-ils ces noms tranges ? Si vous avez fait attention, nous les avons dj aperus dans les exemples dafchage de ls -a. Les rpertoires . et .. font partie de la structure du systme de chiers. Ils existent dans chaque rpertoire et sont crs automatiquement dans tout nouveau rpertoire. Le rpertoire . est un lien sur le rpertoire qui le contient. Il est en effet utile, nous le verrons par la suite, de pouvoir dsigner ici de manire simple. En consquence, la commande suivante est sans effet :
babafou@babasse:/home/prof/babafou/rep>cd . babafou@babasse:/home/prof/babafou/rep>

Le rpertoire .. est un lien sur le rpertoire parent de celui qui le contient dans larborescence du systme de chiers, cest--dire au-dessus . Nous avons en effet vu au paragraphe 8.3.2 page 108 quun nud donn de larborescence du systme de chiers na quun seul nud de niveau suprieur. En consquence, la commande suivante permet de remonter dun rpertoire :
babafou@babasse:/home/prof/babafou/rep>cd .. babafou@babasse:/home/prof/babafou>

En rsum, on peut donc dire que . est ici et que .. est au-dessus .
http://fr.wikipedia.org/wiki/Cd_(Unix)

8.3.5

Promenade dans le systme de chiers

Qui a dit que linformatique tait ennuyeuse ? Au contraire, cest loccasion de faire une promenade dans des contres sauvages... Puisquil est maintenant possible de se dplacer dans le systme de chiers, nous pouvons envisager dexplorer les rpertoires qui nous entourent. Il est assez clair au vu de linvite ou de lafchage de la commande pwd que nous sommes dans un rpertoire /home/prof/babafou. Pour les lves, il sagit plutt dun rpertoire /home/ <promo>/<identifiant> (remplacez <promo> par votre promotion et <identifiant> par votre identiant). Quy a-t-il au-dessus ?
babafou@babasse:/home/prof/babafou>cd .. babafou@babasse:/home/prof>

115

Chapitre 8. Gestion, organisation et traitement des chiers Faites de mme et afchez le contenu du rpertoire avec ls. Vous y verrez les rpertoires personnels de tous les membres de votre promotion. Chaque utilisateur dun systme UNIX possde en effet un rpertoire personnel (home directory en anglais), qui est celui dans lequel il est plac en dbut de session et qui contient tous ses chiers. Pour vous, il sagit de notre fameux /home/<promo>/<identifiant> . Quy a-t-il au-dessus ?
babafou@babasse:/home/prof>cd .. babafou@babasse:/home>

On retrouve ici les diffrentes catgories dutilisateurs de lENSTA ParisTech : lves par promotion, administratifs, assoces, professeurs, laboratoires, etc. Le nombre dutilisateurs du systme informatique de lENSTA ParisTech est en effet sufsamment important pour quil soit intressant de hirarchiser les rpertoires personnels plutt que de les stocker tous au mme niveau. Quy a-t-il au-dessus ?
babafou@babasse:/home>cd .. babafou@babasse:/>

Ce quon trouve ici est plus difcile dcrire. Nous ne le ferons sommairement dans un instant. Quy a-t-il au-dessus ?
babafou@babasse:/>cd .. babafou@babasse:/>

Tiens, on ne bouge plus. Le rpertoire courant dans linvite na visiblement pas chang et il est facile de vrier avec ls quon voit toujours les mmes chiers quauparavant. Nous sommes en effet dans le rpertoire racine (root directory en anglais) du systme de chiers. Le rpertoire racine est le point de dpart du systme de chiers et on le dsigne sous le nom /. Le mme caractre sert donc dsigner le rpertoire racine et sparer les composants dun chemin daccs. Le rpertoire racine est un rpertoire particulier, pour lequel . et .. sont identiques. Cest mme le seul rpertoire ayant cette particularit. Revenons sur le contenu du rpertoire racine. Il serait fastidieux de le dcrire en dtail, dautant plus quil existe des diffrences entre UNIX utiliss mais on 116

8.3. Organisation des chiers


/

bin

dev

etc

home

lib

sbin

tmp

usr

var

X11R6

bin

include

lib

local

sbin

share

bin

include

lib

sbin

share

FIGURE 8.8 Structure du systme de chiers sous UNIX.

peut dgager certaines constantes. Nous en proterons dailleurs pour explorer larborescence plus en profondeur. Larborescence classique dun systme de chiers UNIX est schmatise dans la gure 8.8. Le rpertoire racine contient : un rpertoire bin (pour binaries), qui contient beaucoup des commandes que nous avons utilises ; un rpertoire dev (pour devices), qui contient les chiers spciaux (dont nous discuterons au paragraphe 9.4.1 page 174) ; un rpertoire etc (pour et cetera), qui contient les chiers de conguration du systme ; un rpertoire home, qui contient, comme nous lavons dj vu, les rpertoires personnels des utilisateurs ; un rpertoire lib (pour libraries), qui contient des bibliothques de code utilises par lensemble du systme ; un rpertoire sbin, qui contient des commandes utilises pour la maintenance du systme ; un rpertoire tmp, qui sert stocker des chiers temporaires ; un rpertoire usr, que nous allons dcrire plus en dtail ; un rpertoire var, qui contient des donnes dont le volume peut varier (documents en attente dimpression, par exemple). Le rpertoire /usr contient : un rpertoire X11R6, qui contient les logiciels et chiers de linterface graphique ; un rpertoire include, qui contient les chiers den-tte du compilateur C ; un rpertoire local, dont nous allons discuter juste aprs ; un rpertoire share, qui contient des chiers partageables entre diffrents systmes, principalement de la documentation. 117

Chapitre 8. Gestion, organisation et traitement des chiers Le rpertoire /usr contient galement des rpertoires bin, lib et sbin, dont le principe est identique ceux quon trouve dans le rpertoire racine. La diffrence est que ceux du rpertoire racine contiennent des chiers indispensables au dmarrage du systme. Historiquement, /usr tait plac sur un disque diffrent du disque de dmarrage, voire sur un serveur de chiers, et ntait donc pas accessible pendant le dmarrage du systme. On y stockait donc des chiers uniquement utiles une fois le dmarrage termin et donc destins aux utilisateurs (do le nom usr). Le rpertoire /usr/local contient des rpertoires bin, include, lib, sbin et share, sur le mme principe que /usr, la diffrence quils sont locaux chaque ordinateur ou chaque site. Les chiers spciques de la conguration de lENSTA ParisTech, par exemple, sont donc quelque part sous ce rpertoire. Vous pouvez utiliser la commande man hier pour avoir une description plus prcise de larborescence du systme de chiers de lUNIX que vous utilisez. Une fois la promenade termine, chacun peut rentrer chez soi au moyen de la commande cd, sans argument :
babafou@babasse:/>cd babafou@babasse:/home/prof/babafou>

O quon soit dans le systme de chiers, rpertoire personnel.

cd

sans argument ramne dans son

http://fr.wikipedia.org/wiki/Rpertoire_racine http://fr.wikipedia.org/wiki/Filesystem_Hierarchy_Standard

8.3.6

Chemin daccs absolu et chemin daccs relatif

Aprs ce priple pique, nous avons bien mrit de nous reposer en discutant de vocabulaire. Il faut en effet approfondir le concept de chemin daccs. Un chemin daccs absolu est un chemin daccs qui part du rpertoire racine du systme de chiers et parcourt celui-ci pour aboutir au chier dsigner. Un chemin daccs absolu commence donc par /. Par exemple, /home/prof/babafou/toto est un chemin daccs absolu. Un chemin daccs relatif est un chemin daccs qui ne part pas du rpertoire racine du systme de chiers. Un chemin daccs relatif ne commence donc pas par /. Par exemple, rep/toto est un chemin daccs relatif. Un chemin daccs absolu est non ambigu, il dsigne toujours le mme chier, indpendamment de lendroit o lon se trouve. Un chemin daccs relatif, en revanche, est relatif lendroit o lon se trouve. Considrons par exemple larborescence reprsente dans la gure 8.9 page suivante. 118

8.3. Organisation des chiers


/home/prof/babafou

rep1

rep2

rep

rep

toto

toto

FIGURE 8.9 Chemin daccs relatif (exemple 1).

Si lon se trouve dans le rpertoire rep1, le chier toto de gauche a pour chemin daccs relatif rep/toto. Celui de droite a pour chemin daccs relatif ../rep2/rep/ toto. Si lon se trouve dans le rpertoire rep2, le chier toto de gauche a pour chemin daccs relatif ../rep1/rep/toto. Celui de droite a pour chemin daccs relatif rep/ toto. Le rpertoire courant conditionne donc les chemins daccs relatifs. Ce sont nanmoins ceux quon utilise le plus souvent parce quils sont plus courts que les chemins daccs absolus et donc plus pratiques utiliser. Il est important de bien apprhender leur construction, qui est en fait un parcours darbre trs simple. Le dpart seffectue du rpertoire courant. Quand on remonte un niveau, on met .., quand on descend, on met le nom du rpertoire quon traverse. Et on spare le tout avec des /. Considrons maintenant larborescence un peu plus complexe reprsente dans la gure 8.10 page suivante. Le tableau 8.1 page suivante indique, lorsquon se trouve dans chacun des rpertoires, les chemins daccs relatifs des chiers toto1 et toto2. Essayez, sans regarder le tableau 8.2 page suivante qui contient la solution, de faire la mme chose pour toto3 et toto4. Pour terminer, signalons une syntaxe particulire :
$ cd ~identifiant

Ici, linterprteur de commandes va remplacer ~identifiant par le chemin daccs absolu du rpertoire personnel de lutilisateur indiqu. Ceci fonctionne bien entendu avec nimporte quelle commande utilisant un chemin daccs : 119

Chapitre 8. Gestion, organisation et traitement des chiers

/home/prof/babafou

rep1

rep2

rep3

rep4

rep5

rep6

toto1

toto2

toto3

toto4

FIGURE 8.10 Chemin daccs relatif (exemple 2).

toto1 rep1 rep2 rep3 rep4 rep5 rep6 rep3/toto1 ../rep1/rep3/toto1 toto1 ../rep3/toto1 ../../rep1/rep3/toto1 ../../rep1/rep3/toto1

toto2 rep4/toto2 ../rep1/rep4/toto2 ../rep4/toto2 toto2 ../../rep1/rep4/toto2 ../../rep1/rep4/toto2

TABLE 8.1 Chemin daccs relatif (exemple 2), toto1 et toto2.

toto3 rep1 rep2 rep3 rep4 rep5 rep6 ../rep2/rep5/toto3 rep5/toto3 ../../rep2/rep5/toto3 ../../rep2/rep5/toto3 toto3 ../rep5/toto3

toto4 ../rep2/rep6/toto4 rep6/toto4 ../../rep2/rep6/toto4 ../../rep2/rep6/toto4 ../rep6/toto4 toto4

TABLE 8.2 Chemin daccs relatif (exemple 2), toto3 et toto4.

120

8.3. Organisation des chiers

$ more ~identifiant/rep/toto.txt

Si lidentiant nest pas indiqu, ~ fait rfrence son propre rpertoire personnel :
$ more ~/rep/toto.txt http://fr.wikipedia.org/wiki/Chemin_daccs

8.3.7
8.3.7.1

Suppression de rpertoires
La commande rmdir

La commande rmdir (pour remove directory) permet de supprimer un ou plusieurs rpertoires vides (cest--dire ne contenant plus rien dautre que . et ..) :
$ rmdir rep $ rmdir rep1 rep2 rep3

Si le rpertoire supprimer nest pas vide, on obtient un message derreur :


$ rmdir rep rmdir: rep: Directory not empty

http://en.wikipedia.org/wiki/Rmdir

8.3.7.2

Loption -r de la commande rm

Si lon souhaite en revanche supprimer un ou plusieurs rpertoires et tout leur contenu, il faut utiliser la commande rm avec loption -r :
$ rm -r rep $ rm -r rep1 rep2 rep3

8.3.8

Quelques conseils pour organiser vos chiers

Maintenant que vous savez travailler avec des rpertoires, vous pouvez crer, par exemple, un rpertoire sii pour y ranger tous les chiers relatifs ce cours au lieu de les amonceler directement dans votre rpertoire personnel. Par la suite, vous pourrez crer un rpertoire par cours et, au besoin, ramier ce rpertoire si ncessaire, par exemple en crant dedans un rpertoire par petite classe pour y stocker les exercices de chaque sance. 121

Chapitre 8. Gestion, organisation et traitement des chiers

8.4

Les mtacaractres de gnration de noms de chiers

Nous avons vu prcdemment que certaines commandes acceptaient un nombre quelconque darguments. Il nest ainsi pas rare de traiter plusieurs chiers en une seule commande plutt que un par un. Par exemple, on utilisera :
$ rm toto1 toto2 toto3

plutt que :
$ rm toto1 $ rm toto2 $ rm toto3

Dans cet exemple, il ny a que trois chiers mais imaginez quil faille supprimer les chiers toto00 jusqu toto99. Mme avec laide du compltement, taper la commande de suppression serait fastidieux et rptitif. Or nous avons vu que lun des objectifs de linterprteur de commandes tait justement de fournir des outils permettant de simplier les tches rptitives. Cest le but des mtacaractres de gnration de noms de chiers (quon appellera plus simplement mtacaractres par la suite). Leur but est dexprimer un ensemble de noms de chiers de la manire la plus compacte possible.
http://fr.wikipedia.org/wiki/Mtacaractre

8.4.1
toto2

Le mtacaractre ?
toto1,

Revenons notre premier exemple. Si lon veut supprimer les chiers et toto3, on peut donc utiliser la commande :

$ rm toto1 toto2 toto3

Mais on aura plus vite fait ainsi :


$ rm toto?

Le caractre ? est en effet un mtacaractre remplaant exactement un caractre quelconque. Comment cela fonctionne-t-il ? Une fois quon a tap sur Enter , linterprteur de commandes va analyser la ligne la recherche de caractres ayant une signication 122

8.4. Les mtacaractres de gnration de noms de chiers particulire pour lui. Cest le cas de ?. Il considre donc lexpression contenant ce caractre, savoir toto?. Cela signie : les noms de chiers commenant par toto, suivi dexactement un caractre quelconque. Linterprteur de commandes effectue alors lquivalent dun ls, slectionne les chiers dont le nom correspond ce critre, remplace toto? dans la ligne de commandes par la liste de ces chiers et, nalement, excute la commande. On peut visualiser ce processus en utilisant la commande echo, dont le but est simplement dafcher la liste de ses arguments :
$ echo toto? toto1 toto2 toto3

La commande echo na donc pas reu toto? en argument mais la liste explicite compose de toto1, toto2 et toto3. Cest linterprteur de commandes qui a effectu cette substitution. Lorsquon commence utiliser les mtacaractres ou quon souhaite simplement vrier une commande avant de lexcuter, il est intressant dutiliser echo. Cela permet de vrier que lexpression contenant les mtacaractres est correcte sans risquer de perdre des chiers. Dans les exemples suivants, nous utiliserons donc echo. Attention, sil existe des chiers toto4, toto5, etc. ou des chiers totoa, totob, etc., ils seront pris en compte par lexpression toto?. Nous verrons des mtacaractres plus restrictifs dans la section suivante. Il faut galement bien comprendre que les expressions contenant des mtacaractres vont gnrer uniquement les noms des chiers qui existent dj. Cela ne peut servir crer de nouveaux chiers. Dans les exemples suivants, nous supposerons que les chiers mentionns existent bien. Il est bien entendu possible dutiliser ? nimporte o dans un nom de chier. Par exemple lexpression suivante afchera tous les chiers dont le nom commence par toto suivi dexactement un caractre suivi de .txt :
$ echo toto?.txt

On peut mme utiliser des expressions contenant plusieurs ? si cela est ncessaire. Ainsi lexpression suivante afchera les chiers toto00 jusqu toto99 :
$ echo toto??

8.4.2

Les mtacaractres [ et ]

Le mtacaractre ? remplace exactement un caractre quelconque. Mais il est parfois utile dtre plus prcis. Ainsi, sil existe des chiers toto1 jusqu toto9 mais quon ne souhaite exprimer que toto1 jusqu toto3, on peut utiliser : 123

Chapitre 8. Gestion, organisation et traitement des chiers

$ echo toto[123]

1, 2

Lexpression [123] reprsente un et un seul caractre parmi ceux indiqus, savoir ou 3. On peut galement indiquer un intervalle. Ici, [1-5] dsigne les chiffres de 1 5 :

$ echo toto[1-5]

On peut galement utiliser des lettres, minuscules ou majuscules :


$ echo toto[a-z] $ echo toto[A-Z]

Attention ne pas mlanger chiffres, minuscules et majuscules, il faut avoir le mme type de caractre de part et dautre du tiret.

8.4.3

Le mtacaractre *

Le meilleur est pour la n. Le mtacaractre * remplace zro, un ou plusieurs caractres. Cest le mtacaractre ultime. Avec lui, plus rien ne dpasse ! Par exemple, lexpression suivante afchera tous les chiers dont le nom commence par toto (suivi de rien ou de quelque chose) :
$ echo toto*

Celle-ci afchera tous les chiers dont le nom se termine par .txt :
$ echo *.txt

Et ceci nest ni plus ni moins que le ls du pauvre :


$ echo *

Vous pouvez imaginer les ravages que peut produire une commande telle que :
$ rm *

124

8.4. Les mtacaractres de gnration de noms de chiers Il faut dailleurs tre prudent lorsquon utilise * avec des commandes destructrices. Supposons que lon souhaite supprimer tous les chiers dont le nom commence par toto et quon fasse :
$ rm toto *

Oui, il y a bien une funeste erreur de frappe : une espace entre toto et *. Ceci va donc supprimer toto et tous les chiers se trouvant dans le rpertoire courant. Les chiers que lon souhaitait supprimer lauront bien t mais avec quelques dommages collatraux. Prudence, donc.

8.4.4

Utilisation avance

Indiquons quelques exemples plus compliqus dutilisation des mtacaractres. On peut utiliser les mtacaractres dans des chemins daccs :
$ echo rep/toto*

Les mtacaractres gnrent indiffremment noms de chiers et noms de rpertoires :


$ echo */toto.txt

Et on peut bien entendu tout mlanger :


$ echo toto-200[0-4]-??-??-*

8.4.5

Gestion des erreurs

On ne le rptera jamais assez : les mtacaractres ne permettent de gnrer que des noms de chiers qui existent. Les utiliser dans des expressions ne permettant de gnrer aucun nom de chier peut causer des surprises. En effet, le comportement des mtacaractres appliqus des noms de chiers qui nexistent pas est diffrent suivant les interprteurs de commandes. On peut le tester avec la commande echo. Supposons quil existe dans le rpertoire courant trois chiers toto1, toto2, toto3 et cest tout. Les interprteurs de commandes sh, ksh et bash, confronts une expression contenant un mtacaractre et ne correspondant aucun chier existant, laissent cette expression telle quelle : 125

Chapitre 8. Gestion, organisation et traitement des chiers

$ echo toto? tata? toto1 toto2 toto3 tata?

Pour leur part, csh et tcsh suppriment lexpression fautive :


% echo toto? tata? toto1 toto2 toto3

Enn, zsh adopte le seul comportement quon puisse considrer comme sens, il nexcute pas la commande et afche un message derreur :
% echo toto? tata? zsh: no matches found: tata?

Aucun de ces comportement ne pose de problme mais il est prfrable dtre conscient de ces diffrences de comportement. Il est encore meilleur dviter dutiliser des expressions contenant un mtacaractre et ne permettant de gnrer aucun nom de chier.

8.5

Les droits daccs

UNIX a toujours t un systme dexploitation multi-utilisateur, cest--dire quil permet plusieurs personnes dutiliser le mme ordinateur simultanment. Cela ncessite certaines mesures de scurit, en particulier en ce qui concerne laccs aux chiers. On peut en effet vouloir que certains utilisateurs puissent accder certains de ses chiers mais pas dautres, que dautres utilisateurs ne puissent accder aucun de ses chiers, etc. Cest lobjet des droits daccs.
http://fr.wikipedia.org/wiki/Permissions_Unix

8.5.1

Principe des droits daccs

Chaque chier dispose de droits daccs qui sont stocks dans son i-nud et afchs en premire colonne par ls -l :
$ ls -l toto.txt -rw-r--r-- 1 babafou prof 334 Jul 30 17:02 toto.txt

126

8.5. Les droits daccs Les droits daccs suivent immdiatement le premier caractre de la premire colonne, qui indique le type du chier. Les droits daccs du chier toto.txt sont donc :
rw-r--r--

Il faut lire ceci comme trois ensembles de trois caractres :


rw- r-- r--

Dans chaque ensemble de trois caractres, on peut avoir : 1. en premire position, un r (pour read) si le droit de lire le chier est accord ou un - sil ne lest pas ; 2. en deuxime position, un w (pour write) si le droit dcrire dans le chier est accord ou un - sil ne lest pas ; 3. en troisime position, un x (pour execute) si le droit dexcuter 2 le chier est accord ou un - sil ne lest pas ; ce droit na de sens que pour les logiciels, pas pour les chiers de donnes. Chaque ensemble de droits concerne des utilisateurs particuliers du systme informatique : 1. le premier ensemble sapplique au propritaire du chier ; 2. le deuxime ensemble sapplique aux membres du groupe du chier ; 3. le troisime ensemble sapplique tous les autres utilisateurs. Dtaillons tout cela avec notre chier toto.txt :
$ ls -l toto.txt -rw-r--r-- 1 babafou prof 334 Jul 30 17:02 toto.txt

Le premier ensemble de droits, rw-, sapplique donc au propritaire du chier, (qui est indiqu dans la troisime colonne de lafchage de ls -l). Celui-ci a (r) le droit de lire son chier. Il a galement (w) le droit dcrire dans son chier. Tout cela semble raisonnable. En revanche, il na pas (-) le droit dexcuter ce chier. Puisquil ne sagit pas dun logiciel mais dun chier de donnes, cest tout fait comprhensible. Le deuxime ensemble de droits, r--, sapplique aux membres du groupe du chier. Celui-ci est indiqu dans la quatrime colonne de lafchage de ls -l. Il sagit ici de prof. lENSTA ParisTech, tous les enseignants font partie de ce groupe.
babafou

2. Excuter au sens de lancer un programme , pas de fusiller ...

127

Chapitre 8. Gestion, organisation et traitement des chiers Ils peuvent donc lire le chier toto.txt et cest tout. Les lves, quant eux, sont regroups par promotion. Les droits daccs de groupe de leurs chiers concernent donc leur promotion. Le troisime ensemble de droits, r--, sapplique tous les autres utilisateurs du systme informatique, cest--dire ceux qui ne sont ni lutilisateur babafou ni les membres du groupe prof. Le tableau 8.3 rsume tout ceci. propritaire prsence du droit absence du droit
r w x r -

groupe
w x r -

autres
w x -

TABLE 8.3 Droits daccs. Il est logique que le propritaire dun chier dispose de plus ou dau moins autant de droits que les membres de son groupe. De mme, il est logique que ceux-ci disposent de plus ou dau moins autant de droits que les autres utilisateurs. Des droits daccs tels que ceux-ci, par exemple, nont donc aucune logique et ne devraient tre rencontrs sur aucun systme UNIX :
--xr-xrwx

Les droits daccs sur les rpertoires ont une signication semblable si lon considre un rpertoire comme tant la liste des noms des chiers quil contient : 1. le droit r donne la possibilit dafcher la liste des noms des chiers contenus dans le rpertoire, donc de faire ls dessus ; 2. le droit w donne la possibilit dcrire dans la liste des noms des chiers contenus dans le rpertoire, donc de crer des chiers dans le rpertoire, mme si lon nest pas propritaire de celui-ci, de renommer et de supprimer des chiers dans le rpertoire, mme si lon nest pas propritaire de ces chiers ; 3. le droit x donne la possibilit de traverser le rpertoire, cest--dire de faire cd dans le rpertoire ou daccder au contenu de ses chiers (sous rserve que les droits daccs aux chiers eux-mmes le permettent). Il convient dinsister sur le danger davoir sur ses propres rpertoires un w ailleurs que pour soi. Un w pour le groupe fait que tous les membres de celui-ci peuvent en particulier supprimer les chiers contenus dans le rpertoire. Un w pour les autres est videmment bien plus dangereux. Les droits daccs r et x sur les rpertoires, quant eux, vont quasiment toujours ensemble. Il semble en effet peu logique de pouvoir afcher le contenu dun rpertoire si lon ne peut sy dplacer et a contrario de ne pas avoir la liste des chiers quil contient si lon peut aller dedans. 128

8.5. Les droits daccs Imaginez que le rpertoire est une ptisserie. Le droit r est le droit de regarder dans la vitrine tous ces babas au rhum, ces clairs, ces meringues, ces millefeuilles, ces oranais, ces paris-brest, ces religieuses... Le droit x est le droit dentrer dans la ptisserie pour cder la tentation... a ne sert rien de baver devant la vitrine si lon ne peut pas rentrer dans la boutique (r--). De mme, y rentrer sans voir ce quon y vend est frustrant (--x). Enn, les plus perspicaces auront remarqu que les liens symboliques avaient des droits daccs inquitants :

lrwxrwxrwx 1 babafou prof

8 Aug

2009 tata.txt -> toto.txt

En ralit, les droits daccs des liens symboliques sont ignors, ce sont toujours les droits daccs du chier vers lequel pointe le lien symbolique qui sont pris en compte.

8.5.2

Reprsentation numrique des droits daccs

Comme toujours en informatique, il est ncessaire de reprsenter les droits daccs sous forme numrique plutt que sous la forme dune chane de caractres telle que rw-r--r--. Comment faire ? La reprsentation des droits daccs sous la forme dune chane de caractres a deux caractristiques remarquables : chaque droit daccs a une position bien prcise ; chaque droit daccs na que deux tats possibles, accord ou refus. On peut donc envisager de reprsenter des droits daccs sous la forme dun nombre binaire (voir le paragraphe 2.1.3.1 page 25) comprenant neuf chiffres, un par droit daccs, chaque chiffre correspondant au droit situ la mme position dans la reprsentation des droits daccs sous la forme dune chane de caractres et, pour chaque chiffre, 1 reprsentant laccord dun droit et 0 son refus. Ainsi, rw-r--r-- peut tre reprsent par 110100100. Cette reprsentation est malheureusement loin dtre pratique et il serait intressant de pouvoir la simplier. Par dnition, le nombre 110100100 se dcompose en puissances de 2 ainsi :

110100100 = 1 28 + 1 27 + 0 26 + 1 25 + 0 24 + 0 23 + 1 22 + 0 21 + 0 20 129

Chapitre 8. Gestion, organisation et traitement des chiers soit, en factorisant la puissance de 2 la plus petite de chaque ligne : 110100100 = (1 22 + 1 21 + 0 20 ) 26 + (1 22 + 0 21 + 0 20 ) 23 + (1 22 + 0 21 + 0 20 ) 20 or 20 = 80 , 23 = 81 et 26 = 82 : 110100100 = (1 22 + 1 21 + 0 20 ) 82 + (1 22 + 0 21 + 0 20 ) 81 + (1 22 + 0 21 + 0 20 ) 80 et donc, en calculant les expressions entre parenthses : 110100100 = 6 82 + 4 81 + 4 80 Le nombre binaire 110100100 peut donc galement tre reprsent par le nombre 644 en base 8. Attention ne pas dire six cent quarante-quatre car il ne sagit pas de 644 en base 10. En loccurrence, on ne peut pas vraiment dire mieux que six quatre quatre ... Vous conviendrez que la dmonstration prcdente est gnralisable nimporte quel nombre binaire dont on groupe les chiffres trois par trois. Cest dailleurs une relation gnrale entre une base de numration et ses puissances. On peut donc reprsenter les droits daccs sous forme de nombres en base 8, cest-dire en octal (voir le paragraphe 2.1.3.2 page 25). Chaque chiffre octal correspondant un ensemble de trois droits daccs. Les correspondances entre droits daccs, binaire et octal sont rsumes dans le tableau 8.4.
r ----x -w-wx r-r-x rwrwx w x

0 0 0 0 1 1 1 1

0 0 1 1 0 0 1 1

0 1 0 1 0 1 0 1

binaire 000 001 010 011 100 101 110 111

octal 0 1 2 3 4 5 6 7

TABLE 8.4 Droits daccs en binaire et en octal. 130

8.5. Les droits daccs Dailleurs, si lon retient que r correspond 22 = 4, que w correspond 21 = 2 et que x correspond 20 = 1, on peut nutiliser que ces trois valeurs pour transformer des droits daccs en nombre octal et vice versa plutt que dutiliser les huit valeurs du tableau 8.4 page prcdente. Donc rw-r--r-- donne rw- pour le premier chiffre, soit 4 + 2 = 6, r-- pour les deuxime et troisime chiffres, soit 4, cest--dire 644 au nal. La dcomposition inverse se fait sans ambigut. Pour terminer, indiquons que lordre dans lequel les droits daccs sont indiqus (r puis w puis x) est purement arbitraire mais obit une certaine logique. Il est en effet plus utile de pouvoir lire le contenu dun chier que de pouvoir crire dedans (en pratique, on consulte beaucoup plus souvent ses chiers quon ne les modie). De mme, il est plus utile de pouvoir crire dans un chier que de pouvoir lexcuter (en pratique, il y a beaucoup plus de chiers de donnes que de logiciels). On attribue donc la plus haute valeur numrique r, la suivante w et la plus faible x. De cette faon, comme dj indiqu, il est facile de vrier numriquement que le propritaire dun chier possde des droits daccs suprieurs ou gaux ceux de son groupe, eux-mmes suprieurs ou gaux ceux des autres. Aprs ce petit intermde mathmatique, revenons quelque chose de plus informatique.

8.5.3

La commande chmod

La commande chmod (pour change mode) permet de modier les droits daccs dun ensemble de chiers ou de rpertoires. Sa syntaxe est inhabituelle parce que son premier argument (ce nest pas une option) indique quels droits daccs modier dans les chiers dont les noms gurent dans les argument suivants. Prenons un exemple :
$ chmod o-r toto

Cette commande va supprimer le droit en lecture pour les autres sur le chier
toto.

Le premier argument de chmod contient en effet trois parties : 1. la premire partie indique qui appliquer la modication des droits daccs : u (pour user) sil sagit du propritaire du chier, g (pour group) sil sagit du groupe du chier, o (pour others) sil sagit des autres, on peut regrouper ces caractres pour appliquer la modication plusieurs catgories : ug, uo, go, voire ugo quon peut galement exprimer par a (pour all) ; 131

Chapitre 8. Gestion, organisation et traitement des chiers 2. la deuxime partie indique si lon veut ajouter (+) ou supprimer (-) des droits daccs ; 3. la troisime partie indique lesquels, sous la forme habituelle (r, w et x). Donc la commande suivante ajoute les droits en criture pour le groupe et les autres sur le chier toto :
$ chmod go+w toto

Il est galement possible dutiliser des mtacaractres :


$ chmod go+r toto*

Nanmoins, lutilisation de chmod pour modier les droits daccs de plusieurs chiers de cette faon se heurte un problme. Si lon a des chiers ayant des droits daccs htroclites, comment les remettre tous identiques, par exemple rw-r--r-- ? On peut toujours faire :
$ chmod a-rwx toto* $ chmod a+r toto* $ chmod u+w toto*

pour supprimer les droits daccs existants, rajouter les droits en lecture pour tous puis le droit en criture pour le propritaire mais faire la chose en trois commandes nest pas lgant. Dans ce cas, utiliser la reprsentation numrique des droits daccs appliquer aux chiers est la bonne faon de faire :
$ chmod 644 toto*

Ici, les droits daccs sont xs 644 (rw-r--r--) indpendamment des droits daccs initiaux des chiers. Bien entendu, cela fonctionne galement avec un seul chier :
$ chmod 644 toto

La commande chmod, utilise avec loption -R, permet galement de modier les droits daccs rcursivement sur le contenu des rpertoires rencontrs. Par exemple, la commande suivante ne modie que les droits daccs du rpertoire rep lui-mme sans toucher aux droits daccs des chiers et sous-rpertoires quil contient : 132

8.5. Les droits daccs

$ chmod g+w rep

Si lon ajoute loption -R, les droits daccs des chiers et des sous-rpertoires contenus dans rep (et rcursivement lintrieur des sous-rpertoires) seront galement modis :
$ chmod -R g+w rep

http://fr.wikipedia.org/wiki/Chmod

8.5.4

La commande umask

La commande chmod permet de modier les droits daccs de chiers qui existent dj. Si lon souhaite faire en sorte que les chiers que lon va crer aient des droits daccs particuliers, sans avoir les modier aprs leur cration, il faut utiliser la commande umask. Utilise sans argument, elle afche la valeur (en octal) du masque de cration des chiers (le premier 0 indique simplement que la valeur qui suit est en octal) :
$ umask 0022

022 est une valeur classique de masque de cration des chiers sous UNIX. Les chiers sont crs par dfaut avec 666 comme droits daccs, moins la valeur du masque de cration. 666 22 = 644. Cest pour cela que les chiers sont crs avec rw-r--r-- comme droits daccs. De mme, les rpertoires sont crs par dfaut avec 777 comme droits daccs, moins la valeur du masque de cration. 777 22 = 755. Cest pour cela que les rpertoires sont crs avec rwxr-xr-x comme droits daccs. Si lon souhaite que ses chiers soient crs avec des droits daccs plus restrictifs, la meilleure mthode est de commencer avec les rpertoires. Par exemple, pour que les rpertoires soient crs avec rwx------, cest--dire 700, comme droits daccs, il faut un masque de cration valant 77 (puisquil faut soustraire 77 777 pour obtenir 700). On fait cela en donnant un argument umask :
$ umask 77

133

Chapitre 8. Gestion, organisation et traitement des chiers noter que la soustraction du masque de cration se fait sans retenue. Donc, en ce qui concerne les chiers, ceux-ci seront crs avec les droits daccs 666 77 = 600. Cest pour cela quil faut calculer le masque de cration partir des droits daccs que lon souhaite pour les rpertoires. Si lon tait parti des chiers, on aurait calcul un masque de cration valant 66 (puisquil faut soustraire 66 666 pour obtenir 600). Mais, dans ce cas, les rpertoires auraient t crs avec 711 (777 66) comme droits daccs, ce qui nest pas la valeur souhaite. Le masque de cration des chiers est indpendant dans chaque interprteur de commandes. Donc si plusieurs fentres dmulateur de terminal sont ouvertes, toute modication du masque de cration dans linterprteur de commandes de lune delles na pas dincidence sur les autres.
http://fr.wikipedia.org/wiki/Umask

8.6

Les noms des chiers

Nous avons jusqu maintenant utilis des noms de chiers sans dnir exactement quelles rgles ils doivent respecter. En thorie, un nom de chier sous UNIX peut contenir nimporte quoi sauf /, puisque ce caractre sert sparer les composants dun chemin daccs, et loctet nul (code ASCII 0), qui sert sous UNIX marquer la n dune chane de caractres. Les autres caractres sont utilisables. Nanmoins, nous avons vu que certains ont une signication particulire pour linterprteur de commandes. Et il en existe dautres, qui nont pas encore t tudis. Dailleurs, quasiment tous les signes de ponctuation ont une signication particulire pour linterprteur de commandes. Il convient donc de les viter, sauf le point (.), le tiret (- ) et le tiret bas (_). Si lon tient absolument utiliser des caractres ayant une signication particulire pour linterprteur de commandes, il est ncessaire de prendre des prcautions. Supposons que vous avez un chier malhabilement appel * et que vous voulez le supprimer. Bien entendu, on peut faire :
$ rm *

Ceci effacera le chier * et un certain nombre dautres, comme nous lavons vu au paragraphe 8.4.3 page 124. Pour neffacer que le chier *, la bonne faon de faire est dindiquer linterprteur de commandes de ne pas tenir compte de la signication particulire de ce caractre en le faisant prcder dune barre oblique inverse \ :
$ rm \*

134

8.6. Les noms des chiers Si un nom de chier contient plusieurs caractres spciaux, il faut les faire prcder chacun dun \. Par exemple, pour effacer le chier [1] :
$ rm toto\[1\]

On peut galement entourer lensemble du nom de chier dune paire de guillemets ou dapostrophes (les apostrophes permettent dinhiber plus de caractres spciaux que les guillemets, voir le paragraphe 12.5 page 235) :
$ rm "[1]" $ rm [1]

Il en va de mme avec les espaces :


$ rm nom\ de\ fichier\ avec\ espaces $ rm "nom de fichier avec espaces" $ rm nom de fichier avec espaces

Il est prfrable de ne pas utiliser de caractres accentus dans les noms de chiers et de sen tenir aux seuls caractres du code ASCII. En effet, si lon souhaite transmettre des chiers dun ordinateur un autre, lASCII est la seule partie commune de tous les systmes de codages et un nom de chier ne contenant que des caractres ASCII sera toujours bien transmis. De manire plus gnrale, il faut concevoir ses noms de chiers de faon les rendre efcacement manipulables au moyen des mtacaractres, cest--dire prvoir les noms des chiers pour pouvoir dsigner au moyen des mtacaractres ceux qui auront tre traits ensemble. Pour cela, on peut par exemple privilgier le format de date ISO 8601, qui indique dabord lanne, puis le mois, puis le jour (cest--dire quon indique les lments dune date du plus signicatif au moins signicatif). Ainsi, 1789-07-14 dsigne le 14 juillet 1789. On peut par exemple traiter tous ses chiers de 2009 ainsi, quelle que soit leur extension :
$ commande fichier-2009-*

Pour ne traiter que les chiers texte :


$ commande fichier-2009-*.txt

135

Chapitre 8. Gestion, organisation et traitement des chiers Le format de date habituellement utilis en France, outre son ambigut avec dautres formats nationaux et le fait quon ne puisse pas utiliser de / dans un nom de chier, oblige gnralement utiliser des expressions plus compliques. Ainsi le premier exemple devient :
$ commande fichier-*-2009.*

Enn, il est prfrable de ne pas utiliser de tiret comme premier caractre dun nom de chier. Supposons que vous avez un chier -i et que vous souhaitez leffacer :
$ rm -i usage: rm [-f|-i] [-dPRrvW] file ...

Ici, rm considre -i comme une option, puisquil sagit dun mot commenant par un tiret, et pas comme un argument. Puisquil lui manque son argument, il se plaint en afchant la syntaxe permettant de lutiliser. Utiliser les guillemets, les apostrophes ou \ ne fonctionnera pas dans la mesure ou le tiret nest pas un caractre spcial pour linterprteur de commandes. La bonne faon de faire est dutiliser un chemin daccs ne commenant pas par un tiret. Le plus simple est :
$ rm ./-i

Et le tour est jou !


http://fr.wikipedia.org/wiki/ISO_8601 http://www.cl.cam.ac.uk/~mgk25/iso-time.html

8.7

Gestion de lespace de stockage, compression et archivage

De plus en plus de donnes sont stockes sous forme de chiers informatiques. Selon leur nature et leur intrt, ceux-ci doivent tre conservs sur des priodes variables, allant de quelques jours plusieurs dizaines dannes. Mme si les capacits de stockage ne cessent daugmenter, elles ont nanmoins un cot. Il est donc important de connatre et doptimiser le volume occup par ses chiers. Lorsquils ne sont plus frquemment utiliss mais quon souhaite les conserver, les chiers ou ensembles de chiers peuvent tre comprims (il sagit de rduire la taille de chaque chier an quil occupe moins de place tout en prservant son contenu) ou archivs (il sagit de rassembler un ensemble de chiers dans un unique chier, quon appelle une archive, et qui est lui-mme souvent comprim). 136

8.7. Gestion de lespace de stockage, compression et archivage

8.7.1

Gestion de lespace de stockage

Plus on travaille sur un systme informatique, plus on accumule de chiers. Comment retrouver certains chiers dont on a oubli lemplacement exact ? Comment savoir quel est lespace total occup par lensemble de ses chiers ? Comment savoir quel est lespace occup par chaque rpertoire ? Comment connatre loccupation des disques locaux et des serveurs de chiers ?

8.7.1.1

Retrouver des chiers : la commande find

La commande find permet de retrouver, selon certains critres, des chiers dont on a oubli lemplacement exact. Elle sutilise suivie dun ou de plusieurs noms de rpertoires dans lesquels effectuer les recherches et doptions indiquant les critres de recherche. Elle parcourt alors rcursivement ces rpertoires et afche les noms des chiers sy trouvant et correspondant aux critres de recherche indiqus. Pour les exemples qui suivent, nous supposerons tre dans un rpertoire courant ayant la structure reprsente dans la gure 8.11. rep1, rep2 et rep3 sont des rpertoires, fich1, fich2 et fich3 sont des chiers ordinaires.
.

rep1

rep2

fich1

fich2

rep3

fich3

FIGURE 8.11 Arborescence utilise pour illustrer la commande find.

La faon la plus simple dutiliser la commande find est de ne pas indiquer de critre de recherche. Dans ce cas, elle se contente de parcourir rcursivement les rpertoires indiqus en arguments en afchant rpertoires et chiers rencontrs : 137

Chapitre 8. Gestion, organisation et traitement des chiers

$ find rep1 rep2/rep3 rep1 rep1/fich1 rep2/rep3 rep2/rep3/fich3

Lorsquelle parcourt un rpertoire, la commande find afche rpertoires et chiers rencontrs dans un ordre qui semble alatoire :
1 2 3 4 5 6 7 8

$ find . . ./rep2 ./rep2/rep3 ./rep2/rep3/fich3 ./rep2/fich2 ./rep1 ./rep1/fich1

Comme on peut le voir, lafchage nest pas tri comme lest, par exemple, celui de la commande ls. En effet, dans le rpertoire courant, le rpertoire rep2 (lignes 3 6) est parcouru avant le rpertoire rep1 (lignes 7 et 8) et, dans le rpertoire rep2, le chier fich2 (ligne 6) apparat aprs le rpertoire rep3 (lignes 4 et 5). En ralit, cela na rien dalatoire. Chaque rpertoire est simplement parcouru dans lordre selon lequel son contenu est stock dans le systme de chiers. Par ailleurs, lorsquun sous-rpertoire est rencontr, il est parcouru en totalit avant de poursuivre le parcours du rpertoire qui le contient. On peut le voir de la ligne 3 la ligne 6 de lexemple prcdent. On entre dans le rpertoire rep2 la ligne 3, o lon trouve un rpertoire rep3 la ligne 4. Plutt que de poursuivre le parcours du rpertoire rep2, on explore rep3 la ligne 5 puis on reprend le parcours du rpertoire rep2 la ligne 6. Cest ce quon appelle un parcours en profondeur dabord. Lautre mthode de parcours dun arbre est le parcours en largeur dabord, dans lequel chaque rpertoire est explor en totalit avant de descendre dans ses sous-rpertoires. Les critres de recherche sont indiqus sous la forme doptions qui doivent tre places aprs les noms des rpertoires dans lesquels effectuer les recherches. Loption -name de la commande find permet dindiquer tout ou partie du nom du chier recherch. Ici, on recherche, partir du rpertoire courant, les chiers (il peut y en avoir plusieurs, dans des rpertoires diffrents) qui sappellent exactement fich1 :
$ find . -name fich1 ./rep1/fich1

138

8.7. Gestion de lespace de stockage, compression et archivage Il est possible dutiliser des mtacaractres (voir le paragraphe 8.4 page 122) en prenant la prcaution de les inhiber (voir le paragraphe 8.6 page 134) an quils ne soient pas pris en compte par linterprteur de commandes mais soient passs tels quels la commande find. Ainsi, la commande suivante recherche, partir du rpertoire courant, les chiers dont le nom commence par fi :
$ find . -name fi\* ./rep2/rep3/fich3 ./rep2/fich2 ./rep1/fich1

Loption -mtime de la commande find, suivie dun nombre n, permet de trouver les chiers ayant t modis depuis moins de n jours :
$ find . -mtime 1 ./rep2/fich2

Il existe de nombreux autres critres de recherche. Le lecteur curieux pourra se reporter au manuel de la commande find pour approfondir ses connaissances. Enn, il convient de terminer par une mise en garde. Il arrive de voir des exemples dutilisation de la commande find effectuant leur recherche partir du rpertoire racine / et tout administrateur systme a dj t confront des utilisateurs faisant de mme, la recherche dun de leurs chiers :
$ find / -name toto

Il faut tre conscient quune telle recherche implique de parcourir lensemble du systme de chiers, qui peut atteindre un volume consquent si lordinateur utilis est raccord des serveurs de chiers de grande capacit ce qui est frquent sur des ordinateurs autres que des postes purement personnels tels que des serveurs de calcul. Et, plus le systme de chiers parcourir est volumineux, plus cette recherche durera longtemps. Par ailleurs, une telle recherche utilise des ressources non ngligeables au niveau du microprocesseur. Il est de toute faon gnralement inutile deffectuer une recherche partir du rpertoire racine, tant donn que les chiers des utilisateurs ne peuvent se trouver que dans leurs rpertoires personnels respectifs et, ventuellement, dans certains rpertoires partags, dont les utilisateurs concerns ont ncessairement connaissance puisquils y ont sciemment plac des chiers. Il est donc indispensable, lorsquon cherche un chier, de se limiter aux seuls rpertoires o il peut se trouver, an de ne pas gaspiller les ressources informatiques mises disposition.

139

Chapitre 8. Gestion, organisation et traitement des chiers


http://fr.wikipedia.org/wiki/Find

8.7.1.2

La commande quota

Sur certains systmes informatiques, les utilisateurs se voient imposer une limitation de lespace de stockage allou leurs chiers. Une telle limitation sappelle un quota. Il existe deux types de quotas : un quota sur le volume occup par les chiers ; un quota sur le nombre de chiers. Les quotas ont pour but dviter quun utilisateur ne remplisse lui seul la partie restante dun espace de stockage mutualis, au dtriment des autres utilisateurs. cet effet, il convient que ladministrateur du systme sassure que la somme des quotas des utilisateurs est infrieure la taille de lespace de stockage mutualis. lENSTA ParisTech, des quotas sont imposs aux lves, qui sont limits : 200 Mo en volume et 8 000 chiers pour les lves de premire anne ; 300 Mo en volume et 8 000 chiers pour les lves de deuxime anne ; 500 Mo en volume et 8 000 chiers pour les lves de troisime anne et de mastre spcialis. La commande quota permet dafcher ses quotas :
1 2 3 4

Disk quotas for user babafou (uid 1664): Filesystem blocks 60296 quota 295000 limit 300000 grace files 1029 quota 8000 limit 9000 grace se2.ensta.fr:/home

On y retrouve un habituel afchage en colonnes, dont la ligne 2 indique la signication de chaque colonne des lignes suivantes. Les lignes 3 et 4 de lexemple constituent en fait la mme ligne logique, qui a t scinde en deux en raison de la largeur de la premire colonne. Chaque ligne partir de la ligne 3 indique les quotas de lutilisateur sur les disques locaux et sur les serveurs de chiers sur lesquels il dispose dun espace de stockage. Dans lexemple, lutilisateur ne dispose que dun seul espace de stockage. La colonne Filesystem indique lespace de stockage concern. Les disques locaux sont indiqus sous la forme dun chemin daccs absolu commenant par /dev (il sagit du chier spcial permettant daccder au disque) et les serveurs de chiers sont indiqus par leur nom suivi de deux-points puis du chemin daccs absolu du rpertoire contenant les espaces de travail des utilisateurs (cest le cas dans notre exemple). Les quatre colonnes suivantes concernent le quota sur le volume occup par les chiers. 140

8.7. Gestion de lespace de stockage, compression et archivage La colonne blocks indique le volume total occup, en kilooctets. La premire colonne quota indique le quota sur le volume allou lutilisateur, en kilooctets. La premire colonne limit indique la limite sur le volume alloue lutilisateur, en kilooctets. La diffrence entre quota et limite est la suivante. Lutilisateur ne peut en aucun cas dpasser la limite. Ce contrle est effectu chaque criture de chier par le systme dexploitation. En revanche, il peut dpasser le quota (mais en restant sous la limite) condition quil repasse dessous en moins dune semaine. Faute de le faire, lutilisateur ne pourra alors ni modier ses chiers existants ni crer de nouveaux chiers et devra imprativement repasser sous le quota. An dviter ce dsagrment, il convient donc de vrier rgulirement ltat de ses quotas et de ne pas tarder supprimer les chiers inutiles ou archiver (en comprimant larchive) ceux qui nont plus dutilit immdiate. La premire colonne grace indique, dans le cas o lutilisateur a dpass le quota sur le volume, le temps quil lui reste pour repasser dessous. Les quatre colonnes suivantes concernent le quota sur le nombre de chiers. La colonne files indique le nombre de chiers. La seconde colonne quota indique le quota sur le nombre de chiers allou lutilisateur. La seconde colonne limit indique la limite sur le nombre de chiers alloue lutilisateur. La signication du quota et de la limite sur le nombre de chiers est la mme que pour le quota et la limite sur le volume. La seconde colonne grace indique, dans le cas o lutilisateur a dpass le quota en nombre de chiers, le temps quil lui reste pour repasser dessous.
http://en.wikipedia.org/wiki/Disk_quota

8.7.1.3

La commande du

La commande du (pour disk usage) permet dafcher le volume occup par lensemble du contenu dun rpertoire et de chacun de ses sous-rpertoires. Selon lUNIX utilis, les rsultats sont afchs soit en demi-kilooctets soit en kilooctets. An dviter de se poser des questions et davoir des rsultats plus parlants, il est prfrable dutiliser la commande du avec loption -k, qui permet lafchage des rsultats en kilooctets. Pour les exemples qui suivent, nous supposerons tre dans un rpertoire courant ayant la structure reprsente dans la gure 8.12 page suivante. Les rpertoires indiqus contiennent quelques chiers. Utilise sans argument, la commande du afche le volume occup par chacun des sous-rpertoires du rpertoire courant puis par le rpertoire courant lui-mme : 141

Chapitre 8. Gestion, organisation et traitement des chiers


.

rep1

rep2

rep3

rep4

rep5

FIGURE 8.12 Arborescence utilise pour illustrer la commande du.

1 2 3 4 5 6 7

$ du -k 546 2866 338 34 390 7294 ./rep1 ./rep2 ./rep3/rep4 ./rep3/rep5 ./rep3 .

Pour un rpertoire donn, le volume indiqu en premire colonne est le volume total occup par lensemble du contenu du rpertoire, chiers et sous-rpertoires compris. Ainsi, dans lexemple prcdent, les lignes 2 5 indiquent les volumes occups par les chiers contenus respectivement dans les rpertoires rep1, rep2, rep3/rep4 et rep3/rep5, qui nont aucun sous-rpertoire. La ligne 6 indique le volume total occup par le rpertoire rep3, savoir le volume occup par les chiers quil contient directement ainsi que ceux des rpertoires rep3/rep4 et rep3/rep5. la ligne 7 indique le volume total occup par le rpertoire courant, ses chiers, tous ses sous-rpertoires et leurs chiers. Utilise avec un ou plusieurs noms de rpertoires en arguments, la commande du afche, pour chaque rpertoire en argument, le volume occup par chacun de ses sous-rpertoires puis par le rpertoire lui-mme :

$ du -k rep1 rep3 546 338 34 390 rep1 rep3/rep4 rep3/rep5 rep3

142

8.7. Gestion de lespace de stockage, compression et archivage Si le volume occup par les sous-rpertoire na pas dintrt et quon ne souhaite afcher que le volume total, on peut utiliser la commande du avec loption -s (pour sum) :

$ du -ks 7294 546 390 . rep1 rep3 $ du -ks rep1 rep3

La commande du ne permet pas delle-mme le tri de son afchage. Il serait pourtant utile que les rpertoires puissent tre tris selon le volume total occup par chacun deux. Cela est possible en raccordant la commande du au moyen dun tuyau la commande sort (voir le paragraphe 9.5.5 page 196).
http://fr.wikipedia.org/wiki/Du_(Unix)

8.7.1.4

La commande df

La commande df (pour disk free) permet dafcher loccupation des disques locaux et des serveurs de chiers constituant le systme de chiers. Selon lUNIX utilis, les rsultats sont afchs soit en demi-kilooctets soit en kilooctets. An dviter de se poser des questions et davoir des rsultats plus parlants, il est prfrable dutiliser la commande df avec loption -k, qui permet lafchage des rsultats en kilooctets :
$ df -k Filesystem /dev/sda3 /dev/sda1 tmpfs se2.ensta.fr:/home se4.ensta.fr:/opt 1K-blocks 73590752 101086 516664 Used Available Use% Mounted on 44378456 20293 0 25413728 75574 516664 64% / 22% /boot 0% /dev/shm 12% /auto/se2 23% /auto/se4

1117077480 125568680 933849112 1805969176 392989256 1321241944

Malheureusement, les capacits actuelles des serveurs de chiers, qui se comptent au minimum en traoctets, font que les nombres sont illisibles tellement ils sont importants et que lafchage en colonnes sen retrouve dcal. De nombreux UNIX fournissent donc une commande df avec une option -h (pour human-readable), qui permet dafcher des rsultats plus clairs : 143

Chapitre 8. Gestion, organisation et traitement des chiers

1 2 3 4 5 6 7

$ df -h Filesystem /dev/sda3 /dev/sda1 tmpfs se2.ensta.fr:/home se4.ensta.fr:/opt Size 71G 99M 505M 1.1T 1.7T Used Avail Use% Mounted on 43G 20M 0 120G 375G 25G 74M 505M 891G 1.3T 64% / 22% /boot 0% /dev/shm 12% /auto/se2 23% /auto/se4

Les tailles indiques sont suivies dun M sil sagit de mgaoctets, dun G sil sagit de gigaoctets et dun T sil sagit de traoctets. On retrouve un habituel afchage en colonnes, dont la ligne 2 indique la signication de chaque colonne des lignes suivantes. Chaque ligne partir de la ligne 3 indique loccupation dun disque local ou dun serveur de chiers constituant le systme de chiers. La colonne Filesystem indique le disque local ou le serveur de chiers concern. Les disques locaux sont indiqus sous la forme dun chemin daccs absolu commenant par /dev (il sagit du chier spcial permettant daccder au disque), ce qui est le cas des lignes 3 et 4 de lexemple prcdent, et les serveurs de chiers sont indiqus par leur nom suivi de deux-points puis du chemin daccs absolu du rpertoire quils partagent, ce qui est le cas des lignes 6 et 7 de lexemple prcdent. La ligne 5, quant elle, correspond un espace de stockage situ en mmoire vive, cest une particularit de certains UNIX (Linux dans notre exemple). La colonne Size indique la taille du disque local ou du serveur de chiers. La colonne Used indique lespace occup sur le disque local ou le serveur de chiers. La colonne Avail indique lespace libre sur le disque local ou le serveur de chiers. La colonne Use% indique le taux doccupation du disque local ou du serveur de chiers. La colonne Mounted on indique o se situe le disque local ou le serveur de chiers dans larborescence du systme de chiers (cest ce quon appelle le point de montage). Plutt utilise par ladministrateur du systme, la commande df peut nanmoins se rvler utile pour un utilisateur. Par exemple, si lon dispose dun espace de stockage sans quotas et quon doit gnrer ou transfrer un gros volume de donnes, il est prfrable de vrier que lespace libre est sufsant avant de procder lopration.
http://fr.wikipedia.org/wiki/Df_(Unix)

8.7.2

Compression

La compression consiste transformer, au moyen dun algorithme, une suite de donnes (par exemple le contenu dun chier) en une autre suite de donnes plus 144

8.7. Gestion de lespace de stockage, compression et archivage courte mais contenant les mmes informations. La dcompression est lopration inverse. Sans rentrer dans les dtails, il faut savoir quil existe deux types de compressions : la compression dite sans perte lorsque la dcompression restitue exactement les donnes dorigine ; la compression dite avec pertes lorsque la dcompression aboutit des donnes lgrement diffrentes des donnes dorigine. La compression avec pertes ne peut sappliquer qu certains types de donnes bien particuliers. Elle est par exemple utilise par le format dimage JPEG. Trs grossirement, dans une image JPEG, une suite de pixels de couleurs proches, dont les diffrences sont indiscernables par lil humain, sera code sous la forme du nombre de ces pixels suivi de leur couleur moyenne. Le stockage des grandes zones homognes des images en est donc considrablement rduit. La compression avec pertes est galement utilise par le format audio MP3 dans lequel la prcision du codage de certains sons peu audibles est rduite. En revanche, nous nutiliserons pour notre part que de la compression sans perte an de pouvoir restaurer les donnes dorigine sans aucune altration. Trs schmatiquement, la compression sans perte consiste dcouper les donnes comprimer en blocs. Chaque bloc est analys de faon identier les redondances quil contient. Ces redondances sont alors stockes une seule fois, en indiquant quels endroits du bloc elles se trouvent. Les chiers contenant de nombreuses redondances (typiquement, les chiers texte) seront donc plus comprims que des chiers en contenant moins. Les chiers contenant peu de redondances nont donc pas intrt tre comprims de la sorte. Cest en particulier le cas pour les chiers dj comprims dune autre faon, comme les images JPEG ou les chiers audio MP3. Nous allons maintenant tudier plusieurs commandes permettant la compression et la dcompression de chiers, dans lordre croissant de leur efcacit (qui correspond galement leur ordre chronologique). Chaque commande de compression sera applique un chier texte tmoin de 100 ko an de juger de son taux de compression.
http://fr.wikipedia.org/wiki/Compression_de_donnes http://fr.wikipedia.org/wiki/JPEG http://fr.wikipedia.org/wiki/MPEG-1/2_Audio_Layer_3

8.7.2.1

Les commandes compress et uncompress

La plus ancienne des commandes de compression est compress. Cest aussi la moins efcace. Elle prend un ou plusieurs noms de chiers en arguments. Chacun de ces chiers sera comprim et remplac par un chier du mme nom auquel sera rajoute lextension .Z (en majuscule, on reconnat cette extension un chier comprim avec compress) : 145

Chapitre 8. Gestion, organisation et traitement des chiers

$ ll toto.txt -rw-r--r-1 babafou prof 102400 Dec 8 14:30 toto.txt $ compress toto.txt $ ll toto.txt.Z -rw-r--r-1 babafou prof 45513 Dec 8 14:30 toto.txt.Z

Les droits daccs ainsi que la date de dernire modication du chier dorigine sont conservs dans le chier comprim. Sur le chier tmoin, compress gnre un chier comprim tout de mme plus de deux fois plus petit. Pour dcomprimer un ou plusieurs chiers comprims avec compress, on utilise la commande uncompress :
$ uncompress toto.txt.Z $ ll toto.txt -rw-r--r-1 babafou prof 102400 Dec 8 14:30 toto.txt

Les droits daccs ainsi que la date de dernire modication du chier dorigine sont restaurs dans le chier dcomprim.
http://fr.wikipedia.org/wiki/Compress

8.7.2.2

Les commandes gzip et gunzip

La plus rpandue des commandes de compression est gzip. Elle prend un ou plusieurs noms de chiers en arguments. Chacun de ces chiers sera comprim et remplac par un chier du mme nom auquel sera rajoute lextension .gz (on reconnat cette extension un chier comprim avec gzip) :
$ ll toto.txt -rw-r--r-1 babafou prof 102400 Dec 8 14:30 toto.txt $ gzip toto.txt $ ll toto.txt.gz -rw-r--r-1 babafou prof 32188 Dec 8 14:30 toto.txt.gz

Les droits daccs ainsi que la date de dernire modication du chier dorigine sont conservs dans le chier comprim. Sur le chier tmoin, gzip gnre un chier comprim de moins du tiers de sa taille dorigine. Il est possible de contrler le niveau de compression de gzip au moyen des options -1 -9. Loption -1 donne le temps dexcution le plus rapide au prix dune 146

8.7. Gestion de lespace de stockage, compression et archivage compression moins efcace. Loption -9 donne la compression la plus efcace au prix dun temps dexcution plus important. Les autres options permettent dobtenir les niveaux de compression intermdiaires. Le niveau par dfaut (sans option) correspond loption -6. Sur notre chier tmoin, avec loption -9, gzip gnre effectivement un chier plus petit :
$ ll toto.txt -rw-r--r-1 babafou prof 102400 Dec 8 14:30 toto.txt $ gzip -9 toto.txt $ ll toto.txt.gz -rw-r--r-1 babafou prof 32143 Dec 8 14:30 toto.txt.gz

Compte tenu des performances des ordinateurs actuels, on peut utiliser systmatiquement loption -9. Pour dcomprimer un ou plusieurs chiers comprims avec gzip, on utilise la commande gunzip :
$ gunzip toto.txt.gz $ ll toto.txt -rw-r--r-1 babafou prof 102400 Dec 8 14:30 toto.txt

Les droits daccs ainsi que la date de dernire modication du chier dorigine sont restaurs dans le chier dcomprim.
http://www.gzip.org/ http://fr.wikipedia.org/wiki/Gzip

8.7.2.3

Les commandes bzip2 et bunzip2

Une autre commande de compression trs rpandue est bzip2. Elle prend un ou plusieurs noms de chiers en arguments. Chacun de ces chiers sera comprim et remplac par un chier du mme nom auquel sera rajoute lextension .bz2 (on reconnat cette extension un chier comprim avec bzip2) :
$ ll toto.txt -rw-r--r-1 babafou prof 102400 Dec 8 14:30 toto.txt $ bzip2 toto.txt $ ll toto.txt.bz2 -rw-r--r-1 babafou prof 29289 Dec 8 14:30 toto.txt.bz2

147

Chapitre 8. Gestion, organisation et traitement des chiers Les droits daccs ainsi que la date de dernire modication du chier dorigine sont conservs dans le chier comprim. Sur le chier tmoin, bzip2 gnre un chier comprim un peu plus petit que ce que donne gzip. Pour dcomprimer un ou plusieurs chiers comprims avec bzip2, on utilise la commande bunzip2 :
$ bunzip2 toto.txt.bz2 $ ll toto.txt -rw-r--r-1 babafou prof 102400 Dec 8 14:30 toto.txt

Les droits daccs ainsi que la date de dernire modication du chier dorigine sont restaurs dans le chier dcomprim.
http://www.bzip.org/ http://fr.wikipedia.org/wiki/Bzip2

8.7.2.4

Les commandes lzma et unlzma

Une autre commande de compression est lzma. Elle prend un ou plusieurs noms de chiers en arguments. Chacun de ces chiers sera comprim et remplac par un chier du mme nom auquel sera rajoute lextension .lzma (on reconnat cette extension un chier comprim avec lzma) :
$ ll toto.txt -rw-r--r-1 babafou prof 102400 Dec 8 14:30 toto.txt $ lzma toto.txt $ ll toto.txt.lzma -rw-r--r-1 babafou prof 29251 Dec 8 14:30 toto.txt.lzma

Les droits daccs ainsi que la date de dernire modication du chier dorigine sont conservs dans le chier comprim. Sur le chier tmoin, lzma gnre un chier comprim de taille quivalente ce que donne bzip2. Pour dcomprimer un ou plusieurs chiers comprims avec lzma, on utilise la commande unlzma :
$ unlzma toto.txt.lzma $ ll toto.txt -rw-r--r-1 babafou prof 102400 Dec 8 14:30 toto.txt

148

8.7. Gestion de lespace de stockage, compression et archivage Les droits daccs ainsi que la date de dernire modication du chier dorigine sont restaurs dans le chier dcomprim.
http://tukaani.org/lzma/ http://fr.wikipedia.org/wiki/LZMA

8.7.2.5

Les commandes xz et unxz

Les commandes xz et unxz ne sont pas encore disponibles dans lenvironnement informatique de lENSTA ParisTech. La plus rcente des commandes de compression, qui utilise une volution de lalgorithme de lzma, est xz. Elle prend un ou plusieurs noms de chiers en arguments. Chacun de ces chiers sera comprim et remplac par un chier du mme nom auquel sera rajoute lextension .xz (on reconnat cette extension un chier comprim avec xz) :
$ ll toto.txt -rw-r--r-1 babafou prof 102400 Dec 8 14:30 toto.txt $ xz toto.txt $ ll toto.txt.xz -rw-r--r-1 babafou prof 29296 Dec 8 14:30 toto.txt.xz

Les droits daccs ainsi que la date de dernire modication du chier dorigine sont conservs dans le chier comprim. Sur le chier tmoin, xz gnre un chier comprim de taille quivalente ce que donnent lzma et bzip2. Pour dcomprimer un ou plusieurs chiers comprims avec xz, on utilise la commande unxz :
$ unxz toto.txt.xz $ ll toto.txt -rw-r--r-1 babafou prof 102400 Dec 8 14:30 toto.txt

Les droits daccs ainsi que la date de dernire modication du chier dorigine sont restaurs dans le chier dcomprim.
http://tukaani.org/xz/ http://fr.wikipedia.org/wiki/XZ_(format_de_fichier)

149

Chapitre 8. Gestion, organisation et traitement des chiers

8.7.3

Archivage

Larchivage consiste rassembler une arborescence de rpertoires et de chiers dans un unique chier, quon appelle une archive, et qui contient toutes les informations ncessaires la recration de larborescence dorigine. Lorsquun ensemble de chiers na plus dutilit immdiate, on peut gnrer une archive permettant de recrer ces chiers le jour venu. An doccuper le moins de volume de stockage possible, cette archive est souvent comprime, sauf si elle contient un grand nombre de chiers dj comprims, comme des images JPEG, des chiers audio MP3 ou des chiers comprims avec les commandes qui viennent dtre tudies. Une archive (comprime au besoin) peut ainsi facilement tre stocke sur un support externe (cl USB, bande magntique, etc.) ou transfre grce au rseau informatique.
http://en.wikipedia.org/wiki/List_of_archive_formats

8.7.3.1

La commande tar

Sous UNIX, la commande de prdilection pour manipuler des archives est la commande tar (pour tape archiver). Comme son nom lindique, elle trouve son origine dans larchivage sur bande magntique mais elle peut tout aussi bien grer des archives sous forme de chiers. La commande tar sutilise obligatoirement avec au moins une option. Dans ces conditions, lutilisation du tiret pour introduire les options nest pas ncessaire.
http://fr.wikipedia.org/wiki/Tar_(informatique)

8.7.3.1.1

Crer une archive

toto1, toto2

Pour crer une archive dun rpertoire nomm rep et contenant trois chiers, et toto3, on utilise :

$ tar cvf rep.tar rep rep/ rep/toto1 rep/toto2 rep/toto3

Cette commande cre une archive rep.tar du rpertoire rep. Il est dusage de nommer les archives du mme nom que le rpertoire archiver, suivi de lextension .tar. La signication des options de la commande tar est la suivante : loption -c (pour create) permet de crer une archive ; 150

8.7. Gestion de lespace de stockage, compression et archivage loption -v (pour verbose) permet dafcher les chemins daccs relatifs des chiers archivs ; loption -f (pour le) permet de crer une archive dans le chier dont le nom suit plutt que sur bande magntique. Loption -v provoque lafchage des noms des rpertoires et chiers au fur et mesure quils sont intgrs dans larchive. Cette option nest pas indispensable mais elle permet de visualiser lavancement de la commande. Larchivage de rpertoires volumineux peut en effet tre long et il est toujours utile de voir que les choses progressent. Lordre dans lequel on indique les options de la commande tar est sans importance. Dans lexemple prcdent, nous avons archiv un unique rpertoire et son contenu. La commande tar permet darchiver des chiers seuls, des rpertoires et toute combinaison des deux :
$ tar cvf archive.tar toto1 toto2 rep1 rep2 [...]

Nanmoins, il est prfrable de sen tenir larchivage dun unique rpertoire (quitte regrouper dedans ce quon souhaite archiver). En effet, ceci permet de nommer larchive selon le nom du rpertoire archiv en lui rajoutant lextension .tar, comme nous venons de le voir. Ceci permet galement dassurer la personne qui va extraire cette archive que cette opration va crer un unique rpertoire dont on connat dj le nom (puisquil sagit du nom de larchive, sans lextension .tar). Il est en effet particulirement dsagrable dextraire une archive contenant des dizaines de chiers sans quils soient contenus dans un rpertoire, tant et si bien quils vont polluer le rpertoire courant et, dans le pire des cas, craser des chiers prexistants ayant des noms identiques ceux de certains chiers contenus dans larchive. La commande tar laisse les rpertoires et chiers archivs en place. Une fois larchive cre, on peut donc supprimer le rpertoire ayant t archiv :
$ rm -r rep

8.7.3.1.2

Extraire une archive

Pour extraire une archive, cest--dire recrer larborescence dorigine, on utilise :


$ tar xvf rep.tar rep/ rep/toto1 rep/toto2 rep/toto3

151

Chapitre 8. Gestion, organisation et traitement des chiers Loption -x (pour extract) de la commande tar permet dextraire larchive. Les autres options ont la mme signication que pour la cration dune archive. Si larchive na plus dutilit, on peut alors la supprimer. 8.7.3.1.3 Afcher le contenu dune archive

Il peut tre utile dafcher le contenu dune archive sans pour autant lextraire. Pour cela, on utilise loption -t (pour list) de la commande tar :
$ tar tf rep.tar rep/ rep/toto1 rep/toto2 rep/toto3

8.7.3.1.4

Compression et dcompression dune archive

An doccuper le moins de place possible, il est intressant de comprimer une archive nouvellement cre :
$ tar cvf rep.tar rep [...] $ bzip2 rep.tar

Lutilisation de la commande bzip2 va donc gnrer un chier rep.tar.bz2. Pour dcomprimer le chier et extraire larchive, on procde dans lordre inverse :
$ bunzip2 rep.tar.bz2 $ tar xvf rep.tar [...]

On peut bien entendu utiliser les commandes de compression et de dcompression de son choix. Nanmoins, comme lutilisation de la compression en conjonction avec larchivage est quasiment systmatique, les versions modernes de la commande tar savent la grer directement, au moins pour les commandes compress, gzip, bzip2 et les commandes de dcompression associes. Pour les autres commandes, il faut procder en deux tapes comme indiqu prcdemment. Ainsi les options suivantes de la commande tar permettent dutiliser automatiquement une commande de compression (si elles sont utilises avec loption -c) ou de dcompression (si elles sont utilises avec les options -x ou -t) : 152

8.7. Gestion de lespace de stockage, compression et archivage loption -Z (majuscule) pour compress et uncompress ; loption -z (minuscule) pour gzip et gunzip ; loption -j pour bzip2 et bunzip2. Par exemple :
$ tar cvjf rep.tar.bz2 rep [...] $ tar xvjf rep.tar.bz2 [...]

Lors de la cration de larchive, il est ncessaire dindiquer lextension correcte (.Z pour loption -Z, .gz pour loption -z et .bz2 pour loption -j) de larchive comprime.

8.7.4

changes avec dautres systmes dexploitation

Si, sous UNIX, lutilisation de la commande tar pour larchivage, en conjonction avec une commande de compression, est incontournable, dautres systmes dexploitation utilisent des logiciels qui leur sont propres. Ces logiciels ralisent gnralement ensemble les fonctions darchivage et de compression, ce qui est probablement plus simple pour lutilisateur novice mais empche de choisir lalgorithme de compression. 8.7.4.1 Les commandes zip et unzip

Le format ZIP est le format natif darchive comprime sous Windows. De ce fait, il est trs rpandu. Les chiers ZIP se reconnaissent leur extension .zip (ventuellement en majuscules, Windows ne faisant pas la diffrence entre majuscules et minuscules). Lalgorithme de compression utilis par le format ZIP est le mme que celui utilis par la commande gzip. Une archive ZIP aura donc quasiment la mme taille quune archive cre avec tar puis comprime avec gzip. La commande zip, utilise avec loption -r permet de crer une archive :
$ zip -r rep.zip rep adding: rep/ (stored 0%) adding: rep/toto1 (deflated 72%) adding: rep/toto2 (deflated 72%) adding: rep/toto3 (deflated 72%)

La commande unzip permet dextraire une archive : 153

Chapitre 8. Gestion, organisation et traitement des chiers

$ unzip rep.zip Archive: rep.zip creating: rep/ inflating: rep/toto1 inflating: rep/toto2 inflating: rep/toto3

Loption -l de la commande unzip permet dafcher le contenu dune archive sans lextraire :

$ unzip -l rep.zip Archive: Length -------0 420211 420211 420211 -------1260633 rep.zip Date ---Time ---Name ---rep/ rep/toto1 rep/toto2 rep/toto3 ------4 files

12-10-09 18:39 12-10-09 18:41 12-10-09 18:41 12-10-09 18:41

http://fr.wikipedia.org/wiki/ZIP_(format_de_fichier)

8.7.4.2

La commande unrar

Le format RAR, quoique moins utilis que le format ZIP, est pourtant relativement rpandu sous Windows. Les chiers RAR se reconnaissent leur extension .rar (ventuellement en majuscules, Windows ne faisant pas la diffrence entre majuscules et minuscules). La cration darchives au format RAR nest possible quavec des logiciels commerciaux sous licence de lauteur du format. En revanche, lextraction darchives au format RAR est possible sous UNIX au moyen de la commande unrar. La commande unrar, utilise avec e (pour extract) comme argument, suivi du nom du chier darchive, permet dextraire celle-ci : 154

8.7. Gestion de lespace de stockage, compression et archivage

$ unrar e rep.rar UNRAR 3.90 beta 4 freeware Copyright (c) 1993-2009 Alexander Roshal

Extracting from rep.rar Extracting Extracting Extracting All OK toto1 toto2 toto3 OK OK OK

La commande unrar, utilise avec l (pour list) comme argument, suivi du nom du chier darchive, permet den afcher le contenu :
$ unrar l rep.rar UNRAR 3.90 beta 4 freeware Archive rep.rar Name toto1 toto2 toto3 rep 4 Size 421361 421361 421361 0 1264083 Packed Ratio 118036 118036 118036 0 354108 Date Time Attr .....A. .....A. .....A. .D..... CRC Meth Ver Copyright (c) 1993-2009 Alexander Roshal

------------------------------------------------------------------------------28% 10-12-09 19:58 28% 10-12-09 19:58 28% 10-12-09 19:58 0% 10-12-09 19:58 28% 496B92BD m3g 2.9 496B92BD m3g 2.9 496B92BD m3g 2.9 00000000 m0 2.0

-------------------------------------------------------------------------------

http://fr.wikipedia.org/wiki/RAR_(format_de_fichier)

155

9
Commandes, processus et redirections

L
9.1

dun ordinateur nest pas le stockage des chiers, qui est dailleurs ralis par des priphriques, mais bel et bien lexcution de logiciels qui, elle, est ralise par le cerveau de lordinateur, cest--dire le microprocesseur. cet effet, linterprteur de commandes permet de contrler le lancement, lexcution et larrt des logiciels. Il offre galement des outils permettant den conserver les rsultats et de faire dialoguer les logiciels entre eux.
A FONCTION PREMIRE

Lhistorique des commandes

Comme nous lavons vu au paragraphe 7.2.6 page 86, il est possible dutiliser les touches ches pour naviguer dans lhistorique des commandes. Il est galement possible de lutiliser au travers dun ensemble dexpressions.
http://en.wikipedia.org/wiki/Command_history

9.1.1

La commande history

Lhistorique des commandes peut tre afch grce la commande history :


$ history 1 2 3 4 5 date ls -l toto.txt chmod 644 toto.txt cp tata.txt tutu.txt history

Les commandes sont afches dans lordre chronologique et sont prcdes de leur numro. Certains interprteurs de commandes (C shell, TENEX C shell et Bourne-again shell) indiquent la commande history qui vient dtre excute comme dernire commande de lhistorique (cest le cas dans lexemple prcdent) alors que dautres 157

Chapitre 9. Commandes, processus et redirections (Korn shell et Z shell) sarrtent la commande prcdente. La commande history nexiste pas en Bourne shell. Lorsque lhistorique est un peu long et quon ne souhaite afcher que les dernires commandes, on en indique le nombre en argument de la commande history :
$ history 3 3 4 5 chmod 644 toto.txt cp tata.txt tutu.txt history 3

Lhistorique a une taille nie. Il contient gnralement quelques dizaines ou quelques centaines de commandes.
http://en.wikipedia.org/wiki/History_(Unix)

9.1.2

Au sujet des exemples qui suivent

An de conserver le mme rfrentiel et dviter de rappeler systmatiquement lhistorique ou de le reconstruire mentalement, les exemples qui suivent seront supposs tre saisis immdiatement aprs cet historique, cest--dire lendroit o se trouve le curseur :
$ history 1 2 3 4 5 $ date ls -l toto.txt chmod 644 toto.txt cp tata.txt tutu.txt history

9.1.3

Excuter nouveau une commande dans son intgralit

Il est possible dexcuter nouveau une commande en saisissant un point dexclamation suivi de son numro dans lhistorique. Ainsi, la commande ls de lexemple prcdent peut tre excute nouveau en tapant !2 :
$ !2 ls -l toto.txt -rw-r--r-1 babafou prof 554923 Mar 1 11:44 toto.txt

158

9.1. Lhistorique des commandes Linterprteur de commandes afche la commande quil excute avant de le faire. On peut obtenir le mme rsultat en faisant suivre le point dexclamation dun nombre ngatif indiquant la commande excuter. Ici, la commande ls est la quatrime commande en remontant dans lhistorique donc on peut taper !-4 :
$ !-4 ls -l toto.txt -rw-r--r-1 babafou prof 554923 Mar 1 11:44 toto.txt

La commande prcdente peut tre excute nouveau en tapant simplement !!, qui est donc lquivalent de !-1. On peut galement excuter nouveau la dernire commande commenant par une chane de caractres en saisissant un point dexclamation suivi de cette chane de caractres. Ainsi, !da excutera nouveau la dernire commande commenant par da :
$ !da date Mon Mar 1 10:47:01 CET 2010

De mme, on peut excuter nouveau la dernire commande contenant une chane de caractres en saisissant un point dexclamation suivi dun point dinterrogation et de cette chane de caractres. Ainsi, !?tot excutera nouveau la dernire commande contenant tot (dans son nom, ses options ou ses arguments) :
$ !?tot ls -l toto.txt -rw-r--r-1 babafou prof 554923 Mar 1 11:44 toto.txt

9.1.4

Utiliser certains mots dune commande prcdente

Plutt que dexcuter nouveau une commande prcdente dans sa totalit, on peut galement en extraire certains mots en utilisant les expressions que nous venons dtudier suivies dun sufxe introduit par un deux-points. Ainsi, deux-points suivi dun nombre dsigne le mot correspondant (en commenant par 0).
$ ls -l !4:1 ls -l tata.txt -rw-r--r-1 babafou prof 556643 Mar 2 10:32 tata.txt

159

Chapitre 9. Commandes, processus et redirections Ici, lexpression !4:1 fait rfrence au deuxime (puisquon commence zro) mot de la quatrime commande de lhistorique. On peut galement indiquer un intervalle et utiliser des lments provenant de diffrentes commandes de lhistorique :
$ !ls:0-1 !4:1 ls -l tata.txt -rw-r--r-1 babafou prof 556643 Mar 2 10:32 tata.txt

Ici, lexpression !ls:0-1 fait rfrence aux premier et deuxime mots de la dernire commande commenant par ls. Le caractre $ peut tre utilis dans un intervalle pour dsigner le dernier mot ou tre utilis seul :
$ rm !ls:$ rm toto.txt

Pour extraire un ou plusieurs mots dune commande contenant une chane de caractres, il faut ajouter un point dinterrogation immdiatement avant le deuxpoints du sufxe :
$ rm !?tot?:2 rm toto.txt

Pour rutiliser un mot de la commande prcdente, on peut utiliser plus simplement !:0, !:1, etc., jusqu !:$ quon peut simplier en !$. Il est assez courant dexcuter la suite plusieurs commandes ayant le mme argument. Cest l que !$ se rvle trs utile :
$ ls -l toto.txt -rw-r--r-$ rm !$ rm toto.txt 1 babafou prof 554923 Mar 1 11:44 toto.txt

Enn, il est possible de rpter la commande prcdente en remplaant une chane de caractres par une autre. Pour cela, on saisit un accent circonexe suivi de la chane de caractres remplacer suivie dun autre accent circonexe suivi de la chane de caractres de remplacement (le tout sans espaces, sauf, au besoin, dans les chanes de caractres) : 160

9.2. Les chemins de recherche des commandes

$ ls -l toto.txt -rw-r--r-$ ^toto^tata ls -l tata.txt -rw-r--r-1 babafou prof 556643 Mar 2 10:32 tata.txt 1 babafou prof 554923 Mar 1 11:44 toto.txt

9.2
9.2.1

Les chemins de recherche des commandes


Commandes externes et commandes internes

Que se passe-t-il lorsquon excute une commande ? Nous avons vu au paragraphe 8.3.5 page 115 que certains rpertoires (en loccurrence /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin et /usr/local/sbin) contiennent des chiers excutables dont les noms sont identiques certaines commandes que nous avons tudies. Ce nest pas une concidence. En effet, quasiment toutes les commandes sont des chiers excutables qui sont stocks quelque part dans larborescence du systme de chiers. Ce sont des commandes externes. Par opposition, il existe quelques commandes internes, qui sont directement traites par linterprteur de commandes. Les commandes cd, exit, type (que nous allons tudier plus loin) et umask sont des commandes internes et il en existe dautres. Il existe galement quelques trs rares commandes qui sont des commandes internes et qui existent galement en tant que commandes externes. Cest par exemple le cas des commandes kill (que nous allons tudier au paragraphe 9.3.5 page 170), echo et which (que nous allons tudier plus loin). Revenons la question initiale. Que se passe-t-il lorsquon excute une commande ? Si celle-ci est une commande interne, linterprteur de commandes reconnat son nom et il la traite directement. Sinon, il sagit dune commande externe. Si le nom de cette commande contient une barre oblique /, linterprteur de commandes essaie dexcuter le chier correspondant, considr comme un chemin daccs relatif si le nom de la commande ne commence pas par / ou comme un chemin daccs absolu si le nom de la commande commence par /. Par exemple, si lon tape la commande suivante :
$ rep/toto

linterprteur de commandes essaiera dexcuter le chier toto (qui doit donc tre excutable) situ dans le rpertoire rep. Sinon (cest le cas gnral), linterprteur de commandes doit dterminer o se trouve le chier excutable de la commande dans larborescence du systme de chiers. Pour cela, il utilise la variable denvironnement PATH. 161

Chapitre 9. Commandes, processus et redirections

9.2.2

La variable denvironnement PATH

Une variable denvironnement est un paramtre de conguration de linterprteur de commandes, dont la valeur est xe par ladministrateur du systme ou par lutilisateur. On peut accder la valeur dune variable denvironnement en faisant prcder son nom dun symbole dollar $. Ainsi, on peut afcher le contenu dune variable denvironnement en utilisant la commande echo :
$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin

La variable denvironnement PATH contient une liste de chemins daccs de rpertoires spars par des deux-points. Cest ce quon appelle les chemins de recherche des commandes. En effet, lors de son dmarrage, linterprteur de commandes va parcourir dans lordre les rpertoires indiqus dans la variable denvironnement PATH et conserver en mmoire une liste des commandes (cest--dire des chiers excutables) quils contiennent. Lorsquon excute une commande externe dont le nom ne contient pas de barre oblique /, donc, linterprteur de commandes va parcourir cette liste la recherche de la commande et va excuter la premire quil trouve (lordre des rpertoires dans la variable denvironnement PATH a donc son importance) ou afcher un message derreur si la commande ny gure pas.
http://en.wikipedia.org/wiki/PATH_(variable)

9.2.3

Les commandes type et which

Si lon souhaite afcher le chemin daccs absolu dune commande en utilisant les informations contenues dans la variable denvironnement PATH, on peut utiliser les commandes type ou which :
$ type ls ls is /bin/ls $ which ls /bin/ls

http://en.wikipedia.org/wiki/Type_(Unix) http://en.wikipedia.org/wiki/Which_(Unix)

162

9.2. Les chemins de recherche des commandes

9.2.4

Mise en garde

Il arrive frquemment de voir le rpertoire . (rpertoire courant) dans le contenu de la variable denvironnement PATH :
$ echo $PATH /usr/bin:/bin:.

Ceci peut tre pratique pour les personnes qui font beaucoup de programmation. En effet, quand on programme, on va gnrer un chier excutable dans le rpertoire courant. Comment faire pour lexcuter ? Si le rpertoire courant ne gure pas dans le contenu de la variable denvironnement PATH, il faut excuter son programme (quon appellera test) de la sorte :
$ ./test

On est donc tent dajouter . quelque part dans le contenu de la variable denvironnement PATH pour spargner de taper les deux caractres ./ :
$ test

Malheureusement, ceci pose deux problmes. Si . gure vers la n du contenu de la variable denvironnement PATH (en tout cas, aprs /bin), on risque davoir une surprise. Supposons que notre programme test soit conu pour afcher des informations ds son lancement :
$ test $

Rien nest afch... On peut passer longtemps chercher pourquoi dans le programme parce que la source du problme ny est pas. En effet il existe une commande test dans le rpertoire /bin (quand elle nest pas une commande interne de linterprteur de commandes). Comme /bin gure avant . dans le contenu de la variable denvironnement PATH, cest /bin/test qui est excut quand on tape simplement test. Qu cela ne tienne, il suft donc de mettre . au dbut du contenu de la variable denvironnement PATH pour que ce soit notre test qui soit excut. Le problme inverse se posera alors parce quil sera impossible dexcuter les commandes ayant le mme nom quun de ses programmes autrement que par son chemin daccs absolu (ce que lutilisation de la variable denvironnement PATH est cense viter). 163

Chapitre 9. Commandes, processus et redirections La morale de cette histoire est double. Tout dabord, mettre . dans le contenu de la variable denvironnement PATH pose des problmes, o quil soit. On aura beau prendre garde ne pas nommer ses programmes comme des commandes externes, il y en a tellement quon aura forcment un problme un jour. Ensuite, quand on programme, il est fortement recommand dexcuter ses programmes en faisant systmatiquement prcder leur nom de ./ an dtre toujours certain dexcuter le bon programme :
$ ./mon_programme

9.3

Gestion des processus

UNIX tant un systme dexploitation multitche, il est possible de faire fonctionner plusieurs logiciels en mme temps. Plus prcisment, on parle de processus (process en anglais) pour dsigner un logiciel en cours dexcution.
http://fr.wikipedia.org/wiki/Processus_(informatique)

9.3.1

Lordonnancement

Mais les processus fonctionnent-ils rellement en mme temps ? Un microprocesseur mono-cur nous discuterons des microprocesseurs multi-curs plus loin ne peut excuter quune seule instruction un instant donn. Il ne peut donc excuter quun seul processus la fois. Lillusion du multitche provient du fait que chaque processus fonctionne pendant un laps de temps donn puis laisse sa place un autre processus et ainsi de suite. Ce laps de temps, de lordre de quelques dizaines de millisecondes, est sufsamment long lchelle du microprocesseur, qui est cadenc plusieurs gigahertz, pour laisser au processus un temps dexcution raisonnable et sufsamment court notre chelle pour nous donner lillusion dune excution simultane des processus. Plus techniquement, un processus se voit attribuer lutilisation du microprocesseur pendant un certain temps, quon appelle un quantum, par lordonnanceur (scheduler en anglais), qui est le composant du systme dexploitation responsable de lattribution du microprocesseur aux diffrents processus. Le mcanisme dattribution sappelle lordonnancement (scheduling en anglais). la n de son quantum, lordonnanceur retire lutilisation du microprocesseur au processus qui en disposait, choisit un nouveau processus (qui peut parfois tre le mme) et lui cone lutilisation du microprocesseur pendant un nouveau quantum (qui peut tre dune dure diffrente du prcdent). La gure 9.1 page ci-contre reprsente lordonnancement de trois processus, indiqus sur laxe des ordonnes par les repres 1, 2 et 3. Le temps est indiqu par laxe des abscisses. 164

9.3. Gestion des processus processus 3 2 1 temps t0 t1 t2 t3 t4 t5 t6 FIGURE 9.1 Ordonnancement.

Le processus 1 utilise le microprocesseur du temps t0 au temps t1 . cet instant, lutilisation du microprocesseur lui est retire par lordonnanceur, qui choisit un nouveau processus qui coner lutilisation du microprocesseur, savoir le processus 2. Ceci dure un temps 1 . Pendant ce temps, aucun processus ne sexcute puisque lordonnanceur utilise le microprocesseur. Lexcution de lordonnanceur est reprsente par les deux traits interrompus verticaux, le premier en t1 et le second en t1 + 1 (non indiqu sur laxe des abscisses). Il en va de mme pour le processus 2 et ainsi de suite. Les quanta, reprsents dans la gure 9.1 par les lignes horizontales gurant en face de chaque processus, ne sont pas ncessairement de la mme dure. Les processus ne sont pas non plus ncessairement ordonnancs de manire rgulire (1 puis 2 puis 3 puis 1 puis 2 puis 3, etc.). Tout ceci dpend de lalgorithme de choix de lordonnanceur et de la priorit des processus (voir le paragraphe 9.6.2 page 201). Un fonctionnement multitche o lordonnanceur retire lutilisation du microprocesseur aux processus est dit premptif . Cest aujourdhui le mode de fonctionnement de tout systme dexploitation srieux. Par le pass, certains systmes dexploitation (dont Windows avant Windows 95, qui ntait dailleurs pas totalement premptif, et Mac OS avant Mac OS X) utilisaient un fonctionnement multitche coopratif, dans lequel les processus devaient deux-mmes rendre lutilisation du microprocesseur lordonnanceur, ce quils ne faisaient pas toujours... Avec un microprocesseur multi-cur, plusieurs processus (autant que de curs) peuvent rellement sexcuter simultanment. Lordonnanceur utilise lun des curs, pralablement retir au processus qui lutilisait, an de choisir un autre processus auquel lattribuer. Pendant ce temps, les processus utilisant les autres curs continuent fonctionner. Lordonnancement est tudi plus en dtail dans le cours de deuxime anne IN201, Systmes dexploitation. 165

Chapitre 9. Commandes, processus et redirections


http://fr.wikipedia.org/wiki/Ordonnancement_dans_les_systmes_d exploitation http://fr.wikipedia.org/wiki/Multitche_premptif http://fr.wikipedia.org/wiki/Microprocesseur_multi-cur

9.3.2

Lancement dun processus en arrire-plan

Nous navons pour le moment utilis des commandes que squentiellement. Ceci peut dailleurs poser problme avec certaines dentre elles. En effet, par dfaut, linterprteur de commandes attend la n de chaque commande quil excute avant dafcher une nouvelle invite. Cela est raisonnable pour la plupart des commandes que nous avons tudies, qui se droulent trs rapidement mais dautres peuvent durer beaucoup plus longtemps. Par exemple, lorsquon lance Emacs, linterprteur de commandes attend quon ait quitt cet diteur de texte avant dafcher une nouvelle invite. Pendant ce temps, linterprteur de commandes depuis lequel Emacs a t lanc nest pas utilisable. Cela est dautant plus regrettable quEmacs ouvre sa propre fentre et na ensuite plus aucune interaction avec lutilisateur par le biais de linterprteur de commandes. Cest dailleurs le cas de quasiment toutes les commandes ouvrant leur propre fentre. Il serait plus utile de pouvoir lancer ce type de commande en indiquant linterprteur de commandes quil peut ne pas attendre sa n et rafcher une nouvelle invite tout de suite. Ceci est possible grce au caractre & :
$ emacs toto.txt & [1] 1664 $

Celui-ci indique linterprteur de commandes quil doit lancer la commande en arrire-plan (background en anglais) on parle galement de tche de fond , cest--dire sans attendre quelle se termine. Ce caractre doit gurer en dernier sur la ligne de commande. Il nest pas ncessaire de le faire prcder dune espace. Linterprteur de commandes afche donc tout de suite une nouvelle invite aprs avoir indiqu deux informations : 1. entre crochets, le numro de tche de la commande qui vient dtre lance (nous ne reviendrons pas sur ce concept) ; 2. lidentiant de processus (nous reviendrons sur ce concept au paragraphe 9.3.3 page suivante) de la commande qui vient dtre lance. Il est ensuite possible dutiliser linterprteur de commandes pendant quEmacs sexcute en arrire-plan. 166

9.3. Gestion des processus Lorsque quon quitte lditeur de texte, linterprteur de commandes lindique juste avant dafcher sa prochaine invite :
[1]+ Done emacs toto.txt

Ceci peut tre utile lorsquon lance en arrire-plan, par exemple, une commande qui se contente deffectuer des traitements (calcul scientique, simulation, etc.) sans ouvrir sa propre fentre ou afcher quoi que ce soit dans le terminal. On est alors averti de la n de cette commande. Pour nir, que faire si lon a lanc une commande en oubliant de le faire en arrire-plan ? On se retrouve avec un interprteur de commande inutilisable, ce qui est dommage. On peut gnralement quitter le logiciel quon vient de lancer pour le relancer en arrire plan mais il y a une faon plus lgante de sen sortir. Dans linterprteur de commandes, il suft de taper ^Z :
$ emacs toto.txt ^Z [1]+ $ Stopped emacs toto.txt

Cela va suspendre lexcution du processus et provoquer lafchage de linvite. Il faut alors indiquer linterprteur de commandes quil doit reprendre lexcution du processus mais en arrire plan au moyen de la commande bg (pour background) :
$ bg [1]+ emacs toto.txt & $

Et la boulette est oublie !

9.3.3

La commande ps

La commande ps (pour process status) afche la liste des processus en activit sur lordinateur. Son afchage nest pas intressant sans options. cet gard, ps est une commande inhabituelle car, dans la mesure o elle naccepte que des options et aucun argument, il nest pas ncessaire de faire prcder ses options par le tiret que nous avons utilis jusque l puisquaucune ambigut nest possible. Par souci dconomie, nous nutiliserons donc pas de tiret dans les exemples pour les options de ps. Loption -x permet dafcher lensemble de ses processus : 167

Chapitre 9. Commandes, processus et redirections

$ ps x PID TTY 18230 ? 18231 pts/1 18641 pts/1 STAT S Ss R+ TIME COMMAND 0:00 sshd 0:00 -tcsh 0:00 ps x

On retrouve un habituel afchage en colonnes. Chaque ligne, hormis la premire, correspond un processus. La signication de chaque colonne est la suivante : 1. la colonne PID indique lidentiant de processus (process identier en anglais), qui est un nombre unique attribu chaque commande lors de son lancement ; 2. la colonne TTY (pour teletype) indique le terminal depuis lequel la commande a t lance ; 3. la colonne STAT (pour status) indique ltat du processus : R (pour runnable) sil est prt tre excut, S (pour sleeping) sil est en sommeil ; il existe dautres tats que nous ne mentionnerons pas ; 4. la colonne TIME indique la dure cumule doccupation du microprocesseur ; 5. la colonne COMMAND indique la commande telle quelle a t lance depuis linterprteur de commandes ou telle quelle a dcid dapparatre dans lafchage de ps (le libell de cette colonne est en effet paramtrable par chaque commande). Loption -u permet dafcher quelques informations (donc quelques colonnes) supplmentaires :
$ ps ux USER babafou babafou babafou PID %CPU %MEM 18230 18231 27371 0.0 1.5 0.0 0.1 0.1 0.0 VSZ 10968 8740 8056 RSS TTY 2084 ? 2728 pts/1 1888 pts/1 STAT START S Ss R+ 17:19 17:19 17:28 TIME COMMAND 0:00 sshd 0:00 -tcsh 0:00 ps ux

la colonne USER indique le propritaire du processus ; la colonne %CPU 1 indique le pourcentage du microprocesseur utilis par le processus ; la colonne %MEM indique le pourcentage de mmoire utilis par le processus ; la colonne VSZ (pour virtual size) indique (en kilooctets) la taille totale du processus ; la colonne RSS (pour resident set size) indique (en kilooctets) le volume de mmoire vive occup par le processus ;
1. CPU signie central processing unit.

168

9.3. Gestion des processus la colonne START indique lheure de lancement du processus. Loption -a (pour all) permet dafcher lensemble des processus en activit sur lordinateur, pas seulement les siens :

$ ps aux USER root [...] PID %CPU %MEM 1 0.0 0.0 VSZ 2112 RSS TTY 636 ? STAT START Ss 00:12 TIME COMMAND 0:02 init [5]

La colonne COMMAND tant tronque pour que lafchage des lignes ne dpasse pas 80 caractres, il est possible de forcer un afchage complet grce loption -w (pour wide) :

$ ps auxw [...]

http://fr.wikipedia.org/wiki/Ps_(Unix) http://fr.wikipedia.org/wiki/Identifiant_de_processus

9.3.4

La commande top

La commande ps donne une vision statique des processus. Il est parfois utile den avoir une vision plus vivante an de suivre leur fonctionnement en temps rel. La commande top afche, outre certaines informations globales, la liste des processus les plus actifs, cest--dire de ceux qui utilisent le plus le microprocesseur. Cest particulirement utile lorsquon gre un systme informatique, an de savoir quels sont les plus gros consommateurs des ressources de calcul et de dtecter dventuels abus. Lorsquon met au point des programmes de calcul, il est galement intressant den tudier le comportement de cette faon an de suivre leur consommation au niveau du microprocesseur et de la mmoire. La commande top a un fonctionnement particulier par rapport aux commandes vues jusqu prsent puisquelle prend, durant le temps de son excution, le contrle de tout lmulateur de terminal (un peu comme vi, more ou less) et met jour son afchage toutes les trois secondes : 169

Chapitre 9. Commandes, processus et redirections

top - 19:38:28 up 19:25, Tasks: 122 total, Cpu(s): Mem: Swap: 0.4%us, 0.9%sy,

1 user,

load average: 0.00, 0.02, 0.00 0 stopped, 0.2%wa, 0 zombie 0.0%si, 0.0%st 0.0%hi,

1 running, 121 sleeping, 0.0%ni, 98.4%id, 957472k used, 0k used, VIRT 2112 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 RES 636 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

2040636k total, 2048276k total, PR 20 20 15 RT 15 RT RT 15 RT 15 15 15 15 15 15 15 15 NI 0 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5

1083164k free, 2048276k free,

348932k buffers 286348k cached COMMAND

PID USER 2920 gdm 1 root 2 root 3 root 4 root 5 root 6 root 7 root 8 root 9 root 10 root 11 root 63 root 64 root 66 root 67 root 136 root

SHR S %CPU %MEM 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 544 S 0 S 0 S 0 S 0 S 0 S 0 S 0 S 0 S 0 S 0 S 0 S 0 S 0 S 0 S 0 S

TIME+

0 13616 4020 3320 S

0:29.34 at-spi-registry 0:02.47 init 0:00.00 kthreadd 0:00.41 migration/0 0:03.61 ksoftirqd/0 0:00.00 watchdog/0 0:00.81 migration/1 0:02.49 ksoftirqd/1 0:00.00 watchdog/1 0:00.26 events/0 0:00.20 events/1 0:00.00 khelper 0:00.02 kblockd/0 0:00.00 kblockd/1 0:00.00 kacpid 0:00.00 kacpi_notify 0:00.00 cqueue

Les cinq premires lignes donnent diffrents indicateurs globaux sur ltat du systme dexploitation (nous ne rentrerons pas dans les dtails). Le reste reprend un afchage en colonnes semblable celui de ps. On y retrouve les colonnes les plus intressantes : PID, USER, %CPU, %MEM et COMMAND. La signication de la colonne NI sera tudie au paragraphe 9.6.2 page 201. Les processus sont classs par ordre dcroissant doccupation du microprocesseur (colonne %CPU). Pour quitter top, il faut taper q.
http://www.unixtop.org/ http://en.wikipedia.org/wiki/Top_(software)

9.3.5

La commande kill

Le nom de cette commande est fort mal choisi. Certes elle permet de tuer un processus mais ce nest l quun des aspects de son fonctionnement. De manire plus gnrale kill sert envoyer un signal un processus. Un signal est une information atomique envoye dun processus un autre ou du systme dexploitation un processus. Les signaux sont tudis plus en dtail dans le cours de deuxime anne IN201, Systmes dexploitation. La commande kill ne doit tre utilise pour tuer un processus quen dernier recours, lorsquon ne peut plus quitter le logiciel correspondant par les voies naturelles. 170

9.3. Gestion des processus Pour les exemples, nous allons utiliser une petite application sympathique appele que nous allons lancer en arrire-plan :

xeyes,

$ xeyes & [1] 1664 $

Celle-ci ouvre une fentre, placez-l bien en vue, elle permettra, en disparaissant, de vrier que le processus a bien t tu. La commande kill prend en argument le ou les identiants des processus tuer. Ici, celui de xeyes est 1664 donc il faut faire :
$ kill 1664

Il existe un ensemble ni de signaux, dont on peut avoir la liste au moyen de loption -l (pour list) de kill :
$ kill -l 1) SIGHUP 5) SIGTRAP 9) SIGKILL 13) SIGPIPE 17) SIGCHLD 21) SIGTTIN 25) SIGXFSZ 29) SIGIO 35) SIGRTMIN+1 39) SIGRTMIN+5 43) SIGRTMIN+9 2) SIGINT 6) SIGABRT 10) SIGUSR1 14) SIGALRM 18) SIGCONT 22) SIGTTOU 26) SIGVTALRM 30) SIGPWR 36) SIGRTMIN+2 40) SIGRTMIN+6 3) SIGQUIT 7) SIGBUS 11) SIGSEGV 15) SIGTERM 19) SIGSTOP 23) SIGURG 27) SIGPROF 31) SIGSYS 37) SIGRTMIN+3 41) SIGRTMIN+7 4) SIGILL 8) SIGFPE 12) SIGUSR2 16) SIGSTKFLT 20) SIGTSTP 24) SIGXCPU 28) SIGWINCH 34) SIGRTMIN 38) SIGRTMIN+4 42) SIGRTMIN+8

44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12

47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 59) SIGRTMAX-5 63) SIGRTMAX-1 56) SIGRTMAX-8 60) SIGRTMAX-4 64) SIGRTMAX 57) SIGRTMAX-7 61) SIGRTMAX-3 58) SIGRTMAX-6 62) SIGRTMAX-2

Chaque signal a un nom et un numro. Par dfaut, le signal envoy par kill est
SIGTERM (pour terminate). Si le processus liminer est rcalcitrant (certains processus

peuvent rsister lenvoi du signal SIGTERM), il est possible denvoyer le signal SIGKILL, dont on ne rchappe pas. On indique kill le signal envoyer en mettant en option son nom, sans le SIG initial, ou son numro. Il sagit dun cas o les options sont des mots complets et pas des caractres individuels. 171

Chapitre 9. Commandes, processus et redirections Donc pour envoyer le signal SIGKILL un processus, il faut utiliser loption -KILL (par nom) ou loption -9 (par numro) :
$ kill -KILL 1664 $ kill -9 1664

http://fr.wikipedia.org/wiki/Kill_(Unix)

9.3.6

Le statut de sortie dun processus

Lorsquil se termine, un processus envoie un nombre entier au processus qui la cr. Ce nombre est le statut de sortie du processus. Il indique sil a pu effectuer correctement la tche qui lui incombait ou sil a rencontr un problme. Le statut de sortie vaut : 0 si le processus sest correctement droul ; une valeur non nulle (souvent 1) en cas derreur.
http://en.wikipedia.org/wiki/Exit_status

9.3.6.1

Les variables spciales ? et status

Une variable spciale est une variable dont la valeur est xe par linterprteur de commandes. Le statut de sortie de la dernire commande est stock dans une variable spciale : ? pour les Bourne shell (sh), Korn shell (ksh), Bourne-again shell (bash) et Z shell (zsh) (le TENEX C shell (tcsh) reconnat galement cette variable) ; status pour les C shell (csh) et TENEX C shell (tcsh) (le Z shell (zsh) reconnat galement cette variable). Ainsi, avec sh, ksh, bash ou zsh :
$ ls tata toto $ echo $? 0 $ rm titi rm: titi: No such file or directory $ echo $? 1

Avec csh ou tcsh : 172

9.3. Gestion des processus

% ls tata toto % echo $status 0 % rm titi rm: titi: No such file or directory % echo $status 1

Il faut bien comprendre que les variables ? et status contiennent le statut de sortie de la dernire commande. Considrons lexemple suivant :
$ commande1 [...] $ commande2 [...] $ echo $? 0

Ici, le statut de sortie afch correspond celui de commande2. Nayant pas utilis ? ou status immdiatement aprs la n de commande1, son statut de sortie est perdu. 9.3.6.2 Succession de commandes

Il est possible dutiliser le statut de sortie dune commande pour excuter une autre commande sous condition. Considrons loprateur && :
$ commande1 && commande2

La commande commande2 ne sera excute que si le statut de sortie de la commande est nul, cest--dire si elle sest correctement termine. Donc, si commande1 se termine correctement, commande2 sera excute. Si commande1 ne se termine pas correctement, commande2 ne sera pas excute. Pour cette raison, loprateur && est appel oprateur et . Les espaces autour de loprateur && ne sont pas indispensables. Considrons maintenant loprateur || :
commande1 $ commande1 || commande2

173

Chapitre 9. Commandes, processus et redirections La commande commande2 ne sera excute que si le statut de sortie de la commande est non nul, cest--dire si elle ne sest pas correctement termine. Donc, si commande1 se termine correctement, commande2 ne sera pas excute. Si commande1 ne se termine pas correctement, commande2 sera excute. Pour cette raison, loprateur || est appel oprateur ou . Les espaces autour de loprateur || ne sont pas indispensables. Enn, pour tre tout fait complet, signalons galement lexistence du sparateur ; :
commande1 $ commande1 ; commande2

Le sparateur ; permet dexcuter une squence de commandes, sans condition. Ici, commande1 sera excute, suivie de commande2. Les espaces autour du sparateur ; ne sont pas indispensables. 9.3.6.3 Les commandes true et false

Signalons lexistence des commandes true, dont le statut de sortie est toujours vrai, et false, dont le statut de sortie est toujours faux :
$ true $ echo $? 0 $ false $ echo $? 1

http://en.wikipedia.org/wiki/True_and_false_(Unix)

9.4
9.4.1

Redirections
Sous UNIX, tout est chier

Lun des choix de conception dUNIX est particulirement lgant et ouvre de nouveaux horizons. Il sagit de ramener le plus de choses, en particulier les priphriques, des chiers, dans la mesure o cela est possible, cest--dire si la communication avec eux se fait en lisant ou en crivant une suite doctets (comme on lit ou on crit une suite doctets dans un chier). Une imprimante, par exemple, est un priphrique qui sattend recevoir une suite doctets dcrivant les donnes imprimer. On peut donc, sous UNIX, accder limprimante au moyen dun chier spcial /dev/lp, /dev/lpt0 ou /dev/lp0 (cela varie en fonction de lUNIX utilis). 174

9.4. Redirections Un chier spcial est un chier qui, lorsquon lit ou crit dedans, transfre les donnes depuis ou vers le priphrique qui lui est associ. Les chiers spciaux sont tous regroups dans le rpertoire /dev. De mme, le terminal peut tre considr comme trois chiers : lentre standard, correspondant au clavier ; la sortie standard, correspondant lcran ; la sortie derreur standard, correspondant galement lcran. Il y a deux sorties standards pour pouvoir au besoin faire la diffrence entre le ux de sortie normal et les messages derreur. Lentre standard est accessible via le chier spcial /dev/stdin, la sortie standard est accessible via le chier spcial /dev/stdout et la sortie derreur standard est accessible via le chier spcial /dev/stderr. En pratique, les commandes utilises dans linterprteur de commandes lisent leur entre standard et crivent sur leur sortie standard et leur sortie derreur standard via ces chiers spciaux comme reprsent dans la gure 9.2. Les fonctions de lecture et dcriture dans un chier leur servent donc galement accder indirectement au clavier et lcran du terminal. sortie standard
commande

clavier

entre standard

cran sortie derreur standard

FIGURE 9.2 Entre, sortie et sortie derreur standards. Historiquement, cela a permis de simplier considrablement laccs des logiciels aux priphriques. Ils devaient auparavant grer une grande partie des communications eux-mmes et connatre, par exemple, les spcicits des diffrents types de terminaux susceptibles dtre utiliss. Grce aux chiers spciaux, UNIX soccupe seul de grer laccs aux priphriques pour tous les logiciels, ceux-ci se contentant de lire et dcrire dans des chiers. Nous allons voir que, grce cette faon de sabstraire du terminal, il est possible de faire des choses trs intressantes.
http://fr.wikipedia.org/wiki/Flux_standard http://en.wikipedia.org/wiki/Redirection_(computing)

9.4.2

Redirection de la sortie standard

La plupart des commandes que nous avons tudies nafchent rien du tout. Dautres, en revanche, savent tre plus loquaces. Cest le cas, par exemple, de ps, dont le but est justement dafcher quelque chose. 175

Chapitre 9. Commandes, processus et redirections Il peut tre utile de conserver dans un chier ce quune commande afche. Comment faire ? On pourrait envisager dutiliser un diteur de texte an dy copier-coller ce que la commande a afch. Nanmoins, sil y a plusieurs crans faire dler, ceci est rptitif (pas bon...) et il est toujours possible de commettre des erreurs dinattention (oubli dune ligne ou copie en double). Si lafchage est sufsamment volumineux, le dbut peut mme avoir disparu de la mmoire de lmulateur de terminal. Bref, ce nest pas la bonne solution. Puisque lafchage se fait en crivant sur la sortie standard, par dfaut raccorde lcran, pourquoi ne pas plutt la raccorder un chier qui permettrait de conserver lafchage de la commande, comme reprsent dans la gure 9.3 ?

clavier

entre standard

tie sor dard n s ta


commande

chier cran

sortie derreur standard

FIGURE 9.3 Redirection de la sortie standard. Cest possible en redirigeant la sortie standard vers un chier :
$ ps aux > sortie $

Remarquez que rien na t afch lcran. En revanche, un chier sortie a t cr, qui contient ce que ps aux aurait afch sans la redirection (vous pouvez le vrier avec cat, more ou less). Le caractre > a donc pour effet de rediriger la sortie standard de la commande qui le prcde vers le chier dont le nom est indiqu aprs lui. Si le chier existait auparavant, il est cras. Si lon souhaite accumuler dans un chier les afchages successifs de plusieurs commandes, on peut utiliser une autre forme de redirection de la sortie standard :
$ commande1 >> sortie $ commande2 >> sortie $ commande3 >> sortie

Lexpression >> redirige la sortie standard de la commande qui la prcde vers le chier dont le nom est indiqu aprs elle. 176

9.4. Redirections Si le chier nexistait pas auparavant, il est cr. Sil existait, le rsultat de la redirection est plac aprs le contenu du chier. Pour revenir notre exemple, le chier sortie (dont on supposera quil nexistait pas auparavant) contient donc lafchage de commande1, suivi de celui de commande2, suivi de celui de commande3. noter que, pour une fois, les espaces autour de > et >> ne sont pas ncessaires. On souhaite parfois utiliser une commande loquace pour ses effets de bord, sans avoir besoin de ce quelle afche lcran. Dans ce cas, il est possible de rediriger sa sortie standard vers le chier spcial /dev/null, qui se comporte comme un trou noir :
$ commande > /dev/null $

http://fr.wikipedia.org/wiki//dev/null

9.4.3

Redirection de la sortie derreur standard


sortie standard
commande

clavier

entre standard

sor tie sta der nd reu ard r

cran chier

FIGURE 9.4 Redirection de la sortie derreur standard. Si lon souhaite rediriger vers un chier la sortie derreur standard, comme reprsent dans la gure 9.4, il faut utiliser lexpression 2> :
$ ls fichier_qui_n_existe_pas 2> erreur $ cat erreur ls: fichier_qui_n_existe_pas: No such file or directory

Lespace prcdent 2> est obligatoire. Celle suivant cette expression ne lest pas. On peut combiner les deux formes de redirection des sorties pour rediriger la sortie standard et la sortie derreur standard vers des chiers, comme reprsent dans la gure 9.5 page suivante :
$ commande > sortie 2> erreur

177

Chapitre 9. Commandes, processus et redirections

clavier

entre standard

tie sor dard n sta


commande

chier cran chier

sor tie sta der nd reu ard r

FIGURE 9.5 Redirection des sortie et sortie derreur standards.

9.4.4

Redirection de lentre standard

Il est galement possible de rediriger lentre standard, cest--dire de faire en sorte quune commande, au lieu de lire au clavier, lise le contenu dun chier, comme reprsent dans la gure 9.6. chier

s ta
clavier

en tr nd e ard

sortie standard
commande

cran sortie derreur standard

FIGURE 9.6 Redirection de lentre standard. Pour tester ceci, il convient dintroduire la commande bc (pour basic calculator). Celle-ci excute les oprations arithmtiques reues sur son entre standard :
$ bc 24+27 51 13*128 1664 quit $

Nous allons donc rediriger lentre standard de bc. Pour cela, nous avons besoin dun chier dentre. Saisissez dans un chier entree, au moyen de votre diteur de texte favori, quelques lignes contenant des oprations arithmtiques, par exemple : 178

9.4. Redirections

24+27 13*128

Il est inutile dindiquer quit, bc se terminera en atteignant la n du chier (ce qui fermera lentre standard). Sauvez le chier et quittez lditeur de texte. Pour rediriger lentre standard depuis un chier, il faut utiliser le caractre < :
$ bc < entree 51 1664 $

Les espaces autour de < ne sont pas ncessaires. On peut bien entendu associer toutes les formes de redirection pour que certaines commandes, dont lexcution peut tre longue, vivent leur vie sans dranger personne. On en prote galement pour les lancer en arrire-plan :
$ commande < entree > sortie 2> erreur &

9.4.5

Les tuyaux

Nous allons rutiliser la commande amusante xeyes an de voir comment il est possible den automatiser lassassinat :
$ xeyes & [1] 1664 $

Faisons comme si nous navions pas vu lidentiant de processus afch lors du lancement de la commande en arrire-plan. Pour lobtenir, dans le but dutiliser kill, on peut utiliser la commande ps :
$ ps ux USER [...] babafou [...] 1664 0.0 0.1 7456 2636 ttyq5 SN 14:18 0:00 xeyes PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

179

Chapitre 9. Commandes, processus et redirections Il serait intressant de pouvoir isoler la ligne qui concerne xeyes. Il existe justement une commande permettant dafcher les lignes dun chier contenant un motif textuel : la commande grep (qui sera tudie au paragraphe 9.5.2 page 185). Nous allons donc rediriger la sortie standard de ps an de pouvoir utiliser grep dessus :
$ ps ux > sortie-ps $ grep xeyes sortie-ps babafou 1664 0.0 0.1 7456 2636 ttyq5 SN 14:18 0:00 xeyes

La commande grep recherche le motif qui lui est pass en premier argument dans les chiers dont les noms lui sont passs dans les arguments suivants et afche les lignes de ces chiers contenant ce motif. Le plus gros du travail est fait. Pour terminer, il serait intressant dextraire lidentiant de processus de la sortie standard de grep. La commande awk (qui sera tudie au paragraphe 9.5.3 page 189) fait cela :
$ grep xeyes sortie-ps > sortie-grep $ awk {print $2} sortie-grep 1664

Ici, on demande awk dextraire la deuxime colonne (les colonnes tant spares par des espaces) de chaque ligne du chier sortie-grep. Sa syntaxe est un peu complique. En effet, awk est un outil de traitement de donnes trs puissant reposant sur un vrai langage de programmation. Nous avons donc notre rsultat et nous pouvons rement faire :
$ kill 1664

Nous pouvons aussi honteusement faire :


$ rm sortie-ps sortie-grep

voire :
$ rm sortie-*

si ce sont les deux seuls chiers dont le nom commence par sortie- . En effet, il est honteux davoir recours de la sorte des chiers temporaires, quil faut effacer dans les instants qui suivent leur cration. Cest parfaitement inefcace. Retraons la suite doprations ayant permis dobtenir lidentiant du processus xeyes : 180

9.4. Redirections

$ ps ux > sortie-ps $ grep xeyes sortie-ps > sortie-grep $ awk {print $2} sortie-grep 1664

On peut schmatiser lenchanement des commandes comme reprsent dans la gure 9.7.
ps

sortie standard

sortie-ps

sortie-ps

argument

grep

sortie standard

sortie-grep

sortie-grep

argument
awk

sortie standard

1664

FIGURE 9.7 Obtention de lidentiant de processus avec des chiers temporaires. Il savre que grep est une commande particulire, quon appelle ltre. Un ltre est une commande ralisant une certaine action sur les chiers dont les noms lui sont passs en arguments ou, en leur absence, sur son entre standard. On peut facilement vrier ces deux comportements :
$ grep xeyes sortie-ps babafou babafou 1664 1664 0.0 0.0 0.1 0.1 7456 7456 2636 ttyq5 2636 ttyq5 SN SN 14:18 14:18 0:00 xeyes 0:00 xeyes $ grep xeyes < sortie-ps

Dans le premier cas, on donne le chier sortie-ps en argument, dans le second, on redirige lentre standard de grep depuis ce mme chier. Dans les deux cas, le rsultat est le mme. Il est donc tentant dessayer de se passer du chier temporaire sortie-ps en connectant directement la sortie standard de ps lentre standard de grep. Ceci est possible grce un tuyau (pipe en anglais). Le terme tube est galement employ. Un tuyau permet dinterconnecter la sortie standard dune commande lentre standard dune autre et de faire transiter les donnes de lune lautre directement en mmoire, sans passer par un chier temporaire. 181

Chapitre 9. Commandes, processus et redirections On cre un tuyau en intercalant une barre verticale | (il nest pas ncessaire de lentourer despaces) entre les deux commandes relier :
$ ps ux | grep xeyes babafou babafou 1664 3351 0.0 0.0 0.1 0.1 7456 2868 2636 pts/1 1136 pts/1 Ss S+ 14:18 22:30 0:00 xeyes 0:00 grep xeyes

Ceci se comprend ainsi : faire la liste des processus et nafcher que les lignes contenant xeyes. Bizarrement, on a un rsultat diffrent de celui utilisant un chier temporaire. La diffrence est que maintenant, ps et grep fonctionnent simultanment. Dans la mesure o largument de grep est le motif recherch, la ligne concernant grep apparat galement. Il faudrait pouvoir, dans la sortie standard de grep, supprimer cette ligne. Cest possible grce loption -v de grep, qui inverse son fonctionnement. Au lieu dafcher les lignes contenant un motif, grep nafche que celles ne le contenant pas :
$ ps ux | grep xeyes | grep -v grep babafou 1664 0.0 0.1 7456 2636 pts/1 Ss 14:18 0:00 xeyes

Ceci se comprend ainsi : faire la liste des processus, nafcher que les lignes contenant xeyes mais pas celles contenant grep. Par chance (ou peut-tre lexemple est-il habilement choisi...), awk est galement un ltre. On peut donc faire :
$ ps ux | grep xeyes | grep -v grep | awk {print $2} 1664

Ceci se comprend ainsi : faire la liste des processus, nafcher que les lignes contenant xeyes mais pas celles contenant grep et en extraire la deuxime colonne. On peut schmatiser lenchanement des commandes comme reprsent dans la gure 9.8 page suivante. Cette fois, nous pouvons enn rement faire :
$ kill 1664

Firement parce que les tuyaux sont au cur de la philosophie dUNIX et il faut les utiliser ds que possible. Ds quon repre un chier temporaire gnr par la redirection de la sortie standard dune commande et pris comme argument ou entre standard dune autre, ainsi que reprsent dans la gure 9.7 page prcdente. De nombreuses commandes sont dailleurs des ltres. Certaines dentre elles sont tudies au paragraphe 9.5 page 184. 182

9.4. Redirections sortie standard entre standard entre standard entre standard
grep grep

ps

sortie standard sortie standard sortie standard

awk

1664

FIGURE 9.8 Obtention de lidentiant de processus avec des tuyaux.

http://fr.wikipedia.org/wiki/Tube_(shell)

9.4.6

Substitution de commande

Ceci nest pas une redirection proprement parler mais un mcanisme relativement proche et qui nous manque pour terminer notre exemple dassassinat de xeyes en beaut. Grce aux tuyaux, nous aboutissons donc :
$ ps ux | grep xeyes | grep -v grep | awk {print $2} 1664 $ kill 1664

Mais il reste toujours une tape manuelle dans ce traitement... Les plus hardis ont certainement envie de faire :
$ ps ux | grep xeyes | grep -v grep | awk {print $2} | kill

Mais cela ne peut pas fonctionner. En effet, kill nest pas un ltre et ne sait donc pas lire son entre standard en labsence dargument. Nanmoins, il existe une syntaxe adapte ce cas :
$ kill ps ux | grep xeyes | grep -v grep | awk {print $2}

183

Chapitre 9. Commandes, processus et redirections Elle utilise une paire dapostrophes inverses (cest un caractre qui est toujours utilis par paire). Lorsquil rencontre une paire dapostrophes inverses contenant une commande simple ou un enchanement avec des tuyaux, linterprteur de commandes substitue sa sortie standard lensemble ... comme reprsent dans la gure 9.9.
kill ps ux | grep xeyes | grep -v grep | awk {print $2} 1664

FIGURE 9.9 Substitution de commande. Si la sortie standard de la commande ou de lenchanement entre apostrophes inverses est compose de plusieurs lignes, celles-ci sont concatnes en les sparant par des espaces.
http://en.wikipedia.org/wiki/Command_substitution

9.5

Quelques ltres usuels

Un ltre est une commande ralisant une certaine action sur les chiers dont les noms lui sont passs en arguments ou, en leur absence, sur son entre standard, trs souvent interconnecte avec la sortie standard dune autre commande au moyen dun tuyau (voir le paragraphe 9.4.5 page 179). Les tuyaux occupant une place centrale dans la philosophie dUNIX, toutes les commandes qui sy prtent sont en fait des ltres, an de pouvoir les utiliser comme tels.
http://en.wikipedia.org/wiki/Filter_(Unix)

9.5.1

Les commandes more et less

Certaines commandes gnrent un afchage qui peut se rvler parfois long, par exemple ps aux ou ls dans un rpertoire contenant de nombreux chiers. Lorsque lafchage dborde de la fentre, il nest pas toujours confortable de remonter en arrire grce lascenseur de la fentre de lmulateur de terminal. On peut alors rediriger la sortie standard de la commande vers un chier, pour pouvoir le consulter confortablement avec more ou less. Ce chier tant un chier temporaire, cela devrait dclencher tout de suite une alarme : mais o sont passs les tuyaux ! En effet, more et less sont des ltres, parmi les plus utiliss. En prsence dune commande ayant un afchage gnreux, on peut donc faire :
$ commande | more

184

9.5. Quelques ltres usuels ou :


$ commande | less

Il vaut dailleurs mieux utiliser less dans ce cas. En effet, certaines versions de ne permettent pas de revenir en arrire lorsquelles sont utilises comme ltre. Par ailleurs, le problme mentionn au paragraphe 7.4.3 page 93 subsiste : arriv en n dafchage, more se termine, contrairement less. L o il nest pas vraiment gnant de relancer more sur un chier, cela lest beaucoup plus lorsquil sagit de relancer un enchanement de commandes, qui peut utiliser des ressources non ngligeables. Pour terminer sur le sujet, essayez, si vous ne lavez pas dj fait, dutiliser more ou less derrire un tuyau :
more $ ps aux | more $ ps aux | less

Vous pouvez constater quon peut bien naviguer dans lafchage au moyen des touches du clavier quon utilise habituellement avec ces commandes. Mais, puisque lentre standard de more ou less est raccorde la sortie standard de ps grce au tuyau, il est normalement impossible ces deux commande daccder au clavier... Pas par leur entre standard, en tout cas. Mais more et less ont plus dun tour dans leur sac. Elles accdent en fait au clavier grce au chier spcial /dev/tty qui est toujours raccord au terminal, redirection ou pas. Lire dans ce chier spcial permet daccder au clavier, crire dedans lcran.

9.5.2

La commande grep

La commande grep (pour global regular expression print) recherche le motif qui lui est pass en premier argument dans les chiers dont les noms lui sont passs dans les arguments suivants ou, en leur absence, sur lentre standard (puisquil sagit dun ltre) et, par dfaut, afche chaque ligne contenant ce motif. Le motif doit tre fourni sous la forme dune expression rationnelle. Les expressions rationnelles sont trs souvent utilises sous UNIX pour le traitement des chanes de caractres. Elles seront tudies au paragraphe 9.5.2.1 page suivante. Le paragraphe 9.5.2.3 page 188 prsentera ensuite quelques options de la commande grep. Le lecteur curieux pourra se reporter louvrage suivant de la bibliographie pour approfondir ses connaissances : grep Pocket Reference [12]

185

Chapitre 9. Commandes, processus et redirections


http://fr.wikipedia.org/wiki/Grep

9.5.2.1

Les expressions rationnelles

Une expression rationnelle (regular expression en anglais) est une chane de caractres permettant de dcrire un ensemble de chanes de caractres. Pour cela, on utilise un langage donnant une signication particulire certains caractres. Ceux-ci sont indiqus dans le tableau 9.1. Symboles lmentaires
.

... ] [^ . . . ]
[ ^ $

nimporte quel caractre liste ou intervalle de caractres ngation dune liste ou dun intervalle de caractres dbut de ligne n de ligne zro ou une fois zro fois ou plus une fois ou plus exactement n fois n fois ou plus entre n et m fois Choix et groupement choix entre plusieurs lments groupement

Oprateurs de rptition (sappliquent llment prcdent)


? * + {n } { n ,} {n , m }

| (

...

TABLE 9.1 Caractres utilisables dans une expression rationnelle. Les expressions rationnelles les plus simples sont celles nutilisant aucun des caractres du tableau 9.1. Elles reprsentent la chane de caractre exacte quelle contiennent. Ainsi, lexpression rationnelle toto correspond la chane de caractres toto et elle seule. Le point . permet de dsigner nimporte quel caractre. Ainsi, lexpression rationnelle e.cu.er correspond toute chane de caractres commenant par un e suivi dun caractre quelconque suivi de cu suivi dun caractre quelconque suivi de er , comme par exemple excuser . Si lon souhaite quelque chose de plus prcis, il est possible de se restreindre une liste ou un intervalle (dans lordre alphabtique) de caractres en lindiquant entre crochets [ . . . ]. Lexpression entre crochets correspond un et exactement un caractre gurant dans la liste ou lintervalle. Ainsi, lexpression rationnelle pi[pr]e 186

9.5. Quelques ltres usuels correspond aux chanes de caractres pipe et pire et lexpression rationnelle ra[r-t]e correspond aux chanes de caractres rare , rase et rate . La signication dune expression entre crochets est inverse lorsque le premier caractre de cette expression est un accent circonexe ^. Dans ce cas, lexpression correspond un et exactement un caractre ne gurant pas dans la liste ou lintervalle. Ainsi, lexpression rationnelle [^ms]otte correspond la chane de caractres botte , entre autres, mais pas aux chanes de caractres motte et sotte . Pour faire gurer un crochet fermant ] dans une expression entre crochets, il faut le placer en premier. De mme, pour faire gurer un accent circonexe ^, il faut le placer nimporte o sauf en premier. Enn, pour faire gurer un tiret -, il faut le placer en dernier. Il est possible dindiquer que lexpression rationnelle doit gurer en dbut de ligne, grce laccent circonexe ^, qui doit tre le premier caractre de lexpression rationnelle, ou quelle doit gurer en n de ligne, grce au symbole dollar $, qui doit tre le dernier caractre de lexpression rationnelle. Ainsi, lexpression rationnelle ^toto corespond la chane de caractres toto uniquement si elle se trouve en dbut de ligne et lexpression rationnelle toto$ correspond la chane de caractres toto uniquement si elle se trouve en n de ligne. Des oprateurs de rptition peuvent sappliquer llment qui les prcde. Ainsi, le point dinterrogation ? indique que llment prcdent peut gurer zro ou une fois, lastrisque * indique que llment prcdent peut gurer zro fois ou plus et le signe plus + indique que llment prcdent peut gurer une fois ou plus. Il est possible de contrler plus nement le nombre de rptitions grce une expression entre accolades. Par exemple, lexpression rationnelle coch?on correspond aux chanes de caractres cocon et cochon , lexpression rationnelle [acgt]* correspond nimporte quelle squence dADN, ventuellement vide, lexpression rationnelle [acgt]+ correspond nimporte quelle squence dADN contenant au moins un caractre et lexpression rationnelle [acgu]{3} correspond un codon dARN messager. La barre verticale | propose le choix entre plusieurs lments. Ainsi, lexpression rationnelle fromage|dessert|rien correspond aux chanes de caractres fromage , dessert et rien . Il est parfois ncessaire dutiliser des parenthses ( . . . ) an de grouper certains lments dune expression rationnelle, souvent dans le but de leur appliquer un oprateur de rptition. Ainsi, lexpression rationnelle (GA|BU|ZO|MEU)+ permet de parler Shadok. Enn, il est possible dinhiber la signication particulire des caractres du tableau 9.1 page prcdente en les faisant prcder dune barre oblique inverse \. Ainsi, lexpression rationnelle \[1\] correspond la chane de caractres [1] . Le lecteur curieux pourra se reporter aux ouvrages suivants de la bibliographie pour approfondir ses connaissances : Mastering Regular Expressions [17] Regular Expressions Cookbook [18] 187

Chapitre 9. Commandes, processus et redirections Regular Expression Pocket Reference [27]


http://fr.wikipedia.org/wiki/Expression_rationnelle

9.5.2.2

Utilisation dune expression rationnelle avec la commande grep

Certains des caractres utilisables dans une expression rationnelle ayant galement une signication particulire pour linterprteur de commandes, il convient de les inhiber pour ce dernier en faisant prcder chacun deux dune barre oblique inverse ou en entourant lexpression rationnelle dune paire dapostrophes (les guillemets ne conviennent pas dans ce cas) comme vu au paragraphe 8.6 page 134. Lutilisation dune paire dapostrophes tant plus claire, cette mthode est vivement recommande :
$ grep ^[acgt]*$ fichier

Par ailleurs, la syntaxe des expressions rationnelles dcrite au paragraphe 9.5.2.1 page 186 correspond aux expressions rationnelles dites tendues. Historiquement, les premires expressions rationnelles, dites simples, avaient une syntaxe plus lourde, dans laquelle on utilisait \?, \+, \{, \|, \(, \) au lieu respectivement de ?, +, {, |, ( et ). Par dfaut, la commande grep sattend ce que son premier argument soit une expression rationnelle simple. Sil sagit dune expression rationnelle tendue, il faut utiliser loption -E de la commande grep :
$ grep -E ^[acgt]+$ fichier

ou, ce qui revient au mme, la commande egrep (pour extended grep) :


$ egrep ^[acgt]+$ fichier

9.5.2.3

Quelques options de la commande grep

Hormis loption -E, la commande grep dispose de nombreuses options. Nous allons tudier les plus utiles. Loption -i de la commande grep permet dignorer la diffrence entre majuscules et minuscules lors de la comparaison entre lexpression rationnelle et le contenu du chier :
$ grep -i toto fichier le mot toto en minuscules le mot TOTO en majuscules

188

9.5. Quelques ltres usuels Loption -l de la commande grep permet dafcher non pas les lignes correspondant lexpression rationnelle mais les noms des chiers les contenant :
$ grep -l toto fichier1 fichier2 fichier3 fichier2

Loption -n de la commande grep prxe chaque ligne correspondant lexpression rationnelle de son numro suivi dun deux-points :
$ grep -n toto fichier 2:le mot toto dans le fichier 4:encore le mot toto dans le fichier

Loption -v de la commande grep inverse la signication de la comparaison avec lexpression rationnelle. On afche donc les lignes ne lui correspondant pas :
$ grep -v toto fichier tout le fichier sauf les lignes contenant TOTO (en minuscules)

9.5.3

La commande awk

Le langage de programmation AWK a t conu pour le traitement de donnes textuelles. Il tire son nom des patronymes de ses auteurs, Alfred Aho, Peter Weinberger et Brian Kernighan. La commande awk permet dutiliser le langage de programmation AWK (la commande scrit en minuscules, le langage de programmation en majuscules). Son premier argument est une chane de caractres contenant le programme excuter sur les chiers dont les noms lui sont passs dans les arguments suivants ou, en leur absence, sur lentre standard (puisquil sagit dun ltre). Un programme en langage AWK est une suite dinstructions de la forme :
condition {action}

La condition peut utiliser des tests de comparaison ou une expression rationnelle, quon crit alors entre deux barres obliques : /expression rationnelle/. Par ailleurs, il existe deux conditions particulires : BEGIN, dont laction correspondante est excute au dbut du programme ; END, dont laction correspondante est excute la n du programme. La forme gnrale dun programme en langage AWK est donc : 189

Chapitre 9. Commandes, processus et redirections

BEGIN {action} condition {action} ... END {action}

La commande awk commence par excuter laction associe la condition BEGIN, si elle existe. Puis elle lit les chiers dont les noms lui sont passs en arguments ou lentre standard, ligne par ligne. Si la premire condition du programme est vrie pour la ligne qui vient dtre lue, laction correspondante est excute. Puis on passe la condition suivante et ainsi de suite. Enn, laction associe la condition END, si elle existe, est excute. Il est possible davoir dans le programme des actions sans conditions. Dans ce cas, ces actions sont systmatiquement excutes pour chaque ligne. Les accolades ayant une signication particulire pour linterprteur de commandes, de mme que certains des caractres utiliss dans les expressions rationnelles et dans les actions, il convient dentourer systmatiquement les programmes en langage AWK dune paire dapostrophes. Pour illustrer lutilisation de la commande awk, nous allons reprendre lexemple du paragraphe 9.4.5 page 179 visant dterminer lidentiant du processus xeyes mais en utilisant exclusivement awk. En premire approche, on peut utiliser /xeyes/ comme condition an de trouver les lignes contenant cette expression rationnelle dans la sortie standard de ps ux et les afcher en utilisant laction print, qui afche la ligne en cours de traitement (si la condition est remplie) :
$ ps ux | awk /xeyes/ {print} babafou babafou 1664 3351 0.0 0.0 0.1 0.1 7456 2868 2636 pts/1 1136 pts/1 Ss S+ 14:18 22:30 0:00 xeyes 0:00 awk xeyes {print}

Comme prcdemment, il faut liminer la ligne correspondant la commande On peut utiliser pour cela une condition qui sera vrie pour cette ligne, savoir lexpression rationnelle /awk/ et lui associer laction next, qui permet dignorer les autres conditions et de passer au traitement de la ligne suivante :
awk.
$ ps ux | awk /awk/ {next} /xeyes/ {print} babafou 1664 0.0 0.1 7456 2636 pts/1 Ss 14:18 0:00 xeyes

Lordre des instructions est important. Linstruction /awk/ {next} doit se trouver avant linstruction /xeyes/ {print} pour ignorer la ligne correspondant la commande awk. Plutt que dafcher toute la ligne, on peut se contenter du seul identiant de processus. En effet, la commande awk est capable de dcouper une ligne de texte en champs (les champs tant spars par des espaces) et de permettre laccs chaque 190

9.5. Quelques ltres usuels champ depuis le programme. Ainsi, $1 reprsente le premier champ, $2 le deuxime champ, etc. Lidentiant de processus correspondant au deuxime champ, on peut donc faire :
$ ps ux | awk /awk/ {next} /xeyes/ {print $2} 1664

Il est galement possible de limiter lapplication de lexpression rationnelle un champ particulier. Le nom de la commande tant le onzime champ de la sortie standard de la commande ps, on peut galement faire :
$ ps ux | awk $11 ~ /xeyes/ {print $2} 1664

Loprateur ~ permet de restreindre la comparaison de lexpression rationnelle qui le suit au champ qui le prcde. Ceci permet de se passer de llimination de la ligne correspondant la commande awk. Enn, dans la mesure o lexpression rationnelle napporte rien de particulier, puisquil ne sagit que dune chane de caractres xe, on peut mme faire simplement un test dgalit entre le onzime champ et la chane de caractres xeyes :
$ ps ux | awk $11 == "xeyes" {print $2} 1664

Lorsque les programmes en langage AWK deviennent volumineux, il est plus simple de les saisir dans un chier et de demander la commande awk dexcuter le programme contenu dans ce chier. Considrons le chier de donnes cave.txt suivant :
Alsace Alsace Bordeaux Bordeaux Bordeaux Riesling Riesling Cadillac Mdoc Pomerol 2 2005 blanc Joseph Gsell 4 2002 blanc Victor Hertz 6 2004 blanc Chteau la Clyde 3 2000 rouge Chteau dEscot 2 2003 rouge Chteau Pierhem 6 2007 blanc Jean-Pierre Berthenet 6 2005 rouge Pascal Laboureau 4 2002 rouge Chteau Ventenac 1 2007 blanc Domaine Grard Fiou 1 2005 rouge Chteau Adlade 3 2004 rouge Cru du Paradis 7 2003 blanc Chteau le Fag

Bourgogne Aloxe-Corton 4 1998 rouge Dubois Bernard & fils Bourgogne Montagny Bourgogne Volnay Languedoc Cabards Loire Sancerre Sud-Ouest Gaillac Sud-Ouest Madiran Sud-Ouest Monbazillac

191

Chapitre 9. Commandes, processus et redirections Il reprsente linventaire dune cave vin. Chaque ligne correspond un ensemble de bouteilles identiques dont les champs sont : 1. 2. 3. 4. 5. 6. le vignoble ; lappellation ; le nombre de bouteilles ; le millsime ; la couleur ; (et champs suivants) le producteur.

Le programme en langage AWK reprsent dans le listage 9.1 page suivante permet danalyser ce chier an den extraire certaines informations, savoir le nombre de bouteilles par vignoble et par couleur. On pourrait bien entendu envisager dautres traitements sur ce chier. Les instructions des lignes 6 10 permettent dtablir le nombre de bouteilles par vignoble. On utilise cet effet une variable correspondant au vignoble ponyme et, en cas de correspondance, on lui ajoute le troisime champ, cest--dire le nombre de bouteilles (les variables sont cres automatiquement et initialises zro). Les instructions des lignes 12 et 13 font de mme pour le nombre de bouteilles par couleur. Enn, les instructions des lignes 16 25, correspondant la condition END, permettent dafcher les informations recueillies. Remarquez que, lorsque laction contient plusieurs instructions, celles-ci doivent tre termines par un point-virgule. Loption -f de la commande awk, suivie dun nom de chier, permet dexcuter le programme en langage AWK contenu dans ce chier. Si le programme du listage 9.1 page ci-contre est contenu dans le chier cave.awk, on peut donc lappliquer linventaire de la cave contenu dans le chier cave.txt ainsi :
$ awk -f cave.awk cave.txt Ma cave Nombre de bouteilles par vignoble Alsace Bordeaux 6 11

Bourgogne 16 Languedoc 4 Loire 1 Sud-Ouest 11 Nombre de bouteilles par couleur blanc 26 rouge 23

192

9.5. Quelques ltres usuels

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

BEGIN { print "Ma cave" ; print "" ; } /^Alsace/ /^Bordeaux/ /^Bourgogne/ /^Languedoc/ /^Loire/ /^Sud-Ouest/ /blanc/ /rouge/ END { print "Nombre de bouteilles par vignoble" ; print "Alsace print "Bordeaux " alsace ; " bordeaux ; {alsace {bordeaux += $3} += $3}

{bourgogne += $3} {languedoc += $3} {loire += $3} {sud_ouest += $3} {blanc += $3} {rouge += $3}

print "Bourgogne " bourgogne ; print "Languedoc " languedoc ; print "Loire print "" ; print "Nombre de bouteilles par couleur" ; print "blanc " blanc ; print "rouge " rouge ; } " loire ; print "Sud-Ouest " sud_ouest ;

LISTAGE 9.1 Exemple de programme en langage AWK.

193

Chapitre 9. Commandes, processus et redirections Nous nirons pas plus loin dans la description du langage de programmation AWK, dont ltude dtaille dpasse le cadre de ce cours. Le lecteur curieux pourra se reporter aux ouvrages suivants de la bibliographie pour approfondir ses connaissances : The AWK Programming Language [9] Effective awk Programming [21] sed & awk [15] sed & awk Pocket Reference [22]
http://fr.wikipedia.org/wiki/Awk http://en.wikibooks.org/wiki/An_Awk_Primer

9.5.4

La commande sed

Un diteur de texte, tel que ceux tudis dans les chapitres 5 page 53 et 6 page 67, est un logiciel interactif, qui cre ou modie un chier texte en fonction des actions successives de lutilisateur. Lorsque les modications apporter un chier texte sont connues lavance et doivent tre appliques de manire rptitive ou lorsque des modications identiques doivent tre appliques plusieurs chiers texte, lutilisation dun diteur de texte interactif peut savrer fastidieuse. Il est alors prfrable dutiliser un diteur de texte non interactif. La commande sed (pour stream editor) est un diteur de texte non interactif, utilisable en tant que ltre. Elle lit ligne par ligne les chiers dont les noms lui sont passs en arguments ou, en leur absence, son entre standard et, pour chaque ligne, lui applique une ou plusieurs actions. Le rsultat est afch au fur et mesure sur la sortie standard, quon peut rediriger vers un chier pour le conserver, ou fournir une autre commande au moyen dun tuyau pour lui appliquer des traitements supplmentaires. Lutilisation la plus courante de la commande sed est le remplacement de mots dans un texte. Ainsi, la commande suivante remplace tous les toto du chier entree par des tata et le rsultat est redirig vers le chier sortie :
$ sed s/toto/tata/g entree > sortie

Le premier argument de la commande sed indique, lorsquil ny en a quune, laction raliser. Les arguments suivants sont les noms des chiers traiter. En leur absence, la commande sed lit son entre standard. Dans lexemple prcdent, laction raliser est s/toto/tata/g. Ceci signie quil faut remplacer (s pour substitute) chaque mot toto par tata de manire globale (en raison du g la n de laction). Sans ce g, seul le premier toto de chaque ligne serait remplac par tata. Les composants de laction (s, toto, tata et g) sont spars les uns des autres par des barres obliques / (sans espaces). 194

9.5. Quelques ltres usuels Le mot remplacer nest dailleurs pas un mot tout simple mais une expression rationnelle (voir le paragraphe 9.5.2.1 page 186). Comme indiqu au paragraphe 9.5.2.2 page 188, il est ncessaire de prendre des prcautions lorsquon utilise une expression rationnelle contenant des caractres ayant une signication particulire pour linterprteur de commandes. Dans ce cas, on entoure habituellement laction dune paire dapostrophes. Par ailleurs, la commande sed utilise par dfaut une expression rationnelle simple. Sil sagit dune expression rationnelle tendue, il faut utiliser loption -E. Par exemple, pour remplacer les toto ou titi par tata, on peut faire :
$ sed -E s/toto|titi/tata/g entree > sortie

Lorsque plusieurs actions sont appliquer au texte, chacune doit suivre loption -e de la commande sed. Ainsi, la commande prcdente peut galement tre dcompose en deux actions :
$ sed -e s/toto/tata/g -e s/titi/tata/g entree > sortie

Si de nombreuses actions sont appliquer au texte ou si lon souhaite les conserver an de les rutiliser, il est possible de les spcier dans un chier, ce qui est plus pratique que de les indiquer sur la ligne de commande. Considrons le chier actions.sed suivant, qui contient les actions effectuer, une action par ligne :
s/toto/tata/g s/titi/tata/g

La commande sed peut tre pilote par celui-ci en utilisant loption -f suivie du nom du chier :
$ sed -f actions.sed entree > sortie

Nous nirons pas plus loin dans la description de la commande sed, dont ltude dtaille dpasse le cadre de ce cours. Le lecteur curieux pourra se reporter aux ouvrages suivants de la bibliographie pour approfondir ses connaissances : sed & awk [15] sed & awk Pocket Reference [22]
http://fr.wikipedia.org/wiki/Stream_Editor

195

Chapitre 9. Commandes, processus et redirections

9.5.5

La commande sort

La commande sort permet de trier selon divers critres les lignes dun texte organis en colonnes. Elle est utilisable en tant que ltre. Elle lit les lignes de texte provenant des chiers dont les noms lui sont passs en arguments ou, en leur absence, de son entre standard et afche sur sa sortie standard le rsultat du tri de ces lignes. Utilise sans option, le critre de tri de la commande sort est lordre lexicographique de la premire colonne de chaque ligne, les colonnes tant dlimites par des espaces :
$ cat toto cc bb bb aa aa zz $ sort toto aa zz bb aa cc bb

Si lon souhaite que le tri seffectue par rapport une autre colonne, il faut utiliser loption -k (pour key, ceci correspond la colonne selon laquelle seffectue le tri) suivie du numro de cette colonne. Ainsi, pour trier le chier de lexemple prcdent en fonction de sa deuxime colonne, on peut faire :
$ sort -k 2 toto bb aa cc bb aa zz

Lordre lexicographique place les lettres majuscules avant les lettres minuscules :
$ cat toto zz MM BB aa $ sort toto BB MM aa zz

196

9.5. Quelques ltres usuels Loption -f permet dignorer cette distinction :


$ sort -f toto aa BB MM zz

Loption -n (pour numeric) permet dindiquer que le tri doit tre fait selon lordre numrique :
$ cat toto 51 1664 33 $ sort -n toto 33 51 1664

Le tri du mme chier selon lordre lexicographique donne :


$ sort toto 1664 33 51

Par dfaut, les colonnes composant le texte sont censes tre spares par des espaces. Loption -t, suivie dun caractre, permet dutiliser ce caractre comme sparateur. Loption -t est gnralement utilise en conjonction avec loption -k :
$ cat toto cc:bb bb:aa aa:zz $ sort -k 2 -t : toto bb:aa cc:bb aa:zz

197

Chapitre 9. Commandes, processus et redirections Enn, loption -r (pour reverse) permet dinverser lordre du tri. Aini, en reprenant le chier de lexemple prcdent, on peut faire :
$ sort -r -k 2 -t : toto aa:zz cc:bb bb:aa

Une utilisation classique de la commande sort est de trier lafchage dune autre commande, qui noffre aucune possibilit de tri, au moyen dun tuyau. Par exemple, lafchage de la commande du, page 142, peut tre tri ainsi selon le volume total occup par lensemble du contenu de chaque rpertoire (tri numrique au moyen de loption -n par rapport la premire colonne puisque loption -k nest pas utilise), les rpertoires les plus volumineux tant donc clairement visibles en n dafchage :
$ du -k | sort -n 34 338 390 546 2866 7294 ./rep3/rep5 ./rep3/rep4 ./rep3 ./rep1 ./rep2 .

http://en.wikipedia.org/wiki/Sort_(Unix)

9.5.6

La commande wc

La commande wc (pour word count) permet dafcher le nombre de lignes, de mots (les mots tant spars les uns des autres par des espaces) et doctets des chiers dont les noms lui sont passs en arguments ou, en leur absence, de son entre standard (puisquil sagit dun ltre) :
$ wc toto 16687 79550 610080 toto

La commande wc afche dans lordre : 1. le nombre de lignes du chier (ici, 16687) ; 2. le nombre de mots du chier (ici, 79550) ; 3. le nombre doctets du chier (ici, 610080), dont la valeur est identique la taille du chier telle quafche par ls -l. 198

9.5. Quelques ltres usuels Lorsque plusieurs noms de chiers lui sont passs en arguments, la commande wc afche ces informations pour chacun des chiers, suivies de leur cumul :
$ wc tata titi tutu 15 16 5 36 29 13 25 67 261 tata 67 titi 187 tutu 515 total

Utilise en dernire commande dun tuyau, la commande wc nafche que les informations, sans nom de chier (qui, dans ce contexte, nexiste pas) :
$ ps aux | wc 50 589 3944

wc

Bien souvent, seul le nombre de lignes a un intrt et loption -l de la commande permet de nafcher que lui :

$ ps aux | wc -l 50

Dans la mesure o de nombreuses commandes ont un afchage indiquant un rsultat par ligne (un chier, un processus, etc.), on utilise souvent wc -l pour compter ces lignes. Ainsi, la commande de lexemple prcdent permet de compter le nombre de processus (auquel il ne faut pas oublier de retrancher 1 en raison de la premire ligne de lafchage de ps indiquant la signication de chaque colonne). De mme, loption -w de la commande wc permet dafcher le nombre de mots. Enn, loption -c de la commande wc permet dafcher le nombre doctets. Avec de nombreux codages du texte, il sagit galement du nombre de caractres mais pas avec le codage UTF-8 (voir le paragraphe 4.3.3 page 48). Loption -m de la commande wc permet alors dafcher le nombre de caractres. Par exemple, avec un chier toto cod en UTF-8 :
$ cat toto pt $ wc -c toto 7 toto $ wc -m toto 5 toto

199

Chapitre 9. Commandes, processus et redirections Le caractre supplmentaire ( pt compte quatre caractres et six octets lorsquil est cod en UTF-8) est le caractre de retour la ligne, qui nest pas visible mais nanmoins prsent dans le chier et comptabilis par la commande wc. Toute ces options peuvent tre combines, lexception des options -c et -m, qui ne peuvent pas tre utilises ensemble. La combinaison -lwc correspond au comportement sans option de la commande wc.
http://en.wikipedia.org/wiki/Wc_(Unix)

9.6

Gestion des longs processus

Les commandes tudies jusqu prsent sexcutent en un temps trs court mais il existe galement des commandes qui ralisent gnralement de lourds traitements de donnes tels que des calculs scientiques qui sexcutent en plusieurs heures, plusieurs jours, voire plusieurs semaines. Leur gestion demande des traitements particuliers an de permettre leur droulement dans les meilleures conditions.

9.6.1

La commande nohup

Lorsquon quitte linterprteur de commandes au moyen de la commande exit ou quon termine la session graphique, tous les processus lancs par lutilisateur sont arrts par le systme dexploitation. Si lon doit lancer une commande ayant un long temps dexcution, cela pose problme car il faut donc rester connect sur lordinateur sur lequel on la lance. La commande nohup (pour no hang-up) permet de lancer un processus en lmancipant, cest--dire en le rendant totalement indpendant de linterprteur de commandes ou de la session qui ont contribu son lancement :
$ nohup commande &

La commande nohup est suivie de la commande lancer. Dans lexemple prcdent, celle-ci est reprsente par commande, avec ventuellement ses options et ses arguments (qui ne sont pas indiqus dans lexemple an de ne pas lalourdir). Le tout est lanc en arrire-plan pour pouvoir rcuprer la main dans linterprteur de commandes. Si elles ne sont pas rediriges explicitement, la sortie standard et la sortie derreur standard sont rediriges par nohup vers le chier nohup.out. Si lon souhaite les rediriger vers deux chiers diffrents ou rediriger lentre standard depuis un chier, on peut utiliser tous les mcanismes tudis au paragraphe 9.4 page 174 :
$ nohup commande < entree > sortie 2> erreur &

200

9.6. Gestion des longs processus Pour manciper un processus, il faut absolument le lancer avec la commande Il nexiste pas de moyen dmanciper un processus sil a t lanc autrement.

nohup.

http://fr.wikipedia.org/wiki/Nohup

9.6.2

Les commandes nice et renice

Sous UNIX, il est possible de modier la priorit dun processus. Celle-ci est dnie au moyen dun nombre compris entre 20 et 20. Cest celui quafche la commande top (voir le paragraphe 9.3.4 page 169) dans la colonne NI. La priorit par dfaut dun processus est de 0. Plus la priorit est ngative, plus le processus sexcutera rapidement. Plus la priorit est positive, plus le processus sexcutera lentement. La priorit dun processus inue sur la faon dont il est trait par lordonnanceur (voir le paragraphe 9.3.1 page 164). Selon lalgorithme utilis par lordonnanceur, un processus plus prioritaire, cest--dire ayant une priorit ngative, disposera de quanta plus longs ou sera ordonnanc plus souvent et ce dautant plus que sa priorit sera ngative. linverse, un processus moins prioritaire, cest--dire ayant une priorit positive, disposera de quanta moins longs ou sera ordonnanc moins souvent et ce dautant moins que sa priorit sera positive. videmment, la priorit na dinuence sur la dure dexcution dun processus que sil nest pas le seul utiliser le microprocesseur, auquel cas il sera ordonnanc systmatiquement. Pour que la priorit joue son rle, il faut quau minimum deux processus utilisent rgulirement le microprocesseur. An dviter quun utilisateur nabuse de cette possibilit en lanant tous ses processus la priorit 20, seul ladministrateur du systme peut utiliser les priorits ngatives. Les utilisateurs ont donc seulement accs aux priorits positives, cest--dire quils ne peuvent que ralentir leurs processus. Quel est lintrt de ralentir ses processus ? Comme le nom de la commande nice lindique, il sagit dtre gentil avec les autres utilisateurs dun systme informatique. En temps normal, on cherche obtenir les rsultats de ses processus le plus rapidement possible mais il existe des cas o lon peut se permettre de les ralentir. Par exemple, lorsquon sabsente pour une dure plus ou moins longue (dplacement, congs, etc.), on peut ralentir les processus dont on sait quils vont se terminer avant son retour ou lancer avec une priorit plus faible de nouveaux processus. Un systme informatique partag par plusieurs catgories dutilisateurs peut galement imposer des priorits diffrentes pour leurs calculs (les tudiants ayant une priorit plus faible que celle des chercheurs, par exemple). La commande nice permet de lancer un processus en modiant sa priorit :
$ nice -n 5 commande &

201

Chapitre 9. Commandes, processus et redirections La commande nice sutilise avec loption -n suivie de la priorit donner au processus et de la commande lancer, avec ventuellement ses options et ses arguments (qui ne sont pas indiqus dans lexemple an de ne pas lalourdir). Le tout est lanc en arrire-plan pour pouvoir rcuprer la main dans linterprteur de commandes. La commande nice ayant pour but de lancer des processus ayant un long temps dexcution (puisque rduire la priorit dun processus se terminant rapidement na pas de sens), on lutilise typiquement couple avec la commande nohup (voir le paragraphe 9.6.1 page 200) et en utilisant les mcanismes de redirection tudis au paragraphe 9.4 page 174 :
$ nohup nice -n 5 commande < entree > sortie 2> erreur &

La commande renice permet de modier la priorit dun ou de plusieurs processus en cours dexcution. Elle prend en arguments la priorit affecter et le ou les identiants des processus concerns :
$ renice 5 1664 1664: old priority 0, new priority 5

Une fois la priorit diminue, il nest plus possible de laugmenter (seul ladministrateur de systme le peut) :
$ renice 0 1664 renice: 1664: setpriority: Permission denied

En revanche, il est possible de la diminuer davantage, si besoin est.


http://fr.wikipedia.org/wiki/Nice_(Unix)

9.6.3

La commande screen

La commande nohup a un dfaut, elle ne permet pas dmanciper un processus en pouvant continuer dinteragir directement avec lui par la suite. La redirection des entre et sortie standards est la seule forme dinteraction possible avec le processus. La commande screen permet de lancer un interprteur de commandes, dinteragir avec lui, puis de lmanciper lorsque ncessaire, avec toute commande lance depuis celui-ci, et den reprendre le contrle plus tard. Un exemple dutilisation de la commande screen permettra de mieux en comprendre le fonctionnement :
$ screen

202

9.6. Gestion des longs processus Une fois lance, la commande screen excute un nouvel interprteur de commandes, quon peut utiliser normalement mais aussi pour lancer une commande ayant un long temps dexcution. tout moment, la combinaison de touches C-a C-d (la documentation de la commande screen utilise le mme principe de notation quEmacs) permet de dtacher lensemble form par la commande screen, linterprteur de commandes quelle a lanc et tout processus excut depuis celui-ci du terminal, ce qui quivaut lmanciper. On revient alors linterprteur de commandes qui a servi excuter la commande screen. Cette dernire continue fonctionner de manire mancipe mais son afchage est pour le moment inaccessible. On peut alors fermer sa session ou simplement faire autre chose. Pour reprendre le contrle de la commande screen, il faut, si on la quitt, se reconnecter sur lordinateur o on la lance (physiquement ou distance, voir le paragraphe 11.2 page 224) et utiliser la commande screen avec loption -r (pour resume) :
$ screen -r

On se retrouve alors dans linterprteur de commandes lanc prcdemment par la commande screen et lon peut interagir avec lui normalement. On pourra par la suite dtacher nouveau la commande screen au moyen de la combinaison de touches C-a C-d puis en reprendre le contrle avec screen -r et ainsi de suite. Il est possible de lancer plusieurs commandes screen. Si plus de deux dentre elles sont dtaches, screen -r en afche la liste :
$ screen -r There are several suitable screens on: 1664.pts-1.cafe01 3351.pts-1.cafe01 (Detached) (Detached)

Type "screen [-d] -r [pid.]tty.host" to resume one of them.

Il faut ensuite indiquer lidentiant de processus de la commande screen dont on souhaite reprendre le contrle :
$ screen -r 1664

Savoir quel identiant de processus correspond quelle commande screen nest pas vident. Aussi est-il possible dattribuer un nom chaque session lance par la commande screen au moyen de loption -S (pour session) suivie du nom choisi. Au lieu de lancer la commande screen tout simplement, on fait donc : 203

Chapitre 9. Commandes, processus et redirections

$ screen -S session1

On peut alors travailler normalement puis dtacher lensemble. On peut ensuite lancer dautres commandes screen sur le mme principe puis les dtacher. Les noms attribus chaque session gurent maintenant dans lafchage de screen -r :
$ screen -r There are several suitable screens on: 5088.session1 5613.session2 5351.session3 (Detached) (Detached) (Detached)

Type "screen [-d] -r [pid.]tty.host" to resume one of them.

et lon peut reprendre le contrle dune session particulire en indiquant son nom plutt que son identiant de processus :
$ screen -r session2

Quitter linterprteur de commandes lanc par la commande screen au moyen de la commande exit permet de quitter la commande screen elle-mme. La facult de pouvoir lancer plusieurs interprteurs de commandes depuis le mme terminal fait que la commande screen constitue un multiplexeur de terminaux.
http://www.gnu.org/software/screen/ http://fr.wikipedia.org/wiki/GNU_Screen http://fr.wikipedia.org/wiki/Multiplexage

9.6.4

La commande tmux

La commande tmux est galement un multiplexeur de terminaux et sutilise dans le mme esprit que la commande screen. Moins rpandue que cette dernire, elle est en particulier fournie avec linstallation de base dOpenBSD et est disponible sur dautres UNIX.
$ tmux

Comme la commande screen, la commande tmux excute un nouvel interprteur de commandes. Il est possible de dtacher lensemble grce la combinaison de touches C-b d ou en excutant la commande tmux avec largument detach : 204

9.6. Gestion des longs processus

$ tmux detach

attach

Pour reprendre le contre de la commande :

tmux,

on lutilise avec largument

$ tmux attach

Il est possible dafcher la liste des commandes faisant tmux ls :


$ tmux ls

tmux

en cours dexcution en

0: 1 windows (created Thu Mar 17 10:49:42 2011) [80x23] 1: 1 windows (created Thu Mar 17 14:59:31 2011) [80x23]

Chaque ligne correspond une commande tmux en cours dexcution. Chacune est repre par un identiant de session qui gure en dbut de ligne (il sagit du nombre avant le deux-points). Pour reprendre le contrle dune commande tmux particulire, il faut indiquer son identiant de session au moyen de loption -t (pour target) :
$ tmux attach -t 0

Savoir quel identiant de processus correspond quelle commande tmux nest pas vident. Aussi est-il possible dattribuer un nom chaque session lance par la commande tmux au moyen de largument new suivi de loption -s (pour session) et du nom choisi. Au lieu de lancer la commande tmux tout simplement, on fait donc :
$ tmux new -s session1

On peut alors travailler normalement puis dtacher lensemble. On peut ensuite lancer dautres commandes tmux sur le mme principe puis les dtacher. Les noms attribus chaque session gurent maintenant dans lafchage de tmux ls :
$ tmux ls session1: 1 windows (created Tue May 24 15:42:53 2011) [80x23] session2: 1 windows (created Tue May 24 15:43:13 2011) [80x23] session3: 1 windows (created Tue May 24 15:43:15 2011) [80x23]

205

Chapitre 9. Commandes, processus et redirections et lon peut reprendre le contrle dune session particulire en indiquant son nom plutt que son identiant de processus :
$ tmux attach -t session2

Quitter linterprteur de commandes lanc par la commande tmux au moyen de la commande exit permet de quitter la commande tmux elle-mme.
http://tmux.sourceforge.net/ http://fr.wikipedia.org/wiki/Multiplexage

206

10
Impression

cest mal. Cest mal parce que a se fait sur des restes darbres morts. Cest un peu moins mal lorsque le papier sur lequel on imprime est recycl. Mais cest tout de mme mal parce que, bien souvent, ce quon imprime nit trs rapidement dans une poubelle (rarement jaune). Malgr la tendance au tout numrique, on na jamais consomm autant de papier quaujourdhui. Et sil faut rprimer ses envies dimprimer, il est des situations o limpression est un mal ncessaire. Nous allons tudier comment imprimer de manire responsable, en vriant ltat de limprimante avant toute impression, en supprimant dventuels travaux dimpression inutiles et en optimisant lutilisation du papier.

MPRIMER ,

10.1

Nommage des imprimantes

Sous UNIX, chaque imprimante est identie par un ou plusieurs noms, qui lui sont attribus par ladministrateur du systme informatique. Lorsquune imprimante dispose de plusieurs noms, chacun deux permet dexploiter une caractristique particulire de limprimante, comme limpression en recto seul, recto-verso ou encore le choix du format du papier. lENSTA ParisTech, les trois imprimantes accessibles aux lves sont situes au deuxime tage, dans le couloir des salles informatiques, pice 273. Les deux imprimantes noir et blanc se nomment speedy et speedo pour limpression en rectoverso, speedy1 et speedo1 pour limpression en recto seul. Limprimante couleur se nomme pcolor pour limpression en recto-verso, pcolor1 pour limpression en recto seul.

10.2

Avant dimprimer

Lpoque o chacun disposait dune imprimante porte de main est rvolue. Aujourdhui, la tendance est la mutualisation. Limprimante commune qui est de plus en plus souvent un photocopieur faisant galement ofce dimprimante est 207

Chapitre 10. Impression gnralement place dans un local technique ou un couloir, an dtre facilement accessible par tous. Il est possible que cette imprimante soit hors service, bien souvent par manque de papier. Il est donc important de vrier son tat avant de lancer une impression. Si jamais on a lanc une impression sur une imprimante qui ne fonctionne pas, il est ncessaire de lannuler.

10.2.1

La commande lpq

La commande lpq (pour line printer queue) permet dafcher la le dattente dune imprimante. Elle sutilise avec loption -P (majuscule) suivie du nom de limprimante concerne :
$ lpq -P speedy Printer: speedy@se1 (destination speedy@speedy) Queue: pas de travail imprimable dans la file dattente Server: pas de serveur actif Status: travail eleve@cafe01+666 sauv at 09:42:59.122 Rank done Owner/ID eleve@cafe01+666 Pr/Class Job Files A 666 toto.ps Size Time 386371 09:42:58

No entries

Le plus important est indiqu en dernire ligne : No entries signie que la le dattente de limprimante est vide. On peut donc supposer quelle fonctionne correctement et il est alors possible de lancer une impression. Lorsque limprimante est hors service, gnralement par manque de papier, lafchage peut tre plus long :
1 2 3 4 5 6 7 8 9 10 11 12

$ lpq -P speedy Printer: speedy@se1 (destination speedo@speedo) Queue: 3 travail imprimables Server: pid 23030 actif Unspooler: pid 23031 Rank 2 3 4 Owner/ID eleve@cafe01+667 eleve@cafe01+700 eleve@cafe01+534 actif Pr/Class Job Files A A A A 666 toto.ps 667 tata.ps 700 titi.ps 534 tutu.ps Size Time 18477382 17:34:42 24567517 17:38:34 13198435 17:38:43 17369403 17:38:53 Status: waiting for subserver to exit at 17:38:43.797 stalled(344sec) eleve@cafe01+666

Active: cafe01 printing via LPD

Les lignes 8 11 indiquent les travaux dimpression en attente, sous la forme dun afchage en colonnes. Pour chaque travail dimpression en attente sont indiqus : sa position dans la le dattente (colonne Rank) ; lidentiant de son propritaire (colonne Owner/ID) ; un nombre unique permettant de lidentier (colonne Job) ; 208

10.2. Avant dimprimer sa taille en octets (colonne Size) ; lheure de sa soumission (colonne Time). Si lon veut conomiser un caractre, on peut se dispenser de lespace entre loption -P et le nom de limprimante :
$ lpq -Pspeedy [...]

http://en.wikipedia.org/wiki/Berkeley_printing_system

10.2.2

La commande lprm

Lorsquune imprimante est hors service et quon a un ou plusieurs travaux dimpression dans sa le dattente, il est prfrable de les en supprimer avant dutiliser une autre imprimante. En effet, on ne sait pas toujours quand limprimante dfectueuse sera remise en service et il est gnant de laisser des travaux dimpression en attente. En effet, il est toujours dsagrable pour la personne qui redmarre une imprimante den voir sortir immdiatement des dizaines, voire des centaines de pages, qui nissent bien souvent la poubelle. La commande lprm (pour line printer remove) permet de supprimer un ou plusieurs travaux dimpression en attente. Elle sutilise avec loption -P (majuscule) suivie du nom de limprimante concerne et avec le ou les numros (qui sont indiqus par la commande lpq dans la colonne Job) des travaux dimpression supprimer comme arguments :
$ lprm -P speedy 666 667 Imprimante speedy@se1: vrification des autorisations eleve@cafe01+666 enlev de la file dattente eleve@cafe01+666 vrification des autorisations eleve@cafe01+667 enlev de la file dattente eleve@cafe01+667

On peut galement utiliser un - (tiret) comme argument pour demander la suppression du premier de ses travaux dimpression sans avoir indiquer son numro exact :
$ lprm -P speedy [...]

Si lon veut conomiser un caractre, on peut se dispenser de lespace entre loption -P et le nom de limprimante : 209

Chapitre 10. Impression

$ lprm -Pspeedy 666 [...]

http://en.wikipedia.org/wiki/Berkeley_printing_system

10.3

Le format PostScript

Un document quelconque ne peut pas tre imprim tel quel. En effet, les imprimantes ne savent pas traiter la multitude de formats de documents qui existent. Pour imprimer un document, il est ncessaire de le convertir au format PostScript, qui est le format standard reconnu par toutes les imprimantes. Le format PostScript a t conu par la socit Adobe au dbut des annes 1980. Il permet de dcrire les lments graphiques (ligne, arc de cercle, courbe, etc.) ainsi que le texte dun document de manire vectorielle alors quils taient auparavant dcrits avec une matrice de points. La description vectorielle permet de nombreuses manipulations sans perte de qualit lors de limpression et rend les documents indpendants des capacits des imprimantes. Le format PostScript permet galement de piloter les imprimantes an den slectionner certaines caractrisques (impression en recto-verso ou en recto seul, choix du bac papier, etc.). En pratique, un chier PostScript est un chier texte. Le listage 10.1 page cicontre (les mots cls correspondant aux actions effectuer y sont indiqus en gras) contient un exemple de chier PostScript, dont le rendu graphique est indiqu dans la gure 10.1.

FIGURE 10.1 Rendu graphique du chier PostScript du listage 10.1. Nous ntudierons pas davantage le format PostScript. Nanmoins, il est utile de savoir reconnatre un chier PostScript. Sa premire ligne est caractristique (le numro de version peut varier en fonction du logiciel qui a produit le chier PostScript) :
%!PS-Adobe-3.0

210

10.3. Le format PostScript


%!PS-Adobe-3.0 1 setlinewidth newpath 50 600 moveto 10 60 rlineto 40 0 rlineto -10 -60 rlineto -40 0 rlineto stroke newpath 95 630 10 0 360 arc stroke newpath 95 630 translate 20 rotate 2 1 scale 0 0 17 0 360 arc stroke showpage

LISTAGE 10.1 Exemple de chier PostScript.

Les chiers PostScript ont gnralement une extension .ps. Avant dimprimer (ou au lieu dimprimer), on peut visualiser un chier PostScript sur cran au moyen de la commande gv :
$ gv fichier.ps &

La commande gv ouvre une fentre montrant la premire page du chier PostScript et permettant de naviguer lintrieur du document, den changer lorientation, le grossissement, etc. Les seuls chiers pouvant tre imprims directement sont les chiers PostScript. Nous allons voir comment procder au paragraphe 10.4 page suivante. Ensuite, nous tudierons les cas particuliers des chiers texte au paragraphe 10.5 page 214 et des chiers PDF au paragraphe 10.6 page 219. Pour imprimer dautres types de documents, il faut : 211

Chapitre 10. Impression soit utiliser le logiciel qui les a conus sil dispose dune fonction directe dimpression ou de la possibilit de gnrer un chier PostScript ; soit utiliser un convertisseur permettant de gnrer un chier PostScript partir du document en question.
http://fr.wikipedia.org/wiki/PostScript http://www.gnu.org/software/gv/

10.4

Impression de chiers PostScript

La nature vectorielle du format PostScript le rend apte de nombreuses manipulations en particulier des similitudes tout en conservant la mme qualit dimpression. Nous allons tudier comment imprimer puis comment manipuler un chier PostScript avant impression.

10.4.1

La commande lpr

La commande lpr (pour line print) permet dimprimer un chier PostScript. Elle sutilise avec loption -P (majuscule) suivie du nom de limprimante et avec le nom du chier imprimer comme argument :
$ lpr -P speedy toto.ps

Si lon veut conomiser un caractre, on peut se dispenser de lespace entre loption -P et le nom de limprimante :
$ lpr -Pspeedy toto.ps

La commande lpr est un ltre. Elle peut donc tre utilise (sans argument) en raccordant son entre standard au moyen dun tuyau la sortie standard dune commande afchant du PostScript :
$ commande_affichant_du_PostScript | lpr -P speedy

http://en.wikipedia.org/wiki/Lpr http://en.wikipedia.org/wiki/Berkeley_printing_system

212

10.4. Impression de chiers PostScript

10.4.2

Les utilitaires PSUtils

Les utilitaires PSUtils sont des commandes permettant de manipuler des chiers PostScript. Nous allons tudier les deux plus utiles de ces commandes. Celles-ci sont des ltres et afchent leur rsultat sur leur sortie standard. Elles peuvent donc tre raccordes pour limpression la commande lpr au moyen dun tuyau.
http://www.tardis.ed.ac.uk/~ajcd/psutils/

10.4.2.1

La commande psselect

La commande psselect permet de slectionner certaines pages dun document en vue de nimprimer que celles-ci. Il est en effet regrettable dimprimer un document dans son intgralit lorsquon na besoin que de quelques pages. Les pages slectionner sont indiques grce loption -p immdiatement suivie (sans espace) dune expression pouvant contenir des numros de pages ou des intervalles de numros de pages, le tout spar par des virgules. Le rsultat est afch sur la sortie standard et peut donc tre soit redirig dans un chier soit pass une autre commande (par exemple lpr) au moyen dun tuyau. Ainsi, lexemple suivant imprimera les pages 3, 6 9 et 15 du chier PostScript toto.ps :
$ psselect -p3,6-9,15 toto.ps | lpr -P speedy [3] [6] [7] [8] [9] [15] Wrote 6 pages, 44409 bytes

http://www.tardis.ed.ac.uk/~ajcd/psutils/psselect.html

10.4.2.2

La commande psnup

La commande psnup permet de rarranger un document PostScript pour imprimer plusieurs pages par feuille de papier. Loption -2 permet dimprimer deux pages par feuille de papier, au format paysage :
$ psnup -2 toto.ps | lpr -P speedy [1] [2] [3] [4] [5] Wrote 5 pages, 42626 bytes

Loption portrait :

-4

permet dimprimer quatre pages par feuille de papier, au format

$ psnup -4 toto.ps | lpr -P speedy [1] [2] [3] Wrote 3 pages, 43308 bytes

213

Chapitre 10. Impression On peut galement combiner psselect et psnup pour slectionner quelques pages dun document et en imprimer plusieurs sur chaque feuille de papier :
$ psselect -p1-4 toto.ps | psnup -4 | lpr -P speedy [1] [2] [3] [4] Wrote 4 pages, 45291 bytes [1] Wrote 1 pages, 48249 bytes

http://www.tardis.ed.ac.uk/~ajcd/psutils/psnup.html

10.5

Impression de chiers texte

tant donn la prpondrance des chiers texte sous UNIX, il existe des commandes ddies permettant dimprimer ces chiers. Ces commandes peuvent galement gnrer les chiers PostScript correspondants au lieu de les imprimer.

10.5.1

La commande a2ps

La commande a2ps permet dimprimer un chier texte ou de le convertir en PostScript. Pour imprimer un chier texte, la commande a2ps sutilise avec loption -P (majuscule) suivie du nom de limprimante et avec le ou les chiers imprimer comme arguments :
$ a2ps -P speedy toto1.txt toto2.txt [toto1.txt (standard) : 10 pages sur 5 feuilles] [toto2.txt (standard) : 1 page sur 1 feuille] lidentifiant de requte est speedy-90 ( 1 fichier(s) ) [Total : 11 pages sur 6 feuilles] envoy limprimante speedy [7 lignes enroules]

Si lon veut conomiser un caractre, on peut se dispenser de lespace entre loption -P et le nom de limprimante :
$ a2ps -Pspeedy toto.ps [...]

Par souci dconomie, la commande a2ps imprime par dfaut deux pages par feuille de papier, au format paysage, comme on peut le voir dans la gure 10.2 page suivante. Si lon souhaite faire encore mieux et imprimer quatre pages par feuille de papier, au format portrait, on peut utiliser loption -4 : 214

10.5. Impression de chiers texte

Printed by Marc Baudoin Dec 11, 09 22:16

mickeysoft.c

Page 1/2

Dec 11, 09 22:16

mickeysoft.c

Page 2/2

#include <nonsense.h> #include <lies.h> #include <spyware.h> /* Microsoft Network Connectivity library */ #include <process.h> /* For the court of law */ #define say(x) lie(x) #define computeruser ALL_WANT_TO_BUY_OUR_BUGWARE #define next_year soon #define the_product_is_ready_to_ship another_beta_version void main() { if (latest_window_version>one_month_old) { if (there_are_still_bugs) market(bugfix); if (sales_drop_below_certain_point) raise(RUMOURS_ABOUT_A_NEW_BUGLESS_VERSION); } while(everyone_chats_about_new_version) { make_false_promise(it_will_be_multitasking); /* Standard Call, in lie.h */ if (rumours_grow_wilder) make_false_promise(it_will_be_plug_n_play); if (rumours_grow_even_wilder) { market_time=ripe; say("It will be ready in one month"); order(programmers, stop_fixing_bugs_in_old_version); order(programmers, start_brainstorm_about_new_version); order(marketingstaff, permission_to_spread_nonsense); vapourware=TRUE; break; } } switch (nasty_questions_of_the_worldpress) { case WHEN_WILL_IT_BE_READY: say("It will be ready in", today+30_days," were just testing"); break; case WILL_THIS_PLUG_AND_PLAY_THING_WORK: say("Yes it will work"); ask(programmers, why_does_it_not_work); pretend(there_is_no_problem); break; case WHAT_ARE_MINIMAL_HARDWARE_REQUIREMENTS: say("It will run on a 8086 with lightning speed due to" " the 32 bits architecture"); inform(INTEL, "Pentium sales will rise skyhigh"); inform(SAMSUNG, "Start a new memorychip plant" "cos all those customers will need at least 32 megs"); inform(QUANTUM, "Thanks to our fatware your sales will triple"); get_big_bonus(INTEL, SAMSUNG, QUANTUM); break; case DOES_MICROSOFT_GET_TOO_MUCH_INFLUENCE: say("Oh no, we are just here to make a better world for everyone"); register(journalist, Big_Bill_Book); when(time_is_ripe) {

arrest(journalist); brainwash(journalist); when(journalist_says_windows95_is_bugfree) { order(journalist, "write a nice objective article"); release (journalist); } } break; } while (vapourware) { introduction_date++; /* Delay */ if (no_one_believes_anymore_there_will_be_a_release) break; say("It will be ready in",today+ONE_MONTH); } release(beta_version) while (everyone_is_dumb_enough_to_buy_our_bugware) { bills_bank_account += 150*megabucks; release(new_and_even_better_beta_version); introduce(more_memory_requirements); if (customers_report_installation_problems) { say("that is a hardware problem, not a software problem"); if (smart_customer_says_but_you_promised_plug_and_play) { ignore(customer); order(microsoft_intelligence_agency, "Keep an eye on this bastard"); } } if (there_is_another_company) { steal(their_ideas); accuse(compagny, stealing_our_ideas); hire(a_lot_of_lawyers); /* in process.h */ wait(until_other_company_cannot_afford_another_lawsuit); buy_out(other_company); } } /* Now everyone realizes that we sell bugware and they are all angry at us */ order(plastic_surgeon, make_bill_look_like_poor_bastard); buy(nice_little_island); hire(harem); laugh_at(everyone, for_having_the_patience_year_after_year_for_another_unfinished_version); } void bugfix(void) { charge (a_lot_of_money); if (customer_says_he_does_not_want_to_pay_for_bugfix) say("It is not a bugfix but a new version"); if (still_complaints) { ignore(customer); register(customer, Big_Bill_Book); /* Well get him when everyone uses Billware!!*/ } }

Friday December 11, 2009

/home/babafou/divers/humour/mickeysoft.c

1/1

FIGURE 10.2 Fichier imprim avec la commande a2ps.

$ a2ps -4 -P speedy toto.txt [...]

Si, en revanche, on ne souhaite imprimer quune seule page par feuille de papier, on peut utiliser loption -1 :
$ a2ps -1 -P speedy toto.txt [...]

Le comportement par dfaut de la commande a2ps correspond loption -2 :


$ a2ps -2 -P speedy toto.txt [...]

En regardant de plus prs la gure 10.2, qui est le rsultat de limpression avec la commande a2ps dun programme en langage C, on peut remarquer que certaines 215

Chapitre 10. Impression parties du texte sont en gras et dautres en italique. En effet, a2ps sait reconnatre certains types de chiers texte, dont de nombreux langages de programmation, et les prsenter en diffrenciant leurs lments syntaxiques de cette faon, ce qui facilite la lecture. Si lon utilise une imprimante capable dimprimer en recto-verso mais qui nest pas congure pour le faire par dfaut, loption -s, suivie de la valeur 2, permet dactiver limpression en recto-verso :
$ a2ps -s 2 -P speedy toto.txt [...]

Pour gnrer un chier PostScript partir dun chier texte sans limprimer, la commande a2ps sutilise avec loption -o (pour output) suivie du nom du chier PostScript gnrer et avec le ou les chiers texte comme arguments :
$ a2ps -o toto.ps toto1.txt toto2.txt [toto1.txt (standard) : 10 pages sur 5 feuilles] [toto2.txt (standard) : 1 page sur 1 feuille] [Total : 11 pages sur 6 feuilles] enregistr dans le fichier toto.ps [7 lignes enroules]

La commande a2ps est un ltre. Elle peut donc tre utilise (sans argument) en raccordant son entre standard au moyen dun tuyau la sortie standard dune commande afchant du texte :
$ commande_affichant_du_texte | a2ps -P speedy

http://www.gnu.org/software/a2ps/

10.5.2

La commande enscript

La commande enscript permet dimprimer un chier texte ou de le convertir en PostScript. Pour imprimer un chier texte, la commande enscript sutilise avec loption -P (majuscule) suivie du nom de limprimante et avec le ou les chiers imprimer comme arguments :
$ enscript -P speedy toto1.txt toto2.txt [ 11 pages x 1 copies ]expdi speedy 4 lignes taient enroules

216

10.5. Impression de chiers texte Si lon veut conomiser un caractre, on peut se dispenser de lespace entre loption -P et le nom de limprimante :
$ enscript -Pspeedy toto.ps [...]

La gure 10.3 montre un exemple de chier imprim avec la commande enscript.


/home/babafou/ensta/in201/poly/babafou/exemples/fflush.c #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #define LECTURE 0 #define ECRITURE 1 int main ( int argc , char **argv ) { int tuyau[2] , a , b , c ; FILE *mon_tuyau ; if ( pipe ( tuyau ) == -1 ) { perror ( "Erreur dans pipe()" ) ; exit ( EXIT_FAILURE ) ; } switch ( fork ( ) ) { case -1 : /* erreur */ perror ( "Erreur dans fork()" ) ; exit ( EXIT_FAILURE ) ; case 0 : /* processus fils, lecteur */ close ( tuyau[ECRITURE] ) ; mon_tuyau = fdopen ( tuyau[LECTURE] , "r" ) ; if ( mon_tuyau == NULL ) { perror ( "Erreur dans fdopen()" ) ; exit ( EXIT_FAILURE ) ; } fscanf ( mon_tuyau , "%d%d%d" , &a , &b , &c ) ; printf ( "[fils] Mon pre a crit %d %d %d\n" , a , b , c ) ; fclose ( mon_tuyau ) ; exit ( EXIT_SUCCESS ) ; default : /* processus pre, crivain */ close ( tuyau[LECTURE] ) ; mon_tuyau = fdopen ( tuyau[ECRITURE] , "w" ) ; if ( mon_tuyau == NULL ) { perror ( "Erreur dans fdopen()" ) ; exit ( EXIT_FAILURE ) ; } fprintf ( mon_tuyau , "1 2 3\n" ) ; printf ( "[pre] Je viens dcrire dans le tuyau,\n" ) ; printf ( " mais les donnes sont encore\n" ) ; printf ( " dans la zone de mmoire tampon.\n" ) ; sleep ( 5 ) ; fflush ( mon_tuyau ) ; printf ( "[pre] Je viens de forcer lcriture\n" ) ; printf ( " des donnes de la mmoire tampon\n" ) ; printf ( " vers le tuyau.\n" ) ; printf ( " Jattends 5 secondes.\n" ) ; sleep ( 5 ) ; fclose ( mon_tuyau ) ; exit ( EXIT_SUCCESS ) ; } } Sat Aug 21 13:14:51 1999

FIGURE 10.3 Fichier imprim avec la commande enscript. Contrairement a2ps, la commande enscript imprime par dfaut une seule page par feuille de papier. Loption -U (majuscule) suivie de 2 ou 4 permet dimprimer deux ou quatre pages par feuille de papier :
$ enscript -U 2 -P speedy toto.txt $ enscript -U 4 -P speedy toto.txt

La commande enscript sait galement diffrencier les lments syntaxiques de certains types de chiers texte en les composant en gras ou en italique. Pour cela, il faut utiliser loption -E : 217

Chapitre 10. Impression

$ enscript -E -P speedy toto.txt [...]

Si lon utilise une imprimante capable dimprimer en recto-verso mais qui nest pas congure pour le faire par dfaut, loption -D, suivie de la valeur Duplex:true, permet dactiver limpression en recto-verso :
$ enscript -D Duplex:true -P speedy toto.txt [...]

Pour gnrer un chier PostScript partir dun chier texte sans limprimer, la commande enscript sutilise avec loption -o (pour output) suivie du nom du chier PostScript gnrer et avec le ou les chiers texte comme arguments :
$ enscript -o toto.ps toto1.txt toto2.txt [ 11 pages x 1 copies ] places dans toto.ps 4 lignes taient enroules

La commande enscript est un ltre. Elle peut donc tre utilise (sans argument) en raccordant son entre standard au moyen dun tuyau la sortie standard dune commande afchant du texte :
$ commande_affichant_du_texte | enscript -P speedy

http://www.gnu.org/software/enscript/ http://en.wikipedia.org/wiki/Enscript

10.5.3

Impression de chiers texte cods en UTF-8

De nombreuses imprimantes ne grent pas correctement les chiers texte cods en UTF-8. Il est alors ncessaire de les convertir en ISO 8859-15 au moyen de la commande iconv avant de les imprimer. On peut procder ainsi avec la commande a2ps :
$ iconv -f utf-8 -t iso-8859-15 toto.txt | a2ps -P speedy

ou ainsi avec la commande enscript :


$ iconv -f utf-8 -t iso-8859-15 toto.txt | enscript -P speedy

218

10.6. Impression de chiers PDF


http://en.wikipedia.org/wiki/Iconv

10.6

Impression de chiers PDF

La commande pdftops permet de convertir un chier PDF en chier PostScript :


$ pdftops toto.pdf

Utilise avec un seul nom de chier en argument (qui doit tre un chier au format PDF), la commande pdftops gnre un chier du mme nom en remplaant lextension .pdf par lextension .ps. On peut choisir le nom du chier PostScript gnr en lindiquant en second argument :
$ pdftops toto.pdf postscript.ps

Si le second argument est un tiret, le chier PostScript ne sera pas gnr mais sera afch sur la sortie standard, ce qui permet dutiliser un tuyau, par exemple pour limprimer sans crer de chier temporaire :
$ pdftops toto.pdf - | lpr -P speedy

Si lon utilise une imprimante capable dimprimer en recto-verso mais qui nest pas congure pour le faire par dfaut, loption -duplex permet de gnrer un chier PostScript contenant la directive dactivation de limpression en recto-verso :
$ pdftops -duplex toto.pdf

Enn, il faut signaler lexistence dune commande pdf2ps qui convertit galement un chier PDF en chier PostScript mais qui gnre des chiers PostScript plus volumineux et de moins bonne qualit que pdftops.

219

11
Connexion distance

multi-utilisateur ce qui est le cas dUNIX depuis sa premire version permet plusieurs personnes dutiliser le mme ordinateur simultanment, gnralement au moyen dun interprteur de commandes. Cela est possible en raccordant plusieurs terminaux lordinateur, en sy connectant via le rseau tlphonique sil dispose dun modem ou encore travers un rseau informatique tel que lInternet. Cest cette dernire mthode qui est de loin la plus utilise aujourdhui. La connexion distance travers un rseau informatique pose le problme de la condentialit des communications. Il est en effet possible de les espionner soit en mesurant le champ lectromagntique gnr par le courant circulant dans les cbles lectriques 1 soit en interceptant directement les communications au niveau des quipements lectroniques dinterconnexion du rseau informatique. Autrefois, on utilisait pour se connecter un ordinateur distant et y lancer un interprteur de commandes la commande telnet (pour teletype network). Malheureusement, les informations transmises et reues par telnet le sont en clair, cest--dire sans aucun traitement permettant dassurer un minimum de condentialit. Son utilisation est donc tombe en dsutude, sauf pour certains tests qui ne ncessitent pas la transmission dinformations condentielles. De mme, la commande ftp (pour le transfer protocol) tait utilise, comme son nom lindique, pour transfrer des chiers dun ordinateur un autre. Elle lest toujours aujourdhui mais uniquement pour accder des serveurs de chiers anonymes, dont lutilisation ne ncessite pas la transmission dinformations condentielles. De nos jours, tout type de communication avec un systme informatique distant implique lutilisation du chiffrement ds lors quun minimum de condentialit est ncessaire.
N SYSTME D EXPLOITATION
http://fr.wikipedia.org/wiki/Telnet http://en.wikipedia.org/wiki/Ftp http://en.wikipedia.org/wiki/Ftp#Anonymous_FTP

1. Ce qui nest pas possible avec des cbles en bre optique.

221

Chapitre 11. Connexion distance

11.1

Le chiffrement

Le chiffrement a pour but de protger des donnes lors de leur transmission par un canal susceptible dtre espionn. Les donnes transmettre, quon appelle message clair, sont tranformes en donnes incomprhensibles, quon appelle message chiffr, au moyen dun algorithme. On notera : m le message clair ; c le message chiffr ; f lalgorithme de chiffrement ; C f la fonction de chiffrement associe lalgorithme f ; D f la fonction de dchiffrement associe lalgorithme f . On a donc : C f (m) = c Le message chiffr peut alors tre transmis son destinataire. Pour retrouver le message clair, celui-ci appliquera au message chiffr la fonction de dchiffrement : D f (c) = m propos du chiffrement, on entend souvent les termes cryptage , crypter , voire encryption ou dcryption . Ce sont tous des termes incorrects, qui nexistent pas en franais. On parle de chiffrement pour laction de chiffrer un message clair et de dchiffrement pour laction de dchiffrer un message chiffr. En revanche, les termes dcryptage et dcrypter existent et correspondent au fait de retrouver tout ou partie du message clair partir du message chiffr sans utiliser la fonction de dchiffrement. Donc le destinataire lgitime dun message chiffr le dchiffre alors quun espion le dcrypte. Lalgorithme seul ne suft pas assurer la scurit du chiffrement. Si ctait le cas, il faudrait quil soit secret, uniquement connu des personnes ayant lutiliser. Or lexprience prouve que les algorithmes de chiffrement secrets ne le restent pas longtemps. Les bons algorithmes de chiffrement sont donc publics, ce qui permet aux spcialistes de les tudier et de conrmer ou dinrmer leur qualit. Il est donc ncessaire dintroduire de la variabilit dans les algorithmes. Pour cela, on utilise une cl, qui est un paramtre de lalgorithme. Il sagit dune longue chane de caractres ou dun nombre trs grand. La fonction de chiffrement sera donc applique au message clair et la cl. Le chiffrement dun mme message clair avec deux cls diffrentes donnera deux messages chiffrs totalement diffrents, compliquant un ventuel dcryptage. Il existe deux grandes familles dalgorithmes de chiffrement, selon la nature de la cl utilise : le chiffrement symtrique et le chiffrement asymtrique. Le lecteur curieux pourra se reporter aux ouvrages suivants de la bibliographie pour approfondir ses connaissances : 222

11.1. Le chiffrement Applied Cryptography [55] Handbook of Applied Cryptography [54]


http://fr.wikipedia.org/wiki/Chiffrement

11.1.1

Chiffrement symtrique

Lalgorithme de chiffrement symtrique s utilise la mme cl k pour la fonction de chiffrement C s et la fonction de dchiffrement D s : C s (m, k) = c D s (c, k) = m

Lexpditeur et le destinataire du message chiffr doivent donc tous deux disposer de cette cl. Le problme initial de la transmission du message se retrouve alors transpos celui de la transmission de la cl. Nanmoins, une mme cl peut tre utilise pour chiffrer et dchiffrer de nombreux messages. Les algorithmes symtriques utilisent des cls de petite taille (on considre gnralement quune cl dau moins 128 bits est sre compte tenu des moyens de calcul actuels) et sont plutt rapides.
http://fr.wikipedia.org/wiki/Cryptographie_symtrique

11.1.2

Chiffrement asymtrique

Lalgorithme de chiffrement asymtrique a utilise un couple de cls. Ces cls sont gnres ensemble (elles doivent ltre car elles entretiennent des relations mathmatiques entre elles) par le destinataire du message. La cl publique kc peut, comme son nom lindique, tre diffuse publiquement sans risque de scurit. La cl publique du destinataire sert au chiffrement du message par son expditeur : Ca (m, kc ) = c La cl prive kd doit, au contraire, rester seulement connue de son propritaire, le destinataire du message, et sert son dchiffrement : Da (c, kd ) = m Le chiffrement asymtrique rsoud le problme de transmission de la cl intrinsque au chiffrement symtrique. Nanmoins, les algorithmes asymtriques utilisent des cls de grande taille (on considre gnralement quune cl dau moins 1 024 bits est sre compte tenu des moyens de calcul actuels) et sont sensiblement plus lents que les algorithmes symtriques. Il faut par ailleurs que lexpditeur sassure au pralable que la cl publique kc est bien celle du destinataire (et non celle dun imposteur qui pourrait alors dchiffrer 223

Chapitre 11. Connexion distance les messages). cet effet, on utilise gnralement lempreinte (ngerprint en anglais) de la cl publique. Une empreinte est une chane de caractres assez courte obtenue partir de donnes plus volumineuses et permettant didentier celles-ci. Il est alors facile de vrier lempreinte de la cl publique kc auprs de son propritaire.
http://fr.wikipedia.org/wiki/Cryptographie_asymtrique

11.1.3

Chiffrement hybride

En pratique, les logiciels de chiffrement utilisent un mlange de chiffrement symtrique et de chiffrement asymtrique. Le destinataire du message dispose dun couple de cls asymtriques (kc , kd ). Lexpditeur gnre une cl symtrique alatoire k et chiffre le message m avec : C s (m, k) = c Il chiffre galement la cl symtrique avec la cl publique du destinataire : Ca (k, kc ) = k Lensemble (c, k ) est envoy au destinataire. Celui-ci commence par dchiffrer la cl symtrique au moyen de sa cl prive : Da (k , kd ) = k Ce qui lui permet nalement de dchiffrer le message : D s (c, k) = m Cette faon de combiner chiffrements symtrique et asymtrique permet donc de proter de leurs avantages respectifs, savoir la rapidit de traitement du chiffrement symtrique et la possibilit de diffusion de la cl publique du chiffrement asymtrique. Ce dernier ntant utilis que pour chiffrer la cl symtrique, sa lenteur nest pas un problme.
http://fr.wikipedia.org/wiki/Cryptographie_hybride

11.2

La commande ssh

La commande ssh (pour secure shell) permet de lancer un interprteur de commandes sur un ordinateur distant depuis lordinateur sur lequel on est physiquement connect. La communication entre les deux ordinateurs se fait au moyen dun systme de chiffrement hybride. Le lecteur curieux pourra se reporter aux ouvrages suivants de la bibliographie pour approfondir ses connaissances : 224

11.2. La commande ssh SSH, The Secure Shell : The Denitive Guide [13] Pro OpenSSH [26]
http://www.openssh.com/ http://fr.wikipedia.org/wiki/Secure_Shell

11.2.1

Connexion simple

An de clarier les exemples qui suivent, il y sera fait usage de linvite exacte de lenvironnement informatique de lENSTA ParisTech au lieu de linvite simplie $. Dans ces exemples, nous nous connecterons lordinateur olive01 depuis lordinateur cafe01. Par ailleurs, les commandes et interactions devant tre saisies par lutilisateur chaque tape seront indiques en gras. Pour se connecter un ordinateur distant, il faut indiquer son nom en argument de la commande ssh :
babafou@cafe01:/home/prof/babafou>ssh olive01 The authenticity of host olive01 (147.250.9.11) cant be established. RSA key fingerprint is 2e:b2:82:fd:db:11:f1:35:f4:c0:5e:ac:8d:7c:f4:e8. Are you sure you want to continue connecting (yes/no)?

Lorsquon se connecte un ordinateur distant pour la premire fois, ssh afche lempreinte de sa cl publique (voir le paragraphe 11.1.2 page 223). An de vrier la validit de cette empreinte, on peut se connecter physiquement sur lordinateur distant, si cela est possible, et utiliser la commande ssh-keygen, dont loption -l permet dafcher lempreinte de la cl publique dont le chemin daccs est indiqu par loption -f (ce chemin daccs peut varier en fonction du systme UNIX utilis) :
babafou@olive01:/home/prof/babafou>ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key 2048 2e:b2:82:fd:db:11:f1:35:f4:c0:5e:ac:8d:7c:f4:e8 /etc/ssh/ssh_host_rsa_key.pub

On peut constater que lempreinte afche par ssh-keygen est bien la mme que celle afche par ssh. Nanmoins, bien souvent, il nest pas possible ou pas pratique de se connecter physiquement sur un ordinateur dans le seul but dafcher lempreinte de sa cl publique. Si lon ne dispose pas dune autre mthode pour vrier cette empreinte (par exemple, une liste dempreintes fournie par ladministrateur du systme), on fait gnralement limpasse sur cette vrication. Revenons notre connexion distance. Pour poursuivre la procdure aprs lafchage par ssh de lempreinte de la cl publique de lordinateur distant, il faut taper yes en toutes lettres (ou no si lon souhaite linterrompre) : 225

Chapitre 11. Connexion distance

babafou@cafe01:/home/prof/babafou>ssh olive01 The authenticity of host olive01 (147.250.9.11) cant be established. RSA key fingerprint is 2e:b2:82:fd:db:11:f1:35:f4:c0:5e:ac:8d:7c:f4:e8. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added olive01,147.250.9.11 (RSA) to the list of known hosts. babafou@olive01s password:

Cette tape nest ncessaire que lors de la premire connexion un ordinateur distant. En effet, ssh conserve les cls publiques des ordinateurs sur lesquels on sest dj connect dans le chier ~/.ssh/known_hosts et ne demande pas conrmation si la cl publique de lordinateur auquel on se connecte gure dj dans ce chier. En revanche, si jamais elle changeait (en raison dune rinstallation du systme, par exemple), il serait demand nouveau conrmation. Aprs saisie du mot de passe (qui ne safche pas), on se retrouve avec un interprteur de commande fonctionnant sur lordinateur distant, comme le prouve son invite :
babafou@cafe01:/home/prof/babafou>ssh olive01 The authenticity of host olive01 (147.250.9.11) cant be established. RSA key fingerprint is 2e:b2:82:fd:db:11:f1:35:f4:c0:5e:ac:8d:7c:f4:e8. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added olive01,147.250.9.11 (RSA) to the list of known hosts. babafou@olive01s password: mot_de_passe babafou@olive01:/home/prof/babafou>

Si linvite de linterprteur de commandes nafche pas le nom de lordinateur sur lequel il fonctionne, ou simplement si lon souhaite afcher celui-ci, on peut utiliser la commande hostname, qui afche le nom de lordinateur sur lequel on se trouve :
babafou@olive01:/home/prof/babafou>hostname olive01

On peut ensuite utiliser sur lordinateur distant toutes les commandes utilisables dans un interprteur de commandes ( lexception des logiciels graphiques, qui seront abords au pragraphe 11.2.2 page suivante). Pour quitter linterprteur de commandes sur lordinateur distant, on utilise la commande exit :
babafou@olive01:/home/prof/babafou>exit logout Connection to olive01 closed. babafou@cafe01:/home/prof/babafou>

226

11.2. La commande ssh

11.2.2

Connexion avec afchage graphique dport

Il est possible grce la commande ssh dexcuter des logiciels graphiques sur un ordinateur distant en les faisant safcher sur son cran. Pour cela, il faut utiliser ssh avec loption -X lors de la connexion lordinateur distant :
$ ssh -X ordinateur

Ceci lancera un interprteur de commandes sur lordinateur distant aprs saisie du mot de passe, comme vu prcdemment. Loption -X permet en plus dutiliser la connexion chiffre entre les deux ordinateurs pour dporter lafchage des applications graphiques. Cela peut ne pas fonctionner correctement avec certains ordinateurs. Dans ce cas, on peut utiliser plutt loption -Y
$ ssh -Y ordinateur

11.2.3

Connexion avec un identiant diffrent

Il peut arriver davoir se connecter sur un ordinateur distant avec un identiant diffrent de celui utilis sur lordinateur de dpart, parce que les rgles dattribution des identiants sont diffrentes ici et l-bas ou tout simplement parce quon emprunte le compte de quelquun pour se connecter ailleurs. Dans ce cas, il faut utiliser la commande ssh avec loption -l suivie de lidentiant sur lordinateur distant :
$ ssh -l identifiant ordinateur

On peut aussi utiliser, sans loption -l, une syntaxe ressemblant une adresse lectronique :
$ ssh identifiant@ordinateur

11.2.4

Connexion depuis lextrieur de lENSTA ParisTech

La connexion depuis lextrieur de lENSTA ParisTech vers un ordinateur de son rseau interne ncessite lutilisation dune procdure particulire, en raison dun dispositif de scurit contrlant les connexions en entre de lcole. Pour cela, on utilise la commande ssh : 227

Chapitre 11. Connexion distance 1. avec loption -t (dont lexplication est trop technique pour un cours dintroduction linformatique) ; 2. avec loption -l suivie de son identiant dans lenvironnement informatique de lENSTA ParisTech ; 3. en indiquant relais.ensta.fr comme premier argument (cet ordinateur est le dispositif de scurit indiqu auparavant) ; 4. en indiquant le nom de lordinateur sur lequel on souhaite se connecter comme second argument. Ce qui donne cette commande :
$ ssh -t -l identifiant relais.ensta.fr ordinateur

Le mot de passe de lutilisateur sera demand deux reprises, la premire fois par relais.ensta.fr, la seconde par lordinateur sur lequel on souhaite se connecter.

11.3

La commande scp

La commande scp (pour secure copy) permet de copier un chier dun ordinateur un autre de manire chiffre, en utilisant le mme canal de communication que la commande ssh. Pour copier un chier fichier sur un ordinateur distant ordinateur, on utilise :
$ scp fichier ordinateur:

Le deux-points coll au nom de lordinateur distant est indispensable et permet didentier lequel des deux arguments de la commande scp est lordinateur distant. Si rien nest indiqu derrire ce deux-points, le chier fichier est copi sous le mme nom dans le rpertoire personnel de lutilisateur sur lordinateur distant. On peut indiquer aprs le deux-points le chemin daccs sous lequel copier le chier :
$ scp fichier ordinateur:rep1/rep2

En sens inverse, on peut copier un chier depuis lordinateur distant :


$ scp ordinateur:fichier .

228

11.4. Savoir qui est connect sur un ordinateur : les commandes who et w Pour copier un chier vers ou depuis un ordinateur sur lequel on dispose dun identiant diffrent, il faut indiquer cet identiant devant le nom de lordinateur, en intercalant une arrobe @ entre les deux (loption -l de ssh a une signication diffrente pour scp) :
$ scp fichier identifiant@ordinateur:

http://fr.wikipedia.org/wiki/Secure_copy

11.4

Savoir qui est connect sur un ordinateur : les commandes who et w

La commande who permet dafcher la liste des utilisateurs qui sont connects lordinateur sur lequel on travaille :
$ who eleve babafou tty7 pts/1 2010-09-21 13:41 (:0) 2010-09-21 15:57 (cafe01.ensta.fr)

Dans lexemple prcdent, lutilisateur eleve est physiquement connect lordinateur (ce quindique le :0 entre parenthses dans la dernire colonne) alors que lutilisateur babafou est connect depuis la machine cafe01.ensta.fr, probablement au moyen de la commande ssh. Hormis pour la brivet de son nom, on lui prfre gnralement la commande w, dont lafchage est plus complet. Ainsi, dans les mmes conditions que pour lexemple prcdent, la commande w afche :
$ w 15:58:53 up USER eleve babafou TTY tty7 pts/1 2:37, :0 cafe01.ensta.fr 2 users, load average: 0,60, 0,44, 0,21 LOGIN@ 13:41 15:57 IDLE 1.00s 0.00s JCPU 1:12 0.25s PCPU WHAT 0.28s bash 0.00s w FROM

On retrouve partir de la deuxime ligne un habituel afchage en colonnes.


http://fr.wikipedia.org/wiki/Who_(Unix) http://en.wikipedia.org/wiki/W_(Unix)

229

12
Programmation

INTERPRTEUR DE COMMANDES ne permet pas seulement lexcution de commandes isoles, aussi complexes soient-elles, il dispose galement dun langage de programmation complet permettant denchaner des commandes au moyen de tests et de boucles. Les programmes peuvent tre saisis soit en ligne de commande lorsquils sont sufsamments courts soit dans un chier lorsquils sont plus longs ou quon souhaite les conserver pour les rutiliser. Il nexiste pas un seul langage de programmation mais deux. La syntaxe de celui du Bourne shell (sh) a t reprise par les Korn shell (ksh) et Bourne-again shell (bash). Celle introduite par le C shell (csh) est diffrente et a t reprise par le TENEX C shell (tcsh). Quant au Z shell (zsh), il accepte indiffremment les deux syntaxes. Le paragraphe 7.1 page 80 vous rappellera lhistorique des interprteurs de commandes et les relations gnalogiques quils entretiennent entre eux. Nous tudierons par la suite le langage de programmation du Bourne shell, qui est de loin le plus utilis. Le lecteur curieux pourra se reporter aux ouvrages suivants de la bibliographie pour approfondir ses connaissances : Programmation shell sous Unix/Linux [14] Classic Shell Scripting [24] Sams Teach Yourself Shell Programming in 24 Hours [28]

12.1

Pourquoi programmer ?

Il existe des situations dans lesquelles les diffrents outils syntaxiques tudis jusquici ne sont pas sufsants pour exprimer laction quon souhaite accomplir. Considrons lexemple suivant : renommer dix chiers nomms toto0 jusqu toto9 (qui existent) en tata0 jusqu tata9 (qui nexistent pas). Compte tenu des similitudes entre les noms des chiers toto0 toto9 et tata0 tata9, on pense immdiatement utiliser un mtacaractre. La commande suivante conviendrait-elle ?
$ mv toto? tata?

231

Chapitre 12. Programmation Malheureusement non car les mtacaractres ne permettent de gnrer que des noms de chiers qui existent et les chiers dont le nom commence par tata nexistent pas encore. Qui plus est, la syntaxe de la commande mv permet soit de renommer un seul chier soit de dplacer plusieurs chiers mais elle ne permet pas de renommer plusieurs chiers en mme temps. Faut-il pour autant se rsoudre utiliser dix fois la commande mv pour renomer les chiers un par un ? Oui, cest la seule faon de faire. Mais il existe une mthode plus efcace que de taper dix commandes, cest dutiliser un programme. Nous verrons la solution ce problme au paragraphe 12.7.2.1 page 243.

12.2

Comment programmer ?

Comme M. Jourdain disait de la prose sans quil le st, nous programmons depuis le dbut sans le savoir. En effet, que ce soit une simple commande sans mme une option ou un argument ou bien encore un enchanement de commandes relies par des tuyaux, tout cela est dj un programme. Plus gnralement, un programme est constitu dune suite de commandes et dinstructions permettant den contrler lexcution (que nous tudierons au paragraphe 12.7 page 238).

12.2.1

Les scripts

Nanmoins, un programme est rarement saisi en ligne de commande, sauf sil est trs court et na pas besoin dtre rutilis. Le plus souvent, un programme est saisi dans un chier quon appelle un script. Par mtonymie, on appelle galement script le programme contenu dans ce chier. Les scripts en Bourne shell sont habituellement stocks dans des chiers ayant une extension .sh.

12.2.2

Excution dun script

Considrons le script suivant, stock dans le chier toto.sh :


cal date

On y retrouve deux commandes bien connues, chacune sur une ligne. La commande cal sera excute en premier, puis viendra le tour de la commande date. Un script est en effet excut ligne par ligne, de haut en bas. La n de ligne dans le chier fait ofce dappui sur la touche Enter . Pour excuter ce script, on peut lindiquer en argument de la commande sh : 232

12.2. Comment programmer ?

$ sh toto.sh

Il existe galement deux autres syntaxes spciques certains interprteurs de commandes. Avec bash, csh, tcsh et zsh, on peut faire :
$ source toto.sh

Avec bash uniquement, on peut faire :


$ . toto.sh

Mais la faon la plus commune de faire est de rajouter une ligne en tte du script :
#! /bin/sh

et de le rendre excutable :
$ chmod 755 toto.sh

Notre script toto.sh devient donc :


#! /bin/sh cal date

La ligne blanche suivant la premire ligne nest pas ncessaire mais permet de bien la sparer de la suite du script. Le script peut alors tre excut, comme expliqu au paragraphe 9.2.4 page 163, de cette faon :
$ ./toto.sh

233

Chapitre 12. Programmation La prsence des deux caractres #! au dbut du script (et qui doivent absolument tre les deux premiers caractres du script) indique UNIX que, lorsquon lexcute, il doit en fait excuter la commande dont le chemin daccs absolu suit ces deux caractres, soit ici /bin/sh, en lui passant le nom du script en argument, soit ici toto.sh, ce qui revient la premire mthode indique prcdemment pour excuter le script (puisque le chemin daccs absolu de sh est /bin/sh, ce qui est facile vrier grce aux commandes type ou which). Lespace entre #! et /bin/sh nest pas indispensable mais permet l encore de bien sparer les choses. Libre chacun dexcuter ses scripts comme bon lui semble. An de ne pas les encombrer inutilement, les prochains exemples ne contiendront pas la ligne :
#! /bin/sh

Il faudra donc la rajouter (et ne pas oublier de rendre le script excutable) si lon souhaite utiliser cette mthode.
http://en.wikipedia.org/wiki/Shebang_(Unix)

12.3

Continuation de ligne

Un script est constitu dune suite de commandes et dinstructions de contrle (que nous tudierons au paragraphe 12.7 page 238). Celles-ci gurent gnralement sur une seule ligne mais peuvent stendre sur plusieurs lignes conscutives au besoin. Pour cela, on utilise une barre oblique inverse \ en n de ligne an dindiquer que celle-ci se poursuit sur la ligne suivante. Ainsi, la commande :
ps ux | grep xeyes | grep -v grep | awk {print $2}

peut tre scinde en plusieurs lignes comme ceci :


ps ux | grep xeyes \ | grep -v grep \ | awk {print $2}

12.4

Les commentaires

Il peut tre utile dinclure dans un script des indications nen faisant pas partie mais destines clairer les personnes qui seront amenes le lire (cest souvent le cas 234

12.5. Les variables de son auteur lorsquil le relit aprs un certain temps et quil se demande ce quil a bien pu essayer de faire). Cest ce quon appelle des commentaires. Les commentaires commencent par un croisillon # et stendent jusqu la n de la ligne. Ils peuvent gurer seuls sur une ligne ou en n de ligne. Ainsi, lexemple prcdent peut tre comment de la sorte :
# obtention de la liste des identifiants des processus xeyes ps ux | grep xeyes \ | grep -v grep \ | awk {print $2} # on tablit la liste des processus # on y recherche xeyes # on en supprime grep # et on extrait la deuxime colonne

Les continuations de lignes, autrement peu utiles parce que lenchanement complet est sufsamment lisible sur une seule ligne, permettent ici de placer chaque commande de lenchanement sur sa propre ligne an de lui affecter un commentaire ddi. Par ailleurs, les commentaires sont aligns verticalement pour en faciliter la lecture.

12.5

Les variables

Une variable permet de stocker une valeur an de pouvoir lutiliser ultrieurement. L o certains langages de programmation distinguent plusieurs types de variables en fonction des valeurs quelles peuvent stocker (nombres entiers, nombres virgule ottante, chanes de caractres, etc.), linterprteur de commandes na quun seul type de variable, qui permet de stocker des chanes de caractres. Il existe trois catgories de variables : les variables spciales, dont le nom est constitu dun symbole, dun chiffre ou dune chane de caractres alphanumriques et dont la valeur est xe par linterprteur de commandes (nous avons dj tudi les variables ? et status au paragraphe 9.3.6.1 page 172, nous en tudierons dautres au paragraphe 12.8 page 245) ; les variables denvironnement, dont le nom est traditionnellement constitu de lettres majuscules et dont la valeur est soit xe dans la conguration de linterprteur de commandes soit hrite de son pre (nous avons par exemple tudi la variable denvironnement PATH au paragraphe 9.2.2 page 162) ; les variables dnies par lutilisateur, qui sont celles que nous allons tudier maintenant. Les noms des variables dnies par lutilisateur peuvent contenir des lettres (on fait la diffrence entre majuscules et minuscules), des chiffres ou des tirets bas. Ils ne 235

Chapitre 12. Programmation peuvent pas commencer par un chiffre. Les lettres majuscules tant traditionnellement rserves aux variables denvironnement, on ne les utilise gnralement pas. Une variable est cre en lui affectant une valeur, selon la syntaxe suivante :
nom=valeur

Il ne faut mettre absolument aucune espace autour du signe gal. Si la valeur contient des espaces, chacune delle doit tre prcde dune barre oblique inverse \ ou la valeur doit tre entoure par une paire de guillemets ou dapostrophes :
nom=valeur\ avec\ espaces nom="valeur avec espaces" nom=valeur avec espaces

On peut donc faire, par exemple :


var1=toto var2="titi tutu"

On accde la valeur dune variable en faisant prcder son nom dun symbole dollar $. Ainsi, on peut afcher le contenu dune variable en utilisant la commande echo :
echo $variable

Un exemple plus complexe combine plusieurs commandes relies par des tuyaux et une substitution :
pid=ps ux | grep xeyes | grep -v grep | awk {print $2} kill $pid

La substitution est trs utile pour affecter une variable la sortie standard dune commande ou dun enchanement de commandes. Un autre exemple utilise deux variables pour constituer la valeur dune autre :
pid1=33 pid2=51 pid="$pid1 $pid2"

236

12.6. Le calcul entier La valeur de la variable pid est alors :


33 51

Les choses auraient t diffrentes si lon avait utilis des apostrophes la place des guillemets :
pid1=33 pid2=51 pid=$pid1 $pid2

La valeur de la variable pid serait alors :


$pid1 $pid2

En effet, dans une expression entre guillemets, les variables prcdes dun symbole dollar sont remplaces par leur valeur. Cest dailleurs le cas gnral, sauf dans une expression entre apostrophes, qui nest pas soumise ce traitement et reste en ltat. Cest en particulier pour cela quon fait suivre la commande awk dune expression entre apostrophes. Celle-ci contenant un $2 qui est destin awk et pas linterprteur de commandes, il est ncessaire dempcher celui-ci de remplacer $2 par autre chose, voire de gnrer une erreur si cette variable nexiste pas pour lui.

12.6

Le calcul entier

Linterprteur de commandes permet de raliser des calculs sur des valeurs entires. Lexpression calculer doit tre encadre par $(( et )) :
a=10 b=$(( 166 * a + 4 )) echo $b

Une expression encadre par $(( et )) peut utiliser les oprateurs indiqus dans le tableau 12.1 page suivante. Les oprateurs *, / et % sont plus prioritaires que les oprateurs + et -. Les multiplications et les calculs des quotients et restes de divisions euclidiennes sont donc effectus avant les additions et soustractions. priorit gale, les calculs sont effectus de gauche droite. 237

Chapitre 12. Programmation addition soustraction multiplication quotient de la division euclidienne reste de la division euclidienne

+ * / %

TABLE 12.1 Oprateurs utilisables dans une expression encadre par $(( et )).

Il nest pas ncessaire de faire prcder dun symbole dollar les noms des variables apparaissant dans une expression encadre par $(( et )) mais on peut le faire si on le souhaite. Une expression encadre par $(( et )) peut contenir des espaces. Leur utilisation est recommande car elle permet de bien sparer les diffrents lments dune expression et facilite donc sa lecture.

12.7

Les instructions de contrle

Les instructions de contrle permettent dexcuter des commandes en fonction dune condition ou de les rpter plusieurs fois.

12.7.1

Les tests

Les tests permettent dexcuter diffrentes commandes en fonction dune condition. 12.7.1.1 La commande test

La commande test permet deffectuer de nombreux types de tests sur des chiers, des chanes de caractres ou des entiers. Son statut de sortie est 0 si le test est russi et 1 dans le cas contraire. La commande test sutilise suivie dune expression indiquant le test effectuer et ce quoi lappliquer, par exemple :
$ test 5 -eq 3 $ echo $? 1 $ test 5 -gt 3 $ echo $? 0

Le tableau 12.2 page suivante indique les expressions les plus utiles pouvant suivre la commande test. 238

12.7. Les instructions de contrle Expression


-d fichier -e fichier -f fichier -h fichier c1 = c2 c1 != c2 n1 -eq n2 n1 -ne n2 n1 -gt n2 n1 -ge n2 n1 -lt n2 n1 -le n2

Condition de russite si fichier existe et est un rpertoire si fichier existe (quel que soit son type) si fichier existe et est un chier ordinaire si fichier existe et est un lien symbolique si les chanes de caractres c1 et c2 sont identiques si les chanes de caractres c1 et c2 sont diffrentes si les entiers n1 et n2 sont gaux si les entiers n1 et n2 sont diffrents si lentier n1 est strictement suprieur lentier n2 si lentier n1 est suprieur ou gal lentier n2 si lentier n1 est strictement infrieur lentier n2 si lentier n1 est infrieur ou gal lentier n2

TABLE 12.2 Expressions les plus utiles pouvant suivre la commande test.

On peut nier le sens dune expression en la faisant prcder dun point dexclamation ! :

$ test 5 -eq 3 $ echo $? 1 $ test ! 5 -eq 3 $ echo $? 0

On peut galement combiner deux expressions avec -a (pour and, la combinaison est vraie si les deux expressions sont vraies et fausse dans les autres cas) ou -o (pour or, la combinaison est vraie si lune des deux expression est vraie et fausse si les deux sont fausses) :

$ test 5 -gt 3 -a 2 -lt 7 $ echo $? 0 $ test 5 -gt 3 -a 2 -gt 7 $ echo $? 1

239

Chapitre 12. Programmation

$ test 5 -gt 3 -o 2 -gt 7 $ echo $? 0 $ test 3 -gt 5 -o 2 -gt 7 $ echo $? 1

Enn, la commande test peut galement tre utilise sous une forme particulire, en nindiquant que lexpression entre crochets. Ainsi, le premier exemple peut galement scrire ainsi :
$ [ 5 -eq 3 ] $ echo $? 1 $ [ 5 -gt 3 ] $ echo $? 0

Lespace aprs le crochet ouvrant et lespace avant le crochet fermant sont obligatoires. Cette faon dcrire les tests est la plus utilise dans les scripts.
http://fr.wikipedia.org/wiki/Test_(Unix)

12.7.1.2

Le test if

Le test if permet, si le statut de sortie dune commande qui sert de condition est nul, dexcuter un bloc de commandes :
if [ -f toto ] then echo Le fichier toto existe, on le supprime. rm toto fi

Linstruction if est suivie de la commande tester. Si son statut de sortie est nul, le bloc de commandes compris entre les mots cls then et fi est excut. Remarquez que le bloc de commandes est indent. Lindentation consiste dcaler chaque ligne vers la droite en ajoutant quelques espaces (combien ? cest une affaire de got personnel mais trois espaces reprsentent une indentation raisonnable) au dbut an de faire apparatre la structure du script. Lindentation est syntaxiquement inutile 240

12.7. Les instructions de contrle pour linterprteur de commandes mais indispensable au confort de lecture et une comprhension rapide de la structure du script par des personnes. Une indentation systmatique et cohrente est donc plus que recommande. Lorsque la condition nest pas remplie, il est possible dexcuter un autre bloc de commandes, quon ajoute la suite du premier, prcd de linstruction else. Linstruction fi termine lensemble :
if [ -f toto ] then echo Le fichier toto existe, on le supprime. rm toto else echo Le fichier toto n\existe pas. fi

Enn, si lon souhaite tester plusieurs conditions la suite et excuter un bloc de commandes pour la premire qui sera vrie, on peut utiliser linstruction elif (qui est la contraction de else et de if) :
if [ -f toto ] then echo Le fichier toto existe, on le supprime. rm toto elif [ -f tata ] then echo Le fichier tata existe, on le supprime. rm tata elif [ -f titi ] then echo Le fichier titi existe, on le supprime. rm titi else echo Aucun des fichiers toto, tata et titi n\existe. fi

La prsence de linstruction else et du bloc correspondant est facultative. 12.7.1.3 Le test case

Lorsquune chane de caractres est tester pour savoir si elle appartient un ensemble de valeurs, on peut bien entendu utiliser un test if suivi de plusieurs elif mais il existe un test case dont lutilisation est plus lgante dans ce cas particulier : 241

Chapitre 12. Programmation

case $variable in toto ) echo la variable contient toto ;; tata ) echo la variable contient tata ;; titi ) echo la variable contient titi ;; esac

Linstruction case est suivie de la chane de caractres tester (qui est souvent la valeur dune variable mais qui peut galement tre le rsultat dune substitution de commande, voir le paragraphe 9.4.6 page 183) puis du mot cl in. On indique ensuite la premire valeur tester par rapport cette chane de caractres, suivie dune parenthse fermante ) (lespace prcdent la parenthse nest pas obligatoire). Si la valeur correspond, les commandes qui suivent sont excutes, jusquau double point-virgule ;; qui les termine. Ceci est rpt pour chaque chane de caractres tester. Lindentation nest pas obligatoire mais nanmoins recommande. Enn, le tout se termine par le mot cl esac. Si les mmes commandes sont excuter pour plusieurs valeurs, on peut regrouper celles-ci au moyen du caractre | :

case $variable in toto | tata ) echo la variable contient toto ou tata ;; titi ) echo la variable contient titi ;; esac

Enn, il est possible dutiliser les mmes mtacaractres que ceux tudis au paragraphe 8.4 page 122 pour indiquer les valeurs tester, la diffrence prs que ceux-ci sappliquent alors des chanes de caractres et pas des noms de chiers : 242

12.7. Les instructions de contrle

case $variable in [0-9]* ) echo la variable commence par un chiffre ;; [A-Z]* ) echo la variable commence par une lettre majuscule ;; [a-z]* ) echo la variable commence par une lettre minuscule ;; esac

12.7.2

Les boucles

Les boucles permettent de rpter des commandes plusieurs fois. 12.7.2.1 La boucle for

La boucle for permet dattribuer successivement chaque valeur dune liste une variable et, pour chaque valeur, dexcuter un bloc de commandes. Cest ainsi que nous allons rsoudre le problme que nous nous tions pos au paragraphe 12.1 page 231 :
for i in 0 1 2 3 4 5 6 7 8 9 do mv toto$i tata$i done

Linstruction for est suivie du nom de la variable utiliser, qui est cre cette occasion, puis du mot cl in et de la liste de valeurs attribuer successivement la variable. Le bloc de commandes excuter pour chaque valeur de la liste est compris entre les mots cls do et done. Lindentation nest pas obligatoire mais nanmoins recommande. Dans notre exemple, la variable i va prendre successivement les valeurs de 0 9. Compte tenu de lutilisation de la valeur de cette variable dans le bloc de la boucle for, la commande suivante sera excute lors de la premire itration (i ayant la valeur 0) :
mv toto0 tata0

243

Chapitre 12. Programmation Et ainsi de suite. Si le problme pos au paragraphe 12.1 page 231 avait concern le renommage des chiers toto00 jusqu toto99 en tata00 jusqu tata99, on aurait utilis deux boucles imbriques :
for i in 0 1 2 3 4 5 6 7 8 9 do for j in 0 1 2 3 4 5 6 7 8 9 do mv toto$i$j tata$i$j done done

La liste de valeurs peut galement tre gnre grce des mtacaractres :


for f in *.ps do psnup -4 $f | lpr -P imprimante done

ou une substitution de commande :


for p in ps ux | grep xeyes | grep -v grep | awk {print $2} do echo on tue le processus $p kill $p done

12.7.2.2

Les boucles while et until

La boucle while permet dexcuter un bloc de commandes tant que le statut de sortie dune commande est nul :
a=0 while [ $a -lt 5 ] do echo $a a=$(( a + 1 )) done

244

12.8. Les arguments Linstruction while est suivie de la commande tester. Si son statut de sortie est nul, le bloc de commandes compris entre les mots cls do et done est excut. Lindentation nest pas obligatoire mais nanmoins recommande. Le script prcdent afchera donc :
0 1 2 3 4

Il est important de vrier formellement que la commande tester, quon appelle condition darrt, nira par avoir un statut de sortie non nul, permettant dinterrompre la boucle while. Dans le cas contraire, on bouclera linni. La boucle until permet dexcuter un bloc de commandes jusqu ce que le statut de sortie dune commande soit nul. La condition darrt est donc inverse par rapport la boucle while. Lexemple prcdent peut scrire ainsi avec une boucle until :
a=0 until [ $a -ge 5 ] do echo $a a=$(( a + 1 )) done

12.8

Les arguments

Il est possible dexcuter un script en lui indiquant des arguments :


$ ./toto.sh arg1 arg2 arg3

Dans le script, le nombre darguments est contenu dans la variable spciale # et la liste des arguments est contenue dans la variable spciale @ :
echo le script a $# arguments : for a in "$@" do echo $a done

245

Chapitre 12. Programmation Il est important de toujours utiliser la valeur de la variable spciale @ entre guillemets. Sans cela, un argument contenant des espaces sera dcompos en la suite de mots quil contient. Un exemple sera plus parlant. Le script prcdent, excut avec trois arguments dont lun contient une espace, afche ceci :
$ ./toto.sh arg1 arg2 arg2bis arg3 le script a 3 arguments : arg1 arg2 arg2bis arg3

Le deuxime argument du script, qui contient deux mots spars par une espace, a bien t trait dans sa totalit. Si lon supprime les guillemets autour de $@ dans le script, on aura ceci en excutant le script avec les mmes arguments :
$ ./toto.sh arg1 arg2 arg2bis arg3 le script a 3 arguments : arg1 arg2 arg2bis arg3

Le nombre darguments est correct car la valeur de la variable spciale # nest bien entendu pas impacte par la prsence ou labsence de guillemets autour de $@. En revanche, les deux mots du deuxime argument du script ont t spars et traits indpendamment dans la boucle for.

12.9

Les fonctions

Une fonction permet dcrire un morceau de script dans le but de lutiliser plusieurs reprises. La dnition dune fonction est de la forme :
fonction () { corps de la fonction }

246

12.9. Les fonctions La premire ligne indique le nom de la fonction, qui doit tre suivi dun couple de parenthses. Suit le corps de la fonction, qui est entour dun couple daccolades. Le corps de la fonction est constitu des commandes et des instructions permettant de raliser lobjectif de la fonction. Lindentation nest pas obligatoire mais nanmoins recommande. Une fonction doit tre dnie avant de pouvoir tre utilise. Cest pourquoi on regroupe gnralement les dnitions de fonctions en dbut de script. Pour excuter une fonction, cest--dire excuter les commandes et instructions constituant son corps, il suft dutiliser le nom de la fonction comme on le ferait avec une commande. Voici un exemple trs simple de script dnissant puis utilisant une fonction :
toto () { echo nous sommes dans la fonction toto } toto

Il est possible dexcuter une fonction en lui indiquant des arguments, de la mme faon quavec une commande. lintrieur de la fonction, le nombre et la liste des arguments sont contenus dans les mmes variables spciales que celles abordes au paragraphe 12.8 page 245 :
toto () { echo la fonction a $# arguments : for a in "$@" do echo $a done } toto arg1 arg2 arg3

Ces variables spciales ne contiennent les nombre et liste des arguments de la fonction qu lintrieur de celle-ci. En dehors de la fonction, elles contiennent les nombre et liste des arguments du script. Une fonction a galement un statut de sortie, quon peut envoyer au moyen de linstruction return : 247

Chapitre 12. Programmation

toto () { echo nous sommes dans la fonction toto return 0 } toto echo $?

Linstruction return provoque la sortie immdiate de la fonction en envoyant le statut de sortie qui la suit. Linstruction return utilise seule envoie un statut de sortie nul. Si le statut de sortie de la fonction nest pas explicitement envoy grce linstruction return, il sera gal celui de la dernire commande excute par la fonction.

12.10

Statut de sortie

Le statut de sortie dun script est envoy au moyen de la commande exit :


echo ceci est un script qui se termine bien exit 0

La commande exit provoque la sortie immdiate du script en envoyant le statut de sortie indiqu en argument. Si le statut de sortie du script nest pas explicitement envoy grce la commande exit ou si celle-ci est utilise sans argument, le statut de sortie du script sera gal celui de la dernire commande excute par le script.

12.11

Quelques conseils gnraux sur la programmation

Pour terminer cette rapide introduction la programmation avec linterprteur de commandes, il convient dindiquer quelques conseils, qui sont dailleurs valables quel que soit le langage de programmation utilis. La lisibilit dun programme est essentielle car elle facilite sa lecture et sa comprhension. cet effet, il est indispensable dutiliser une indentation systmatique pour faire apparatre la structure du programme. Des lignes blanches peuvent galement tre utilises pour sparer visuellement les diffrentes parties dun programme. Les commentaires sont importants pour claircir certaines parties du programme dont la comprhension nest pas vidente. Il ne faut pas hsiter en utiliser. 248

12.11. Quelques conseils gnraux sur la programmation Le problme se pose souvent de savoir quand tester un programme. Faut-il crire le programme en entier et le tester une fois termin (avec en hors duvre une farandole derreurs de syntaxe) ou crire le programme petit petit et le tester au fur et mesure ? La bonne mthode pour concevoir un programme est bien entendu la seconde. De manire plus dtaille, la dmarche suivre est la suivante : 1. crire un petit morceau de programme qui se suft lui-mme ; 2. tester le programme (et donc corriger les erreurs de syntaxe) et vrier sil fonctionne correctement ; si ce nest pas le cas, le corriger jusqu obtention du rsultat souhait puis reprendre ltape 1. De cette faon, vous serez certain davoir, tout moment, un programme qui fonctionne. Enn, pour nir sur une note philosophique, lorsquon programme, il faut toujours avoir lesprit ce principe fondamental : Lordinateur fait ce que vous lui dites de faire, pas ce que vous voulez quil fasse. Vous pouvez prendre un moment pour mditer...

249

Quatrime partie

Cration dun site Web

13
Formats de documents et historique de la toile

WEB (de son nom complet World Wide Web, en franais toile daraigne mondiale, toile mondiale ou tout simplement toile) est lapplication emblmatique de lInternet, tel point que beaucoup confondent ce seul service avec le rseau informatique mondial (qui en offre bien plus). Source fantastique dinformation mais aussi de dsinformation, le meilleur y ctoie souvent le pire. Certaines entreprises en restreignent dailleurs laccs leurs employs an dviter que ceux-ci ne passent trop de temps sur des sites sans rapport avec leur activit professionnelle. Toujours est-il que la toile est aujourdhui un outil indispensable et quon peut se demander comment on ferait pour vivre sans. Dans ce cours, la toile sera le prtexte la ralisation dun petit site de quelques pages, permettant la sensibilisation des lves aux formats de documents, la sparation de la structure et de laspect ainsi quau respect des normes. Les sites Web utilisent en effet deux formats de chiers spciques : HTML (Hypertext Markup Language), qui dcrit la structure logique et le contenu textuel des pages ; CSS (Cascading Style Sheets), qui dcrit laspect visuel des pages. Chaque page dun site Web correspond un chier au format HTML (on parle de page HTML). Laspect visuel de lensemble des pages dun site est contrl par un chier au format CSS (on parle de feuille de style) auquel toutes les pages HTML font rfrence. En pratique, pages HTML et feuille de style sont simplement des chiers texte dont la syntaxe sera explicite dans les chapitres suivants. Mais auparavant, il convient de sattarder sur un problme fondamental, celui des formats de documents.
E

13.1

Des formats de documents

Nous lavons rapidement vu au paragraphe 4.2 page 44, le format dun chier est la faon dont sont organises les donnes quil contient. 253

Chapitre 13. Formats de documents et historique de la toile


http://fr.wikipedia.org/wiki/Format_de_donnes

13.1.1

Formats ouverts, formats ferms

Certains formats sont dits ouverts. Un format ouvert est un format dont les spcications techniques sont publiques et sans restriction daccs ni de mise en uvre 1 . Il est donc possible quiconque le souhaite de comprendre le fonctionnement dun tel format et dcrire un logiciel lutilisant. Par opposition, les formats ferms (appels galement formats propritaires) sont des formats pour lesquels il nexiste aucune spcication technique accessible publiquement. Chaque format ferm est gnralement li un logiciel particulier, qui est souvent le seul pouvoir lexploiter. On peut donc lgitimement sinterroger sur la prennit des donnes cones des logiciels utilisant des formats ferms. En effet, la tendance actuelle est la dmatrialisation, que ce soit pour les entreprises ou pour les particuliers, ce qui implique une utilisation de plus en plus importante de chiers numriques. Ceci pose deux problmes : celui du support de stockage des donnes (pourrai-je relire mon CD-ROM, ma cl USB ou ma carte SD dans dix ans ?) ; celui du format des donnes (pourrai-je relire mon chier dans dix ans ?). Le problme du support de stockage nen est pas vraiment un compte tenu de laugmentation constante des capacits de stockage. Il suft de recopier rgulirement ses chiers sur un nouveau support. On peut par exemple faire tenir le contenu de 25 CD-ROM sur une cl USB de 16 Go, qui cote aujourdhui quelques dizaines deuros. En conservant ses chiers en double ou triple exemplaire des endroits diffrents, on est galement quasiment assur de ne pas les perdre en cas de dfaillance dun des supports ou de sinistre. Le vrai problme est celui du format des donnes, lorsquon utilise un format ferm. Mon logiciel de dans dix ans, sil existe encore, saura-t-il relire mon chier daujourdhui sans perte ou distorsion de contenu ? Faut-il envisager, comme pour le support, des conversions rgulires avec une version plus rcente du logiciel (avec le mme risque de perte ou de distorsion de contenu) ? Les logiciels en question permettant rarement de convertir automatiquement un ensemble de chiers (avec les doutes quon peut lgitimement avoir sur la qualit de la conversion), il peut sagir dun travail considrable sil faut le faire la main. Ce problme se pose beaucoup moins avec les formats ouverts, qui ne sont pas dpendants dun logiciel particulier. Par ailleurs, dans la mesure o leurs spcications techniques sont publiques, il sera toujours possible den interprter le contenu lavenir, sans perte de donnes.

1. Il sagit de la formulation exacte gurant dans le texte de la loi n 2004-575 du 21 juin 2004 pour la conance dans lconomie numrique.

254

13.1. Des formats de documents


http://fr.wikipedia.org/wiki/Format_ouvert http://fr.wikipedia.org/wiki/Format_propritaire

13.1.2

Un exemple de format ouvert : SGML

SGML (Standard Generalized Markup Language) est un cadre gnral permettant de concevoir des documents structurs. Un exemple de chier SGML permettra de mieux comprendre. Celui indiqu dans le listage 13.1 page suivante dcrit la recette du planteur. Un document SGML est un mlange de texte et de balises, qui servent indiquer la structure du document. Une balise (tag en anglais) est compose dune chane de caractres, appele lment, encadre par deux chevrons < et > qui permettent de distinguer la balise du texte du document. Les balises vont gnralement par paire, <BALISE> pour indiquer le dbut de quelque chose et </BALISE> pour indiquer sa n. On emploie galement le terme lment pour dsigner lensemble comprenant la balise de dbut, la balise de n correspondante et leur contenu. Ainsi lensemble du document gure entre <COCKTAIL> et </COCKTAIL>. lintrieur, <NOM> indique le nom du cocktail. Suivent les ingrdients ainsi que les tapes de la prparation. Les balises de n peuvent tre omises lorsque le contexte le permet. Ainsi, dans notre exemple, lutilisation de la balise <QUANTITE> dans la liste des ingrdients implique la n de la balise <INGREDIENT> qui la prcde. Un document SGML est gnralement destin tre converti en document visualisable lcran ou imprimable. Notez quil nest indiqu nulle part quelle doit tre la prsentation du document, si les ingrdients doivent gurer sous forme de liste ou de tableau, etc. Il faut bien insister sur ce point : un document SGML est dni en termes de structure, pas de prsentation. Cest ensuite au moment de la conversion quest spcie la mise en page et lon peut tout fait adopter plusieurs prsentations pour un mme document SGML. La forme peut changer, pas le fond. SGML ne dnit pas dlments particuliers comme ceux de lexemple mais permet de crer des ensembles dlments et dindiquer la faon de les agencer. Ainsi, dans notre exemple, lensemble du document doit tre inclus entre des balises <COCKTAIL> et </COCKTAIL>. Doit suivre le nom du cocktail, puis la liste des ingrdients, puis la prparation. On ne peut pas, par exemple, faire gurer un lment INGREDIENT en dehors de la liste des ingrdients gurant dans llment INGREDIENTS. La liste des lments utilisables dans un document ainsi que la faon de les agencer sont dnies dans la DTD (Document Type Denition). La DTD est stocke dans un chier texte, ici cocktail.dtd, dont le nom est indiqu par llment DOCTYPE. La forme de sa balise est diffrente des balises habituelles et elle indique galement quel est llment principal du document (ici, COCKTAIL, qui contient lensemble du document). 255

Chapitre 13. Formats de documents et historique de la toile

<!DOCTYPE COCKTAIL SYSTEM "cocktail.dtd"> <COCKTAIL> <NOM>Planteur <INGREDIENTS> <INGREDIENT>jus dorange <QUANTITE>5 dl <INGREDIENT>jus de goyave <QUANTITE>5 dl <INGREDIENT>jus dananas <QUANTITE>5 dl <INGREDIENT>rhum blanc <QUANTITE>3 dl <INGREDIENT>sirop de sucre de canne <QUANTITE>3 dl <INGREDIENT>cannelle <QUANTITE>1 bton <INGREDIENT>vanille <QUANTITE>1 gousse </INGREDIENTS> <PREPARATION> <ETAPE>mlanger les liquides <ETAPE>fendre la gousse de vanille en deux, gratter lintrieur et ajouter le tout la prparation avec la cannelle <ETAPE>laisser macrer une nuit <ETAPE>servir frais </PREPARATION> </COCKTAIL>

LISTAGE 13.1 Exemple de chier SGML.

256

13.1. Des formats de documents Confront un besoin documentaire, on peut donc utiliser une DTD permettant de concevoir des documents adquats. Si une DTD convenable nexiste pas, il est toujours possible den crer une.
http://fr.wikipedia.org/wiki/Standard_Generalized_Markup_Language http://fr.wikipedia.org/wiki/Document_Type_Definition

13.1.3

Lvolution de SGML : XML

SGML na t adopt que par de grandes entreprises ayant dimportants besoins de documentation. Sa mise en uvre est en effet assez lourde. XML (Extensible Markup Language) reprend les caractristiques de SGML et vise les rendre plus simples. Les diffrences visibles entre SGML et XML sont principalement que : les lments doivent tre crits en minuscules ; toute balise ouvrante doit tre explicitement ferme ; les balises doivent tre correctement imbriques. La fermeture explicite des balises vise simplier le travail des outils de traitement des chiers XML. En SGML, la fermeture des balises nest pas obligatoire si elle peut tre infre par le contexte. Ceci complique le travail des outils de traitement et peut parfois tre ambigu. Limbrication des balises a galement pour objectifs la simplicit et la disparition des ambiguts. Ainsi, cette imbrication, autorise en SGML :

<balise1> <balise2> ... </balise1> </balise2>

est interdite en XML. Les balises doivent tre fermes dans lordre inverse de leur ouverture :

<balise1> <balise2> ... </balise2> </balise1>

Ainsi, lexemple de cocktail, crit en XML, donne ce qui est indiqu dans le listage 13.2 page suivante.
http://www.w3.org/XML/ http://fr.wikipedia.org/wiki/Extensible_Markup_Language

257

Chapitre 13. Formats de documents et historique de la toile


<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE cocktail SYSTEM "cocktail.dtd"> <cocktail> <nom>Planteur</nom> <ingredients> <ingredient>jus dorange</ingredient> <quantite>5 dl</quantite> <ingredient>jus de goyave</ingredient> <quantite>5 dl</quantite> <ingredient>jus dananas</ingredient> <quantite>5 dl</quantite> <ingredient>rhum blanc</ingredient> <quantite>3 dl</quantite> <ingredient>sirop de sucre de canne</ingredient> <quantite>3 dl</quantite> <ingredient>cannelle</ingredient> <quantite>1 bton</quantite> <ingredient>vanille</ingredient> <quantite>1 gousse</quantite> </ingredients> <preparation> <etape>mlanger les liquides</etape> <etape>fendre la gousse de vanille en deux, gratter lintrieur et ajouter le tout la prparation avec la cannelle</etape> <etape>laisser macrer une nuit</etape> <etape>servir frais</etape> </preparation> </cocktail>

LISTAGE 13.2 Exemple de chier XML. 258

13.2. Historique de la toile

13.2

Historique de la toile

Le World Wide Web a t cr en 1989 par Tim Berners-Lee, informaticien lOrganisation europenne pour la recherche nuclaire (CERN), rapidement rejoint par lun de ses collgues, Robert Cailliau. Son but tait de partager des documents au sein du CERN sur le principe de lhypertexte, popularis par le logiciel HyperCard sur Macintosh. Dans un document hypertexte, certains mots ou groupes de mots sont rendus actifs et le fait de les slectionner mne vers un autre document. Un tel mot ou groupe de mots est ce quon appelle un hyperlien. Pour dcrire ces documents, un format ouvert spcique, HTML (Hypertext Markup Language), driv de SGML, est invent. Conu pour tre indpendant de lenvironnement dafchage des documents (systme dexploitation, logiciel, cran ou autre priphrique de sortie), HTML est encore trs dpouill et ne contient que quelques lments de structure ainsi que celui permettant de relier les documents entre eux. Nous utiliserons le terme butineur (browser en anglais) pour dsigner le logiciel dafchage des pages HTML. On utilise galement navigateur mais il faut reconnatre que butineur est bien plus bucolique et traduit mieux la promenade quon peut faire, au gr de sa curiosit, dun site un autre. En 1991, le premier serveur Web hors du CERN est cr. En 1993, le butineur NCSA Mosaic, disponible dabord pour UNIX, puis pour Windows et Macintosh, commence populariser la toile. NCSA Mosaic tend le langage HTML pour permettre dinclure des images dans les documents. Il rajoutera plus tard la gestion des formulaires. En 1994, est fond le World Wide Web Consortium (W3C), destin piloter lvolution des technologies utilises sur la toile, notamment HTML. Toujours en 1994, une partie de lquipe ayant travaill sur NCSA Mosaic cre lentreprise Mosaic Communications Corporation, renomme par la suite Netscape Communications Corporation, an de diffuser le butineur Mosaic Netscape, renomm lui aussi Netscape Navigator, et disponible pour divers UNIX, Windows et Macintosh. Anne bien charge, 1994 marque galement le dbut de laccs lInternet pour le grand public. En 1995, Microsoft, qui sest laiss distancer sur ce qui apparat dj comme un secteur stratgique, lance Internet Explorer. Il sagit tout dabord dune extension payante de Windows 95. Il sera ensuite tlchargeable gratuitement, intgr aux mises jour de Windows 95 puis nalement intgr dorigine Windows 98, valant Microsoft de nombreuses condamnations pour abus de position dominante. Dbuta alors ce quon a appel la guerre des butineurs (the browser wars) entre Internet Explorer et Netscape Navigator. Chaque logiciel ajoutant ses propres lments HTML et copiant ceux de lautre. Le tout sans aucun respect pour le principe de sparation de la structure et de laspect, ainsi que pour le processus de standardisation 259

Chapitre 13. Formats de documents et historique de la toile du W3C. Il ntait pas rare de voir en page daccueil des sites Web une mention indiquant : ce site est optimis pour telle version de tel butineur , baffouant ainsi le principe dindpendance de HTML par rapport au butineur. Cette escalade de la violence aboutira, entre autres, linvention de linfme lment BLINK pour faire clignoter du texte... Au printemps 1998, le code source de Netscape Navigator, renomm pour loccasion Mozilla, qui tait son nom de code interne, est publi sous une licence libre. Lassociation Mozilla est cre an de reprendre son dveloppement. Fin 1998, Microsoft vient bout de Netscape Communications Corporation, qui sera rachet lanne suivante par America Online (AOL). De nouvelles versions de Netscape Navigator bases sur le travail effectu sur Mozilla, seront distribues par AOL jusquau dbut 2008. La guerre des butineurs a pitin les principes fondateurs de la toile et laisse derrire elle de nombreux dialectes de HTML. Le W3C a bien tent de fdrer ce quil pouvait avec HTML 2.0, en 1995, puis HTML 3.2 (la version 3.0 nayant pas abouti), en 1997, mais qui sen soucie ? HTML 3.2 est de toute faon une hrsie, qui se fourvoie dans un mlange dlments dcrivant laspect des documents plutt que leur structure. Pourtant la spcication des feuilles de style, qui permet dappliquer de nombreuses modications daspect un document HTML bien structur, a t publie n 1996. Puis, toujours en 1997, le W3C publie la spcication de HTML 4.0, qui existe en trois versions. Deux dentre elles reprennent le ct obscur de HTML 3.2 mais la troisime renoue de manire spectaculaire avec la philosophie dorigine du Web. Avec une lgre retouche en 1999, HTML 4.01 est toujours la version actuelle utilise sur la toile aujourdhui. HTML cristallise videmment dnormes enjeux, en particuliers commerciaux, et la standardisation de HTML 5 est toujours en cours. En 1998, le W3C publie la premire spcication de XML, puis en 2000, celle de XHTML 1.0, qui est tout simplement la rcriture de HTML 4.01 la mode XML. Suivra XHTML 1.1 en 2001. Cest la version de XHTML qui est toujours en usage aujourdhui. Pendant ce temps, Mozilla volue. La version 1.0 sort en 2002. Un nouveau projet est lanc, sur la base du moteur dafchage de Mozilla, qui aboutira en 2004 au logiciel Firefox. Mozilla sera abandonn par la suite. Internet Explorer, dont le dveloppement sest beaucoup ralenti aprs sa victoire sur Netscape Navigator, commence se faire rattraper par Mozilla puis Firefox. Cest le dbut de la seconde guerre des butineurs, qui continue aujourdhui. Outre Internet Explorer et Firefox, citons galement les butineurs Chrome (dit par Google), Opera (dit par Opera Software) et Safari (dit par Apple), dont les parts de march sont actuellement plus faibles mais non ngligeables. Internet Explorer perd rgulirement des utilisateurs au prot de Firefox, considr comme plus dynamique et plus novateur. Pour preuve, la version 3.5 de Firefox, sortie le 30 juin 2009, intgrait dj une bauche substantielle de gestion de HTML 260

13.2. Historique de la toile 5. Mme si certains aspects de HTML 5 ont t intgrs dans Internet Explorer 8, il aura fallu attendre Internet Explorer 9 (sorti le 14 mars 2011) pour que Microsoft comble son retard.
http://fr.wikipedia.org/wiki/World_Wide_Web http://fr.wikipedia.org/wiki/Hypertexte http://fr.wikipedia.org/wiki/HyperCard http://fr.wikipedia.org/wiki/NCSA_Mosaic http://www.w3.org/ http://fr.wikipedia.org/wiki/World_Wide_Web_Consortium http://fr.wikipedia.org/wiki/Netscape_Navigator http://fr.wikipedia.org/wiki/Internet_Explorer http://fr.wikipedia.org/wiki/volution_de_lusage_des_navigateurs_ Internet http://www.mozilla.org/ http://fr.wikipedia.org/wiki/Mozilla_Foundation http://fr.wikipedia.org/wiki/Mozilla http://www.mozilla.com/ http://fr.wikipedia.org/wiki/Mozilla_Firefox http://www.google.com/chrome/ http://www.opera.com/ http://www.apple.com/fr/safari/ http://fr.wikipedia.org/wiki/Part_de_march_des_navigateurs_Web http://fr.wikipedia.org/wiki/HTML5 http://diveintohtml5.org/ http://html5gallery.com/ http://html5doctor.com/ http://www.webhostingsecretrevealed.com/featured-articles/ learn-html5-10-must-read-lessons/

261

14
HTML, XHTML

dun site Web peut se faire de deux faons. La plus rpandue consiste utiliser un logiciel semblable un traitement de texte. Gnralement, lutilisateur na que peu de contrle sur le code HTML gnr par ce logiciel, code qui est souvent de mauvaise qualit et rarement valide, mme si le laxisme des butineurs permet de lafcher correctement. Lautre faon de faire consiste raliser les pages la main , en concevant directement le code HTML au moyen dun diteur de texte. Cest videmment cette seconde approche que nous allons utiliser, puisquelle permet de matriser totalement le code HTML et sa conformit. Cest galement un prtexte lutilisation dun diteur de texte ainsi qu la mise en pratique des notions tudies jusquici. Les pages seront ralises conformment au standard XHTML 1.1 (qui correspond HTML 4.01 dbarrass de ses lments superus et crit la mode XML) et leur qualit sera systmatiquement valide grce au vricateur du W3C :
A RALISATION
http://validator.w3.org/

Ltude de lensemble des lments existant en HTML dpasse le cadre de ce cours aussi nous nous limiterons aux plus utiles. Dans la description des lments, il sera autant que possible fait rfrence la partie correspondante dans la spcication de HTML 4.01. Celle-ci tant antrieure XHTML 1.1, les lments y sont indiqus en majuscules alors quils gurent en minuscules dans ce document. Le lecteur curieux pourra se reporter aux ouvrages suivants de la bibliographie pour approfondir ses connaissances : HTML for Babies [50] HTML 4 [47] Mmento XHTML [34] HTML & XHTML : The Denitive Guide [42] HTML & XHTML Pocket Reference [45] HTML5 : Up and Running [44] Russir son site web avec XHTML et CSS [43] Premiers pas en CSS et XHTML [31] 263

Chapitre 14. HTML, XHTML XHTML et CSS [48] HTML5 et CSS3 [38] HTML5 et CSS3 [49] Sams Teach Yourself HTML and CSS in 24 Hours [39] HTML & CSS : The Good Parts [36] HTML5 & CSS3 [37]

http://www.w3.org/html/ http://fr.wikipedia.org/wiki/Hypertext_Markup_Language http://fr.wikipedia.org/wiki/Extensible_HyperText_Markup_Language http://fr.wikibooks.org/wiki/Le_langage_HTML http://htmlhelp.com/ http://w3schools.com/

14.1

Structure gnrale dune page XHTML

Une page XHTML minimale doit respecter la structure suivante :


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <!-- ici se trouve len-tte du document --> </head> <body> <!-- ici se trouve le corps du document --> </body> </html>

De manire dtaille : 264

14.1. Structure gnrale dune page XHTML la ligne 1 est la dclaration XML du document, qui indique la version de XML utilise ainsi que le codage du document ; les lignes 3, 4 et 5 (il sagit dune seule balise rpartie sur plusieurs lignes pour en amliorer la lisibilit) indiquent la version de XHTML utilise ainsi que lemplacement o lon peut tlcharger la DTD correspondante ; la ligne 7 dbute le document proprement dit par la balise <html> ; len-tte du document (voir le paragraphe 14.1.1) se trouve entre les balises <head> et </head> (lignes 9 13) ; le corps du document (voir le paragraphe 14.1.2 page suivante) se trouve entre les balises <body> et </body> (lignes 15 19) ; enn, le document se termine la ligne 21 par la balise </html>, qui ferme celle ouverte la ligne 7. loccasion, vous aurez remarqu que les commentaires en HTML sont dlimits par <!-- et -->. Ils peuvent stendre sur plusieurs lignes. Vous aurez galement remarqu que la balise ouvrante de llment html est accompagne de deux attributs. Un attribut modie ou complte la signication dun lment. Les attributs sont placs dans la balise ouvrante entre le nom de llment et le chevron > qui marque la n de la balise et sont de la forme nom="valeur". Les guillemets sont obligatoires. Le premier attribut est spar de llment par une espace et les attributs sont galement spars entre eux par des espaces. Ici, llment html a deux attributs. Lattribut xmlns indique lespace de nommage (notion qui ne sera pas aborde) utilis. Lattribut xml:lang indique le code ISO 639 de la langue utilise dans le document (fr pour le franais, en pour langlais, etc.). Lattribut xml:lang sera tudi plus en dtail au paragraphe 14.9 page 279.
http://www.w3.org/TR/html401/struct/global.html http://www.w3.org/TR/html401/intro/sgmltut.html#h-3.2.4

14.1.1

Len-tte

Len-tte est dlimit par les balises <head> et </head>. Il doit obligatoirement contenir le titre du document, entre les balises <title> et </title>, qui apparatra dans la barre de titre de la fentre du butineur :
<title>Ceci est le titre de la page</title>

Il peut galement contenir un ou plusieurs lments meta. Celui-ci est utilis pour donner des informations supplmentaires sur le document (auteur, liste de mots cls, etc.). On lutilise souvent pour indiquer le codage du document. Ceci fait double emploi avec la dclaration XML mais est ncessaire pour certains butineurs : 265

Chapitre 14. HTML, XHTML

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

Notez que llment meta na ni balise douverture ni balise de fermeture. Il ne sagit en effet pas dun lment entourant du texte destin apparatre quelque part. Un tel lment est dit vide. Les balises des lments vides scrivent avec une barre oblique / juste avant le chevron > de fermeture de la balise. Les lments vides sont utiliss soit pour indiquer des structures trs simples (nous en verrons par la suite) soit, lorsquils en ont, uniquement pour leurs attributs. Lordre dapparition des lments dans len-tte est sans importance. Un en-tte minimal contient donc :
<head> <title>Ceci est le titre de la page</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> </head>

http://www.w3.org/TR/html401/struct/global.html#h-7.4

14.1.2

Le corps

Le corps est dlimit par les balises <body> et </body>. Il peut contenir lensemble des lments que nous allons tudier par la suite.
http://www.w3.org/TR/html401/struct/global.html#edef-BODY

14.2

Nommage et emplacement des chiers

Chaque page XHTML doit tre stocke dans un chier ayant lextension .html. Par convention, an de pouvoir tre accessibles grce des URL de la forme :
http://www.ensta-paristech.fr/~identifiant/fichier.html

ces chiers doivent tre placs dans un rpertoire public_html situ dans le rpertoire personnel de lutilisateur. Ainsi, lURL ci-dessus permettra daccder au chier ~/public_html/fichier.html de lutilisateur identifiant. De mme, celui de ces chiers qui fait ofce de page daccueil doit sappeler index.html an dtre accessible simplement au moyen de lURL :
http://www.ensta-paristech.fr/~identifiant/

cest--dire sans indiquer de nom de chier. 266

14.3. Au sujet des exemples qui suivent

14.3

Au sujet des exemples qui suivent

Chacun des exemples qui vont suivre sera suppos gurer dans le corps (ne contenant que lexemple en question) dune page XHTML conforme la structure indique prcdemment. Chaque exemple sera immdiatement suivi du rendu graphique que la page complte donne dans Firefox 6.0.

14.4
14.4.1

Les lments usuels


Les lments de titres h1, h2, h3, h4, h5 et h6

Les lments h1, h2, h3, h4, h5 et h6 (pour heading) permettent de dnir des titres. On utilise h1 pour les titres de premier niveau, h2 pour les titres de deuxime niveau et ainsi de suite :
<h1>Titre de premier niveau</h1> <!-- ici on peut mettre un texte dintroduction --> <h2>Titre de deuxime niveau</h2> <!-- texte --> <h2>Titre de deuxime niveau</h2> <!-- texte -->

267

Chapitre 14. HTML, XHTML Un titre de niveau infrieur ne peut suivre quun titre de niveau immdiatement suprieur. En dautres termes, on ne peut pas avoir un titre en h3 aprs un titre en h1. De mme, le premier titre dun document doit tre un h1. Les titres sont habituellement afchs en gras et avec des caractres de taille dcroissante de h1 h6.

http://www.w3.org/TR/html401/struct/global.html#h-7.5.5

14.4.2

Llment de paragraphe p

Llment p permet de dlimiter un paragraphe :

<p> Ceci est un paragraphe. Les paragraphes sont la base de quasiment tous les documents HTML. </p> <p> Ceci est un autre paragraphe. Un document HTML peut en contenir autant que ncessaire. </p>

Un paragraphe ne peut pas contenir un autre paragraphe. Il ne peut pas contenir un titre et un titre ne peut pas le contenir. En revanche, on peut avoir : 268

14.4. Les lments usuels

<h1>Titre</h1> <p> Ceci est un paragraphe. </p> <h2>Sous-titre</h2> <p> Ceci est un paragraphe. </p>

Un document HTML ne peut pas contenir de texte isol. Tout texte doit tre contenu dans quelque chose, titre, paragraphe ou dautres lments non encore tudis. Les espaces et retours la ligne sont ignors. ce sujet, remarquez comment sont disposes les balises dans lexemple prcdent. Celles des titres les encadrent sur la mme ligne, parce quun titre est gnralement court. Celles des paragraphes sont chacune sur une ligne avant et aprs le paragraphe, parce quun paragraphe est gnralement plus long. Rien noblige bien entendu adopter ce genre de prsentation mais elle facilite la lecture du document, de mme que les lignes blanches sparant les diffrents blocs.
http://www.w3.org/TR/html401/struct/text.html#edef-P

269

Chapitre 14. HTML, XHTML

14.4.3

Llment de let hr

Llment hr (pour horizontal rule) insre une ligne quon appelle en typographie un let horizontale. Il sagit dun lment vide dans la mesure o il nencadre rien du tout mais gure un endroit prcis :
<p> Ceci est un paragraphe. </p> <hr/> <p> Ceci est un paragraphe. </p>

http://www.w3.org/TR/html401/present/graphics.html#edef-HR

14.4.4

Llment de retour la ligne br

Llment vide br (pour break) gnre un retour la ligne :


<p> rage ! dsespoir ! vieillesse ennemie ! <br/> Nai-je donc tant vcu que pour cette infamie ? </p>

270

14.4. Les lments usuels


http://www.w3.org/TR/html401/struct/text.html#edef-BR

14.4.5

Les lments textuels abbr, acronym, cite, code, dfn, em, kbd, samp, strong et var

Ces lments sont utiliss pour diffrencier des parties du texte : abbr (pour abbreviation) sert indiquer une abrviation ; acronym sert indiquer un acronyme ; cite sert indiquer une citation ; code sert indiquer un fragment de code informatique ; dfn sert indiquer une dnition ; em (pour emphasis) sert mettre en valeur ; kbd (pour keyboard) sert indiquer ce qui doit tre saisi au clavier ; samp (pour sample) sert indiquer un exemple de rsultat ; strong sert mettre en valeur de manire plus forte que em ; var sert indiquer le nom dune variable ou dun argument dans un exemple informatique. Certains de ces lments modient laspect du texte (ce qui peut varier en fonction du butineur utilis), dautres nont quune valeur structurelle :
<p> <abbr>abbr</abbr> normal <acronym>acronym</acronym> normal <cite>cite</cite> normal <code>code</code> normal <dfn>dfn</dfn> normal <em>em</em> normal <kbd>kbd</kbd> normal <samp>samp</samp> normal <strong>strong</strong> normal <var>var</var> normal </p>

http://www.w3.org/TR/html401/struct/text.html#h-9.2.1

14.4.6

Les lments visuels b, i et tt

Ces lments sont utiliser avec parcimonie parce quils ne dcrivent pas la structure mais laspect du document : 271

Chapitre 14. HTML, XHTML le texte contenu dans llment b est mis en gras ; le texte contenu dans llment i est mis en italique ; le texte contenu dans llment tt est mis dans une police chasse xe.
<p> normal <b>gras</b> <i>italique</i> <tt>chasse fixe</tt> </p>

http://www.w3.org/TR/html401/present/graphics.html#h-15.2.1

14.4.7

Les lments infrieur sub et suprieur sup

Les lments sub et sup servent respectivement mettre leur contenu en caractres infrieurs et suprieurs (qui sont les quivalents typographiques des indices et des exposants) :
<p> H<sub>2</sub>O </p> <p> En franais, on crit 1<sup>er</sup>, 1<sup>re</sup>, 2<sup>e</sup>, etc. </p>

http://www.w3.org/TR/html401/struct/text.html#h-9.2.3

272

14.5. Llment dhyperlien a

14.4.8

Les entits

Les balises tant dlimites par des chevrons < et >, on ne peut pas utiliser ces caractres directement dans un document HTML. Il faut reprsenter chacun deux par une entit. Une entit est compose dune esperluette & suivie dun code reprsentant le caractre afcher suivi dun point-virgule ;. Lutilisation du caractre & pour introduire les entits rend galement ncessaire lutilisation dune entit pour le reprsenter. En revanche, le point-virgule peut tre utilis librement. En pratique, on utilise : &lt; (lower than) pour reprsenter < ; &gt; (greater than) pour reprsenter > ; &amp; (ampersand) pour reprsenter &.
<p> En HTML, les balises sont dlimites par <code>&lt;</code> et <code>&gt;</code>. </p> <p> Pour reprsenter ces caractres, on utilise les entits <code>&amp;lt;</code> et <code>&amp;gt;</code>. </p>

http://www.w3.org/TR/html401/charset.html#h-5.3.2

14.5

Llment dhyperlien a

La possibilit de relier des documents au moyen dhyperliens est la raison dtre de la toile. Pour crer un hyperlien vers un autre document, on utilise llment a (pour anchor, ancre), entourant le texte de lhyperlien. Il faut obligatoirement indiquer la destination de celui-ci dans lattribut href. Celle-ci peut tre un chier du mme site, auquel cas on indique simplement son chemin daccs, ou une page dun site distant, auquel cas on indique son URL : 273

Chapitre 14. HTML, XHTML

<p> Pour plus dinformations, vous pouvez consulter la <a href="liste-des-cours.html">liste des cours</a> ou visiter le <a href="http://www.ensta-paristech.fr/">site de lENSTA ParisTech</a>. </p>

http://www.w3.org/TR/html401/struct/links.html#edef-A

14.6
img.

Llment dinsertion dimage img

An dgayer les documents, on peut y insrer des images au moyen de llment Il sagit dun lment vide dans la mesure o il nencadre rien du tout mais gure un endroit prcis. Il doit obligatoirement tre utilis avec les attributs src pour indiquer le chemin daccs ou lURL du chier contenant limage insrer et alt pour indiquer un texte de remplacement. Celui-ci est destin tre utilis la place de limage si celle-ci nest pas approprie. Par exemple, les aveugles disposent de logiciels capable de lire le texte des pages et le contenu de lattribut alt des lments img au moyen dun synthtiseur vocal. Par convention, an de le diffrencier du texte normal des pages, on a lhabitude de placer le texte de lattribut alt entre crochets. Llment img peut gurer tout endroit o lon peut mettre du texte. Il ne doit pas tre utilis seul. Si lon souhaite une image isole, on peut par exemple linclure dans un paragraphe :
<p> La cathdrale de Beauvais possde le chur gothique le plus haut du monde. </p> <p> <img src="cathedrale-de-beauvais.jpg" alt="[Photo de la cathdrale de Beauvais]"/> </p>

274

14.7. Les listes

Attention ne pas utiliser des images tort et travers. Certains sites utilisent en effet de nombreuses images ne contenant en fait que du texte uniquement an de pouvoir contrler la mise en page. Le problme de cette approche est que le contenu des pages est alors de largeur xe au lieu de sadapter la largeur de la fentre, ce qui peut se rvler gnant sur de petits crans comme ceux des tlphones mobiles. Ceci empche galement une indexation correcte par les moteurs de recherche.
http://www.w3.org/TR/html401/struct/objects.html#edef-IMG

14.7

Les listes

On peut utiliser trois types de listes dans les documents. Celles-ci doivent gurer lextrieur des paragraphes. Les deux premiers types de listes sont trs semblables. Les listes encadres par llment ul (pour unordered list) prsentent chaque composant la suite dun gros point. Les listes encadres par llment ol (pour ordered list) prsentent chaque composant la suite dun numro (la numrotation est automatique). Dans ces deux types de listes, les composants sont encadrs par llment li (pour list item). Les composants contiennent du texte, voire plusieurs paragraphes (il faut alors utiliser des lments p) pour les composants trs longs. 275

Chapitre 14. HTML, XHTML

<ul> <li> premier lment </li> <li> deuxime lment </li> <li> troisime lment </li> </ul> <ol> <li> premier lment </li> <li> deuxime lment </li> <li> troisime lment </li> </ol>

Enn, les listes encadres par llment dl (pour denition list) permettent dintroduire chaque composant par du texte. Le texte dintroduction est encadr par llment dt (pour denition term) et le texte du composant par llment dd (pour denition description), ces deux lments allant videmment par paire, dans cet ordre : 276

14.8. Les tableaux

<p> La relation dgalit est : </p> <dl> <dt>rflexive</dt> <dd>quel que soit a, a = a</dd> <dt>symtrique</dt> <dd>quels que soient a et b, si a = b alors b = a</dd> <dt>transitive</dt> <dd>quels que soient a, b et c, si a = b et b = c alors a = c</dd> </dl>

http://www.w3.org/TR/html401/struct/lists.html

14.8

Les tableaux

La ralisation de tableaux dans un document HTML est trs simple. On dcrit le tableau ligne par ligne puis colonne par colonne. Le butineur soccupe de calculer largeur et hauteur en fonction du contenu du tableau. Notez que les tableaux ne doivent pas gurer lintrieur de paragraphes ou de listes. Voyons un exemple simple : 277

Chapitre 14. HTML, XHTML

<table border="1"> <tr> <th>Nom</th> <tr> <td>Export</td> <tr> <td>Pastis</td> </table> <th>Numro</th> </tr> <td>33</td> <td>51</td> </tr> </tr> </tr>

<tr> <td>Kronenbourg</td> <td>1664</td>

Le tableau est encadr par llment table. Lattribut border indique lpaisseur du cadre et des sparations entre lignes et colonnes. Sil est absent, il ny a ni cadre ni sparations. Pendant la mise au point dun tableau, il est utile de matrialiser cadre et sparations grce cet attribut, qui pourra tre supprim dans la version nale, an de bien visualiser la structure du tableau. Chaque ligne est encadre par llment tr (pour table row). Dans chaque ligne, les colonnes sont encadres par llment th (pour table header) sil sagit dun titre ou par llment td (pour table data) sil sagit dune donne (cest le cas gnral). La majorit des butineurs afche le texte contenu dans llment th en gras et centr, an de le diffrencier des colonnes de donnes, qui ne subissent aucun traitement particulier. Les lignes dun tableau contiennent gnralement le mme nombre de colonnes. Une cellule du tableau peut stendre sur plusieurs colonnes en utilisant lattribut colspan ou sur plusieurs lignes en utilisant lattribut rowspan :
<table border="1"> <tr> <th>Un</th> <th>Deux</th> <th>Trois</th> </tr> <tr> <td colspan="2">sur deux colonnes</td> <td>bla</td> </tr> <tr> <td>bla</td> <td>bla</td> <td rowspan="2">sur deux lignes</td> </tr> <tr> <td>bla</td> <td>bla</td> </tr> </table>

278

14.9. Lattribut de langue xml:lang

caption,

Enn, il est possible daffecter une lgende un tableau au moyen de llment qui doit obligatoirement suivre la balise <table> :

<table border="1"> <caption>Tarifs du bar</caption> <tr> <td>caf</td> </table> <td>0,40 <tr> <td>Guinness</td> <td>2,00

</td> </td>

</tr> </tr>

http://www.w3.org/TR/html401/struct/tables.html

14.9

Lattribut de langue xml:lang

Lattribut xml:lang peut tre appliqu nimporte quel lment et permet dindiquer la langue de son contenu au moyen de son code ISO 639 utilis comme valeur de lattribut :
<p xml:lang="en"> We are not amused. </p>

Nous verrons au paragraphe 15.3.3.8.3 page 295 comment cet attribut peut tre utilis en conjonction avec la feuille de style.

279

Chapitre 14. HTML, XHTML


http://www.w3.org/TR/REC-xml/#sec-lang-tag http://fr.wikipedia.org/wiki/ISO_639 http://fr.wikipedia.org/wiki/Liste_des_codes_ISO_639-1

14.10

Enrichir XHTML

XHTML peut tre enrichi grce dautres DTD, pour peu que le butineur utilis soit capable dafcher les documents rsultants. MathML, par exemple, permet de dcrire des formules mathmatiques. Son afchage est correctement gr par Firefox partir de la version 3.0, Opera partir de la version 9.5 et Internet Explorer partir de la version 6.0, condition dinstaller lextension MathPlayer (qui est tlchargeable gratuitement). Pour intgrer des notations mathmatiques au moyen de MathML dans une page XHTML, il faut en modier la dclaration de DTD comme ceci :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd">

Il est alors possible dindiquer dans le corps de la page :


<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> <mrow> <munderover> <mo>&sum;</mo> <mrow> <mi>n</mi> <mo>=</mo> <mn>1</mn> </mrow> <mrow> <mo>+</mo> <mn>&infin;</mn> </mrow> </munderover> <mfrac> <mn>1</mn> <msup> <mi>n</mi> <mn>2</mn> </msup> </mfrac> <mo>=</mo> <mfrac> <msup> <mn>&pi;</mn> <mn>2</mn> </msup> <mn>6</mn> </mfrac> </mrow> </math>

280

14.10. Enrichir XHTML Ltude dtaille de MathML dpasse le cadre de ce cours. Le lecteur curieux pourra se reporter aux liens indiqus ci-aprs.
http://www.w3.org/Math/ http://fr.wikipedia.org/wiki/MathML https://developer.mozilla.org/en/Mozilla_MathML_Project http://www.dessci.com/en/products/mathplayer/

281

15
Feuilles de style CSS

a lhabitude de consulter des sites Web chamarrs. Or rien dans les lments qui ont t tudis ne permet dattribuer une couleur particulire son contenu. De manire plus gnrale, rien ne permet de contrler laspect visuel des pages une fois afches dans un butineur. En effet, HTML a pour but de dcrire la structure des pages, pas leur apparence. HTML 3.2 a bien introduit des lments et des attributs, dont certains ont t repris dans HTML 4, permettant de modier laspect visuel du document mais leur utilisation est maintenant proscrire. Supposons nanmoins que les indications concernant leur aspect visuel soient intgres aux pages HTML. An davoir une prsentation cohrente de toutes les pages dun mme site, ces indications doivent donc gurer lidentique dans chaque page. Lajout dune nouvelle page ncessite alors la recopie de ces indications sans en omettre. Et si lon souhaite modier globalement laspect visuel des pages existantes, il faut toutes les modier, ce qui est difcilement grable sil y en a beaucoup. Manifestement, lapproche consistant indiquer laspect visuel des pages dans celles-ci nest pas viable. Les directives de prsentation sont donc regroupes dans un chier spar appel feuille de style (style sheet en anglais). Les pages HTML dun mme site font alors rfrence cette feuille de style pour les indications concernant leur aspect visuel. La centralisation de ces indications dans la feuille de style assure une prsentation cohrente de lensemble des pages et en facilite les changements. Une feuille de style est un chier texte au format CSS (Cascading Style Sheets, feuilles de style en cascade, nous verrons ce quest la cascade au paragraphe 15.4.2 page 297). La version actuelle de ce format est la version 2.1, datant de 2004. Cest cette version que nous allons tudier par la suite. Pour information, la premire version du format CSS, CSS 1, est apparue en 1996, CSS 2 en 1998 et la version 3 est actuellement en cours de dveloppement. Les possibilits offertes par les feuilles de style tant vastes et complexes, nous nallons par la suite que survoler le sujet. Le lecteur curieux pourra se reporter aux ouvrages suivants de la bibliographie pour approfondir ses connaissances : CSS [30] CSS 2 [32]
HACUN

283

Chapitre 15. Feuilles de style CSS CSS 2.1 [29] CSS avances [35] Mmento CSS [33] CSS : The Denitive Guide [40] CSS Cookbook [46] CSS Pocket Reference [41] Russir son site web avec XHTML et CSS [43] Premiers pas en CSS et XHTML [31] XHTML et CSS [48] HTML5 et CSS3 [38] HTML5 et CSS3 [49] Sams Teach Yourself HTML and CSS in 24 Hours [39] HTML & CSS : The Good Parts [36] HTML5 & CSS3 [37]

http://www.w3.org/Style/CSS/ http://jigsaw.w3.org/css-validator/ http://fr.wikipedia.org/wiki/Feuilles_de_style_en_cascade http://fr.wikibooks.org/wiki/Le_langage_CSS http://w3schools.com/ http://www.csszengarden.com/

15.1

Faire rfrence une feuille de style dans une page HTML

Pour faire rfrence une feuille de style dans une page HTML, il faut ajouter un lment vide link dans son en-tte :
<link rel="stylesheet" type="text/css" href="style.css"/>

Llment link sert indiquer que la page HTML doit tre relie un autre document, en loccurrence une feuille de style. Il sutilise avec trois attributs : 1. lattribut rel indique quelle catgorie de document la page doit tre relie, sa valeur doit tre stylesheet pour une feuille de style ; 2. lattribut type indique le type de ce document, sa valeur doit tre text/css pour une feuille de style CSS (puisque le format CSS est un type particulier de chier texte) ; 3. lattribut
href style.css

indique le nom du chier qui contient la feuille de style, ici (les feuilles de style CSS ont traditionnellement une extension .css).

Pour faire en sorte que toutes les pages dun site Web soient afches conformment une mme feuille de style, chacune de ces pages doit avoir dans son en-tte un lment link y faisant rfrence. 284

15.2. Au sujet des exemples qui suivent


http://www.w3.org/TR/html401/struct/links.html#edef-LINK

15.2

Au sujet des exemples qui suivent

Les exemples de feuilles de style qui suivent seront accompagns si ncessaire dun extrait de page HTML les utilisant (en supposant quil est bien fait rfrence la feuille de style dans len-tte au moyen de llment link). Ils seront tous deux illustrs si besoin est par leur rendu graphique dans Firefox 6.0.

15.3

Syntaxe

Commenons par planter le dcor avec une feuille de style trs simple :
body { background-color : lime ; }

Il suft de faire rfrence cette feuille de style au moyen de llment link dans len-tte dune page HTML pour que celle-ci se retrouve afche sur un fond vert criard. Le principe des feuilles de style est en effet dappliquer des proprits aux lments contenus dans une page HTML, an de modier leur apparence. Ici, llment concern est body, dont on modie la proprit background-color (qui reprsente sa couleur de fond) pour lui donner la valeur lime (qui est une variante de vert, les couleurs seront abordes au paragraphe 15.5 page 300).

15.3.1

Les commentaires

Les commentaires sont dlimits par /* et */ et peuvent stendre sur plusieurs lignes :
/* la rgle suivante modifie la couleur de fond de la page */ body { background-color : lime ; } /* vert clair */

285

Chapitre 15. Feuilles de style CSS


http://www.w3.org/TR/CSS21/syndata.html#comments

15.3.2

Les rgles

De manire gnrale, une feuille de style est constitue dune suite de rgles. Une rgle se compose : 1. dun slecteur, qui indique le ou les lments dont lapparence doit tre modie ; 2. dun bloc contenant, entre accolades, une ou plusieurs dclarations appliquer au slecteur. Une dclaration se compose : 1. dune proprit, qui est le paramtre modier ; 2. dune valeur donner ce paramtre. Dans une dclaration, proprit et valeur sont spares par un deux-points. La dclaration est termine par un point-virgule. Une rgle est donc de la forme suivante :
slecteur { proprit : valeur ; proprit : valeur ; ... }

Les retours la ligne, lalignement vertical des accolades, lindentation des dclarations, les espaces autour des deux-points ainsi que ceux prcdant les points-virgules ne sont pas ncessaires mais permettent darer la feuille de style, de mieux en visualiser la structure et de reprer plus facilement les erreurs. On aurait donc parfaitement pu crire :
slecteur{proprit:valeur;proprit:valeur;}

mais il faut reconnatre que cela est bien moins lisible.


http://www.w3.org/TR/CSS21/syndata.html#rule-sets

286

15.3. Syntaxe

15.3.3

Les slecteurs

Les exemples de cette section font appel des proprits et des valeurs qui seront tudies plus loin. Elles ne sont l que pour illustrer les possibilits dutilisation des slecteurs au moyen dexemples ralistes et ne seront donc pas dtailles plus que ncessaire la comprhension des diffrentes syntaxes de slecteurs. Dans une rgle, le slecteur indique le ou les lments auxquels appliquer les dclarations gurant dans le bloc qui suit.
http://www.w3.org/TR/CSS21/selector.html

15.3.3.1

Les slecteurs de type

Dans la plupart des cas, le slecteur est simplement un nom dlment, cest ce quon appelle un slecteur de type :
body { background-color : lime ; }

http://www.w3.org/TR/CSS21/selector.html#type-selectors

15.3.3.2

Le regroupement

Dans le cas o lon souhaite appliquer les mmes dclarations plusieurs lments, il est inutile de rpter les blocs lidentique, on peut regrouper les lments dans le slecteur en les sparant par des virgules et navoir quun seul bloc, partag par tous ces lments :
h1 , h2 , h3 { text-align : center ; }

Ici, on applique exactement le mme bloc aux lments h1, h2 et h3 en une seule rgle, cest ce quon appelle un regroupement. Lorsque les blocs appliqus diffrents lments partagent des dclarations identiques, il est possible de les factoriser. Considrons lexemple suivant : 287

Chapitre 15. Feuilles de style CSS

h1 { text-align : center ; color : red ; } h2 { text-align : center ; color : blue ; }

La premire dclaration de chaque bloc est identique donc il est possible de la placer dans un bloc commun aux deux lments :

h1 , h2 { text-align : center ; } h1 { color : red ; } h2 { color : blue ; }

Lorsque plusieurs blocs sappliquent au mme lment, leurs dclarations se cumulent. Les deux exemples prcdents sont donc quivalents. En pratique, ce nest que dans le cas o plusieurs lments partagent de nombreuses dclarations identiques quil est intressant de les factoriser, an de simplier la feuille de style. Les deux exemples prcdents nont pas vraiment la taille critique pour que lintrt de la factorisation soit agrant.
http://www.w3.org/TR/CSS21/selector.html#grouping

288

15.3. Syntaxe 15.3.3.3 Les slecteurs descendants

Si lon souhaite appliquer des dclarations un lment uniquement si celui-ci est imbriqu dans un autre, on peut utiliser cette syntaxe :
p code { text-decoration : underline ; }

Ici, le contenu de llment code sera soulign sil est contenu dans un paragraphe, y compris sil est nich au sein dautres lments :
<p> Llment <code>code</code> est soulign, mme sil est contenu dans un autre lment, par exemple <samp><code>samp</code></samp>. </p>

En revanche, il ne le sera pas sil est contenu dans une liste ou un tableau. Cest ce quon appelle un slecteur descendant dans la mesure o llment code est un descendant de llment p.
http://www.w3.org/TR/CSS21/selector.html#descendant-selectors

15.3.3.4

Les slecteurs denfant

On peut tre plus restrictif :


p > code { text-decoration : underline ; }

Le combinateur > signie que lelement code doit tre directement contenu dans llment p, sans intermdiaire : 289

Chapitre 15. Feuilles de style CSS

<p> Llment <code>code</code> est soulign, mais pas sil est contenu dans un autre lment, par exemple <samp><code>samp</code></samp>. </p>

Pour que la rgle soit applique, il faut que llment code soit un descendant direct de llment p, cest--dire, pour continuer lanalogie gnalogique, un de ses enfants. Cest pourquoi ce type de slecteur est appel un slecteur denfant.
http://www.w3.org/TR/CSS21/selector.html#child-selectors

15.3.3.5

Les slecteurs dattribut

Les slecteurs prcdents permettent dappliquer un bloc de dclarations un ou plusieurs lments, soit inconditionnellement, soit uniquement sur des conditions de descendance par rapport dautres lments. Un slecteur dattribut permet dappliquer un bloc de dclarations un lment si celui-ci est muni dun certain attribut, quelle que soit sa valeur, ou seulement sil a une valeur particulire. Il est constitu de llment, suivi de lattribut dont il doit tre muni, entre crochets :
lment[attribut] { proprit : valeur ; ... }

Ainsi, dans lexemple suivant, les lments td ayant un attribut colspan, quelle que soit sa valeur, seront afchs sur un fond de couleur jaune :
td[colspan] { background-color : yellow ; }

290

15.3. Syntaxe On peut galement limiter lapplication du slecteur aux seuls lments ayant un attribut dune certaine valeur (contrairement son utilisation dans une page HTML, la valeur ne doit pas gurer entre guillemets) :
lment[attribut=valeur] { proprit : valeur ; ... }

Ainsi, dans lexemple suivant, les lments td ayant un attribut colspan de valeur 2 seront afchs sur un fond de couleur jaune :
td[colspan=2] { background-color : yellow ; }

Il existe encore deux autres syntaxes de slecteurs dattribut, que nous ntudierons pas ici.
http://www.w3.org/TR/CSS21/selector.html#attribute-selectors

15.3.3.6

Les slecteurs de classe

Les slecteurs de classe sont des cas particuliers de slecteurs dattribut. tant trs utiliss, ils bncient dune syntaxe propre. Une classe est une chane de caractres pouvant contenir : des lettres (minuscules ou majuscules, attention, on fait la diffrence entre les deux), ventuellement accentues ; des chiffres (mais une classe ne peut pas commencer par un chiffre) ; des tirets ; des tirets bas. Un slecteur de classe permet dappliquer un bloc de dclarations un lment. Il est constitu de llment, suivi dun point, puis de la classe, sans espaces autour du point :
lment.classe { proprit : valeur ; ... }

291

Chapitre 15. Feuilles de style CSS Dans la page HTML, il faut appliquer llment lattribut class avec la classe comme valeur ainsi :
<lment class="classe">contenu</lment>

Par exemple, si certains paragraphes importants doivent tre afchs en rouge, on peut utiliser :
p.important { color : red ; }

<p class="important"> Ceci est un paragraphe important. </p>

Il est galement possible de ne pas appliquer la classe un lment spcique :


.classe { proprit : valeur ; ... }

Ceci permet dutiliser cette classe avec nimporte quel lment sans avoir dnir autant de slecteurs. Par exemple :
.important { color : red ; }

<p class="important"> Ceci est un paragraphe important. </p> <p> Ceci est un paragraphe normal avec une <dfn class="important">dfinition importante</dfn>. </p>

292

15.3. Syntaxe cette occasion, il importe de bien nommer ses classes en fonction de leur nature et non de leur aspect. Dans lexemple prcdent, on a choisi de diffrencier les choses importantes en leur attribuant la couleur rouge. On aurait donc pu tre tent de nommer notre classe rouge puisquelle a pour rsultat de mettre le contenu des lments auxquels elle est applique en rouge. Cependant, si lon change davis et quon dcide de mettre les choses importantes en bleu, il faut modier non seulement la feuille de style mais aussi toutes les pages HTML o il est fait rfrence la classe rouge. Encore une fois, il est prfrable de raisonner en terme de structure et de nommer les classes en fonction de leur signication structurelle plutt que de leur apparence. En appelant notre classe important, on indique sa nature et non son aspect. Une chose importante reste importante, quelle soit afche en rouge ou en bleu. Ainsi une modcation de laspect des choses importantes ne ncessitera que de modier la feuille de style, pas les pages HTML qui y font rfrence.
http://www.w3.org/TR/CSS21/selector.html#class-html

15.3.3.7

Les slecteurs didentiant

Les slecteurs didentiant fonctionnent sur le mme principe que les slecteurs de classe :
lment#identifiant { proprit : valeur ; ... }

Le caractre utilis dans la feuille de style pour sparer lment et identiant nest pas le point comme pour la classe mais le croisillon #. Dans la page HTML, on utilise lattribut id appliqu au mme lment ainsi :
<lment id="identifiant">contenu</lment>

Il est galement possible de ne pas appliquer lidentiant un lment spcique :


#identifiant { proprit : valeur ; ... }

293

Chapitre 15. Feuilles de style CSS la diffrence dune classe, qui peut tre utilise plusieurs fois dans la mme page HTML, un identiant ne peut ltre quune seule fois. Cest la diffrence fondamentale entre classe et identiant. Ceci permet de sassurer quun mme identiant nest utilis quune et une seule fois dans une page HTML. Les identiants sont en pratique principalement utiliss avec llment div (qui sera tudi au paragraphe 15.11 page 319). Celui-ci permet dindiquer des divisions logiques dans une page HTML (en-tte, barre de navigation, partie principale, pied de page, etc.). Chaque division est repre par un identiant et leur unicit permet de garantir quil ny ait quune division de chaque type par page.
http://www.w3.org/TR/CSS21/selector.html#id-selectors

15.3.3.8

Les pseudo-classes

Les slecteurs tudis prcdemment permettent lapplication des rgles de la feuille de style en fonction du seul contenu de la page HTML (lments, relations entre lments, prsence dattributs class ou id). Dans les cas o ces critres ne sont pas sufsants, on utilise des pseudo-classes. Le slecteur dune pseudo-classe se prsente comme ceci :
lment:pseudo-classe { proprit : valeur ; ... }

http://www.w3.org/TR/CSS21/selector.html#pseudo-class-selectors

15.3.3.8.1

Les pseudo-classes de lien

Par dfaut, les hyperliens sont souligns et afchs en bleu sils nont pas encore t visits et en violet sils lont dj t. Si lon a modi la couleur de fond, il est possible que ces deux couleurs ne conviennent pas. Les pseudo-classes de lien permettent de les modier. Elles ne peuvent sappliquer qu llment a. La pseudo-classe :link permet de modier la couleur des liens qui nont pas encore t visits :
a:link { color : lime ; }

294

15.3. Syntaxe La pseudo-classe :visited permet de modier la couleur des liens qui ont dj t visits :
a:visited { color : green ; }

http://www.w3.org/TR/CSS21/selector.html#link-pseudo-classes

15.3.3.8.2

Les pseudo-classes dynamiques

Les pseudo-classes dynamiques permettent dappliquer des dclarations en fonction des actions de lutilisateur. Contrairement aux pseudo-classes de lien, qui ne sappliquent qu llment a, les pseudo-classes dynamiques peuvent sappliquer nimporte quel lment. La pseudo-classe :hover sapplique lorsque le pointeur de la souris survole llment correspondant. On peut lutiliser, par exemple, pour donner lutilisateur un retour visuel plus important lorsque sa souris survole un hyperlien en modiant la couleur de fond de celui-ci :
a:hover { background-color : yellow ; }

Il existe galement des pseudo-classes :active et :focus, que nous ntudierons pas.
http://www.w3.org/TR/CSS21/selector.html#dynamic-pseudo-classes

15.3.3.8.3

La pseudo-classe de langue

Lattribut xml:lang, tudi au paragraphe 14.9 page 279, permet dindiquer la langue du contenu de llment auquel il est appliqu. La pseudo-classe :lang permet de se baser sur la valeur de lattribut xml:lang pour appliquer des dclarations en fonction de celle-ci (XX reprsente le code ISO 639 de la langue) : 295

Chapitre 15. Feuilles de style CSS

lment:lang(XX) { proprit : valeur ; ... }

en

Ainsi, dans lexemple suivant, les paragraphes ayant un attribut xml:lang de valeur seront composs en italique :

p:lang(en) { font-style : italic ; }

Llment peut tre omis dans le slecteur an de pouvoir appliquer les dclarations tous les lments ayant la valeur correspondante de lattribut xml:lang :
:lang(en) { font-style : italic ; }

http://www.w3.org/TR/CSS21/selector.html#lang

15.3.4

Les dclarations et les proprits

Contrairement aux slecteurs, qui offrent une grande varit de syntaxes, celle des dclarations est des plus simples :
{ proprit : valeur ; ... }

Leur richesse se situe dans les modications quelles permettent dapporter aux lments des pages HTML. Aprs une courte explication de ce que sont lhritage et la cascade, nous allons tudier les proprits les plus utiles selon un classement thmatique.

296

15.4. Lhritage et la cascade


http://www.w3.org/TR/CSS21/syndata.html#declaration

15.4
15.4.1

Lhritage et la cascade
Lhritage

Lhritage consiste, pour un lment contenu dans un autre, se voir appliques les rgles concernant ce dernier. Considrons le fragment de page HTML suivant :
<p> L<em>hritage</em> consiste, pour un lment contenu dans un autre, se voir appliques les rgles concernant ce dernier. </p>

Dans ce cas, toutes les rgles qui sappliquent llment p sappliqueront galement llment em. Cela permet une mise en page cohrente sans avoir multiplier des dclarations identiques. Si certaines proprits sappliquant spciquement llment em sont en contradiction avec les mmes proprits hrites de llment p (cest--dire si elles ont des valeurs diffrentes), ce sont bien videmment les plus spciques, savoir les premires, qui sappliquent.
http://www.w3.org/TR/CSS21/cascade.html#inheritance

15.4.2

La cascade

Vous avez remarqu que, mme sans faire rfrence une feuille de style au moyen de llment link, les butineurs savent afcher certains lments de manire adquate, par exemple les titres, qui sont afchs en gras et dans un corps 1 plus important que celui du texte. En effet, les butineurs disposent dune feuille de style interne, qui contient les rgles correspondantes et qui permettent dafcher les pages sans feuille de style avec une mise en page minimale mais correcte. Il est galement possible lutilisateur dindiquer un certain nombre de prfrences pour lafchage des pages, comme les polices de caractres utiliser, leur taille, les couleurs du texte, du fond et des liens, etc. Enn, lorsquon en utilise une, la feuille de style permet lauteur des pages dindiquer ses propres rgles dafchage. Puisque le butineur (au moyen de sa feuille de style interne), lutilisateur (au moyen de ses prfrences) et la feuille de style peuvent indiquer des rgles contradictoires, il est ncessaire de les dpartager.
1. En typographie, le corps dsigne la taille des caractres.

297

Chapitre 15. Feuilles de style CSS La cascade dnit lordre de priorit dans lequel les rgles sont prises en compte, de la moins prioritaire la plus prioritaire : 1. la feuille de style interne du butineur ; 2. les prfrences de lutilisateur ; 3. la feuille de style. Il est important de remarquer que la feuille de style est plus prioritaire que les prfrences de lutilisateur. Ceci peut poser problme si, par exemple, la feuille de style indique un corps de petite taille alors que lutilisateur a indiqu un corps plus important dans ses prfrences en raison de problmes de vue. Cest pour cela quil est maladroit dindiquer le corps dans la feuille de style de manire absolue. Il est prfrable de le faire de manire relative (voir le paragraphe 15.7.4 page 305) an de pouvoir prendre en compte les prfrences de lutilisateurs tout en ayant une mise en page conforme aux souhaits de lauteur de la feuille de style. En ce qui concerne les dclarations gurant dans la feuille de style, la cascade permet que toutes celles qui peuvent sappliquer soient prises en compte, dans la mesure o elles ne sont pas contradictoires. Considrons cette feuille de style :

p { text-align : justify ; } p.important { color : red ; }

Dans une page HTML utilisant cette feuille de style, les paragraphes appartenant la classe important seront composs en rouge mais galement justis. En effet, les dclarations correspondant au slecteur de classe p.important sappliquent ces paragraphes mais galement celles correspondant au slecteur de type p car un paragraphe, mme sil appartient une classe particulire, reste un paragraphe. En cas de dclarations contradictoires, la cascade impose que ce soient les plus spciques qui sappliquent. Considrons cette feuille de style : 298

15.4. Lhritage et la cascade

p { color : green ; text-align : justify ; } p.important { color : red ; }

Dans une page HTML utilisant cette feuille de style, les paragraphes appartenant la classe important seront composs en rouge et nanmoins justis. La dclaration concernant la proprit color correspondant au slecteur de type p est contradictoire avec celle concernant la mme proprit correspondant au slecteur de classe p.important. Cette dernire tant plus spcique, cest elle qui sapplique. En revanche, la dclaration concernant la proprit text-align correspondant au slecteur de type p na pas de dclaration quivalente pour le slecteur de classe p.important et peut donc sappliquer. Enn, en cas de dclarations contradictoires sans quil y ait un avantage de spcicit, la cascade impose que ce soit la dernire dclaration qui sapplique. En effet, la feuille de style est lue de haut en bas et les rgles sont prises en compte dans lordre de leur lecture.
p { color : green ; } p { color : red ; }

Les pages HTML utilisant la feuille de style prcdente auront donc leurs paragraphes composs en rouge.
http://www.w3.org/TR/CSS21/cascade.html#cascade

299

Chapitre 15. Feuilles de style CSS

15.5

Les couleurs

Lune des principales utilisations des feuilles de style est de mettre de la couleur dans des pages auparavant ternes.
http://www.w3.org/TR/CSS21/colors.html

15.5.1

Nommage et reprsentation des couleurs

La faon la plus simple dindiquer une couleur est de la dsigner par son nom. Le tableau 15.1 prsente les dix-sept noms utilisables dans une feuille de style.
aqua black blue fuchsia gray green lime maroon navy olive orange purple red silver teal white yellow

TABLE 15.1 Noms de couleurs utilisables dans une feuille de style. La plupart des butineurs acceptent galement dautres noms qui ne font pas partie de la spcication des feuilles de style. Pour cette raison, il est prfrable de ne pas les utiliser et de sen tenir aux dix-sept noms du tableau 15.1. Nanmoins, ceux-ci correspondent des couleurs assez criardes. Il est donc galement possible de spcier des couleurs de manire plus ne en indiquant leurs niveaux de rouge, de vert et de bleu en synthse additive. La faon la plus simple de spcier une couleur est dindiquer les pourcentages respectifs de rouge, de vert et de bleu :
color : rgb( 80% , 100% , 80% ) ;

Il est important quil ny ait pas despace entre rgb et la parenthse ouvrante, de mme quentre les nombres et leur signe pour cent. Les niveaux peuvent galement tre indiqus sous forme de valeurs entires codes sur un octet, cest--dire par des nombres entre 0 et 255, 0 correspondant 0 % et 255 100 % :
color : rgb( 204 , 255 , 204 ) ;

Le systme hexadcimal (voir le paragraphe 2.1.3.3 page 25) tant mieux adapt la rprsentation doctets, il est galement possible dexprimer les valeurs de rouge, de vert et de bleu par des nombres hexadcimaux allant de 00 FF. Ainsi, la couleur prcdente peut aussi scrire : 300

15.5. Les couleurs

color : #CCFFCC ;

Le croisillon indique quon utilise une reprsentation en hexadcimal avec deux chiffres pour chaque couleur primaire. Les chiffres de A F peuvent galement tre indiqus en minuscules. Les couleurs utilisant deux fois le mme chiffre hexadcimal pour chaque couleur primaire peuvent tre simplies ainsi :
color : #CFC ;

http://www.w3.org/TR/CSS21/syndata.html#color-units http://fr.wikipedia.org/wiki/Rouge_vert_bleu http://fr.wikipedia.org/wiki/Couleurs_du_Web http://www.colorpicker.com/ http://www.febooti.com/products/iezoom/online-help/ online-color-chart-picker.html

15.5.2

La proprit de couleur color

La proprit color permet de dnir la couleur des lments auxquels elle est applique :
h1 { color : red ; }

Ici, tous les lments h1 seront afchs en rouge. Les couleurs peuvent tre spcies de toutes les manires indiques au paragraphe 15.5.1 page ci-contre.
http://www.w3.org/TR/CSS21/colors.html#propdef-color

15.5.3

La proprit de couleur de fond background-color

La proprit background-color permet de dnir la couleur de fond des lments auxquels elle est applique : 301

Chapitre 15. Feuilles de style CSS

body { background-color : lime ; }

Ici, la page HTML entire sera afche sur un fond vert. Les couleurs peuvent tre spcies de toutes les manires indiques au paragraphe 15.5.1 page 300.
http://www.w3.org/TR/CSS21/colors.html#propdef-background-color

15.6

Les units de mesure

Avant de poursuivre, il faut prsenter les units de mesure utilisables dans une feuille de style car plusieurs proprits qui vont tre tudies par la suite les utilisent comme valeurs. Ces units gurent dans le tableau 15.2.
em ex px in cm mm pt pc

cadratin hauteur dil dun x pixel pouce (inch en anglais) centimtre millimtre point pica

1in

= 2.54cm = 1in/72 = 12pt

1pt 1pc

TABLE 15.2 Units de mesure utilisables dans une feuille de style. Les deux premires units appellent quelques explications. En typographie, un cadratin est une espace dont la longueur est gale la force du corps utilis (cest--dire la taille des caractres). Le cadratin est souvent dni comme la largeur du caractre M (mais ce nest souvent quapproximatif). Toujours en typographie, la hauteur dil reprsente la hauteur dun caractre. Ici, 1ex reprsente donc la hauteur du caractre x (ou, si lon prfre, de nimporte quelle minuscule sans hampe ni jambage). Ces deux units sont intressantes car elles sont relatives la taille des caractres, ce qui nest pas le cas des autres (ces dernires sont donc rarement utilises). Lorsquune longueur doit tre exprime dans une feuille de style, elle lest sous la forme dun nombre immdiatement suivi dune unit, par exemple : 2em, 5mm. Le nombre peut tre dcimal lorsque cela a un sens, par exemple : 0.25em (quart de 302

15.7. Le texte cadratin). En revanche, 0.25px na pas de sens, le pixel tant le plus petit lment afchable par un cran. Remarquez que la notation utilise dans le tableau 15.2 page prcdente pour expliquer la valeur du point, 1in/72 nest syntaxiquement pas correcte dans une feuille de style. Cette notation na quune valeur explicative. Enn, il est possible domettre lunit lorsque la longueur exprimer est nulle : 0 seul est sufsant.
http://www.w3.org/TR/CSS21/syndata.html#length-units http://fr.wikipedia.org/wiki/Cadratin http://www.orthotypographie.fr/volume-I/cabochon-citation.html#Cadratin http://fr.wikipedia.org/wiki/il_(typographie) http://www.orthotypographie.fr/volume-II/ocean-ouest.html#OEil

15.7

Le texte

Deux ensembles de proprits permettent dagir sur le texte. Celles commenant par font concernent les caractres, celles commenant par text concernent la prsentation globale du texte
http://www.w3.org/TR/CSS21/fonts.html http://www.w3.org/TR/CSS21/text.html

15.7.1

La proprit de police font-family

La proprit font-family permet de dnir la police de caractres utilise :


td { font-family : sans-serif ; }

Celle-ci peut tre indique de deux manires : en indiquant un nom de police spcique (comme, par exemple, Helvetica ou Courier) ; en indiquant un nom de police gnrique. Les noms de polices gnriques sont indiqus dans le tableau 15.3 page suivante. En cas dutilisation dun nom de police gnrique, la police effectivement utilise dpend des prfrences de lutilisateur ou de la conguration par dfaut du butineur. Comme nous lavons vu au paragraphe 15.4.2 page 297, compte tenu de la cascade, il est prfrable de nutiliser que des noms de polices gnriques, an den laisser le choix lutilisateur, sauf cas trs particulier. Par ailleurs, une police spcique peut ne pas tre disponible dans toutes les congurations. 303

Chapitre 15. Feuilles de style CSS police empattements police bton police cursive police dcorative police chasse xe

serif sans-serif cursive fantasy monospace

TABLE 15.3 Noms de polices gnriques utilisables avec la proprit font-family.

http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family http://fr.wikipedia.org/wiki/Empattement_(typographie) http://www.orthotypographie.fr/volume-I/echelle-extrait.html# Empattement http://fr.wikipedia.org/wiki/Chasse_(typographie) http://www.orthotypographie.fr/volume-I/cabochon-citation.html# Chasse-chasser

15.7.2

La proprit dinclinaison font-style

La proprit font-style permet de dnir linclinaison des caractres :


p.citation { font-style : italic ; }

La proprit bleau 15.4.

font-style

peut prendre lune des valeurs indiques dans le ta-

normal italic oblique

composition en romain (cest--dire en caractres droits) composition en italique composition en oblique (cest--dire en romain inclin)

TABLE 15.4 Valeurs utilisables avec la proprit font-style.

http://www.w3.org/TR/CSS21/fonts.html#propdef-font-style http://fr.wikipedia.org/wiki/Police_romaine http://fr.wikipedia.org/wiki/Italique_(typographie) http://www.orthotypographie.fr/volume-II/incipit-italique.html#Italique

304

15.7. Le texte

15.7.3

La proprit de graisse font-weight

La proprit font-weight permet de dnir la graisse des caractres :


td { font-weight : bold ; }

La proprit font-weight peut prendre trois types de valeurs : des valeurs absolues, normal pour des caractres normaux, bold pour des caractres gras ; des valeurs relatives par rapport ce que serait la graisse sans cette proprit, bolder et lighter ; des valeurs numriques, 100, 200, 300, 400, 500, 600, 700, 800 et 900 (normal correspondant 400 et bold 700). La plupart des polices ne proposant quun seul type de gras, il est prfrable de sen tenir normal et bold.
http://www.w3.org/TR/CSS21/fonts.html#propdef-font-weight http://fr.wikipedia.org/wiki/Graisse_(typographie) http://www.orthotypographie.fr/volume-II/gallerie-guillemet.html# Graisse

15.7.4

La proprit de corps font-size

La proprit font-size permet de dnir le corps des caractres :


li { font-size : 75% ; }

Celui-ci peut tre indiqu de deux manires : de manire absolue, en indiquant une taille avec une unit de mesure ; de manire relative, en fonction du corps dni par les prfrences de lutilisateur. Nous avons vu au paragraphe 15.4.2 page 297 que, compte tenu de la cascade, il tait maladroit de dnir le corps des caractres de manire absolue. Aussi cette faon de faire ne sera pas dtaille ici. Concernant la manire relative, il existe trois syntaxes diffrentes. La plus souple et la plus facilement comprhensible (nous ntudierons pas les autres) consiste 305

Chapitre 15. Feuilles de style CSS indiquer un pourcentage de ce que serait le corps sans la proprit font-size, comme il est fait dans lexemple prcdent.
http://www.w3.org/TR/CSS21/fonts.html#propdef-font-size http://fr.wikipedia.org/wiki/Corps_typographique http://www.orthotypographie.fr/volume-I/classe-corps.html#Corps

15.7.5

La proprit dalina text-indent

La proprit text-indent permet de dnir la taille de lalina dbutant chaque paragraphe (qui est par dfaut nulle avec la plupart des butineurs) :
p { text-indent : 1em ; }

Traditionnellement, lalina ne doit pas tre infrieur un cadratin. Il peut aller jusqu quatre cadratins (4em) daprs le Lexique des rgles typographiques en usage lImprimerie nationale, page 153. Le cadratin (em) est donc lunit de mesure la mieux adapte la proprit text-indent.
http://www.w3.org/TR/CSS21/text.html#propdef-text-indent http://fr.wikipedia.org/wiki/Alina http://www.orthotypographie.fr/volume-I/accolade-allemand.html#Alinea

15.7.6

La proprit dalignement text-align

La proprit text-align permet de dnir la faon daligner des blocs de texte :


p { text-align : justify ; }

La proprit text-align peut prendre lune des valeurs indiques dans le tableau 15.5 page ci-contre. Par dfaut, le texte est align gauche. La proprit text-align peut sappliquer principalement aux lments p, li (pour les valeurs left et justify) ainsi quaux cellules des tableaux (lments td et th). En pratique, elle inuence tout ce qui se trouve lintrieur de llment auquel on lapplique, que ce soit du texte ou autre chose. En particulier, on peut lutiliser pour centrer une image : 306

15.7. Le texte le texte est align gauche (prsentation dite en drapeau, au fer gauche) le texte est align droite (prsentation dite en drapeau, au fer droite) le texte est centr le texte est justi

left right center justify

TABLE 15.5 Valeurs utilisables avec la proprit text-align.

p.image { text-align : center ; }

<p class="image"> <img src="limousin.jpg" alt="[danse traditionnelle]"/> </p>

Le fait quune image soit centre est en effet une proprit de llment qui la contient, pas de llment img en lui-mme. En ce qui concerne les tableaux, qui ne peuvent pas tre contenus dans des paragraphes, la faon de les centrer est diffrente et sera tudie au paragraphe 15.9.3 page 317.
http://www.w3.org/TR/CSS21/text.html#propdef-text-align

15.7.7

La proprit de dcoration text-decoration

La proprit text-decoration permet dajouter une dcoration au texte contenu dans un lment :
abbr { text-decoration : underline ; }

La proprit text-decoration peut prendre lune des valeurs indiques dans le tableau 15.6 page suivante.

307

Chapitre 15. Feuilles de style CSS aucune dcoration nest ajoute souligne le texte surligne le texte raye le texte dune ligne en son milieu fait clignoter le texte

none underline overline line-through blink

TABLE 15.6 Valeurs utilisables avec la proprit text-decoration.

http://www.w3.org/TR/CSS21/text.html#propdef-text-decoration

15.8

Marge, espacement et bordure

Dans une page HTML, tous les lments sont inscrits dans un rectangle. Il est possible dagir sur trois types de paramtres, la marge, lespacement et la bordure, an respectivement dloigner ce rectangle des objets lentourant, daugmenter ses dimensions et den matrialiser les limites. Il sera plus facile den discuter sur la base dun exemple. Ainsi, vous trouverez : dans la gure 15.1 page suivante un exemple de feuille de style utilisant les proprits permettant de modier les paramtres de marge, despacement et de bordure ; dans la gure 15.2 page 310 un exemple de page HTML mettant en uvre cette feuille de style ; dans la gure 15.3 page 311 le rendu de cette page HTML dans un butineur. Dans la feuille de style (gure 15.1 page ci-contre), le rectangle contenant les paragraphes a t matrialis en lafchant sur un fond gris au moyen de la proprit background-color. Le texte a t justi grce la proprit text-align an quil occupe toute la largeur du paragraphe (ce qui permet de mieux en visualier les limites). Ces proprits sappliquent tous les paragraphes. Il a ensuite t cr une classe particulire de paragraphes, dans le but de mettre en uvre les proprits permettant de modier les paramtres de marge, despacement et de bordure, que nous allons tudier par la suite. La page HTML (gure 15.2 page 310) contient simplement quatre paragraphes au contenu identique, deux paragraphes nayant rien de particulier puis deux utilisant la classe test an de montrer leffet des proprits permettant de modier les paramtres de marge, despacement et de bordure. Le rendu de cette page dans un butineur (gure 15.3 page 311) permet de constater que les deux derniers paragraphes sont diffrents des deux premiers en trois points : ils sont davantage loigns des bords gauche et droite ainsi que des objets qui les prcdent et qui les suivent, cest la marge ; le fond gris est plus dtach du texte, cest lespacement ; le fond gris est entour dun cadre noir, cest la bordure. 308

15.8. Marge, espacement et bordure

p { background-color : #CCC ; text-align : justify ; } p.test { margin : 2em ; padding : 1em ; border-width : 1em ; border-color : black ; border-style : solid ; }

FIGURE 15.1 Marge, espacement et bordure : exemple de feuille de style.

La gure 15.4 page 312 schmatise les positions respectives de la marge, de lespacement et de la bordure par rapport au contenu. On peut voir tous ces lments comme des poupes russes embotes les unes dans les autres. Le contenu ultime de la balise est entour par lespacement, lui-mme entour par la bordure, elle-mme entoure par la marge. Par dfaut, marge, espacement et bordure sont inexistants et il faut utiliser les proprits que nous allons maintenant tudier pour leur donner vie.

http://www.w3.org/TR/CSS21/box.html

15.8.1

La marge

Parler de marge (margin en anglais) au singulier est une simplication. Il existe en effet quatre marges : en haut, droite, en bas et gauche. Ces marges peuvent prendre des valeurs diffrentes qui sont dnies respectivement par les proprits margin-top, margin-right, margin-bottom et margin-left : 309

Chapitre 15. Feuilles de style CSS

<p> Lordinateur fait ce que vous lui dites de faire, pas ce que vous voulez quil fasse. </p> <p> Lordinateur fait ce que vous lui dites de faire, pas ce que vous voulez quil fasse. </p> <p class="test"> Lordinateur fait ce que vous lui dites de faire, pas ce que vous voulez quil fasse. </p> <p class="test"> Lordinateur fait ce que vous lui dites de faire, pas ce que vous voulez quil fasse. </p>

FIGURE 15.2 Marge, espacement et bordure : exemple de page HTML.

p { margin-top margin-right margin-left } : 1em ; : 2em ; : 4em ;

margin-bottom : 3em ;

Si lon souhaite affecter la mme valeur aux quatre marges, on peut utiliser la proprit margin :
p { margin : 2em ; }

310

15.8. Marge, espacement et bordure

FIGURE 15.3 Marge, espacement et bordure : rendu dans un butineur.

311

Chapitre 15. Feuilles de style CSS marge bordure espacement

contenu

FIGURE 15.4 Marge, espacement et bordure : schma de principe.

Celle-ci accepte galement deux valeurs (qui sont affectes respectivement aux marges haute et basse pour la premire, droite et gauche pour la seconde), trois valeurs (qui sont affectes respectivement aux marges haute pour la premire, droite et gauche pour la deuxime et basse pour la troisime) ou quatre valeurs (qui sont affectes respectivement aux marges haute, droite, basse et gauche). Nanmoins, cette faon de procder est difcilement comprhensible et source derreur. Si lon souhaite quune des marges ait une valeur diffrente des autres, il est donc prfrable dutiliser la proprit idoine. Il est bien entendu possible de ne dnir que certaines marges, les autres restant leur valeur par dfaut (gnralement nulle) :
p { margin-right : 2em ; margin-left } : 2em ;

Vous pouvez remarquer que les marges des deux derniers paragraphes de la gure 15.3 page prcdente ne sont pas afches sur fond gris, contrairement aux paragraphes et leurs espacements. En effet, les marges sont toujours transparentes. Par ailleurs, dans la mme gure, remarquez que la marge sparant les deux derniers paragraphes semble tre de la mme taille que les marges gauche et droite alors quelle devrait tre deux fois plus importante, puisquelle cumule la marge du bas du troisime paragraphe et la marge du haut du quatrime paragraphe. Ce 312

15.8. Marge, espacement et bordure nest pas le cas parce que les marges verticales sparant deux lments fusionnent, la marge rsultante tant la plus grande des deux. Ceci ne se produit pas avec les marges horizontales. Enn, il est galement possible dutiliser la valeur auto pour laisser le butineur calculer automatiquement certaines marges. Cest en particulier le cas pour centrer les tableaux (voir le paragraphe 15.9.3 page 317).
http://www.w3.org/TR/CSS21/box.html#margin-properties

15.8.2

Lespacement

L aussi, lespacement (padding en anglais) se subdivise en quatre : en haut, droite, en bas et gauche. Ces espacements peuvent prendre des valeurs diffrentes qui sont dnies respectivement par les proprits padding-top, padding-right, padding-bottom et padding-left :
p { padding-top padding-right padding-left } : 1em ; : 2em ; : 4em ;

padding-bottom : 3em ;

Si lon souhaite affecter la mme valeur aux quatre espacements, on peut utiliser la proprit padding :
p { padding : 2em ; }

Celle-ci accepte galement deux, trois ou quatre valeurs sur le mme modle que la proprit margin. Il est bien entendu possible de ne dnir que certains espacements, les autres restant leur valeur par dfaut (gnralement nulle) :
p { padding-right : 2em ; padding-left } : 2em ;

313

Chapitre 15. Feuilles de style CSS Remarquez que les espacements des deux derniers paragraphes de la gure 15.3 page 311 ont hrit de la couleur de fond attribue aux paragraphes au moyen de la proprit background-color. Il nest pas possible dattribuer un espacement une couleur de fond diffrente de celle de son lment.
http://www.w3.org/TR/CSS21/box.html#padding-properties

15.8.3

La bordure

La bordure (border en anglais) matrialise la frontire entre espacement et marge :


p { border-width : 1em ; border-color : black ; border-style : solid ; }

Trois proprits permettent den dnir laspect : la proprit border-width indique son paisseur ; la proprit border-color indique sa couleur ; la proprit border-style indique son style. La proprit border-style peut prendre lune des valeurs indiques dans le tableau 15.7.
none hidden dotted dashed solid double groove ridge inset outset

nafche pas la bordure identique none sauf dans des cas particuliers impliquant des cellules de tableaux (que nous ne dtaillerons pas) afche la bordure en pointills afche la bordure sous la forme dun trait interrompu afche la bordure sous la forme dun train plein afche la bordure sous la forme dun double trait afche la bordure en pseudo-relief sous la forme dune ligne rentrante afche la bordure en pseudo-relief sous la forme dune ligne saillante afche la bordure en pseudo-relief en donnant limpression que llment et son espacement sont incrusts dans la page afche la bordure en pseudo-relief en donnant limpression que llment et son espacement sortent de la page TABLE 15.7 Valeurs utilisables avec la proprit border-style. 314

15.9. Les tableaux Les proprits border-width, border-color et border-style sutilisent en fait comme les proprits margin et padding, avec une, deux, trois ou quatre valeurs, contrlant les quatre cts de la bordure. Signalons galement lexistence de proprits qui permettent dindiquer individuellement lpaisseur, la couleur et le style dun des quatre cts de la bordure. Ces proprits sont prsentes dans le tableau 15.8. paisseur
border-top-width border-right-width border-bottom-width border-left-width

Couleur
border-top-color border-right-color border-bottom-color border-left-color

Style
border-top-style border-right-style border-bottom-style border-left-style

TABLE 15.8 Proprits de conguration de lpaisseur, de la couleur et du style des quatre cts de la bordure. Nanmoins, il est particulirement inesthtique que les quatre cts de la bordure ne soient pas homognes. Aussi, lutilisation de ces proprits est vivement dconseille.
http://www.w3.org/TR/CSS21/box.html#border-properties

15.9

Les tableaux

Plusieurs proprits permettent de modier la prsentation des tableaux. Nous allons laisser de ct celles qui sont complexes et qui ont peu dintrt pour nous concentrer sur le positionnement de la lgende, la fusion des bordures et le centrage dun tableau.
http://www.w3.org/TR/CSS21/tables.html

15.9.1
caption

La proprit de positionnement de lgende caption-side


caption-side

La proprit :

permet de dnir le positionnement de llment

caption { caption-side : bottom ; }

315

Chapitre 15. Feuilles de style CSS la lgende est place au-dessus du tableau (cest le cas par dfaut) la lgende est place au-dessous du tableau

top bottom

TABLE 15.9 Valeurs utilisables avec la proprit caption-side.

La proprit caption-side peut prendre lune des valeurs indiques dans le tableau 15.9. Par ailleurs, la lgende est par dfaut centre par rapport au tableau, son positionnement horizontal peut tre modi au moyen de la proprit text-align (voir le paragraphe 15.7.6 page 306).
http://www.w3.org/TR/CSS21/tables.html#propdef-caption-side

15.9.2

La proprit de fusion des bordures border-collapse

Vous laurez remarqu, laspect par dfaut des sparations horizontales et verticales des tableaux nest pas vraiment avenant. En particulier, le fait dutiliser des lignes doubles en alourdit la prsentation. Il est possible de changer cela au moyen de la proprit border-collapse applique llment table et en matrialisant la bordure des cellules grce aux proprits tudies au paragraphe 15.8.3 page 314 :
table { border-collapse : collapse ; } td , th { border-width : 2px ; border-style : solid ; }

<table> <tr> <th>Nom</th> <tr> <td>Export</td> <tr> <td>Pastis</td> </table> <th>Numro</th> </tr> <td>33</td> <td>51</td> </tr> </tr> </tr>

<tr> <td>Kronenbourg</td> <td>1664</td>

316

15.10. Llment span

La proprit border-collapse peut prendre lune des valeurs indiques dans le tableau 15.10.
collapse separate

provoque la fusion des bordures des cellules indique que les bordures des cellules doivent rester distinctes (cest la valeur par dfaut)

TABLE 15.10 Valeurs utilisables avec la proprit border-collapse. Notez quil est inutile dutiliser lattribut border de llment table lorsquon matrialise la bordure des cellules.
http://www.w3.org/TR/CSS21/tables.html#propdef-border-collapse

15.9.3

Centrage dun tableau

tant donn quun tableau ne peut pas tre contenu dans un paragraphe, le centrage dun tableau ne peut pas tre effectu au moyen de la proprit text-align, tudie au paragraphe 15.7.6 page 306. Pour centrer un tableau, il faut laisser le butineur calculer les marges gauche et droite en leur donnant la valeur auto :
table { margin-left } : auto ; margin-right : auto ;

15.10

Llment span

Les proprits tudies jusquici permettent de modier laspect de divers lments. Mais que faire si lon souhaite modier laspect dune partie du texte qui nest encadre par aucun lment ? Llment span permet de rsoudre ce problme. 317

Chapitre 15. Feuilles de style CSS Par exemple, il est dusage de composer en italique les mots issus dune langue trangre. Nous avons vu au paragraphe 15.3.3.8.3 page 295 comment utiliser la pseudo-classe :lang pour appliquer des dclarations en fonction de la valeur de lattribut xml:lang. On peut alors crire, dans la page HTML :
<p> Y a des gens qui nont pas russi parce quils ne sont pas <span xml:lang="en">aware</span>, ils ne sont pas au courant. </p>

Et le mot aware sera mis en italique grce la rgle suivante dans la feuille de style :
:lang(en) { font-style : italic ; }

Le slecteur de langue ne spcie pas dlment an de pouvoir tre appliqu dautres lments que span au besoin. Au lieu dutiliser llment span, lattribut xml:lang et un slecteur de langue, il aurait t bien plus simple dutiliser llment i pour mettre directement le mot en italique. Nanmoins, cette solution nest pas lgante car elle ne donne aucune information structurelle (elle ne permet pas, en particulier, didentier la langue des mots trangers). Llment span peut tre considr comme un lment tout faire ds quil sagit de modier laspect dune partie du texte ntant pas dlimite par un lment (du moins avant de rajouter llment span). Il est principalement utilis avec des slecteurs de classe :
.important { color : red ; }

<p> Par ailleurs, il est absolument essentiel de <span class="important">ne pas nourrir le mogwa aprs minuit</span> car les consquences peuvent se rvler dsastreuses. </p>

318

15.11. Llment div et les divisions


http://www.w3.org/TR/html401/struct/global.html#edef-SPAN

15.11

Llment div et les divisions

Llment div permet de dnir des divisions dans une page HTML. Dans un site, les diffrentes pages sont gnralement construites selon le mme gabarit. Elles sont formes dun ensemble de blocs rectangulaires agencs de la mme faon dans toutes les pages an davoir une certaine cohrence visuelle. Par exemple, un bloc pour lentte, un bloc pour la barre latrale de navigation, un bloc pour la partie principale de la page et un bloc pour le pied de page. Ces blocs constituent les divisions. Chaque bloc est contenu dans un lment div dont la valeur de lattribut id dtermine la fonction. Grce des slecteurs didentiant (voir le paragraphe 15.3.3.7 page 293), la feuille de style permet dagencer les divisions les unes par rapport aux autres. Nous allons par la suite tudier comment utiliser les divisions pour raliser quelques mises en pages classiques.
http://www.w3.org/TR/html401/struct/global.html#edef-DIV

15.11.1

Les deux mthodes dagencement des divisions

Il existe deux mthodes dagencement des divisions, chacune ayant ses avantages et ses inconvnients.
http://www.w3.org/TR/CSS21/visuren.html http://www.w3.org/TR/CSS21/visudet.html

15.11.1.1

Agencement des divisions avec la proprit position

La premire mthode dagencement des divisions repose sur lutilisation de la proprit position et des quatre proprits top, right, bottom et left permettant de positionner avec prcision le rectangle contenant la division par rapport un ou plusieurs cts de la page. Les proprits top, right, bottom et left acceptent chacune une valeur pouvant tre une longueur (voir le paragraphe 15.6 page 302) ou un pourcentage (les pourcentages sont relatifs la taille de la fentre du butineur). Cette valeur indique la distance qui spare le ct correspondant de la division par rapport au bord de la fentre du butineur. On utilise gnralement une ou deux de ces proprits an de positionner la division verticalement et horizontalement. Il est rare dutiliser trois ou quatre de ces proprits. La proprit position permet de dnir le comportement de la division quand on fait dler le contenu de la fentre du butineur ( supposer quelle ne permette pas dafcher la totalit du contenu de la page). Elle peut prendre lune des valeurs indiques dans le tableau 15.11 page suivante. 319

Chapitre 15. Feuilles de style CSS la division dle avec le reste de la page la division reste toujours au mme endroit, mme aprs dlement TABLE 15.11 Valeurs utilisables avec la proprit position.

absolute fixed

Le choix entre absolute et fixed est avant tout une affaire de prfrence personnelle. Une division (par exemple une barre latrale de navigation) qui ne dle pas peut tre intressante parce quelle est toujours accessible. En revanche, si elle est sufsamment haute pour dpasser de la fentre du butineur vers le bas (ce qui peut arriver sur des crans de petite taille comme ceux des tlphones mobiles), cela rend le bas de la barre latrale de navigation inaccessible. Enn, pour tre absolument exact, la proprit position peut galement prendre les valeurs static et relative, qui ne prsentent pas dintrt pour positionner une division et qui ne seront donc pas dtailles.
http://www.w3.org/TR/CSS21/visuren.html#propdef-position http://www.w3.org/TR/CSS21/visuren.html#propdef-top http://www.w3.org/TR/CSS21/visuren.html#propdef-right http://www.w3.org/TR/CSS21/visuren.html#propdef-bottom http://www.w3.org/TR/CSS21/visuren.html#propdef-left

15.11.1.2

Agencement des divisions avec la proprit float

La seconde mthode dagencement des divisions repose sur lutilisation de la proprit float et permet de positionner les divisions de manire plus approximative mais plus souple. La proprit float peut prendre deux valeurs, left et right indiquant si la division doit tre place respectivement gauche ou droite. gauche ou droite de quoi ? De ce quil y a dj du mme ct. Lordre dapparition des divisions dans la page HTML en fonction de lendroit o lon souhaite les placer les unes par rapport aux autres a donc son importance. Outre lagencement des divisions, la proprit float permet galement denvelopper une image contenue dans un paragraphe avec le texte de celui-ci (et des suivants si limage est sufsamment haute et le paragraphe sufsamment court) aprs lavoir place gauche ou droite de la page :
p img { float : left ; margin : 0.5em ; }

320

15.11. Llment div et les divisions

<p> Former des ingnieurs capables dassurer la conception, la ralisation et la direction de systmes complexes, sous des contraintes conomiques fortes et dans un <img src="ENSTA-ParisTech.jpg" alt="[logo ENSTA]"/> environnement international. </p> <p> Former des ingnieurs capables dassurer la conception, la ralisation et la direction de systmes complexes, sous des contraintes conomiques fortes et dans un environnement international. </p>

http://www.w3.org/TR/CSS21/visuren.html#propdef-float

15.11.1.3

Quelle mthode utiliser ?

Dans les cas simples comportant deux ou trois divisions, ces deux mthodes permettent daboutir au mme rsultat. Cest dans les cas plus complexes que lune est gnralement prfrable lautre. Les exemples qui suivent vont illustrer lutilisation de ces proprits. 321

Chapitre 15. Feuilles de style CSS

15.11.2

Dimensionnement des divisions

Les dimensions du rectangle contenant une division sadaptent automatiquement son contenu, comme cest le cas pour tous les lments tudis. Nanmoins il est possible que le contenu dune division varie dune page une autre, entranant des changements des dimensions de cette division qui peuvent tre inesthtiques. Il est donc courant de spcier la largeur ou la hauteur dune division (en pratique, on peut le faire pour nimporte quel lment mais cette possibilit est rarement utilise en dehors des divisions) au moyen respectivement des proprits width et height. Celles-ci acceptent comme valeur soit une longueur (voir le paragraphe 15.6 page 302) soit un pourcentage (les pourcentages sont relatifs la taille de la fentre du butineur).
http://www.w3.org/TR/CSS21/visudet.html#propdef-width http://www.w3.org/TR/CSS21/visudet.html#propdef-height

15.11.3

Une barre latrale de navigation

Lutilisation la plus rpandue des divisions consiste inclure une barre latrale de navigation permettant daccder aux diffrentes pages ou rubriques dun site sans avoir le parcourir dune manire linaire. Dans la page HTML (gure 15.5 page suivante), ceci se fait simplement en rajoutant deux lments div, lun encadrant une liste dhyperliens pour crer la barre latrale de navigation, lautre encadrant la partie principale de la page. Chaque division est munie de son propre identiant. Si plusieurs pages dun mme site doivent tre munies dune barre latrale de navigation, la division correspondante doit gurer dans chaque page. Il est important que la division correspondant la barre latrale de navigation soit indique avant celle correspondant la partie principale de la page pour lagencement avec la proprit float. En effet, avec lordre inverse, plutt que davoir les deux divisions cte cte, le haut de la barre latrale de navigation serait plac au niveau du bas de la partie principale. En revanche, lordre des divisions na pas dimportance pour lagencement avec la proprit position. Bien entendu, il nest indiqu nulle part dans la page HTML o doivent tre places les deux divisions. Nous allons tudier comment les agencer au moyen de la proprit position (paragraphe 15.11.3.1) puis au moyen de la proprit float (paragraphe 15.11.3.2 page 325). La barre latrale de navigation sera place gauche et la partie principale droite. La disposition inverse est laisse en exercice au lecteur. 15.11.3.1 Agencement avec la proprit position

La feuille de style prsente dans la gure 15.6 page 324 permet lagencement de la barre latrale de navigation et de la partie principale de la page HTML de la gure 15.5 page suivante au moyen de la proprit position. 322

15.11. Llment div et les divisions

<div id="barre"> <ul> <li> <a href="page1.html">page1</a> </li> <li> <a href="page2.html">page2</a> </li> <li> <a href="page3.html">page3</a> </li> <li> <a href="page4.html">page4</a> </li> <li> <a href="page5.html">page5</a> </li> </ul> </div> <div id="principal"> <p> Former des ingnieurs capables dassurer la conception, la ralisation et la direction de systmes complexes, sous des contraintes conomiques fortes et dans un environnement international. </p> </div>

FIGURE 15.5 Barre latrale de navigation : exemple de page HTML.

Tout dabord, tudions les proprits de la division barre, correspondant la barre latrale de navigation : la proprit background-color permet de matrialiser le fond de la barre latrale de navigation an de bien en discerner les limites et de la diffrencier visuellement de la partie principale ; la proprit position indique, par sa valeur absolute, que la barre latrale de navigation pourra dler avec le reste de la page ; la proprit top indique que la barre latrale de navigation sera place la distance 0 du haut de la page ; la proprit left indique que la barre latrale de navigation sera place la distance 0 du bord gauche de la page ; la proprit width indique que la barre latrale de navigation aura une largeur gale 20 % de celle de la page. La combinaison des proprits top et left fait que la barre latrale de navigation sera positionne en haut et gauche de la page. 323

Chapitre 15. Feuilles de style CSS

div#barre { background-color : #cccccc ; position : absolute ; top : 0 ; left : 0 ; width : 20% ; } div#principal { position : absolute ; top : 0 ; left : 0 ; margin-left : 20% ; }

FIGURE 15.6 Barre latrale de navigation (proprit position) : exemple de feuille de style.

Les proprits de la division principal, correspondant la partie principale de la page, nappellent que peu de commentaires. Cette division est positionne de la mme faon que la barre latrale de navigation. Nanmoins, une marge gauche (proprit margin-left) de 20 % permet den dcaler le contenu an de laisser sufsamment despace la barre latrale de navigation. Il est important que cette marge ait une largeur suprieure ou gale celle de la barre latrale de navigation.

FIGURE 15.7 Barre latrale de navigation (proprit position) : rendu dans un butineur. Enn, le rendu de la page HTML dans un butineur (gure 15.7) permet dapprcier 324

15.11. Llment div et les divisions le rsultat. On se rend compte cette occasion que le texte de la division principale est coll au fond color de la barre de navigation latrale. Attribuer une petite valeur (par exemple 1em) lespacement gauche de la division principale permettrait de larer un peu. De mme, il nest pas ncessaire que la liste de liens soit si loigne du bord gauche de la barre latrale de navigation. Les listes ont par dfaut un espacement gauche important. Lui attribuer une valeur infrieure (par exemple 1.5em) pourrait tre intressant. Lorsquon agence des divisions, il arrive frquemment de se rendre compte quil faut agir sur une marge ou un espacement ici ou l. 15.11.3.2 Agencement avec la proprit float

La feuille de style prsente dans la gure 15.8 permet lagencement de la barre latrale de navigation et de la partie principale de la page HTML de la gure 15.5 page 323 au moyen de la proprit float.
div#barre { background-color : #cccccc ; float : left ; width : 20% ; } div#principal { margin-left : 20% ; }

FIGURE 15.8 Barre latrale de navigation (proprit float) : exemple de feuille de style. Dans la division barre, on retrouve les proprits background-color et width alors que les proprits position, top et left ont t remplaces par la seule proprit float, dont la valeur est left. Ceci indique que la division doit tre place gauche (par rapport ce que serait sa position autrement). Dans la mesure o elle est dj en haut de la page, il nest nul besoin dindiquer sa position verticale. De la mme faon, dans la division principal, il nest ncessaire dindiquer que la largeur de la marge gauche. Enn, le rendu de la page HTML dans un butineur (gure 15.9 page suivante) montre que la barre latrale de navigation est ici plus loigne des bords haut et gauche de la page. Elle est en effet soumise aux marges par dfaut impos llment body par le butineur, ce qui nest pas le cas avec la proprit position. On se rend 325

Chapitre 15. Feuilles de style CSS

FIGURE 15.9 Barre latrale de navigation (proprit float) : rendu dans un butineur.

compte quil faudrait galement agir sur les largeurs de lespacement gauche de la division principale et de la liste de liens, comme dans lexemple prcdent.

15.11.4

Deux barres latrales

Une autre disposition courante comporte deux barres latrales, lune gauche et lautre droite. Dans la page HTML (gure 15.10 page ci-contre), ceci se fait simplement avec trois lments div, un pour chaque barre latrale et un pour la partie principale de la page. Comme dans lexemple avec une seule barre, il est important que la division correspondant la partie principale de la page soit la dernire pour que lagencement avec la proprit float soit correct. 15.11.4.1 Agencement avec la proprit position

La feuille de style prsente dans la gure 15.11 page 328 permet lagencement des barres latrales et de la partie principale de la page HTML de la gure 15.10 page ci-contre au moyen de la proprit position. Le principe est dans la ligne de celui de lexemple avec une seule barre et nappelle pas de commentaires particuliers. Enn, le rendu de la page HTML dans un butineur (gure 15.12 page 329) permet dapprcier le rsultat. 15.11.4.2 Agencement avec la proprit float

La feuille de style prsente dans la gure 15.13 page 329 permet lagencement des barres latrales et de la partie principale de la page HTML de la gure 15.10 page suivante au moyen de la proprit float. Le principe est dans la ligne de celui de lexemple avec une seule barre et nappelle pas de commentaires particuliers. 326

15.11. Llment div et les divisions

<div id="barre-1"> <ul> <li> <a href="page1.html">page1</a> </li> <li> <a href="page2.html">page2</a> </li> <li> <a href="page3.html">page3</a> </li> <li> <a href="page4.html">page4</a> </li> <li> <a href="page5.html">page5</a> </li> </ul> </div> <div id="barre-2"> <p> Ici, on peut indiquer les dernires nouvelles. </p> <hr/> <p> Ici, on peut indiquer les dernires nouvelles. </p> </div> <div id="principal"> <p> Former des ingnieurs capables dassurer la conception, la ralisation et la direction de systmes complexes, sous des contraintes conomiques fortes et dans un environnement international. </p> </div>

FIGURE 15.10 Deux barres latrales : exemple de page HTML.

327

Chapitre 15. Feuilles de style CSS

div#barre-1 { background-color : #cccccc ; position : absolute ; top : 0 ; left : 0 ; width : 30% ; } div#barre-2 { background-color : #cccccc ; position : absolute ; top : 0 ; right : 0 ; width : 30% ; } div#principal { position : absolute ; top : 0 ; left : 0 ; margin-left : 30% ; margin-right : 30% ; }

FIGURE 15.11 Deux barres latrales (proprit position) : exemple de feuille de style.

Enn, le rendu de la page HTML dans un butineur (gure 15.14 page 330) permet dapprcier le rsultat.

328

15.11. Llment div et les divisions

FIGURE 15.12 Deux barres latrale (proprit position) : rendu dans un butineur.

div#barre-1 { background-color : #cccccc ; float : left ; width : 30% ; } div#barre-2 { background-color : #cccccc ; float : right ; width : 30% ; } div#principal { margin-left : 30% ; margin-right : 30% ; }

FIGURE 15.13 Deux barres latrales (proprit float) : exemple de feuille de style.

329

Chapitre 15. Feuilles de style CSS

FIGURE 15.14 Deux barre latrales (proprit float) : rendu dans un butineur.

330

Annexes

A
Rcapitulatif des commandes des diteurs de texte

Dplacement aller en dbut de ligne aller en n de ligne se dplacer de mot en mot se dplacer de paragraphe en paragraphe aller sur la ligne numro n Suppression supprimer le caractre sous le curseur supprimer la n du mot partir du curseur supprimer la n de la ligne Excution multiple excuter n fois une commande rpter la dernire commande Copier-coller, couper-coller copier-coller couper-coller Annulation annuler la modication prcdente annuler la commande en cours
C-/ M- n <commande> C-x z C-d M-d C-k M-g M-g saisir C-a C-e C- C- CC-


M-g g

ou

puis

dans le minibuffer

la souris souris, C-w et souris ou


C-g C-_

TABLE A.1 Rcapitulatif des commandes dEmacs tudies.

333

Annexe A. Rcapitulatif des commandes des diteurs de texte

Fichiers sauvegarder le chier sauvegarder le chier en le nommant lire un chier Recherche, remplacement recherche interactive (vers le bas) recherche interactive (vers le haut) recherche et remplacement Divers reformater le paragraphe appeler une commande par son nom complet couper la fentre en deux Quitter quitter
C-x C-c M-q M-x C-x 2 C-s C-r M-% C-x C-s C-x C-w C-x C-f

TABLE A.1 Rcapitulatif des commandes dEmacs tudies (suite et n).

Passage en mode insertion, en mode commande passage en mode insertion au caractre situ sous le curseur passage en mode insertion au caractre situ aprs le curseur passage en mode insertion en dbut de ligne passage en mode insertion en n de ligne passage en mode insertion au-dessous de la ligne actuelle passage en mode insertion au-dessus de la ligne actuelle passage en mode commande Dplacement gauche, bas, haut, droite aller en dbut de ligne aller en n de ligne se dplacer de mot en mot se dplacer de paragraphe en paragraphe aller sur la dernire ligne aller sur la ligne numro n
h j k l 0 $ W B { } G i a I A o O
Esc

nG

TABLE A.2 Rcapitulatif des commandes de vi et de Vim tudies.

334

Annexe A. Rcapitulatif des commandes des diteurs de texte

Suppression supprimer le caractre sous le curseur supprimer la n du mot partir du curseur supprimer la n de la ligne supprimer la ligne Excution multiple excuter n fois une commande rpter la dernire commande Copier-coller, couper-coller copier-coller couper-coller Annulation annuler la modication prcdente annuler la commande en cours Fichiers sauvegarder le chier lire un chier Recherche, remplacement recherche (vers le bas) recherche (vers le haut) recherche et remplacement Divers joindre la ligne suivante la ligne courante Les commandes suivantes sont spciques Vim. limiter la saisie des lignes n caractres :set reformater le paragraphe Quitter quitter sauvegarder le chier et quitter quitter sans sauvegarder le chier
:q :wq :x ZZ :q! J textwidth= n gqap / ? :s :w :e u
Esc

x dw D dd

n <commande>
.

[ n ]yy p [ n ]dd p

TABLE A.2 Rcapitulatif des commandes de vi et de Vim tudies (suite et n).

335

B
Rcapitulatif des commandes

Commande
date passwd

Description afche la date et lheure change le mot de passe de lutilisateur

O 3.5 page 34 3.6 page 36

TABLE B.1 Rcapitulatif des commandes tudies dans la premire partie, Introduction .

Commande
iconv emacs vi vim

Description convertit le codage dun chier texte diteur de texte Emacs diteur de texte vi diteur de texte Vim

O 4.5.1 page 51 5.1 page 53 6.1 page 67 6.1 page 67

TABLE B.2 Rcapitulatif des commandes tudies dans la deuxime partie, Du texte et des diteurs de texte .

Commande
sh csh tcsh ksh bash zsh

Description Bourne shell C shell TENEX C shell Korn shell Bourne-again shell Z shell

O 7.1 page 80 7.1 page 80 7.1 page 80 7.1 page 80 7.1 page 80 7.1 page 80

TABLE B.3 Rcapitulatif des commandes tudies dans le chapitre 7, Linterprteur de commandes . 337

Annexe B. Rcapitulatif des commandes Commande


cal ls cat more less man clear exit

Description afche le calendrier afche la liste des chiers afche le contenu dun chier texte afche le contenu dun chier texte avec contrle afche le contenu dun chier texte avec contrle afche le manuel dune commande efface lcran de linterprteur de commandes quitte linterprteur de commandes

O 7.2.3 page 84 7.3 page 88 7.4.1 page 92 7.4.2 page 92 9.5.1 page 184 7.4.3 page 93 9.5.1 page 184 7.5 page 93 7.6 page 94 7.7 page 95

TABLE B.3 Rcapitulatif des commandes tudies dans le chapitre 7, Linterprteur de commandes (suite et n).

Commande
cp mv rm ln mkdir cd pwd rmdir chmod umask find quota du df compress uncompress gzip gunzip

Description copie un chier copie plusieurs chiers renomme un chier dplace des chiers supprime des chiers supprime des rpertoires cre des liens cre des rpertoires change de rpertoire afche le rpertoire courant supprime des rpertoires modie les droits daccs modie les droits daccs retrouve des chiers afche ses quotas afche lespace occup par chaque rpertoire afche loccupation des disques comprime des chiers dcomprime des chiers comprime des chiers dcomprime des chiers

O 8.1.1 page 97 8.3.3.1 page 111 8.1.2 page 98 8.3.3.2 page 112 8.1.3 page 100 8.3.7.2 page 121 8.1.4 page 100 8.3.3.3 page 113 8.3.1 page 107 8.3.4 page 113 8.3.4 page 113 8.3.7.1 page 121 8.5.3 page 131 8.5.4 page 133 8.7.1.1 page 137 8.7.1.2 page 140 8.7.1.3 page 141 8.7.1.4 page 143 8.7.2.1 page 145 8.7.2.1 page 145 8.7.2.2 page 146 8.7.2.2 page 146

TABLE B.4 Rcapitulatif des commandes tudies dans le chapitre 8, Gestion, organisation et traitement des chiers . 338

Annexe B. Rcapitulatif des commandes Commande


bzip2 bunzip2 lzma unlzma xz unxz tar zip unzip unrar

Description comprime des chiers dcomprime des chiers comprime des chiers dcomprime des chiers comprime des chiers dcomprime des chiers archivage archivage et compression dsarchivage dsarchivage

O 8.7.2.3 page 147 8.7.2.3 page 147 8.7.2.4 page 148 8.7.2.4 page 148 8.7.2.5 page 149 8.7.2.5 page 149 8.7.3.1 page 150 8.7.4.1 page 153 8.7.4.1 page 153 8.7.4.2 page 154

TABLE B.4 Rcapitulatif des commandes tudies dans le chapitre 8, Gestion, organisation et traitement des chiers (suite et n).

Commande
history type which ps top kill true false grep awk sed sort wc nohup nice renice screen tmux

Description afche lhistorique des commandes afche le chemin daccs absolu dune commande afche le chemin daccs absolu dune commande afche la liste des processus afche la liste des processus envoie un signal un processus envoie un statut de sortie vrai envoie un statut de sortie faux recherche utilisant une expression rationnelle utilise le langage de programmation AWK diteur de texte non interactif trie les lignes dun texte afche le nombre de lignes, de mots et doctets dun texte lance un processus en lmancipant lance un processus en modiant sa priorit modie la priorit dun processus multiplexeur de terminaux multiplexeur de terminaux

O 9.1 page 157 9.2.3 page 162 9.2.3 page 162 9.3.3 page 167 9.3.4 page 169 9.3.5 page 170 9.3.6.3 page 174 9.3.6.3 page 174 9.5.2 page 185 9.5.3 page 189 9.5.4 page 194 9.5.5 page 196 9.5.6 page 198 9.6.1 page 200 9.6.2 page 201 9.6.2 page 201 9.6.3 page 202 9.6.4 page 204

TABLE B.5 Rcapitulatif des commandes tudies dans le chapitre 9, Commandes, processus et redirections . 339

Annexe B. Rcapitulatif des commandes Commande


lpq lprm lpr psselect psnup a2ps enscript iconv pdftops

Description afche la le dattente dune imprimante supprime un travail dimpression imprime un chier PostScript slectionne les pages imprimer imprime plusieurs pages par feuille de papier imprime un chier texte imprime un chier texte convertit le codage dun chier texte convertit un chier PDF en chier PostScript

O 10.2.1 page 208 10.2.2 page 209 10.4.1 page 212 10.4.2.1 page 213 10.4.2.2 page 213 10.5.1 page 214 10.5.2 page 216 10.5.3 page 218 10.6 page 219

TABLE B.6 Rcapitulatif des commandes tudies dans le chapitre 10, Impression .

Commande
ssh ssh-keygen hostname scp who w

Description connexion sur un ordinateur distant afche lempreinte dune cl publique afche le nom de lordinateur transfert de chier avec un ordinateur distant afche la liste des utilisateurs connects afche la liste des utilisateurs connects

O 11.2 page 224 11.2.1 page 225 11.2.1 page 225 11.3 page 228 11.4 page 229 11.4 page 229

TABLE B.7 Rcapitulatif des commandes tudies dans le chapitre 11, Connexion distance .

Commande
test

Description teste chiers, chanes de caractres et entiers

O 12.7.1.1 page 238

TABLE B.8 Rcapitulatif des commandes tudies dans le chapitre 12, Programmation .

340

C
Rcapitulatif des lments HTML et des proprits CSS

lment
a abbr acronym b body br caption cite code dd dfn div dl dt em h1 h2 h3 h4 h5 h6 head hr html i img

Description hyperlien abrviation acronyme gras corps de la page retour la ligne lgende dun tableau citation code informatique description dun lment de liste dl dnition division liste contenant des dnitions terme dun lment de liste dl mise en valeur titre de premier niveau titre de deuxime niveau titre de troisime niveau titre de quatrime niveau titre de cinquime niveau titre de sixime niveau en-tte de la page let document HTML italique image

O 14.5 page 273 14.4.5 page 271 14.4.5 page 271 14.4.6 page 271 14.1.2 page 266 14.4.4 page 270 14.8 page 277 14.4.5 page 271 14.4.5 page 271 14.7 page 275 14.4.5 page 271 15.11 page 319 14.7 page 275 14.7 page 275 14.4.5 page 271 14.4.1 page 267 14.4.1 page 267 14.4.1 page 267 14.4.1 page 267 14.4.1 page 267 14.4.1 page 267 14.1.1 page 265 14.4.3 page 270 14.1 page 264 14.4.6 page 271 14.6 page 274

TABLE C.1 Rcapitulatif des lments HTML tudis. 341

Annexe C. Rcapitulatif des lments HTML et des proprits CSS lment


kbd li link meta ol p samp span strong sub sup table td th title tr tt ul var

Description saisie au clavier lment de liste ul et ol fait rfrence une feuille de style informations supplmentaires sur le document liste ordonne paragraphe exemple de rsultat lment tout faire mise en valeur de manire plus forte que em infrieur suprieur tableau cellule de donne dun tableau cellule de titre dun tableau titre ligne dun tableau police chasse xe liste non ordonne nom dune variable ou dun argument

O 14.4.5 page 271 14.7 page 275 15.1 page 284 14.1.1 page 265 14.7 page 275 14.4.2 page 268 14.4.5 page 271 15.10 page 317 14.4.5 page 271 14.4.7 page 272 14.4.7 page 272 14.8 page 277 14.8 page 277 14.8 page 277 14.1.1 page 265 14.8 page 277 14.4.6 page 271 14.7 page 275 14.4.5 page 271

TABLE C.1 Rcapitulatif des lments HTML tudis (suite et n).

Proprit
background-color border-collapse border-color border-style border-width bottom caption-side color float font-family font-size font-style font-weight height

Description couleur de fond fusion des bordures dun tableau couleur de la bordure style de la bordure paisseur de la bordure position dune division position de la lgende dun tableau couleur position dune division police de caractres corps des caractres inclinaison des caractres graisse des caractres hauteur

O 15.5.3 page 301 15.9.2 page 316 15.8.3 page 314 15.8.3 page 314 15.8.3 page 314 15.11.1.1 page 319 15.9.1 page 315 15.5.2 page 301 15.11.1.2 page 320 15.7.1 page 303 15.7.4 page 305 15.7.2 page 304 15.7.3 page 305 15.11.2 page 322

TABLE C.2 Rcapitulatif des proprits CSS tudies. 342

Annexe C. Rcapitulatif des lments HTML et des proprits CSS Proprit


left margin margin-bottom margin-left margin-right margin-top padding padding-bottom padding-left padding-right padding-top position right text-align text-decoration text-indent top width

Description position dune division marge marge du bas marge de gauche marge de droite marge du haut espacement espacement du bas espacement de gauche espacement de droite espacement du haut position dune division position dune division alignement du texte dcoration du texte taille de lalina position dune division largeur

O 15.11.1.1 page 319 15.8.1 page 309 15.8.1 page 309 15.8.1 page 309 15.8.1 page 309 15.8.1 page 309 15.8.2 page 313 15.8.2 page 313 15.8.2 page 313 15.8.2 page 313 15.8.2 page 313 15.11.1.1 page 319 15.11.1.1 page 319 15.7.6 page 306 15.7.7 page 307 15.7.5 page 306 15.11.1.1 page 319 15.11.2 page 322

TABLE C.2 Rcapitulatif des proprits CSS tudies (suite et n).

343

Bibliographie

De nombreux ouvrages gurant dans cette bibliographie sont consultables la bibliothque de lENSTA ParisTech.

Du texte et des diteurs de texte


[1] Debra CAMERON. GNU Emacs Pocket Reference. OReilly Media, novembre 1998. URL : http://oreilly.com/catalog/9781565924963/. Debra CAMERON, James ELLIOTT, Marc LOY, Eric RAYMOND et Bill ROSENBLATT . Learning GNU Emacs. 3e dition. OReilly Media, dcembre 2004. URL : http://oreilly.com/catalog/9780596006488/. Steve OUALLINE. Vi IMprovedVim. Landmark. Sams, 2001. URL : http://www.informit.com/store/product.aspx?isbn=0735710015. Arnold ROBBINS. vi Editor Pocket Reference. OReilly Media, janvier 1999. URL : http://oreilly.com/catalog/9781565924970/. Arnold ROBBINS, Linda L AMB et Elbert HANNAH. Learning the vi and Vim Editors. 7e dition. OReilly Media, juillet 2008. URL : http://oreilly.com/catalog/9780596529833/. 345

[2]

[3]

[4]

[5]

Bibliographie [6] Michael A. SCHOONOVER, John S. BOWIE et William R. ARNOLD. GNU Emacs : UNIX Text Editing and Programming. Addison-Wesley Professional, 1992. URL : http://www.informit.com/store/product.aspx?isbn=0201563452. Kim SCHULZ. Hacking Vim 7.2. Packt Publishing, avril 2010. URL : https://www.packtpub.com/hacking-vim-7-2/book. Richard STALLMAN. GNU Emacs Manual. 16e dition. Free Software Foundation, 2009. URL : http://www.gnu.org/software/emacs/manual/emacs.html.

[7]

[8]

Linterprteur de commandes
[9] Alfred V. AHO, Brian W. KERNIGHAN et Peter J. WEINBERGER. The AWK Programming Language. Addison-Wesley, 1988. URL : http://cm.bell-labs.com/cm/cs/awkbook/. Carl ALBING, JP VOSSEN et Cameron NEWHAM. bash Cookbook. OReilly Media, mai 2007. URL : http://oreilly.com/catalog/9780596526788/. Gail ANDERSON et Paul ANDERSON. The UNIX C Shell Field Guide. Prentice Hall, avril 1986. URL : http://www.asgteach.com/books/unix.htm. John BAMBENEK et Agnieszka KLUS. grep Pocket Reference. OReilly Media, janvier 2009. URL : http://oreilly.com/catalog/9780596153618/. Daniel J. BARRETT, Richard E. SILVERMAN et Robert G. BYRNES. SSH, The Secure Shell : The Denitive Guide. 2e dition. OReilly Media, mai 2005. URL : http://oreilly.com/catalog/9780596008956/.

[10]

[11]

[12]

[13]

346

Bibliographie [14] Christine DEFFAIX RMY. Programmation shell sous Unix/Linux. sh (Bourne), ksh, bash. 2e dition. ditions ENI, mai 2008. URL : http://www.editions-eni.fr/. Dale DOUGHERTY et Arnold ROBBINS. sed & awk. 2e dition. OReilly Media, mars 1997. URL : http://oreilly.com/catalog/9781565922259/. Paul DUBOIS. Using csh & tcsh. OReilly Media, juillet 1995. URL : http://oreilly.com/catalog/9781565921320/. Jeffrey E.F. FRIEDL. Mastering Regular Expressions. 3e dition. OReilly Media, aot 2006. URL : http://oreilly.com/catalog/9780596528126/. Jan GOYVAERTS et Steven LEVITHAN. Regular Expressions Cookbook. OReilly Media, mai 2009. URL : http://oreilly.com/catalog/9780596520694/. Cameron NEWHAM et Bill ROSENBLATT. Learning the bash Shell. 3e dition. OReilly Media, mars 2005. URL : http://oreilly.com/catalog/9780596009656/. Ellie QUIGLEY. UNIX Shells by Example. 4e dition. Prentice Hall, 2005. URL : http://www.informit.com/store/product.aspx?isbn=013147572X. Arnold ROBBINS. Effective awk Programming. 3e dition. OReilly Media, mai 2001. URL : http://oreilly.com/catalog/9780596000707/.

[15]

[16]

[17]

[18]

[19]

[20]

[21]

347

Bibliographie [22] Arnold ROBBINS. sed & awk Pocket Reference. 2e dition. OReilly Media, juin 2002. URL : http://oreilly.com/catalog/9780596003524/. Arnold ROBBINS. bash Quick Reference. OReilly Media, juin 2006. URL : http://oreilly.com/catalog/9780596527761/. Arnold ROBBINS et Nelson H.F. BEEBE. Classic Shell Scripting. OReilly Media, mai 2005. URL : http://oreilly.com/catalog/9780596005955/. Bill ROSENBLATT et Arnold ROBBINS. Learning the Korn Shell. 2e dition. OReilly Media, avril 2002. URL : http://oreilly.com/catalog/9780596001957/. Michael STAHNKE. Pro OpenSSH. Apress, octobre 2005. URL : http://www.apress.com/9781590594766. Tony STUBBLEBINE. Regular Expression Pocket Reference. 2e dition. OReilly Media, juillet 2007. URL : http://oreilly.com/catalog/9780596514273/. Sriranga VEERARAGHAVAN. Sams Teach Yourself Shell Programming in 24 Hours. 2e dition. Sams Teach Yourself. Sams, 2002. URL : http://www.informit.com/store/product.aspx?isbn=0672323583.

[23]

[24]

[25]

[26]

[27]

[28]

Cration dun site Web


[29] Christophe AUBRY. CSS 2.1. Adoptez les feuilles de style pour matriser les standards du web. 2e dition. ditions ENI, juin 2008. URL : http://www.editions-eni.fr/. 348

Bibliographie [30] Christophe AUBRY. CSS. Russir la mise en page de vos sites Web. ditions ENI, janvier 2010. URL : http://www.editions-eni.fr/. Francis DRAILLARD. Premiers pas en CSS et XHTML. 3e dition. Eyrolles, avril 2010. URL : http://www.eyrolles.com/Informatique/Livre/premiers-pas-en-cs s-et-xhtml-9782212127249. Raphal GOETTER. CSS 2. Pratique du design web. 3e dition. Eyrolles, janvier 2009. URL : http://www.goetter.fr/livres/css2/. Raphal GOETTER. Mmento CSS. 2e dition. Eyrolles, juillet 2009. URL : http://www.eyrolles.com/Informatique/Livre/memento-css-978221 2125429. Raphal GOETTER. Mmento XHTML. 2e dition. Eyrolles, juillet 2009. URL : http://www.eyrolles.com/Informatique/Livre/memento-xhtml-9782 212125412. Raphal GOETTER. CSS avances. Vers HTML5 et CSS3. Eyrolles, mars 2011. URL : http://www.goetter.fr/livres/css-avancees/. Ben HENICK. HTML & CSS : The Good Parts. OReilly Media, fvrier 2010. URL : http://oreilly.com/catalog/9780596157616/. Brian P. HOGAN. HTML5 & CSS3. Develop with Tomorrows Standards Today. The Pragmatic Programmers, dcembre 2010. URL : http://www.pragprog.com/titles/bhh5/html5-and-css3.

[31]

[32]

[33]

[34]

[35]

[36]

[37]

349

Bibliographie [38] Michel MARTIN. HTML5 et CSS3. Lessentiel des pratiques actuelles. Pearson, mars 2011. URL : http://www.pearson.fr/livre/?GCOI=27440100242490. Julie C. MELONI et Michael MORRISON. Sams Teach Yourself HTML and CSS in 24 Hours. 8e dition. Sams Teach Yourself. Sams, 2010. URL : http://www.informit.com/store/product.aspx?isbn=0672330970. Eric A. MEYER. CSS : The Denitive Guide. 3e dition. OReilly Media, novembre 2006. URL : http://oreilly.com/catalog/9780596527334/. Eric A. MEYER. CSS Pocket Reference. 3e dition. OReilly Media, octobre 2007. URL : http://oreilly.com/catalog/9780596515058. Chuck MUSCIANO et Bill KENNEDY. HTML & XHTML : The Denitive Guide. 6e dition. OReilly Media, octobre 2006. URL : http://oreilly.com/catalog/9780596527327/. Mathieu NEBRA. Russir son site web avec XHTML et CSS. 3e dition. Eyrolles, janvier 2010. URL : http://www.eyrolles.com/Informatique/Livre/reussir-son-site-w eb-avec-xhtml-et-css-9782212124859. Mark PILGRIM. HTML5 : Up and Running. OReilly Media, aot 2010. URL : http://oreilly.com/catalog/9780596806033/. Jennifer Niederst ROBBINS. HTML & XHTML Pocket Reference. 4e dition. OReilly Media, dcembre 2009. URL : http://oreilly.com/catalog/9780596805876/. 350

[39]

[40]

[41]

[42]

[43]

[44]

[45]

Bibliographie [46] Christopher SCHMITT. CSS Cookbook. 3e dition. OReilly Media, dcembre 2009. URL : http://oreilly.com/catalog/9780596155940/. Luc VAN L ANCKER. HTML 4. Matrisez le code source. 3e dition. ditions ENI, octobre 2008. URL : http://www.editions-eni.fr/. Luc VAN L ANCKER. XHTML et CSS. Les nouveaux standards du code source. 2e dition. ditions ENI, octobre 2008. URL : http://www.editions-eni.fr/. Luc VAN L ANCKER. HTML5 et CSS3. Matrisez les standards des applications Web. ditions ENI, mars 2011. URL : http://www.editions-eni.fr/. John C. VANDEN-HEUVEL Sr. HTML for Babies. Tome 1. Web Design for Babies. Code Babies Media, 2011. URL : http://codebabies.com/.

[47]

[48]

[49]

[50]

Typographie
[51] Jean-Pierre L ACROUX. Orthotypographie, Orthographe & Typographie franaises, Dictionnaire raisonn. 2007. URL : http://www.orthotypographie.fr/. Lexique des rgles typographiques en usage lImprimerie nationale. 3e dition. Imprimerie nationale. Juillet 2002.

[52]

351

Bibliographie

Divers
[53] Louis LON et Franoise MILLET. La machine UNIX. ditions Cpadus, 1992. URL : http://www.cepadues.com/livre_details.asp?l=267. Alfred J. MENEZES, Paul C. van OORSCHOT et Scott A. VANSTONE. Handbook of Applied Cryptography. CRC Press, octobre 1996. URL : http://www.cacr.math.uwaterloo.ca/hac/. Bruce SCHNEIER. Applied Cryptography. 2e dition. John Wiley & Sons, 1996. URL : http://www.schneier.com/book-applied.html.

[54]

[55]

352

Index

A
account . . . . . . . . . . . . . . . . . voir compte AIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 architecture en couches . . . . . . . . . . . 33 AZERTY . . . . . . . . . . . . . . . . . . . . . . . . 29

exaoctet . . . . . . . . . . . . . . . . . . . . . . . . . 27 exbioctet . . . . . . . . . . . . . . . . . . . . . . . . . 27

F
chier . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 ngerprint . . . . . . . . . . . . voir empreinte format . . . . . . . . . . . . . . . . . . . . . . 44, 253 ferm . . . . . . . . . . . . . . . . . . . . . . 254 ouvert . . . . . . . . . . . . . . . . . . . . . 254 FreeBSD . . . . . . . . . . . . . . . . . . . . . . . . . 19

B
babasse . . . . . . . . . . . . . . . . . . . . . . . . . . 29 bpo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 binaire . . . voir systme de numration bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 bote outils . . . . . . . . . . . . . . . . . . . . . 33 BSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 bureau virtuel . . . . . . . . . . . . . . . . . . . . 34

G
gestionnaire dafchage . . . . . . . . . . . gestionnaire de fentres . . . . . . . . . . . gibioctet . . . . . . . . . . . . . . . . . . . . . . . . . gigaoctet . . . . . . . . . . . . . . . . . . . . . . . . . 31 34 27 27

C
chiffrement . . . . . . . . . . . . . . . . . . . . . 222 composant dinterface graphique . . . 33 compte . . . . . . . . . . . . . . . . . . . . . . . . . . 31

H
hexadcimal . . . . . . . . . voir systme de numration home directory . . . . . . . . voir rpertoire personnel HP-UX . . . . . . . . . . . . . . . . . . . . . . . . . . 19

D
Darwin . . . . . . . . . . . . . . . . . . . . . . . . . . 19 dcimal . . voir systme de numration desktop environment . . . . . . . . . . . . voir environnement de bureau display manager . . . . . voir gestionnaire dafchage Dvorak . . . . . . . . . . . . . . . . . . . . . . . . . . 30

I
identiant . . . . . . . . . . . . . . . . . . . . . . . . 31 Internet . . . . . . . . . . . . . . . . . . . . . . . . . 39 ISO 8601 . . . . . . . . . . . . . . . . . . . . . . . 135

E
empreinte . . . . . . . . . . . . . . . . . . . . . . . 224 environnement de bureau . . . . . . 32, 34 353

J
JBM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

Index

K
kibioctet . . . . . . . . . . . . . . . . . . . . . . . . . 27 kilooctet . . . . . . . . . . . . . . . . . . . . . . . . . 27

QWERTY . . . . . . . . . . . . . . . . . . . . . . . 29 QWERTZ . . . . . . . . . . . . . . . . . . . . . . . 30

R
rpertoire personnel . . . . . . . . . . . . . . 31

L
Linux . . . . . . . . . . . . . . . . . . . . . . . . 19, 29 login . . . . . . . . . . . . . . . . . voir identiant

S
scheduler . . . . . . . . . voir ordonnanceur scheduling . . . . . . voir ordonnancement session . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 systme de numration . . . . . . . . . . . 23 binaire . . . . . . . . . . . . . . . . . . . . . . 25 dcimal . . . . . . . . . . . . . . . . . . . . . 24 hexadcimal . . . . . . . . . . . . . . . . . 25 octal . . . . . . . . . . . . . . . . . . . . . . . . 25 systme dexploitation . . . . . . . . . . . . 18

M
Mac OS X . . . . . . . . . . . . . . . . . . . . . . . 19 mbioctet . . . . . . . . . . . . . . . . . . . . . . . . 27 mgaoctet . . . . . . . . . . . . . . . . . . . . . . . . 27 mot de passe . . . . . . . . . . . . . . . . . . . . . 31 Multics . . . . . . . . . . . . . . . . . . . . . . . . . . 18 multitche . . . . . . . . . . . . . . . . . . . 20, 164 premptif . . . . . . . . . . . . . . . . . . 165 multi-utilisateur . . . . . . . . . 20, 126, 221

T
tbioctet . . . . . . . . . . . . . . . . . . . . . . . . . 27 traoctet . . . . . . . . . . . . . . . . . . . . . . . . . 27 toolkit . . . . . . . . . . . . . voir bote outils

N
NetBSD . . . . . . . . . . . . . . . . . . . . . . . . . 19

O
octal . . . . . voir systme de numration octet . . . . . . . . . . . . . . . 26, voir aussi exaoctet ; exbioctet ; gibioctet ; gigaoctet ; kibioctet ; kilooctet ; mbioctet ; mgaoctet ; pbioctet ; ptaoctet ; tbioctet ; traoctet ; yobioctet ; yottaoctet ; zbioctet ; zettaoctet OpenBSD . . . . . . . . . . . . . . . . . . . 19, 204 operating system . . . . . . . . . voir systme dexploitation Oracle Solaris . . . . . . . . . . . . . . . . . . . . 19 ordonnancement . . . . . . . . . . . . . . . . 164 ordonnanceur . . . . . . . . . . . . . . . . . . . 164

U
UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

V
virtual desktop . . . . voir bureau virtuel

W
widget . . . . voir composant dinterface graphique window manager . voir gestionnaire de fentres

X
X . . . . . . . . . . . voir X Window System X Window System . . . . . . . . . . . . . . . 32 X11 . . . . . . . . . voir X Window System

P
password . . . . . . . . . . . voir mot de passe pbioctet . . . . . . . . . . . . . . . . . . . . . . . . 27 ptaoctet . . . . . . . . . . . . . . . . . . . . . . . . . 27

Y
yobioctet . . . . . . . . . . . . . . . . . . . . . . . . 27 yottaoctet . . . . . . . . . . . . . . . . . . . . . . . . 27

Z
zbioctet . . . . . . . . . . . . . . . . . . . . . . . . . 27 zettaoctet . . . . . . . . . . . . . . . . . . . . . . . . 27 354

Q
quantum . . . . . . . . . . . . . . . . . . . . . . . . 164

Index Du texte et des diteurs de texte

Les commandes des diteurs de texte sont rcapitules : dans le tableau A.1 page 333 pour Emacs ; dans le tableau A.2 page 334 pour vi et Vim.

A
ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
.txt

T
(extension) . . . . . . . . . . . . . . . . . . 53

C
codage . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 conversion . . . . . . . . . . . . . . . . . . 51 copier-coller . . . . . . . . . . . . . . . . . . . . . 60

U
Unicode . . . . . . . . . . . . . . . . . . . . . . . . . 48 UTF-8 . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

V
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
vi

E
diteur de texte . . . . . . . . . . . . . . . . . . . 52 Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

F
chier texte . . . . . . . . . . . . . . . . . . . . . . 43

I
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 ISO 8859 . . . . . . . . . . . . . . . . . . . . . . . . 47
iconv

L
ligne de mode . . . . . . . . . . . . . . . . . . . . 54

M
minibuffer . . . . . . . . . . . . . . . . . . . . . . . 54 mode line . . . . . . . . . voir ligne de mode 355

Index Linterprteur de commandes

Un rcapitulatif des commandes tudies gure galement dans lannexe B page 337.

Symboles
(excution dune commande de lhistorique) . . . . . . . . . . . . . . . . . 158, 159 !! (excution de la commande prcdente) 159 " . . . " (inhibition de caractres spciaux) 135 # (commentaire) . . . . . . . . . . . . . . . . . 235 # (variable spciale) . . . . . . . . . . . . . . 245 #! (script) . . . . . . . . . . . . . . . . . . . . . . . 234 $ (expression rationnelle) . . . . 186, 187 $ (valeur dune variable) . . . . . 162, 236 $(( . . . )) (calcul entier) . . . . . . . . . . 237 & (arrire-plan) . . . . . . . . . . . . . . . . . . 166 && (oprateur et) . . . . . . . . . . . . . . . . . 173 . . . (inhibition de caractres spciaux) 135 ( . . . ) (expression rationnelle) 186, 187 ) (instruction case) . . . . . . . . . . . . . . 242 * (expression rationnelle) . . . . 186, 187 * (mtacaractre) . . . . . . . . . . . . . . . . 124 + (expression rationnelle) . . . . 186, 187 - (suppression du premier de ses travaux dimpression) . . . . . . . . . . 209 . (expression rationnelle) . . . . . . . . 186
!

(rpertoire courant) . . . . . . . . . . . . 115 (rpertoire parent) . . . . . . . . . . . . 115 / (rpertoire racine) . . . . . . . . . . . . . . 116 / (sparateur) . . . . . . . . . . . . . . . 108, 134 2> (redirection de la sortie derreur standard) . . . . . . . . . . . . . . . . . . . . . . 177 ; (squence) . . . . . . . . . . . . . . . . . . . . . 174 ;; (instruction case) . . . . . . . . . . . . . 242 < (redirection de lentre standard) 179 > (redirection de la sortie standard) 176 >> (redirection de la sortie standard) 176 ? (expression rationnelle) . . . . 186, 187 ? (mtacaractre) . . . . . . . . . . . . . . . . 122 ? (variable spciale) . . . . . . . . . . . . . . 172 @ (variable spciale) . . . . . . . . . . . . . . 245 [ . . . ] (commande test) . . . . . . . . . 240 [ . . . ] (expression rationnelle) . . . . 186 [ . . . ] (mtacaractres) . . . . . . . . . . . 123 [^ . . . ] (expression rationnelle) . . 186, 187 \ (continuation de ligne) . . . . . . . . . 234 \ (inhibition dun caractre spcial) 134 ^ (expression rationnelle) . . . . 186, 187 ^ (touche Ctrl ) . . . . . . . . . . . . . . . . . . . 86 . . . (substitution de commande) 184
. ..

357

Index Linterprteur de commandes


{

. . . } (expression rationnelle) . . . . 186 (expression rationnelle) . . . . 186, 187 | (instruction case) . . . . . . . . . . . . . . 242 | (tuyau) . . . . . . . . . . . . . . . . . . . . . . . . 182 || (oprateur ou) . . . . . . . . . . . . . . . . 173 ~ (rpertoire personnel) . . . . . . . . . . 119
|

A
. . . . . . . . . . . . . . . . . . . . . . . 214, 218 option -1 . . . . . . . . . . . . . . . . . . 215 option -2 . . . . . . . . . . . . . . . . . . 215 option -4 . . . . . . . . . . . . . . . . . . . 214 option -o . . . . . . . . . . . . . . . . . . 216 option -P . . . . . . . . . . . . . . . . . . . 214 option -s . . . . . . . . . . . . . . . . . . 216 alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 archivage . . . . . . . . . . . . . . . . . . . . . . . 150 archive . . . . . . . . . . . . . . . . . . . . . . . . . 150 argument . . . . . . . . . . . . . . . . . . . . . . . . 91 arrire-plan . . . . . . . . . . . . . . . . . . . . . 166 awk . . . . . . . . . . . . . . . . . . . . 180, 189, 237 option -f . . . . . . . . . . . . . . . . . . 192
a2ps

chemin daccs . . . . . . . . . . . . . . 108, 118 absolu . . . . . . . . . . . . . . . . . . . . . 118 relatif . . . . . . . . . . . . . . . . . . . . . . 118 chmod . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 option -R . . . . . . . . . . . . . . . . . . 132 clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 commande . . . . . . . . . . . . . . . . . . . . . . . 79 externe . . . . . . . . . . . . . . . . . . . . . 161 interne . . . . . . . . . . . . . . . . . . . . . 161 commentaire . . . . . . . . . . . . . . . . . . . . 235 compltement . . . . . . . . . . . . . . 105, 108 completion . . . . . . . . voir compltement compress . . . . . . . . . . . . . . . . . . . . . . . 145 compression . . . . . . . . . . . . . . . . . . . . 144 cp . . . . . . . . . . . . . . . . . . . . . . . . . . . 97, 111 option -i . . . . . . . . . . . . . . . . . . . . 98 csh . . . . . . . . . . . . . . . . . . . . . . . . . . 81, 231

D
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 dcompression . . . . . . . . . . . . . . . . . . 145 df . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 option -h . . . . . . . . . . . . . . . . . . 143 option -k . . . . . . . . . . . . . . . . . . 143 directory . . . . . . . . . . . . . voir rpertoire do . . . . . . . . . . . . . . . . . . . . . . . . . 243, 245 done . . . . . . . . . . . . . . . . . . . . . . . 243, 245 dossier . . . . . . . . . . . . . . . . . . . . . . . . . . 107 droits daccs . . . . . . . . . . . . . . . . . . . 126 du . . . . . . . . . . . . . . . . . . . . . . . . . 141, 198 option -k . . . . . . . . . . . . . . . . . . . 141 option -s . . . . . . . . . . . . . . . . . . 143
date

B
background . . . . . . . . . voir arrire-plan bash . . . . . . . . . . . . . . . . . . . . . . . . . 81, 231 bc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 bg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Bourne shell . . . . . . . . . . . . . . . . . voir sh Bourne-again shell . . . . . . . . . voir bash bunzip2 . . . . . . . . . . . . . . . . . . . . . . . . . 148 .bz2 (extension) . . . . . . . . . . . . . . . . . 147 bzip2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

E C
C shell . . . . . . . . . . . . . . . . . . . . . voir csh cal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 case . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 casse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 cat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 catalog . . . . . . . . . . . . . . . . voir catalogue catalogue . . . . . . . . . . . . . . . . . . . . . . . 107 cd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 358
echo

. . . . . . . . . . . . . . . . . . . 123, 162, 236 egrep . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 elif . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 else . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 mulateur de terminal . . . . . . . . . . . . 82 enscript . . . . . . . . . . . . . . . . . . . 216, 218 option -D . . . . . . . . . . . . . . . . . . 218 option -E . . . . . . . . . . . . . . . . . . . 217 option -o . . . . . . . . . . . . . . . . . . 218

Index Linterprteur de commandes option -P . . . . . . . . . . . . . . . . . . 216 option -U . . . . . . . . . . . . . . . . . . . 217 entre standard . . . . . . . . . . . . . . . . . . 175 redirection . . . . . . . . . . . . . . . . . 178 esac . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 exit . . . . . . . . . . . 95, 204, 206, 226, 248 expression rationnelle . . . . . . . . . . . 186
.gz

gzip

(extension) . . . . . . . . . . . . . . . . . . 146 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 option -9 . . . . . . . . . . . . . . . . . . 146

H
historique . . . . . . . . . . . . . . . . . . . 87, 157 history . . . . . . . . . . . . . . . . . . . . . . . . . 157 home directory . . . . . . . . voir rpertoire personnel hostname . . . . . . . . . . . . . . . . . . . . . . . 226

F
. . . . . . . . . . . . . . . . . . . . . . . . . . . 174 fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 chier copie . . . . . . . . . . . . . . . . . . . . . . . . 97 renommage . . . . . . . . . . . . . . . . . 98 suppression . . . . . . . . . . . . . . . . 100 types de chiers - (chier ordinaire) . . . . . . . . 89 b (chier spcial de type bloc) 89 c (chier spcial de type caractre) . . . . . . . . . . . . . . . . . . . . . . 89 d (rpertoire) . . . . . . . . . . 89, 107 l (lien symbolique) . . . . . . . . 89 p (tuyau nomm) . . . . . . . . . . 89 s (prise rseau) . . . . . . . . . . . . 89 chier spcial . . . . . . . . . . . . . . . . . . . 175 ltre . . . . . . . . . . . . . . . . . . . . . . . 181, 184 find . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 option -mtime . . . . . . . . . . . . . . 139 option -name . . . . . . . . . . . . . . . 138 folder . . . . . . . . . . . . . . . . . . . voir dossier for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 ftp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
false

I
. . . . . . . . . . . . . . . . . . . . . . . . . . . 218 identiant de processus . . . . . . 166, 168 if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 in . . . . . . . . . . . . . . . . . . . . . . . . . 242, 243 indentation . . . . . . . . . . . . . . . . . 240, 248 inode . . . . . . . . . . . . . . . . . . . voir i-nud interprteur de commandes . . . . 21, 79 i-nud . . . . . . . . . . . . . . . . . . . . . . . . . 100 invite . . . . . . . . . . . . . . . . . . . . 35, 83, 114
iconv

K
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 option -9 . . . . . . . . . . . . . . . . . . 172 option -KILL . . . . . . . . . . . . . . . 172 option -l . . . . . . . . . . . . . . . . . . . 171 Korn shell . . . . . . . . . . . . . . . . . . voir ksh ksh . . . . . . . . . . . . . . . . . . . . . . . . . . 81, 231
kill

L
less

G
. . . . . . . . . . . . . . . . . . . . . . . 180, 185 option -E . . . . . . . . . . . . . . . . . . 188 option -i . . . . . . . . . . . . . . . . . . 188 option -l . . . . . . . . . . . . . . . . . . 189 option -n . . . . . . . . . . . . . . . . . . 189 option -v . . . . . . . . . . . . . . 182, 189 gunzip . . . . . . . . . . . . . . . . . . . . . . . . . . 147 gv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
grep

. . . . . . . . . . . . . . . . . . . . . . . . 93, 184 lien . . . . . . . . . . . . . . . . . . . . . . . . 100, 101 lien symbolique . . . . . . . . . . . . . . 89, 103 link . . . . . . . . . . . . . . . . . . . . . . . . voir lien ll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 ln . . . . . . . . . . . . . . . . . . . . . . . . . 100, 113 option -i . . . . . . . . . . . . . . . . . . 103 option -s . . . . . . . . . . . . . . . . . . 103 lpq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 option -P . . . . . . . . . . . . . . . . . . 208 lpr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 option -P . . . . . . . . . . . . . . . . . . 212

359

Index Linterprteur de commandes


lprm

. . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 option -P . . . . . . . . . . . . . . . . . . 209 ls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 option -a . . . . . . . . . . . . . . . . . . . . 90 option -d . . . . . . . . . . . . . . . . . . . 107 option -i . . . . . . . . . . . . . . . . . . . 101 option -l . . . . . . . . . . . . . . . . . . . . 88 lzma . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 .lzma (extension) . . . . . . . . . . . . . . . . 148

option -w . . . . . . . . . . . . . . . . . . 169 option -x . . . . . . . . . . . . . . . . . . . 167 .ps (extension) . . . . . . . . . . . . . . . . . . 211 psnup . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 option -2 . . . . . . . . . . . . . . . . . . 213 option -4 . . . . . . . . . . . . . . . . . . 213 psselect . . . . . . . . . . . . . . . . . . . . . . . . 213 option -p . . . . . . . . . . . . . . . . . . 213 pwd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

M
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 mtacaractre . . . . . . . . . . . . . . . . . . . 122 mkdir . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 more . . . . . . . . . . . . . . . . . . . . . . . . 92, 184 mv . . . . . . . . . . . . . . . . . . . . . . . . . . . 98, 112 option -i . . . . . . . . . . . . . . . . . . . . 99
man quota

Q
. . . . . . . . . . . . . . . . . . . . . . . . . . . 140

R
(extension) . . . . . . . . . . . . . . . . . 154 redirection . . . . . . . . . . . . . . . . . . . . . . 174 entre standard . . . . . . . . . . . . . 178 sortie derreur standard . . . . . . 177 sortie standard . . . . . . . . . . . . . . 175 regular expression . . . . . voir expression rationnelle renice . . . . . . . . . . . . . . . . . . . . . . . . . . 202 rpertoire . . . . . . . . . . 89, 107, voir aussi sous-rpertoire cration . . . . . . . . . . . . . . . . . . . . 107 suppression . . . . . . . . . . . . . . . . . 121 rpertoire courant . . . . . . . . . . . . . . . 114 rpertoire personnel . . . . . . . . . . . . . 116 rpertoire racine . . . . . . . . . . . . . . . . 116 return . . . . . . . . . . . . . . . . . . . . . . . . . . 247 rm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 option -i . . . . . . . . . . . . . . . . . . 100 option -r . . . . . . . . . . . . . . . . . . . 121 rmdir . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 root directory . . . voir rpertoire racine
.rar

N
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 option -n . . . . . . . . . . . . . . . . . . 202 nohup . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
nice

P
. . . . . . . . . . . . . . . . . . . . . . . . . . . 37 path . . . . . . . . . . . . . voir chemin daccs PATH (variable denvironnement) . . 162 pdftops . . . . . . . . . . . . . . . . . . . . . . . . . 219 option -duplex . . . . . . . . . . . . . 219 PID . . . . . voir identiant de processus pipe . . . . . . . . . . . . . . . . . . . . . . voir tuyau PostScript . . . . . . . . . . . . . . . . . . . . . . 210 priorit . . . . . . . . . . . . . . . . . . . . . . . . . 201 process . . . . . . . . . . . . . . . . voir processus process identier . . . . voir identiant de processus processus . . . . . . . . . . . . . . . . . . . . . . . 164 identiant . . . . . . . . . . . . . . . . . . 168 statut de sortie . . . . . . . . . . . . . . 172 prompt . . . . . . . . . . . . . . . . . . . voir invite ps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 option -a . . . . . . . . . . . . . . . . . . 169 option -u . . . . . . . . . . . . . . . . . . 168
passwd

S
............................. screen . . . . . . . . . . . . . . . . . . . . . . . . . . option -r . . . . . . . . . . . . . . . . . . option -S . . . . . . . . . . . . . . . . . . script . . . . . . . . . . . . . . . . . . . . . . . . . . . sed . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
scp

228 202 203 203 232 194

360

Index Linterprteur de commandes option -E . . . . . . . . . . . . . . . . . . 195 option -e . . . . . . . . . . . . . . . . . . 195 option -f . . . . . . . . . . . . . . . . . . 195 sh . . . . . . . . . . . . . . . . . . . . . . . . . . . 81, 231 .sh (extension) . . . . . . . . . . . . . . . . . . 232 shell . voir interprteur de commandes signal . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 sort . . . . . . . . . . . . . . . . . . . . . . . 143, 196 option -f . . . . . . . . . . . . . . . . . . . 197 option -k . . . . . . . . . . . . . . 196, 197 option -n . . . . . . . . . . . . . . . . . . . 197 option -r . . . . . . . . . . . . . . . . . . 198 option -t . . . . . . . . . . . . . . . . . . . 197 sortie derreur standard . . . . . . . . . . 175 redirection . . . . . . . . . . . . . . . . . 177 sortie standard . . . . . . . . . . . . . . . . . . 175 redirection . . . . . . . . . . . . . . . . . 175 sous-rpertoire . . . . . . . . . . . . . . . . . . 110 ssh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 option -l . . . . . . . . . . . . . . . . . . . 227 option -t . . . . . . . . . . . . . . . . . . 228 option -X . . . . . . . . . . . . . . . . . . . 227 option -Y . . . . . . . . . . . . . . . . . . . 227 ssh-keygen . . . . . . . . . . . . . . . . . . . . . 225 option -f . . . . . . . . . . . . . . . . . . 225 option -l . . . . . . . . . . . . . . . . . . 225 status (variable spciale) . . . . . . . . . 172 stderr . . . . . . . . . . . . . . . . . . . . . . . . . . 175 stdin . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 stdout . . . . . . . . . . . . . . . . . . . . . . . . . . 175 substitution de commande . . . . . . . 183 (extension) . . . . . . . . . . . . . . . . . 150 . . . . . . . . . . . . . . . . . . . . . . . . . 81, 231 telnet . . . . . . . . . . . . . . . . . . . . . . . . . . 221 TENEX C shell . . . . . . . . . . . . voir tcsh terminal . . . . . . . . . . . . . . . . . . . . . . . . . 82 test . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 then . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 tmux . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 option -t . . . . . . . . . . . . . . . . . . 205 top . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 true . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 tube . . . . . . . . . . . . . . . . . . . . . voir tuyau tuyau . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 type . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
.tar tcsh

U
umask

. . . . . . . . . . . . . . . . . . . . . . . . . . . 133 uncompress . . . . . . . . . . . . . . . . . . . . . 146 unlzma . . . . . . . . . . . . . . . . . . . . . . . . . . 148 unrar . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 until . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 unxz . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 unzip . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 option -l . . . . . . . . . . . . . . . . . . . 154

V
variable . . . . . . . . . . . . . . . . . . . . . . . . . 235 denvironnement . . . . . . . 162, 235 spciale . . . . . . . . . . . . . . . . 172, 235

W
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 wc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 option -c . . . . . . . . . . . . . . . . . . 199 option -l . . . . . . . . . . . . . . . . . . 199 option -m . . . . . . . . . . . . . . . . . . 199 option -w . . . . . . . . . . . . . . . . . . 199 which . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 while . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 who . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 working directory . . . . . voir rpertoire courant
w

T
tche de fond . . . . . . . . voir arrire-plan tar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 option -c . . . . . . . . . . . . . . . . . . 150 option -f . . . . . . . . . . . . . . . . . . . 151 option -j . . . . . . . . . . . . . . . . . . 153 option -t . . . . . . . . . . . . . . . . . . 152 option -v . . . . . . . . . . . . . . . . . . . 151 option -x . . . . . . . . . . . . . . . . . . 152 option -Z . . . . . . . . . . . . . . . . . . 153 option -z . . . . . . . . . . . . . . . . . . 153 361

Index Linterprteur de commandes

X
xz

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 .xz (extension) . . . . . . . . . . . . . . . . . . 149

Z
(extension) . . . . . . . . . . . . . . . . . . . 145 ^Z (suspension du processus) . . . . . . 167 Z shell . . . . . . . . . . . . . . . . . . . . . voir zsh zip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 option -r . . . . . . . . . . . . . . . . . . 153 .zip (extension) . . . . . . . . . . . . . . . . . 153 zsh . . . . . . . . . . . . . . . . . . . . . . . . . . 81, 231
.Z

362

Index Cration dun site Web

Des rcapitulatifs gurent galement : dans le tableau C.1 page 341 pour les lments HTML ; dans le tableau C.2 page 342 pour les proprits CSS.

Symboles
(slecteur de classe) . . . . . . . . . . . . . 291 # (slecteur didentiant) . . . . . . . . . 293 , (regroupement) . . . . . . . . . . . . . . . . 287 /* . . . */ (commentaire CSS) . . . . . 285 <!-- . . . --> (commentaire HTML) 265 > (combinateur) . . . . . . . . . . . . . . . . . 289 [ . . . ] (slecteur dattribut) . . . . . . 290
.

A
(lment) . . . . . . . . . . . . . . . . . 273, 294 attribut href . . . . . . . . . . . . . . . 273 abbr (lment) . . . . . . . . . . . . . . . . . . . 271 acronym (lment) . . . . . . . . . . . . . . . 271 alt (attribut) lment img . . . . . . . . . . . . . . . . 274 &amp; . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 attribut . . . . . . . . . . . . . . . . . . . . . . . . . 265
a

border . . . . . . . . . . . . . . . . . voir bordure (attribut) lment table . . . . . . . . . . 278, 317 border-collapse (proprit) . . . . . . 316 border-color (proprit) . . . . . . . . . 314 border-style (proprit) . . . . . . . . . 314 border-width (proprit) . . . . . . . . . 314 bordure . . . . . . . . . . . . . . . . . . . . 308, 314 bottom (proprit) . . . . . . . . . . . . . . . 319 br (lment) . . . . . . . . . . . . . . . . . . . . 270 browser . . . . . . . . . . . . . . . . voir butineur butineur . . . . . . . . . . . . . . . . . . . . . . . . 259
border

C
cadratin . . . . . . . . . . . . . . . . . . . . . . . . 302 caption (lment) . . . . . . . . . . . 279, 315 caption-side (proprit) . . . . . . . . . 315 cascade . . . . . . . . . . . . . . . . . . . . . . . . . 297 cite (lment) . . . . . . . . . . . . . . . . . . . 271 class (attribut) . . . . . . . . . . . . . . . . . . 292 classe . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 cm (unit de mesure) . . . . . . . . . . . . . 302 code (lment) . . . . . . . . . . . . . . . . . . . 271 color (proprit) . . . . . . . . . . . . . . . . 301 commentaire 363

B
(lment) . . . . . . . . . . . . . . . . . . . . . . 272 background-color (proprit) 301, 314 balise . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 bloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 body (lment) . . . . . . . . . . . . . . 265, 266
b

Index Cration dun site Web CSS . . . . . . . . . . . . . . . . . . . . . . . 285 HTML . . . . . . . . . . . . . . . . . . . . 265 couleurs . . . . . . . . . . . . . . . . . . . . . . . . 300 CSS . . . . . . . . . . . . . . . . . . . . . . . . 253, 283 1 . . . . . . . . . . . . . . . . . . . . . . . . . . 283 2 . . . . . . . . . . . . . . . . . . . . . . . . . . 283 2.1 . . . . . . . . . . . . . . . . . . . . . . . . . 283 3 . . . . . . . . . . . . . . . . . . . . . . . . . . 283 .css (extension) . . . . . . . . . . . . . . . . . 284 (lment) . . . . . . . . . . . . . . . . . . . . . 267 (lment) . . . . . . . . . . . . . . . . . . . . . 267 h6 (lment) . . . . . . . . . . . . . . . . . . . . . 267 head (lment) . . . . . . . . . . . . . . . . . . 265 height (proprit) . . . . . . . . . . . . . . . 322 hritage . . . . . . . . . . . . . . . . . . . . . . . . . 297 :hover (pseudo-classe) . . . . . . . . . . . 295 hr (lment) . . . . . . . . . . . . . . . . . . . . 270 href (attribut) lment a . . . . . . . . . . . . . . . . . . 273 lment link . . . . . . . . . . . . . . . 284 HTML . . . . . . . . . . . . . . . . . . . . . 253, 259 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . 260 3.2 . . . . . . . . . . . . . . . . . . . . . . . . . 260 4.0 . . . . . . . . . . . . . . . . . . . . . . . . . 260 4.01 . . . . . . . . . . . . . . . . . . . . . . . 260 5 . . . . . . . . . . . . . . . . . . . . . . 260, 261 html (lment) . . . . . . . . . . . . . . . . . . 265 attribut xmlns . . . . . . . . . . . . . . 265 .html (extension) . . . . . . . . . . . . . . . . 266 hyperlien . . . . . . . . . . . . . . . . . . . . . . . 259 hypertexte . . . . . . . . . . . . . . . . . . . . . . 259
h4 h5

D
(lment) . . . . . . . . . . . . . . . . . . . . 276 dclaration . . . . . . . . . . . . . . . . . 286, 296 dfn (lment) . . . . . . . . . . . . . . . . . . . . 271 div (lment) . . . . . . . . . . . . . . . 294, 319 division . . . . . . . . . . . . . . . . . . . . . . . . 319 dl (lment) . . . . . . . . . . . . . . . . . . . . 276 dt (lment) . . . . . . . . . . . . . . . . . . . . 276 DTD . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
dd

E
lment . . . . . . . . . . . . . . . . . . . . . . . . 255 vide . . . . . . . . . . . . . . . . . . . . . . . 266 em (lment) . . . . . . . . . . . . . . . . . . . . . 271 em (unit de mesure) . . . . . . . . . . . . . 302 entit . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 espacement . . . . . . . . . . . . . . . . . 308, 313 ex (unit de mesure) . . . . . . . . . . . . . 302

I
(lment) . . . . . . . . . . . . . . . . . . . . . . 272 id (attribut) . . . . . . . . . . . . . . . . 293, 319 identiant . . . . . . . . . . . . . . . . . . . . . . 293 img (lment) . . . . . . . . . . . . . . . . . . . . 274 attribut alt . . . . . . . . . . . . . . . . . 274 attribut src . . . . . . . . . . . . . . . . . 274 in (unit de mesure) . . . . . . . . . . . . . 302 index.html . . . . . . . . . . . . . . . . . . . . . 266 ISO 639 . . . . . . . . . . . . . . . . 265, 279, 295
i

F
feuille de style . . . . . . . . . . . . . . 253, 283 float (proprit) . . . . . . . . . . . . . . . . 320 font-family (proprit) . . . . . . . . . . 303 font-size (proprit) . . . . . . . . . . . . 305 font-style (proprit) . . . . . . . . . . . 304 font-weight (proprit) . . . . . . . . . . 305

K
kbd

(lment) . . . . . . . . . . . . . . . . . . . . 271

G
&gt;

. . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

L
(pseudo-classe) . . . . . . . . . . . . left (proprit) . . . . . . . . . . . . . . . . . li (lment) . . . . . . . . . . . . . . . . . . . . link (lment) . . . . . . . . . . . . . . . . . . attribut href . . . . . . . . . . . . . . .
:lang

H
(lment) . . . . . . . . . . . . . . . . . . . . . 267 (lment) . . . . . . . . . . . . . . . . . . . . . 267 h3 (lment) . . . . . . . . . . . . . . . . . . . . . 267
h1 h2

295 319 275 284 284

364

Index Cration dun site Web attribut rel . . . . . . . . . . . . . . . . . attribut type . . . . . . . . . . . . . . . :link (pseudo-classe) . . . . . . . . . . . . . &lt; . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 284 294 273

R
rgle . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 rel (attribut) lment link . . . . . . . . . . . . . . . 284 right (proprit) . . . . . . . . . . . . . . . . 319

M
marge . . . . . . . . . . . . . . . . . . . . . . 308, 309 margin . . . . . . . . . . . . . . . . . . voir marge margin (proprit) . . . . . . . . . . . . . . . 310 margin-bottom (proprit) . . . . . . . . 309 margin-left (proprit) . . . . . . . . . . 309 margin-right (proprit) . . . . . . . . . 309 margin-top (proprit) . . . . . . . . . . . 309 MathML . . . . . . . . . . . . . . . . . . . . . . . 280 meta (lment) . . . . . . . . . . . . . . . . . . 265 mm (unit de mesure) . . . . . . . . . . . . . 302
samp

S
(lment) . . . . . . . . . . . . . . . . . . . 271 slecteur . . . . . . . . . . . . . . . . . . . 286, 287 dattribut . . . . . . . . . . . . . . . . . . 290 de classe . . . . . . . . . . . . . . . . . . . . 291 de type . . . . . . . . . . . . . . . . . . . . . 287 denfant . . . . . . . . . . . . . . . . . . . . 289 descendant . . . . . . . . . . . . . . . . . 289 didentiant . . . . . . . . . . . . . . . . 293 regroupement . . . . . . . . . . . . . . 287 SGML . . . . . . . . . . . . . . . . . . . . . . . . . . 255 span (lment) . . . . . . . . . . . . . . . . . . 317 src (attribut) lment img . . . . . . . . . . . . . . . . 274 strong (lment) . . . . . . . . . . . . . . . . 271 style sheet . . . . . . . . . voir feuille de style sub (lment) . . . . . . . . . . . . . . . . . . . 272 sup (lment) . . . . . . . . . . . . . . . . . . . 272

N
navigateur . . . . . . . . . . . . . voir butineur

O
ol

(lment) . . . . . . . . . . . . . . . . . . . . 275

P
(lment) . . . . . . . . . . . . . . . . . . . . . . 268 padding . . . . . . . . . . . . . voir espacement padding (proprit) . . . . . . . . . . . . . . 313 padding-bottom (proprit) . . . . . . . 313 padding-left (proprit) . . . . . . . . . 313 padding-right (proprit) . . . . . . . . 313 padding-top (proprit) . . . . . . . . . . 313 page HTML . . . . . . . . . . . . . . . . . . . . 253 pc (unit de mesure) . . . . . . . . . . . . . 302 position (proprit) . . . . . . . . . . . . . 319 proprit . . . . . . . . . . . . . . . . . . . 286, 296 pseudo-classe . . . . . . . . . . . . . . . . . . . . 294 de langue . . . . . . . . . . . . . . . . . . . 295 de lien . . . . . . . . . . . . . . . . . . . . . 294 dynamique . . . . . . . . . . . . . . . . . 295 pt (unit de mesure) . . . . . . . . . . . . . 302 public_html . . . . . . . . . . . . . . . . . . . . 266 px (unit de mesure) . . . . . . . . . . . . . 302
p

T
(lment) . . . . . . . . . . . . . . . . . 278 attribut border . . . . . . . . . 278, 317 tag . . . . . . . . . . . . . . . . . . . . . . . voir balise td (lment) . . . . . . . . . . . . . . . . . . . . 278 text-align (proprit) . . . . . . 306, 316 text-decoration (proprit) . . . . . . 307 text-indent (proprit) . . . . . . . . . . 306 th (lment) . . . . . . . . . . . . . . . . . . . . 278 title (lment) . . . . . . . . . . . . . . . . . 265 top (proprit) . . . . . . . . . . . . . . . . . . 319 tr (lment) . . . . . . . . . . . . . . . . . . . . 278 tt (lment) . . . . . . . . . . . . . . . . . . . . . 272 type (attribut) lment link . . . . . . . . . . . . . . . 284
table

U
ul

(lment) . . . . . . . . . . . . . . . . . . . . 275

365

Index Cration dun site Web

V
valeur . . . . . . . . . . . . . . . . . . . . . . . . . . 286 var (lment) . . . . . . . . . . . . . . . . . . . . 271 :visited (pseudo-classe) . . . . . . . . . 295

W
width

(proprit) . . . . . . . . . . . . . . . . 322

X
XHTML 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . 260 1.1 . . . . . . . . . . . . . . . . . . . . 260, 263 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 xml:lang (attribut) . . . . . . 265, 279, 295 xmlns (attribut) lment html . . . . . . . . . . . . . . . 265

366

Liste des tableaux

2.1 2.2 4.1 4.2 4.3 4.4 4.5 4.6 5.1 6.1 6.2 7.1 7.2 8.1 8.2 8.3 8.4 9.1 12.1 12.2 15.1

Chiffres utiliss en hexadcimal . . . . . . . . . . . . . . . . . . . . . . . . . Units multiples de loctet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Le codage ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . Les codages ISO 8859 . . . . . . . . . . . . . . . . . . . . . . . Codage de la chane de caractres coucou en ASCII . Codage de la chane de caractres coucou en Unicode Codage de la chane de caractres pt en ISO 8859-1 Codage de la chane de caractres pt en UTF-8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26 27 46 47 48 49 49 50 64 70 74 81 89 120 120 128 130 186 238 239 300

Combinaisons permettant de saisir des caractres usuels en franais avec Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les six faons de passer en mode insertion dans vi . . . . . . . . . . . . . Combinaisons permettant de saisir des caractres usuels en franais avec Vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Diminutifs, noms et crateurs des interprteurs de commandes . . . . . Types de chiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chemin daccs relatif (exemple 2), toto1 et toto2 Chemin daccs relatif (exemple 2), toto3 et toto4 Droits daccs . . . . . . . . . . . . . . . . . . . . . . . . Droits daccs en binaire et en octal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Caractres utilisables dans une expression rationnelle . . . . . . . . . . . Oprateurs utilisables dans une expression encadre par $(( et )) . . . Expressions les plus utiles pouvant suivre la commande test . . . . . . Noms de couleurs utilisables dans une feuille de style . . . . . . . . . . . 367

Liste des tableaux Units de mesure utilisables dans une feuille de style . . . . . . . . . . . . Noms de polices gnriques utilisables avec la proprit font-family . Valeurs utilisables avec la proprit font-style . . . . . . . . . . . . . . . Valeurs utilisables avec la proprit text-align . . . . . . . . . . . . . . . Valeurs utilisables avec la proprit text-decoration . . . . . . . . . . . Valeurs utilisables avec la proprit border-style . . . . . . . . . . . . . . Proprits de conguration de lpaisseur, de la couleur et du style des quatre cts de la bordure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.9 Valeurs utilisables avec la proprit caption-side . . . . . . . . . . . . . . 15.10 Valeurs utilisables avec la proprit border-collapse . . . . . . . . . . . 15.11 Valeurs utilisables avec la proprit position . . . . . . . . . . . . . . . . . A.1 A.2 B.1 B.2 B.3 B.4 B.5 B.6 B.7 B.8 C.1 C.2 Rcapitulatif des commandes dEmacs tudies . . . . . . . . . . . . . . . Rcapitulatif des commandes de vi et de Vim tudies . . . . . . . . . . Rcapitulatif des commandes tudies dans la premire partie, Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rcapitulatif des commandes tudies dans la deuxime partie, Du texte et des diteurs de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . Rcapitulatif des commandes tudies dans le chapitre 7, Linterprteur de commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rcapitulatif des commandes tudies dans le chapitre 8, Gestion, organisation et traitement des chiers . . . . . . . . . . . . . . . . . . . . Rcapitulatif des commandes tudies dans le chapitre 9, Commandes, processus et redirections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rcapitulatif des commandes tudies dans le chapitre 10, Impression Rcapitulatif des commandes tudies dans le chapitre 11, Connexion distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rcapitulatif des commandes tudies dans le chapitre 12, Programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rcapitulatif des lments HTML tudis . . . . . . . . . . . . . . . . . . Rcapitulatif des proprits CSS tudies . . . . . . . . . . . . . . . . . . . 15.2 15.3 15.4 15.5 15.6 15.7 15.8 302 304 304 307 308 314 315 316 317 320 333 334 337 337 337 338 339 340 340 340 341 342

368

Table des gures

3.1 3.2 4.1 4.2 5.1 5.2 5.3 5.4 6.1 7.1 7.2 7.3 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 8.10 8.11 8.12

Gestionnaire dafchage utilis lENSTA ParisTech . . . . . . . . . . . Environnement de bureau utilis lENSTA ParisTech . . . . . . . . . . Exemple de chier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemple de chier contenant une image en couleurs . . . . . . . . . . . . Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Emacs : continuation de ligne . . . . . . . . . . . . . . . . . . . . . . . . . . Emacs : afchage dans le minibuffer dune commande partiellement saisie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Emacs : tat de la ligne de mode aprs sauvegarde du chier . . . . . . . Vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arbre gnalogique des interprteurs de commandes . . . . . . . . . . . Quelques commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Quelques commandes (dcomposition temporelle) . . . . . . . . . . . . . Structure dun chier . . . . . . . . . . . . . . . . . . . . . . Structure dun chier ayant deux noms . . . . . . . . . . Principe du lien symbolique . . . . . . . . . . . . . . . . . Structure du rpertoire rep . . . . . . . . . . . . . . . . . . Structure du rpertoire rep contenant rep2 . . . . . . . . Arborescence imaginaire . . . . . . . . . . . . . . . . . . . . Exemple dutilisation de ln . . . . . . . . . . . . . . . . . . Structure du systme de chiers sous UNIX . . . . . . . Chemin daccs relatif (exemple 1) . . . . . . . . . . . . . Chemin daccs relatif (exemple 2) . . . . . . . . . . . . . Arborescence utilise pour illustrer la commande find Arborescence utilise pour illustrer la commande du . . 369 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31 35 44 45 54 56 58 62 68 80 85 85 101 102 104 109 110 110 113 117 119 120 137 142

Table des gures 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9 10.1 10.2 10.3 15.1 15.2 15.3 15.4 15.5 15.6 15.7 15.8 15.9 15.10 15.11 15.12 15.13 15.14 Ordonnancement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Entre, sortie et sortie derreur standards . . . . . . . . . . . . . . . . . . Redirection de la sortie standard . . . . . . . . . . . . . . . . . . . . . . . . Redirection de la sortie derreur standard . . . . . . . . . . . . . . . . . . Redirection des sortie et sortie derreur standards . . . . . . . . . . . . Redirection de lentre standard . . . . . . . . . . . . . . . . . . . . . . . . Obtention de lidentiant de processus avec des chiers temporaires Obtention de lidentiant de processus avec des tuyaux . . . . . . . . . Substitution de commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 175 176 177 178 178 181 183 184 210 215 217 309 310 311 312 323 324 324 325 326 327 328 329 329 330

Rendu graphique du chier PostScript du listage 10.1 . . . . . . . . . . . Fichier imprim avec la commande a2ps . . . . . . . . . . . . . . . . . . . Fichier imprim avec la commande enscript . . . . . . . . . . . . . . . . Marge, espacement et bordure : exemple de feuille de style . . . . . . . . Marge, espacement et bordure : exemple de page HTML . . . . . . . . . Marge, espacement et bordure : rendu dans un butineur . . . . . . . . . Marge, espacement et bordure : schma de principe . . . . . . . . . . . . Barre latrale de navigation : exemple de page HTML . . . . . . . . . . . Barre latrale de navigation (proprit position) : exemple de feuille de style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Barre latrale de navigation (proprit position) : rendu dans un butineur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Barre latrale de navigation (proprit float) : exemple de feuille de style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Barre latrale de navigation (proprit float) : rendu dans un butineur Deux barres latrales : exemple de page HTML . . . . . . . . . . . . . . . Deux barres latrales (proprit position) : exemple de feuille de style Deux barres latrale (proprit position) : rendu dans un butineur . . Deux barres latrales (proprit float) : exemple de feuille de style . . Deux barre latrales (proprit float) : rendu dans un butineur . . . .

370

Table des listages

4.1 9.1

Conversion de codage de caractres en Perl . . . . . . . . . . . . . . . . Exemple de programme en langage AWK . . . . . . . . . . . . . . . . .

51 193 211 256 258

10.1 Exemple de chier PostScript . . . . . . . . . . . . . . . . . . . . . . . . . 13.1 Exemple de chier SGML . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2 Exemple de chier XML . . . . . . . . . . . . . . . . . . . . . . . . . . . .

371

Table des matires

Sommaire Avant-propos

9 11

I
1

Introduction
Le stage dinformatique pour lingnieur 1.1 Objectifs du cours . . . . . . . . . . . . . . . . . . . . 1.2 Quest-ce quun systme dexploitation ? . . . . . 1.2.1 Gnralits . . . . . . . . . . . . . . . . . . . 1.2.2 UNIX . . . . . . . . . . . . . . . . . . . . . . 1.2.3 Pourquoi UNIX lENSTA ParisTech ? 1.3 Linformatique efcace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15
17 17 18 18 18 19 20 23 23 23 24 24 25 25 25 26 26 26 26 29 29 29

Reprsentation et mesure de linformation 2.1 Reprsentation des nombres . . . . . . . . . . . . . . . . . . . 2.1.1 Systme dcimal . . . . . . . . . . . . . . . . . . . . . . 2.1.2 Notation positionnelle et bases de numration . . 2.1.3 Systmes de numration utiliss en informatique 2.1.3.1 Systme binaire . . . . . . . . . . . . . . . . 2.1.3.2 Systme octal . . . . . . . . . . . . . . . . . 2.1.3.3 Systme hexadcimal . . . . . . . . . . . . 2.2 Units de mesure de linformation . . . . . . . . . . . . . . . 2.2.1 Loctet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.2 Reprsentation dun octet en hexadcimal . . . . . 2.2.3 Units multiples de loctet . . . . . . . . . . . . . . .

Premier contact 3.1 La babasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Le clavier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373

Table des matires 3.1.2 Le gestionnaire dafchage . . . . . . . . . . . . . Le compte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ouverture de session . . . . . . . . . . . . . . . . . . . . . . Linterface graphique . . . . . . . . . . . . . . . . . . . . . . 3.4.1 X Window System . . . . . . . . . . . . . . . . . . 3.4.2 Les botes outils . . . . . . . . . . . . . . . . . . . 3.4.3 Le gestionnaire de fentres . . . . . . . . . . . . . 3.4.4 Lenvironnement de bureau . . . . . . . . . . . . Linterprteur de commandes . . . . . . . . . . . . . . . . Changement du mot de passe . . . . . . . . . . . . . . . . Verrouillage et n de session . . . . . . . . . . . . . . . . . Lenvironnement informatique de lENSTA ParisTech . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 31 32 32 32 33 34 34 34 36 38 39

3.2 3.3 3.4

3.5 3.6 3.7 3.8

II
4

Du texte et des diteurs de texte


Le texte et son codage 4.1 Le texte, cest quoi ? . . . . . . . . . . . 4.2 Quest-ce quun chier ? . . . . . . . . . 4.3 Codage du texte . . . . . . . . . . . . . . 4.3.1 Le codage ASCII . . . . . . . . 4.3.2 Les codages ISO 8859 . . . . . 4.3.3 Unicode et le codage UTF-8 . 4.4 Codage des chiers . . . . . . . . . . . . 4.5 Conversion dun codage vers un autre 4.5.1 La commande iconv . . . . . . 4.5.2 Dans un logiciel . . . . . . . . . 4.6 Les diteurs de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

41
43 43 44 45 45 47 48 50 51 51 51 52 53 53 55 55 59 59 60 60 60 61 61 63 64 64

Lditeur de texte Emacs 5.1 Lancement dEmacs . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Saisie du texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Les commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4 Commandes de dplacement . . . . . . . . . . . . . . . . . . . . . 5.5 Commandes de suppression . . . . . . . . . . . . . . . . . . . . . 5.6 Excution multiple dune commande . . . . . . . . . . . . . . . 5.7 Copier-coller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.8 Couper-coller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.9 Commande dannulation des modications . . . . . . . . . . . 5.10 Commandes de gestion de chiers . . . . . . . . . . . . . . . . . 5.11 Commandes de recherche et de remplacement . . . . . . . . . 5.12 Saisie de caractres ne gurant pas sur le clavier . . . . . . . . . 5.13 Commande dannulation de la commande en cours de saisie 374

Table des matires 5.14 5.15 5.16 6 Commandes diverses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Quitter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 66 66 67 67 69 70 71 71 71 72 72 72 72 73 73 74 74 75 75

Les diteurs de texte vi et Vim 6.1 Lancement de vi et de Vim . . . . . . . . . . . . . . . . . . . . . . 6.2 Saisie du texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3 Les commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4 Commandes de dplacement . . . . . . . . . . . . . . . . . . . . . 6.5 Commandes de suppression . . . . . . . . . . . . . . . . . . . . . 6.6 Excution multiple dune commande . . . . . . . . . . . . . . . 6.7 Copier-coller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.8 Couper-coller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.9 Commande dannulation des modications . . . . . . . . . . . 6.10 Commandes de gestion de chiers . . . . . . . . . . . . . . . . . 6.11 Commandes de recherche et de remplacement . . . . . . . . . 6.12 Saisie de caractres ne gurant pas sur le clavier . . . . . . . . . 6.13 Commande dannulation de la commande en cours de saisie 6.14 Commandes diverses . . . . . . . . . . . . . . . . . . . . . . . . . . 6.15 Quitter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.16 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

III Linterprteur de commandes


7 Linterprteur de commandes 7.1 Historique des interprteurs de commandes . . . . . . . 7.2 Concepts fondamentaux . . . . . . . . . . . . . . . . . . . . 7.2.1 Lmulateur de terminal . . . . . . . . . . . . . . . 7.2.2 Linvite . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.3 Pass, prsent et futur . . . . . . . . . . . . . . . . 7.2.4 Notation des combinaisons de touches . . . . . 7.2.5 Sensibilit la casse . . . . . . . . . . . . . . . . . . 7.2.6 dition de la ligne de commande et historique 7.2.7 Forme des exemples dans la suite du document 7.3 La commande ls, la syntaxe des commandes . . . . . . 7.3.1 Les options . . . . . . . . . . . . . . . . . . . . . . . 7.3.2 Les arguments . . . . . . . . . . . . . . . . . . . . . 7.4 Les commandes dafchage : cat, more et less . . . . . . 7.4.1 La commande cat . . . . . . . . . . . . . . . . . . . 7.4.2 La commande more . . . . . . . . . . . . . . . . . . 7.4.3 La commande less . . . . . . . . . . . . . . . . . . 7.5 La commande man . . . . . . . . . . . . . . . . . . . . . . . . 375 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

77
79 80 82 82 83 84 86 86 86 87 88 88 91 91 92 92 93 93

Table des matires 7.6 7.7 8 La commande clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . La commande exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 95 97 97 97 98 100 100 104 107 107 108 111 111 112 113 113 115 118 121 121 121 121 122 122 123 124 125 125 126 126 129 131 133 134 136 137 137 140 141 143 144

Gestion, organisation et traitement des chiers 8.1 Gestion des chiers . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.1 Copie de chiers : la commande cp . . . . . . . . . . . . 8.1.2 Renommage de chiers : la commande mv . . . . . . . 8.1.3 Suppression de chiers : la commande rm . . . . . . . . 8.1.4 Cration de liens : la commande ln . . . . . . . . . . . 8.2 Le compltement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3 Organisation des chiers . . . . . . . . . . . . . . . . . . . . . . . 8.3.1 Cration de rpertoires : la commande mkdir . . . . . 8.3.2 Chemin daccs et structure arborescente . . . . . . . 8.3.3 Retour sur les commandes de gestion des chiers . . 8.3.3.1 La commande cp et les rpertoires . . . . . 8.3.3.2 La commande mv et les rpertoires . . . . . 8.3.3.3 La commande ln et les rpertoires . . . . . 8.3.4 Se dplacer dans un rpertoire : la commande cd . . . 8.3.5 Promenade dans le systme de chiers . . . . . . . . . 8.3.6 Chemin daccs absolu et chemin daccs relatif . . . 8.3.7 Suppression de rpertoires . . . . . . . . . . . . . . . . . 8.3.7.1 La commande rmdir . . . . . . . . . . . . . . 8.3.7.2 Loption -r de la commande rm . . . . . . . 8.3.8 Quelques conseils pour organiser vos chiers . . . . . 8.4 Les mtacaractres de gnration de noms de chiers . . . . . 8.4.1 Le mtacaractre ? . . . . . . . . . . . . . . . . . . . . . . 8.4.2 Les mtacaractres [ et ] . . . . . . . . . . . . . . . . . . 8.4.3 Le mtacaractre * . . . . . . . . . . . . . . . . . . . . . . 8.4.4 Utilisation avance . . . . . . . . . . . . . . . . . . . . . . 8.4.5 Gestion des erreurs . . . . . . . . . . . . . . . . . . . . . . 8.5 Les droits daccs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.5.1 Principe des droits daccs . . . . . . . . . . . . . . . . . 8.5.2 Reprsentation numrique des droits daccs . . . . . 8.5.3 La commande chmod . . . . . . . . . . . . . . . . . . . . . 8.5.4 La commande umask . . . . . . . . . . . . . . . . . . . . . 8.6 Les noms des chiers . . . . . . . . . . . . . . . . . . . . . . . . . . 8.7 Gestion de lespace de stockage, compression et archivage . . 8.7.1 Gestion de lespace de stockage . . . . . . . . . . . . . . 8.7.1.1 Retrouver des chiers : la commande find 8.7.1.2 La commande quota . . . . . . . . . . . . . . 8.7.1.3 La commande du . . . . . . . . . . . . . . . . . 8.7.1.4 La commande df . . . . . . . . . . . . . . . . . 8.7.2 Compression . . . . . . . . . . . . . . . . . . . . . . . . . . 376

Table des matires 8.7.2.1 Les commandes compress et uncompress . . . . . 8.7.2.2 Les commandes gzip et gunzip . . . . . . . . . . . 8.7.2.3 Les commandes bzip2 et bunzip2 . . . . . . . . . 8.7.2.4 Les commandes lzma et unlzma . . . . . . . . . . . 8.7.2.5 Les commandes xz et unxz . . . . . . . . . . . . . . Archivage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.7.3.1 La commande tar . . . . . . . . . . . . . . . . . . . 8.7.3.1.1 Crer une archive . . . . . . . . . . . 8.7.3.1.2 Extraire une archive . . . . . . . . . . 8.7.3.1.3 Afcher le contenu dune archive . 8.7.3.1.4 Compression et dcompression dune archive . . . . . . . . . . . . . . . . . . changes avec dautres systmes dexploitation . . . . . . . 8.7.4.1 Les commandes zip et unzip . . . . . . . . . . . . 8.7.4.2 La commande unrar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 146 147 148 149 150 150 150 151 152 152 153 153 154 157 157 157 158 158 159 161 161 162 162 163 164 164 166 167 169 170 172 172 173 174 174 174 175 177 178 179

8.7.3

8.7.4

Commandes, processus et redirections 9.1 Lhistorique des commandes . . . . . . . . . . . . . . . . . . . . . . . 9.1.1 La commande history . . . . . . . . . . . . . . . . . . . . . . 9.1.2 Au sujet des exemples qui suivent . . . . . . . . . . . . . . . 9.1.3 Excuter nouveau une commande dans son intgralit 9.1.4 Utiliser certains mots dune commande prcdente . . . 9.2 Les chemins de recherche des commandes . . . . . . . . . . . . . . 9.2.1 Commandes externes et commandes internes . . . . . . . 9.2.2 La variable denvironnement PATH . . . . . . . . . . . . . . 9.2.3 Les commandes type et which . . . . . . . . . . . . . . . . . 9.2.4 Mise en garde . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3 Gestion des processus . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.1 Lordonnancement . . . . . . . . . . . . . . . . . . . . . . . . 9.3.2 Lancement dun processus en arrire-plan . . . . . . . . . 9.3.3 La commande ps . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.4 La commande top . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.5 La commande kill . . . . . . . . . . . . . . . . . . . . . . . . 9.3.6 Le statut de sortie dun processus . . . . . . . . . . . . . . . 9.3.6.1 Les variables spciales ? et status . . . . . . . . 9.3.6.2 Succession de commandes . . . . . . . . . . . . . 9.3.6.3 Les commandes true et false . . . . . . . . . . 9.4 Redirections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.4.1 Sous UNIX, tout est chier . . . . . . . . . . . . . . . . . . 9.4.2 Redirection de la sortie standard . . . . . . . . . . . . . . . 9.4.3 Redirection de la sortie derreur standard . . . . . . . . . 9.4.4 Redirection de lentre standard . . . . . . . . . . . . . . . 9.4.5 Les tuyaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377

Table des matires 9.4.6 Substitution de commande . . . . . . . . . . . . . . . . . . . . Quelques ltres usuels . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.5.1 Les commandes more et less . . . . . . . . . . . . . . . . . . . 9.5.2 La commande grep . . . . . . . . . . . . . . . . . . . . . . . . . 9.5.2.1 Les expressions rationnelles . . . . . . . . . . . . . 9.5.2.2 Utilisation dune expression rationnelle avec la commande grep . . . . . . . . . . . . . . . . . . . . 9.5.2.3 Quelques options de la commande grep . . . . . 9.5.3 La commande awk . . . . . . . . . . . . . . . . . . . . . . . . . . 9.5.4 La commande sed . . . . . . . . . . . . . . . . . . . . . . . . . . 9.5.5 La commande sort . . . . . . . . . . . . . . . . . . . . . . . . . 9.5.6 La commande wc . . . . . . . . . . . . . . . . . . . . . . . . . . Gestion des longs processus . . . . . . . . . . . . . . . . . . . . . . . . 9.6.1 La commande nohup . . . . . . . . . . . . . . . . . . . . . . . . 9.6.2 Les commandes nice et renice . . . . . . . . . . . . . . . . . 9.6.3 La commande screen . . . . . . . . . . . . . . . . . . . . . . . 9.6.4 La commande tmux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 184 184 185 186 188 188 189 194 196 198 200 200 201 202 204 207 207 207 208 209 210 212 212 213 213 213 214 214 216 218 219 221 222 223 223 224 224 225 227

9.5

9.6

10

Impression 10.1 Nommage des imprimantes . . . . . . . . . . . . . . . . . 10.2 Avant dimprimer . . . . . . . . . . . . . . . . . . . . . . . 10.2.1 La commande lpq . . . . . . . . . . . . . . . . . . 10.2.2 La commande lprm . . . . . . . . . . . . . . . . . 10.3 Le format PostScript . . . . . . . . . . . . . . . . . . . . . 10.4 Impression de chiers PostScript . . . . . . . . . . . . . 10.4.1 La commande lpr . . . . . . . . . . . . . . . . . . 10.4.2 Les utilitaires PSUtils . . . . . . . . . . . . . . . 10.4.2.1 La commande psselect . . . . . . . 10.4.2.2 La commande psnup . . . . . . . . . 10.5 Impression de chiers texte . . . . . . . . . . . . . . . . . 10.5.1 La commande a2ps . . . . . . . . . . . . . . . . . 10.5.2 La commande enscript . . . . . . . . . . . . . . 10.5.3 Impression de chiers texte cods en UTF-8 . 10.6 Impression de chiers PDF . . . . . . . . . . . . . . . . . Connexion distance 11.1 Le chiffrement . . . . . . . . . . . . . . . . . . . . . . . . . 11.1.1 Chiffrement symtrique . . . . . . . . . . . . . 11.1.2 Chiffrement asymtrique . . . . . . . . . . . . . 11.1.3 Chiffrement hybride . . . . . . . . . . . . . . . . 11.2 La commande ssh . . . . . . . . . . . . . . . . . . . . . . . 11.2.1 Connexion simple . . . . . . . . . . . . . . . . . 11.2.2 Connexion avec afchage graphique dport 378

11

Table des matires 11.2.3 Connexion avec un identiant diffrent . . . . . . . . . . . 11.2.4 Connexion depuis lextrieur de lENSTA ParisTech . . . La commande scp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Savoir qui est connect sur un ordinateur : les commandes who et w . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 227 228 229 231 231 232 232 232 234 234 235 237 238 238 238 240 241 243 243 244 245 246 248 248

11.3 11.4 12

Programmation 12.1 Pourquoi programmer ? . . . . . . . . . . . . . . . . . 12.2 Comment programmer ? . . . . . . . . . . . . . . . . 12.2.1 Les scripts . . . . . . . . . . . . . . . . . . . . . 12.2.2 Excution dun script . . . . . . . . . . . . . 12.3 Continuation de ligne . . . . . . . . . . . . . . . . . . 12.4 Les commentaires . . . . . . . . . . . . . . . . . . . . . 12.5 Les variables . . . . . . . . . . . . . . . . . . . . . . . . 12.6 Le calcul entier . . . . . . . . . . . . . . . . . . . . . . . 12.7 Les instructions de contrle . . . . . . . . . . . . . . 12.7.1 Les tests . . . . . . . . . . . . . . . . . . . . . . 12.7.1.1 La commande test . . . . . . . . 12.7.1.2 Le test if . . . . . . . . . . . . . . . 12.7.1.3 Le test case . . . . . . . . . . . . . 12.7.2 Les boucles . . . . . . . . . . . . . . . . . . . . 12.7.2.1 La boucle for . . . . . . . . . . . . 12.7.2.2 Les boucles while et until . . . . 12.8 Les arguments . . . . . . . . . . . . . . . . . . . . . . . 12.9 Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . 12.10 Statut de sortie . . . . . . . . . . . . . . . . . . . . . . . 12.11 Quelques conseils gnraux sur la programmation

IV Cration dun site Web


13 Formats de documents et historique de la toile 13.1 Des formats de documents . . . . . . . . . . . . . 13.1.1 Formats ouverts, formats ferms . . . . 13.1.2 Un exemple de format ouvert : SGML 13.1.3 Lvolution de SGML : XML . . . . . . 13.2 Historique de la toile . . . . . . . . . . . . . . . . . HTML, XHTML 14.1 Structure gnrale dune page XHTML 14.1.1 Len-tte . . . . . . . . . . . . . . . 14.1.2 Le corps . . . . . . . . . . . . . . . 14.2 Nommage et emplacement des chiers 14.3 Au sujet des exemples qui suivent . . . . 379 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

251
253 253 254 255 257 259 263 264 265 266 266 267

14

Table des matires Les lments usuels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.4.1 Les lments de titres h1, h2, h3, h4, h5 et h6 . . . . . . . . . 14.4.2 Llment de paragraphe p . . . . . . . . . . . . . . . . . . . . 14.4.3 Llment de let hr . . . . . . . . . . . . . . . . . . . . . . . . 14.4.4 Llment de retour la ligne br . . . . . . . . . . . . . . . . . 14.4.5 Les lments textuels abbr, acronym, cite, code, dfn, em, kbd, samp, strong et var . . . . . . . . . . . . . . . . . . . . . . 14.4.6 Les lments visuels b, i et tt . . . . . . . . . . . . . . . . . . 14.4.7 Les lments infrieur sub et suprieur sup . . . . . . . . . . 14.4.8 Les entits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.5 Llment dhyperlien a . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.6 Llment dinsertion dimage img . . . . . . . . . . . . . . . . . . . . 14.7 Les listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.8 Les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.9 Lattribut de langue xml:lang . . . . . . . . . . . . . . . . . . . . . . . 14.10 Enrichir XHTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Feuilles de style CSS 15.1 Faire rfrence une feuille de style dans une page HTML . . 15.2 Au sujet des exemples qui suivent . . . . . . . . . . . . . . . . . . . 15.3 Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.3.1 Les commentaires . . . . . . . . . . . . . . . . . . . . . . . . 15.3.2 Les rgles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.3.3 Les slecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.3.3.1 Les slecteurs de type . . . . . . . . . . . . . . . 15.3.3.2 Le regroupement . . . . . . . . . . . . . . . . . . 15.3.3.3 Les slecteurs descendants . . . . . . . . . . . . 15.3.3.4 Les slecteurs denfant . . . . . . . . . . . . . . 15.3.3.5 Les slecteurs dattribut . . . . . . . . . . . . . 15.3.3.6 Les slecteurs de classe . . . . . . . . . . . . . . 15.3.3.7 Les slecteurs didentiant . . . . . . . . . . . 15.3.3.8 Les pseudo-classes . . . . . . . . . . . . . . . . . 15.3.3.8.1 Les pseudo-classes de lien . . . . 15.3.3.8.2 Les pseudo-classes dynamiques . 15.3.3.8.3 La pseudo-classe de langue . . . . 15.3.4 Les dclarations et les proprits . . . . . . . . . . . . . . 15.4 Lhritage et la cascade . . . . . . . . . . . . . . . . . . . . . . . . . . 15.4.1 Lhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.4.2 La cascade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.5 Les couleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.5.1 Nommage et reprsentation des couleurs . . . . . . . . . 15.5.2 La proprit de couleur color . . . . . . . . . . . . . . . . 15.5.3 La proprit de couleur de fond background-color . . 380 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.4 267 267 268 270 270 271 271 272 273 273 274 275 277 279 280 283 284 285 285 285 286 287 287 287 289 289 290 291 293 294 294 295 295 296 297 297 297 300 300 301 301

Table des matires Les units de mesure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Le texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.7.1 La proprit de police font-family . . . . . . . . . . . . . . 15.7.2 La proprit dinclinaison font-style . . . . . . . . . . . . . 15.7.3 La proprit de graisse font-weight . . . . . . . . . . . . . . 15.7.4 La proprit de corps font-size . . . . . . . . . . . . . . . . 15.7.5 La proprit dalina text-indent . . . . . . . . . . . . . . . 15.7.6 La proprit dalignement text-align . . . . . . . . . . . . 15.7.7 La proprit de dcoration text-decoration . . . . . . . . 15.8 Marge, espacement et bordure . . . . . . . . . . . . . . . . . . . . . . . 15.8.1 La marge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.8.2 Lespacement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.8.3 La bordure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.9 Les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.9.1 La proprit de positionnement de lgende caption-side 15.9.2 La proprit de fusion des bordures border-collapse . . . 15.9.3 Centrage dun tableau . . . . . . . . . . . . . . . . . . . . . . . 15.10 Llment span . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.11 Llment div et les divisions . . . . . . . . . . . . . . . . . . . . . . . . 15.11.1 Les deux mthodes dagencement des divisions . . . . . . . 15.11.1.1 Agencement des divisions avec la proprit position . . . . . . . . . . . . . . . . . . . . . . . . . 15.11.1.2 Agencement des divisions avec la proprit float 15.11.1.3 Quelle mthode utiliser ? . . . . . . . . . . . . . . 15.11.2 Dimensionnement des divisions . . . . . . . . . . . . . . . . 15.11.3 Une barre latrale de navigation . . . . . . . . . . . . . . . . 15.11.3.1 Agencement avec la proprit position . . . . . 15.11.3.2 Agencement avec la proprit float . . . . . . . 15.11.4 Deux barres latrales . . . . . . . . . . . . . . . . . . . . . . . . 15.11.4.1 Agencement avec la proprit position . . . . . 15.11.4.2 Agencement avec la proprit float . . . . . . . Annexes A B C Rcapitulatif des commandes des diteurs de texte Rcapitulatif des commandes Rcapitulatif des lments HTML et des proprits CSS 15.6 15.7 302 303 303 304 305 305 306 306 307 308 309 313 314 315 315 316 317 317 319 319 319 320 321 322 322 322 325 326 326 326 331 333 337 341 345 345 346

Bibliographie Du texte et des diteurs de texte . . . . . . . . . . . . . . . . . . . . . . . . . . Linterprteur de commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381

Table des matires Cration dun site Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Typographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Divers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Index Index Du texte et des diteurs de texte Index Linterprteur de commandes Index Cration dun site Web Liste des tableaux Table des gures Table des listages Table des matires 348 351 352 353 355 357 363 367 369 371 373

382

Le prsent ouvrage a t mis en pages par son auteur A au moyen du systme de prparation de documents LTEX cr par Leslie Lamport et entretenu par lquipe du A projet LTEX3 reposant sur le systme de composition TEX cr par Donald Knuth. Sa ralisation a t assure par le moteur pdfTEX cr par Hn Th Thnh , la classe memoir cre par Peter Wilson et entretenue par Lars Madsen ainsi quune trentaine dextensions. Lensemble a t fourni par la distribution TEX Live. Son texte a t compos en URW Garamond corps 10, la couverture et les titres de chapitres en URW Nimbus Sans et les exemples en Bera Mono. Ses chiers sources ont t saisis au moyen de lditeur de texte Vim et leur historique a t con aux bons soins du logiciel de gestion de versions Subversion (cette dition correspond au numro de rvision 189 du dpt). Le cycle de production du chier PDF ayant permis son impression a t entirement ralis sur le systme dexploitation NetBSD.

cole nationale suprieure de techniques avances


32 boulevard Victor - 75739 PARIS CEDEX 15 - France www.ensta-paristech.fr