You are on page 1of 262

Pour aller plus loin avec la ligne de commande

1.03
Tout ce que vous avez toujours voulu savoir sur Unix sans jamais os er le demander

Vincent Lozano

Immeuble ACCET 4, place de la Pergola 95021 Cergy-Pontoise Cedex


Ce livre est publi sous licence Art libre http://artlibre.org La photo de Linus Torvalds (g. 1.7 page 14) est distribue sous GFDL avec la permission de Martin Streicher rdacteur en chef LINUXMAG.com La photo de Richard Stallman (g. 1.6 page 12) est distribue sous CC-by-2.0, son auteur est chrys (http://http://flickr.com/people/chrys) et la source peut tre trouve sur Flickr (http://flickr.com/photos/chrys/5592199/) La photo de Thompson et Ritchie (g. 1.4 page 8) a t verse dans le domaine public par son auteur Hoshie (http://commons.wikimedia.org/wiki/User:Hoshie) Dennis Ritchie a indiqu que limage de la gure 1.3 page 7 a t verse dans le domaine public et quil faut crditer le propritaire original savoir Alcatel Lucent qui a achet Bell Labs. En outre, chaque rutilisation ou distribution, vous devez faire apparatre clairement aux autres les conditions contractuelles de mise disposition de cette cration. Chacune de ces conditions peut tre leve si vous obtenez lautorisation du titulaire des droits. In Libro Veritas, ISBN : 978-2-35922-023-0 Dpt lgal : 2e semestre 2010

Cest simple... Souviens-toi... Tu as demand un jour au prtendu ingnieur Barnier de crer un nouveau cbleur. Barnier t alors une erreur [...] Il t tout simplement entrer le double polarisateur chromatique en rsonance avec le palpeur de mirette. Ce qui dtruisit le cbleur mais eut pour eet secondaire et imprvu la cration dun champ danti-temps dont lpicentre mesurable se trouva tre reli aux circuits chromatiques du laboratoire de recherche sur les chrono-particules que je dirige dans les sous-sols de lOlog [...] Le Garage Hermtique Mbius

Prface
There is more than one way To do it. Larry Wall 1 .

Pourquoi ce manuel ?
En 1992, un collgue du DEA Image de luniversit Jean Monnet de Saint-tienne, fait dmarrer son PC en me disant : tu vois a cest unix , il sagissait bien sr dune des premires versions de LINUX . Javais alors t plutt sceptique sur cet imbroglio de messages au dmarrage et sur laspect plutt spartiate de lenvironnement graphique. Paralllement, nous travaillions sur des mini-projets (sorte de projet de n dtude) axs sur limplantation dalgorithme de traitement et danalyse dimage. lpoque, nous utilisions un compilateur C du commerce nexploitant pas le mode protg du processeur Intel, et nous nous trouvmes face au problme aberrant de la mmoire segmente par paquet de 64 ko. Cette limitation rendait trs dicile le chargement dimages numriques en mmoire. Cest nalement grce ce problme que nous sommes tombs sur un compilateur (djgpp) en ligne de commande capable
1. Crateur du logiciel Perl.

iii

iv

dexploiter le mode protg des processeurs des PCs 2 et ainsi de lever cette limitation. Ce compilateur a t une rvlation dans le sens o je me suis aperu que des gens distribuaient gratuitement des outils qui allaient enn me permettre de travailler confortablement. Certains mini-projets du DEA avaient lieu lcole des Mines de Saint-tienne, et cest l que jai eu les premiers contacts avec cette chose quest unix. Premiers contacts dsagrables : impossible de trouver un lecteur de disquette dans ce fatras de machines, des diteurs de texte pour programmer, dont tout le monde vantait les mrites, ncessitant 23 doigts et une mmoire dlphant pour arriver insrer un caractre en n de ligne, des utilisateurs la limite du fanatisme, devenant mme hargneux et sectaires lorsque je mentionnais mon exprience de dveloppeur dbutant en C avec Turbo C... Cependant il manait de ce laboratoire qui utilisait les ressources de ce rseau unix, une certaine libert daction qui ma demble sduit : il tait apparemment possible dutiliser les processeurs de plusieurs machines, chaque utilisateur semblait avoir cr son propre environnement de travail, personne ne parlait de rebooter ou de plantage , certains sattelaient des projets de logiciels ambitieux, dautres rdigeaient des documents dallure professionnelle, il ntait pas question de pirater un logiciel du commerce puisque tous les outils semblaient tre porte de main pour travailler. En 1993, dbutant une thse au laboratoire Ingnierie de la Vision de la facult de sciences Saint-tienne, jentrepris dinstaller une version de gcc (compilateur C A de chez gnu) et de comprendre comment fonctionne ce fameux L TEX (systme de prparation de document qui a gnr le document que vous avez sous les yeux). Le fait que lUniversit soit connecte au rseau Renater 3 a bien sr grandement aid mener bien ce projet parsem dembches qui ma permis de me sensibiliser lenvironnement dunix. Jai t alors fascin par limmensit du systme, son aspect ouvert donnant une sensation dinni, erayant de complexit. Mais cette complexit tait, me semblait-il, le prix de la libert, la libert de pouvoir contrler cette machine quest lordinateur. Les annes qui ont suivi, je les ai consacres en partie ladministration dun systme unix pour lquipe de recherche et les tudiants, cest galement cette poque que jai dcouvert et me suis investi dans lunix que je pouvais emporter la maison : LINUX . Je passais alors de simple utilisateur de linformatique acteur qui tentait de comprendre les rouages de ce meccano gant quest un systme dexploitation. La motivation venait bien sr du fait que toutes les pices de ce meccano taient accessibles et documentes. Javais la sensation de pouvoir potentiellement comprendre les fondements de linformatique tout en tant conscient que cela me demanderait sans doute un temps inni...
2. Et donc de permettre de joyeux ptr=(char*)malloc(4194304); que certes seuls les habitus du langage C comprendront... 3. Le rseau Renater regroupe prs dun millier dtablissements de recherche et denseignement.

La rencontre virtuelle via les forums de discussion, avec la communaut de bricoleurs de chez gnu et LINUX a t pratiquement une prise de conscience quasi politique, une autre vision de la dmarche scientique. Je trouvais enn des tres humains dsirant faire avancer le schmilblick sans arrire pense de capitalisation de linformation. Malgr tout, si les logiciels libres peuvent sintgrer et sintgrent dans lconomie de march, je reste aujourdhui admiratif vis vis de cette ide de diffuser les connaissances et de sassurer quelles puissent toujours tre diuses. Cest sans doute ce prix que le commun des mortels, utilisateur de loutil informatique gardera son indpendance desprit et sa libert de choix.

Quy a-t-il dans ce manuel ?


Jai entrepris de rdiger ce manuel lorsquen 1999, le responsable de matrise de lIUP Vision de Saint-tienne ma demand de dispenser quelques heures de cours pour prsenter aux tudiants le systme unix. Le document tait alors compos dun petit guide de survie prsentant les fonctionnalits de base connatre pour survivre devant un ordinateur gr par un unix. Jai ensuite dcid de complter ce document, en tentant de prsenter ce quun utilisateur doit savoir pour se dbrouiller sous unix. Ce manuel ne contient donc aucune allusion ladministration dun systme. Il ne se veut pas non plus un guide de rfrence 4 , mais plutt une sensibilisation la philosophie dunix. On trouvera donc beaucoup de pistes explorer et jamais de prsentation systmatiquement dtaille. Comme disait mon professeur de Ta Chi au sujet dun stage quil avait eectu sur le Yi Qing, si unix tait un livre, ce document serait lquivalent de passer son doigt sur la couverture pour y enlever la poussire... Les informations prsentes ici font partie des connaissances que jai acquises ces dernires annes et dont je fais usage rgulirement, il sagit donc mon humble avis dinformations utiles et directement exploitables et non pas de fonctionnalits obscures. Jai tent de les prsenter avec lide de madresser un novice, dans le but de le convaincre de lintrt quil y a apprendre unix. En outre, si la plupart des informations de ce manuel sont adaptes nimporte quel unix, il est vident que LINUX est notre unix de rfrence de mme que les outils prsents le sont dans leur version du projet gnu. Il ne sagit pas dun choix sectaire mais simplement de lexploitation de la grande disponibilit de ces outils.

Ce quil ny a pas dans ce manuel


Lutilisateur novice dunix et de LINUX en particulier cherche souvent des informations pour installer ce systme dexploitation sur sa machine, pour savoir sil faut
4. Peut-on dailleurs crer un guide de rfrence sur lutilisation dunix ?

vi

partitionner son disque dur ou en acheter un autre, pour connatre la distribution 5 de LINUX qui lui conviendrait le mieux, pour savoir comment, une fois la dite distribution installe, il est possible davoir du son, dutiliser son scanner, de congurer sa connexion internet, etc. Ce manuel ne traite ni de linstallation, ni de ladministration dun systme unix, mais donne le savoir faire ncessaire pour sy attaquer. Dautres interrogations concernent les quivalents des logiciels de bureautique 6 , de jeux, etc. Il ne sera donc pas question dans ce manuel, ni des quivalents en logiciels libres des tableurs et autres traitements de texte, ni de lutilisation des clbres bureaux quon trouve aujourdhui sous LINUX : Kde et Gnome. Nous ne pouvons que vous conseiller de vous procurer lexcellent Simple comme Ubuntu (Roche, 2010) pour trouver des rponses sappuyant sur la distribution Ubuntu. Les outils prsents ici, sont ceux que lon peut retrouver sur nimporte quel unix. Laccent est donc mis sur lusage des commandes et de leur utilisation interactive ainsi que dans le cadre de scripts ; il sera donc davantage question de clavier que de souris. Ce manuel a dailleurs pour objectif de convaincre le lecteur de lintrt de cette approche dans le cadre de lapprentissage dunix.
Il est important de noter que le titre de ce manuel est un mensonge hont. Le contenu de ce document ne se veut pas tre une prsentation dunix, ou mme des unix, ni des standards tels que Posix. Lunix de rfrence ici est GNU/LINUX car cest sans doute aujourdhui le plus accessible et le plus utilis. Cependant, la majeure partie des outils prsents dans ce manuel peuvent tre utiliss tels quels sur nimporte quel unix. Lorsque a ne sera pas le cas nous tenterons dinsrer ce joli panneau dans le paragraphe. Ce manuel est avant tout un manuel destin aux dbutants, il a donc pour objectif dtre didactique et tente donc de ne pas noyer le lecteur dans un fatras de dtails techniques. Encore une fois, le titre pourrait induire le lecteur naf que vous ntes pas, en erreur : vous ne saurez pas tout sur unix ! Aux endroits o apparatra ce panneau, jai introduit quelques concepts un peu plus pointus quil est, dans un premier temps, inutile de lire mais qui corrigent certaines imprcisions.

5. Une distribution de LINUX est un ensemble de logiciels compos du noyau LINUX , dapplications (bureautique, images, sons, etc.) et surtout dun programme dinstallation et de mise jour qui la caractrise. 6. Une des questions angoissantes pour lutilisateur dbutant ou sur le point dutiliser unix est en eet de savoir sil lui sera toujours possible dutiliser les merveilleux outils de la suite bureautique de la clbre entreprise dont nous tairons le nom ici...

vii

Comment lire ce manuel ?


Les pages se lisent de gauche droite et de haut en bas et pour donner limpression dune cohrence globale, ce manuel est divis en chapitres dont les titres sont : unix et les logiciels libres : une prsentation de la naissance dunix, du lien avec les logiciels libres. Un chapitre non technique, assorti de considrations philosophico-politico-conomico-thiques douteuses ; Petit guide de survie : chapitre prsentant les concepts de base dunix (notions dutilisateurs, de chiers, de processus, etc.) ; La bote outils : contient une description de quelques-uns des outils du grand meccano. Ce chapitre permet davoir une ide de la souplesse apportes par lhomognit de tous ces outils ; Communiquer ! : prsente les outils axs sur le rseau, la communication entre utilisateurs, entre machines, le transfert de chiers, lutilisation de la messagerie et laccs aux Web ; Dvelopper : contient des informations relativement prcises sur le langage de commande bash (le shell de chez gnu), lutilisation de ces tranges btes que sont les makefiles, et la faon de crer des programmes en langage C qui est le langage utilis pour dvelopper unix ; Se mettre laise : permet de comprendre comment on peut congurer son environnement de travail : personnaliser son shell, comprendre le fonctionnement des diteurs de texte vi et emacs, congurer lenvironnement graphique, et quelques pistes pour installer des logiciels sur son propre compte ; laide ! donne des pistes pour chercher de la documentation sur les commandes dunix la fois localement et en ligne. Il est conseill de lire ce manuel de manire linaire au moins une fois, pour comprendre comment sarticulent les dirents concepts introduits. On pourra revenir dans un deuxime temps sur des informations plus spciques contenues dans certains chapitres. La complexit et limmensit du sujet font que vous trouverez beaucoup dinterconnexions entre les sujets traits.

Comment imprimer ce manuel ?


Avec une imprimante 7 , en utilisant la version papier produite partir de ce document, version prvue pour tre massicote en 15 cm par 25 cm. Au cas o vous ne disposeriez pas de massicot et souhaiteriez imprimer ce manuel sur un format A4, vous trouverez toutes les informations ncessaires sur http://lozzone.free.fr.
7. Arf arf (comme disait Frank Zappa).

viii

Que pouvez-vous faire de ce manuel ?


Nom de lauteur : Vincent Lozano ; Titre : Tout ce que vous avez toujours voulu savoir sur unix sans jamais avoir os le demander ; Date : 1er mars 2011 Copyleft : ce manuel est libre selon les termes de la Licence Art Libre (http:// www.artlibre.org) (LAL). La LAL stipule en rsum que vous pouvez copier ce manuel. Vous pouvez galement le diuser condition : dindiquer quil est sous la LAL ; dindiquer le nom de lauteur de loriginal : Vincent Lozano et de ceux qui auraient apport des modications ; dindiquer que les chiers sources peuvent tre tlchargs sur http://lozzone. free.fr ; Enn vous pouvez le modier condition : de respecter les conditions de diusion nonces ci-dessus ; dindiquer quil sagit dune version modie et si possible la nature de la modication ; de diuser vos modications sous la mme licence ou sous une licence compatible.

Conventions typographiques
Certaines conventions utilises dans ce manuel ncessitent dtre quelque peu claircies. Les commandes unix qui parsment le document apparatront comme ceci : $ type cat cat is /bin/cat $

Certaines parties sont prsentes sous forme de notes pour claircir un point sans que la lecture soit indispensable au premier abord.

Si la lecture est indispensable, on aura recours au pictogramme ci-contre pour attirer lattention du lecteur distrait...

ix

Les logiciels sont typographis comme indiqus ci-avant. Les mots en anglais sont produits like this. Pour mettre en vidence les parties gnriques dune commande on utilisera cette notation. Par exemple, on pourra trouver une phrase comme : ...pour obtenir des informations sur les attributs dun chier dont le nom est nomc $ ls -l nomc et le tour est jou ... Dans la version papier apparaissent des renvois sur des chapitres ou des paragraphes, comme celui-ci dirigeant le lecteur vers la gestion des processus sous unix.
2.4 p. 53

Merci
lquipe de recherche de feu lIUP Vision de Saint-tienne pour mavoir soutenu dans ce travail, plus particulirement Serge Chastel qui a rdig la premire version du chapitre laide . Jacques Lopez pour avoir pu relire attentivement ce manuel et me proposer des suggestions constructives. Laurent Defours pour insister me faire utiliser des mots du franais. Jai d sous la pression faire : for F in *.tex ; do sed s/librairie/bibliothque/g $F | sed s/Librairie/Bibliothque/g > tmp.tex ; mv -f tmp.tex $F ; done pour rendre ce document acceptable ses yeux 8 . Nabil Boukala pour avoir trouv exactement 138 coquilles et autres fautes dans la prcdente version, ainsi que pour mavoir indiqu lorthographe exacte de Massachusetts . Aux intervenants des newsgroups autour de LINUX et dunix pour leurs prcieuses informations quils mont indirectement apportes. Andrea Ferraris pour ses encouragements, Cdric rixed pour ses remarques sur lOsf, Hugues dbianiste avant tout pour sa prcision sur la naissance du projet gnu, Jacques LHelgoualch pour mavoir suggr quun mcano rparait des voitures et quun meccano tait un jeu de construction, Paul Gaborit pour sa remarque judicieuse sur le caractre libre du package french A de L TEX, un grand merci Go cherchetout pour mavoir transmis 149 coquilles aprs avoir lu le document intgrant les 138 fautes repres par Nabil. Jadresse mes plus profonds remerciements Stphane Chazelas pour sa lecture minutieuse de la version prcdente de ce manuel. Cest suite ses remarques
8. Le plus terrible est quaprs avoir relu cette prface, il ma gentiment suggr de regarder du ct de loption i de la version gnu du programme sed...

constructives que ce manuel sest enrichi de nombreuses nota et surtout que beaucoup dimprcisions et derreurs de fond ont t corriges... Je tiens enn exprimer ma gratitude et mon grand respect pour le travail et la motivation dAlexis Kaufman et Didier Roche qui mont fait conance pour la publication de ce livre. Merci galement tous les membres du groupe de relecture des Framaboooks pour leort quils ont fourni pour parfaire ce document : en particulier Barbara Garburst que lon peut qualier d il de lynx , Laurent lolonene , kinouchou. Un autre merci va Philippe Martin qui ma transmis des chiers di A permettant de corriger 51 coquilles directement sur les sources L TEX. Enn, je souhaite remercier chaleureusement Christophe Masutti pour sa lecture attentive. Je pense quune bonne trentaine de virgules ainsi que bonne vingtaine dappels de notes de bas de page ont t correctement placs grce lui. toute la communaut des hackers pour lnergie quils insuent...

Bonne lecture 9 !

9. Histoire de commencer un peu mettre des notes de bas de page un peu partout, vous noterez peut-tre au cours de cette lecture, que malgr tout des termes anglais apparatront souvent, parfois non traduits. Une honte !

Sommaire
1 Unix et les logiciels libres 1.1 Avant-propos : la naissance dun logiciel . 1.2 Unix . . . . . . . . . . . . . . . . . . . . . 1.3 Les logiciels libres . . . . . . . . . . . . . . 1.4 Le cas de Gnu/Linux . . . . . . . . . . . . 1.5 Quelques rexions sur les logiciels libres . 1.6 Actualit et avenir des logiciels libres . . . 2 Petit guide de survie 2.1 Le shell . . . . . . . . 2.2 Utilisateurs . . . . . . 2.3 Le systme de chiers 2.4 Processus . . . . . . . 2.5 Quelques services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 5 10 13 15 17 23 24 31 33 53 62 69 70 70 76 84 88 90

3 La bote outils 3.1 Introduction lexpansion . . . . . . . . . 3.2 Redirections et tubes . . . . . . . . . . . . 3.3 Les outils de base . . . . . . . . . . . . . . 3.4 Le shell en tant que langage . . . . . . . . 3.5 grep et la notion dexpressions rgulires 3.6 awk . . . . . . . . . . . . . . . . . . . . . . xi

xii

3.7 3.8

sed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tudes de cas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

92 94 99 100 104 112 116 118 123 124 125 143 150 165 166 176 178 194 204 209 210 212 215 216 217 217 221 223 227

4 Communiquer ! 4.1 Concepts connatre . . . . . . . 4.2 Quatre grands classiques . . . . . 4.3 Outils de communication dUnix 4.4 Courrier lectronique . . . . . . . 4.5 Le oube . . . . . . . . . . . . . . 5 Dvelopper ! 5.1 diter un chier . . . . . . . . 5.2 Faire des scripts en shell . . . . 5.3 Makele . . . . . . . . . . . . . 5.4 Faire des projets en langage C . 6 Se mettre laise ! 6.1 Avec le shell . . . . . 6.2 Avec vi . . . . . . . . 6.3 Avec Emacs . . . . . 6.4 Avec Xwindow . . . 6.5 Installer des logiciels 7 laide ! 7.1 Quoi fait quoi ? . . . 7.2 Les pages de manuel 7.3 Le format info . . . . 7.4 Le logiciel . . . . . . 7.5 Les HOWTO . . . . 7.6 La documentation en Bibliographie Glossaire Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . ligne

Sommaire 1.1 1.2 1.3 1.4 1.5 1.6 Avant-propos : la naissance dun logiciel Unix Les logiciels libres Le cas de Gnu/Linux Quelques rexions sur les logiciels libres Actualit et avenir des logiciels libres

Chapitre

1
Grgoire (1837) 1 .

Unix et les logiciels libres


Les productions de gnie et les moyens dinstruction sont la proprit commune ; ils doivent tre rpartis sur la surface de la France comme les rverbres dans une cit.

particulier de logiciel que sont les logiciels dits logiciels libres. De manire positionner clairement unix par rapport aux logiciels libres, nous dbutons ce chapitre par une prsentation succincte de la naissance dun logiciel. Vient ensuite un historique dunix, qui tente de montrer que mme si unix est aujourdhui un ensemble de logiciels propritaires, sa naissance et ses volutions de jeunesse constituent sans aucun doute les prmices des logiciels libres. Nous nous livrerons en guise de deuxime partie de chapitre une prsentation de la philosophie des logiciels libres principalement au travers de LINUX et du projet gnu et de ses implications tant techniques que philosophiques.

A nir quelques termes de manire clairer le lecteur novice. Les claircissements portent la fois sur la famille de systmes dexploitation quest unix, et le type

vant daborder ltude du systme unix, nous allons, dans ce chapitre, d-

1. Labb Grgoire est le fondateur du centre national des Arts et Mtiers.

Unix et les logiciels libres

1.1

Avant-propos : la naissance dun logiciel

Pour se sensibiliser la notion de logiciel libre et pour comprendre ce quest un systme dexploitation multi-plate-forme, il est impratif de saisir les dirents outils et mcanismes qui entrent en jeu lors de la cration dun logiciel ainsi que lors de lexcution dun programme.

1.1.1

Du source

La conception dun logiciel passe par direntes phases que lon peut prsenter de manire plus ou moins dtaille ; toujours est-il que ces phases sarticulent autour des tapes importantes suivantes : 1. lanalyse du problme rsoudre ; 2. la conception dun algorithme correspondant cette analyse ; 3. la traduction de lanalyse dans un langage de programmation plus ou moins volu ; 4. la compilation du programme en langage volu, cest--dire la traduction du langage volu vers un langage moins expressif quest celui de la machine et plus prcisment du processeur et du systme dexploitation ; 5. la phase de test qui permet de sassurer que le programme rpond aux besoins initiaux. Le programme en langage volu est appel le langage source, le langage moins expressif le langage cible, et dans le cadre de la programmation avec un langage compil, on nomme le programme cible : binaire ou excutable. Le programme binaire est une suite dinstructions destines tre interprtes par un processeur particulier. Un binaire est donc ddi un processeur et un systme dexploitation dun certain type, ce couple processeur/systme est appel plate-forme. Le programme source est le programme qui rete trs exactement lanalyse et lalgorithme correspondant au problme rsoudre. On ne peut retrouver dans le binaire la complexit et la richesse de lalgorithme mis en uvre quau prix dun travail surhumain. En eet la solution serait de dcompiler le binaire. On peut tirer du binaire une liste dinstructions issues de la couche assembleur ; cest parce que cette liste contient des instructions peu expressives par rapport aux instructions du langage volu, quil est pratiquement impossible de retrouver larchitecture initiale de lalgorithme. Pour comprendre ce principe qui peut ne pas tre clair pour le lecteur qui na pas une exprience de programmeur on peut faire plusieurs analogies. La premire est celle du cuisinier qui prpare un plat avec un certain nombre dingrdients. En gotant le plat, un palais averti peut dtecter quelques-uns de ces ingrdients. On peut mme imaginer quun appareil puisse faire une analyse molculaire et tablir une liste prcise des lments qui composent le plat. Cependant, il semble dicile

1.1 Avant-propos : la naissance dun logiciel

voire impossible, partir du plat de savoir comment le chef a procd pour mlanger les ingrdients, le temps de cuisson, les plats et les ustensiles quil a utiliss, etc. Une autre analogie possible est celle de la conception dune culasse automobile. On peut dmonter une culasse, la mesurer, trouver lalliage de mtaux qui la compose, mais on ne peut partir de ces donnes retrouver le modle de thermodynamique et lensemble de calcul qui a men dnir la forme particulire de cette culasse. Enn, on peut toujours traduire un texte dun grand philosophe en un texte compos de mots et phrases simples dans le but de le faire comprendre un enfant de dix ans. On ne pourra cependant pas retrouver le texte original partir du texte traduit. Les programmes sources constituent donc la seule information prcise concernant le fonctionnement dun programme.

1.1.2

De la portablilit

Pour comprendre ce quimplique la manipulation des programmes sources, nous allons expliciter dans ce paragraphe les notions : 1. dexcution dun programme ; 2. de compilation dun programme source ; 3. dinterprtation dun programme source. Tout dabord notons que Tanenbaum (2001) a introduit un modle de reprsentation dun ordinateur qui est un modle en couches (cf. gure 1.1 page suivante 2 ). Dans ce modle, on reprsente la machine physique dans la premire couche dite de bas niveau puis, en faisant intervenir des langages de programmation de plus en plus volus, on dnit des couches de haut niveau. Celles-ci permettent de dialoguer avec la machine laide de concepts de plus en plus abstraits et loigns de larchitecture physique. Excution Au niveau de la couche machine, lorsquun programme est en cours dexcution, lunit centrale passe le plus clair de son temps transfrer le code des instructions stockes en mmoire centrale pour les dcoder et les excuter. Le code de chacune de ces instructions correspond un numro identiant une opration quest capable de raliser le processeur utilis. Le code des instructions est bien videmment dirent pour les processeurs fabriqus par Intel et Motorola pour ne citer que ceux-l. Par consquent : Le code en langage machine dun programme donn nest pas le mme selon le processeur qui doit lexcuter.
2. La couche machine physique est en ralit compose de trois couches : machine physique, couche micro-programme, couche machine traditionnelle.

Unix et les logiciels libres

couche langage dapplication

couche assembleur

couche systme dexploitation

Couche machine

Figure 1.1 Larchitecture en couches dun ordinateur.

Compilation dun source 3 Avec un langage compil, on dispose dun outil logiciel particulier appel compilateur pour traduire le programme source en un programme excutable par la machine virtuelle de lordinateur hte. On notera que contrairement au cas des langages interprts, lexcutable gnr est autonome et ce titre, peut tre excut sur un ordinateur dot de la mme machine virtuelle (cest--dire dot du mme systme dexploitation et de la mme architecture). Dans le cas dun ordinateur dot dune machine virtuelle dirente, lexcutable est inutilisable, et il faudra disposer dun compilateur pour la nouvelle plate-forme pour pouvoir produire un excutable. titre dexemple, la gure 1.2b page suivante, on notera que lexcutable produit sur lordinateur 1 est utilisable sur lordinateur 2 dot de la mme machine virtuelle. Par contre, cet excutable nest pas utilisable sur les ordinateurs 3 et 4, sur lesquels il est ncessaire de recompiler le source. Interprtation dun source Dans le cadre des langages interprts, le programme source est analys par un programme particulier appel interprteur ; ce programme se charge dexcuter chacune des instructions du programme source, les unes aprs les autres comme le montre la gure 1.2a page ci-contre. Pour pouvoir utiliser le logiciel produit sur un autre ordinateur, il faudra disposer de linterprteur sur cet ordinateur, et ceci, que la machine
3. Il arrive que ces fainants dinformaticiens disent le source qui est une contraction de le chier source ...

1.2 Unix

Source

Interprteur A/X Machine Virtuelle A/X SE A Arch X

Interprteur A/X Machine Virtuelle A/X SE A Arch X

Interprteur B/Y Machine Virtuelle B/Y SE B Arch Y

Interprteur B/Y Machine Virtuelle B/Y SE B Arch Y

Ordinateur 1 Ordinateur 2 Ordinateur 3 Ordinateur 4 (a) Utilisation dun programme interprt sur dirents ordinateurs.
Source

Compilateur A/X Excutable A/X Machine Virtuelle A/X SE A Arch X Ordinateur 1 Machine Virtuelle A/X SE A Arch X Ordinateur 2

Compilateur B/X Excutable B/X Machine Virtuelle B/X SE B Arch X Ordinateur 3

Compilateur B/Y Excutable B/Y Machine Virtuelle B/Y SE B Arch Y Ordinateur 4

(b) Sources compiles sur dirents ordinateurs.

Figure 1.2 Portabilit de programmes crits en langage compil et interprt. virtuelle de lordinateur cible soit dirente ou non. En dautres termes, pour interprter un source en langage Perl (langage interprt), on devra disposer dun interprteur Perl pour Windows, LINUX , etc. en fonction du systme install sur lordinateur.

1.2

Unix

unix est un systme dexploitation (operating system ), il assure donc aux utilisateurs et aux processus, la rpartition des ressources fournies par la machine : calcul, stockage, impression, transfert de donnes, etc. Ce systme dexploitation quarantenaire, a depuis sa cration les caractristiques suivantes : multi-utilisateurs : le systme identie des personnes logiques et permet ces personnes dutiliser le systme dans certaines limites ; multi-tches : le systme est tudi pour excuter plusieurs programmes en

Unix et les logiciels libres

mme temps, grce au concept de temps partag ; multi-plateforme : on verra quunix nest pas un systme ddi un processeur, mais que cest une famille de systmes que lon retrouve sur une multitude de plates-formes. Il faut galement noter que ce systme est ax sur le dveloppement 4 ; on dispose donc dune quantit importante doutils, permettant de crer des programmes, rdiger des documents, administrer un systme, etc.

1.2.1

Historique 5

unix est un systme quarantenaire, multi-tches, multi-utilisateurs et disponible sur plusieurs plate-formes. Il a pour origine un projet initi au dbut des annes soixante, conanc par la socit amricaine Bell, le MIT (Massachusetts Institute of Technology), et le ministre de la dfense amricain. Le projet en question est le dveloppement dun systme permettant plusieurs centaines dutilisateurs daccder des ressources informatiques ; ce systme devant tre dissmin sur plusieurs machines pour assurer un fonctionnement continu mme si une machine tombe en panne. Ce projet est baptis Multics (pour Multiplexed Information Computer Service) et dbute au dbut des annes soixante pour tre rapidement abandonn en 1969 vraisemblablement par excs dambition et faute de temps. Un scientique de chez Bell, Ken Thompson dcide de continuer travailler sur la partie systme dexploitation dans le but essentiel de faire tourner des programmes sur les machines dont il dispose. Pour plaisanter, ce systme est baptis Unics (pour Uniplexed Information ...) et devient rapidement unix. Thompson est peu aprs rejoint par Dennis Ritchie qui cre le langage C en sinspirant du langage B (langage interprt quavait cr Thompson aprs avoir tent de porter le langage Fortran sur la machine PDP-7). Lintrt est alors de pouvoir porter le systme sur dautres machines sans avoir tout rcrire 6 . En 1972, les bases fondamentales dunix sont prtes et les principes de la bote outils dunix sont noncs par Doug MacIlroy, linventeur des tubes 7 : 1. Write programs that do one thing and do it well ; 2. Write programs that work together ; 3. Write programs that handle textstreams because thats the universal interface.
4. Terme anglais (to develop pour mettre au point) pass dans le jargon des informaticiens : dvelopper cest exercer une activit autour de la programmation, de la cration dun logiciel. 5. Cette section est inspire des informations disponibles dans louvrage de Garnkel et Spaord (1996) faisant lui-mme rfrence celui de Salus (1994) 6. Il faut imaginer qu lpoque chaque machine possde son propre langage, une nouvelle machine ncessite donc un nouveau programme. 7. Pour les non anglophones : crire des programmes qui font une seule chose et qui le font bien, crire des programmes qui peuvent communiquer entre eux, crire des programmes qui manipulent du texte car cest linterface universelle.

1.2 Unix

Figure 1.3 Ken Thompson (assis) et Dennis Ritchie dans leurs versions with luxuriant and darker hair than [they] have now 9 devant le Pdp11. Simson Garfinkel et Gene Spafford notent dans leur ouvrage quunix devient alors un rve de programmeur . Puisque chacun pouvait alors crer ses propres outils dune complexit croissante avec les outils lmentaires du systme ; ces nouveaux outils devenant alors eux-mmes partie intgrante du systme. En 1973 unix est install sur 16 sites et la suite dune confrence 10 ainsi que dune publication (courant 1974) sur les systmes dexploitation, des utilisateurs mettent un avis intress. Les demandes auent. On comptera plus de 500 sites qui utiliseront unix, certains en dehors des tats-Unis. En 1978, Billy Joy, un tudiant de luniversit de Californie Berkeley, installe une bande magntique contenant le systme unix dAT&T. Il apporte des modications importantes au systme et distribue ce systme modi, sous forme de sources, pour $ 40 : la Berkeley Software Distribution (BSD). Billy Joy est lorigine de lditeur vi, dun compilateur Pascal, du C-shell, entre autres. Ces modications et outils
9. Comme lindique Ritchie lui-mme sur sa page http://cm.bell-labs.com/who/dmr. 10. ACM Symposium on Operating Systems Principles.

Unix et les logiciels libres

(a) Thompson et Ritchie

(b) Ritchie et Joy

Figure 1.4 Les papas dunix font alors le tour de la terre puisque dautres utilisateurs amricains et europens transmettront leur tour des amliorations Joy. Cet change dinformation constitue sans doute les prmices du mouvement des logiciels libres. La version BSD dunix est ce titre la version libre dunix 11 . Au dbut des annes 80, limportance prise par la distribution BSD, cre des tensions avec AT&T. Les utilisateurs sont alors face deux unix : le Berkeley unix, prfr par les dveloppeurs et port par une socit nouvellement cre par des tudiants de Berkeley : Sun ; AT&T unix system V : le systme du propritaire dunix et suppos tre le standard. Plusieurs fabricants dont Hewlett Packard, IBM, Silicon Graphics crent des unix fonds sur la version de AT&T. la n des annes 80, AT&T et Sun signent une charte de dveloppement commun, de manire fusionner leurs versions, en prenant les avantages de chacune de ces versions pour crer un nouveau standard : System V release 4 (note aussi SVR4). Se sentant menacs par cette alliance, HP, IBM, Digital et dautres, crent alors lOpen Software Foundation (OSF) dont le but est de laisser unix dans les mains dun consortium dindustriels plutt que dans les seules mains dAT&T. Au dbut des annes 90, AT&T vend unix la socit Novell, qui transfre alors la marque dpose unix lX/Open Consortium, et en vend les sources la socit SCO. Il y a alors cinq millions dutilisateurs dunix. Aujourdhui, la guerre des standards semble tre termine, et on a vu apparatre une norme ISO, permettant de standardiser les interfaces de programmation dapplications (API en anglais) : la norme POSIX (Portable Operating System Interface). On trouve aujourdhui :
11. De nombreux dmls judiciaires entre luniversit de Berkeley et la socit AT&T alors propritaire dunix sont mentionns par DiBona et al. (1999).

1.2 Unix

Des unix propritaires Nom Solaris HPUX AIX Digital Unix Irix Propritaire Sun HP IBM Digital SGI Processeur Sparc & Intel PA Risc & PowerPC Alpha

Des Unix libres Linux sur plate-forme Intel, Sparc, Alpha, Mac, ... FreeBSD sur plate-forme Intel, Alpha, PC-98 ; OpenBSD galement multi-plate-forme. Eric Raymond (DiBona et al., 1999, chapitre 4) note juste titre que cest malgr tout pendant cette lutte fratricide entre unix propritaires que le systme Windows, pourtant techniquement bien plus faible, a pu simposer.

1.2.2

Architecture et caractristiques

On peut dcomposer un systme unix en trois grandes entits : Le noyau : il assure la gestion de la mmoire et des entres sorties de bas niveau et lenchanement des tches (voir gure 1.5) ;
Applications CPU Noyau RAM

Drivers Priphriques

Vido

Clavier

Souris

Disques

...

Figure 1.5 Modules logiciels autour dun noyau Unix Un ensemble dutilitaires : ddis des tches diverses : des interprteurs de commande appels shells permettant de soumettre des tches au systme, tches pouvant tre concurrentes et/ou communicantes ; des commandes de manipulation de chiers (copie, dplacement, eacement, etc.) ;

10

Unix et les logiciels libres

des commandes de gestion dactivits du systme (processus ) ; des commandes de communication entre utilisateurs ; des outils de dveloppement (diteurs de texte, compilateurs, dbogueurs, ...) des outils de traitement de texte.

Une base de donnes systme : un ensemble de chiers contenant : des informations sur la conguration des dirents services ; des scripts de changement dtat du systme (dmarrage, arrt, ...). Sur chaque systme est ensuite install un ensemble de programmes pour les besoins spciques de lorganisation (traitements de texte, logiciels de calculs, etc.) Jean-Marc Rifflet dans La programmation sous unix (Riet, 1995) note que les caractristiques principales dun systme unix sont : un systme hirarchis de processus et une gntique des processus : chaque processus hrite les caractristiques de son parent lors de sa cration ; des points daccs protgs aux services oerts par le noyau. Ces points daccs sont des routines gnralement crites en C, appels appels systme et font lobjet de la norme POSIX ; aspect multi-tche : on a toujours la main ; des langages de commande, vritables langages de programmation permettant lcriture de commandes complexes pouvant elles-mmes tre utilises comme les commandes existantes ; un systme de chier hirarchis (chiers, rpertoires, liens physiques et symboliques) ; utilisation du concept de ltrage et de redirections . Cest une des ides fondamentales dunix qui en fait toute la souplesse et la puissance. Les ltrages et les redirections constituent les principes de bases permettant dappliquer la philosophie de la bote outils dunix : crire des commandes lmentaires et homognes, pouvant communiquer entre elles.

1.3

Les logiciels libres

Cette section propose une prsentation de ce quon appelle les logiciels libres. Dans un premier temps, on trouvera les dirents types de protection de logiciels que lon peut rencontrer ; puis dans un deuxime temps, travers un historique du projet gnu, on dcouvrira le principe fondamental dune licence de type logiciel libre.

1.3.1

Les diffrents types de logiciels

On rencontre plusieurs types de logiciels 12 :


12. On trouvera une description quivalente des dirents types de logiciels dans un document rdig par Leclerq (1999).

1.3 Les logiciels libres

11

Propritaires : ces logiciels sont vendus et sont rgis par une licence restrictive qui interdit aux utilisateurs de copier, distribuer, modier ou vendre le programme en question ; Shareware : un shareware (dont une laide traduction est partagiciel) est un programme gnralement distribu sous forme de binaire et assujetti une priode dvaluation permettant aux utilisateurs destimer si le logiciel leur convient ou non. Au-del de cette priode, lutilisateur a lobligation morale de rtribuer lauteur sil veut continuer utiliser le programme et dans le cas contraire leffacer de son disque. Des abus ayant t constats, les concepteurs de sharewares ont aujourdhui recours au bridage des logiciels ; bridage lev aprs rtribution ; Freeware : ici free veut dire gratuit (graticiel, beurk); les freewares sont donc distribus gratuitement et peuvent tre copis sans restriction particulire ; ils ont le plus souvent la forme de binaires ; Domaine public : un logiciel vers dans le domaine public, appartient tout le monde, donc personne. Chacun est libre de faire ce quil veut avec, sans aucune contrainte particulire. Free software : ici le mot free sentend comme libre et non gratuit. Le mot anglais tant le mme pour dsigner les deux sens, on trouve gnralement la phrase : free as free speech as opposed to free beer . Les free softwares ou logiciels libres proposent une licence permissive qui tout en assurant la proprit intellectuelle du programme lauteur, autorise les utilisateurs copier, distribuer, modier et ventuellement vendre le logiciel ;

1.3.2

Historique du projet Gnu 13

Dans les annes 70, Richard Stallman travaille dans un laboratoire dintelligence articielle au MIT (Massachusetts Institute of Technology), et dans une ambiance de travail telle quil a lhabitude dchanger ses programmes avec des collgues dans le but de les corriger et de les amliorer. Les programmes en question constituent le langage de commande dun ordinateur 14 , langage qui est crit en commun, et partags avec dautres universitaires ou ingnieurs qui disposent galement de cette machine. Le premier vnement qui a pouss Richard Stallman prendre la dcision de se lancer dans les logiciels libres est sans doute le don que fait la socit Xerox au MIT au dbut des annes 80 du fruit de leurs recherches : une imprimante Laser. Cette imprimante est dote dune meilleure rsolution que limprimante du labo, mais se plante plusieurs fois par heure. Le problme est que la socit Xerox refuse de fournir les sources du programme pilotant limprimante. Les membres du laboratoire
13. Ce paragraphe est un rsum dune partie du chapitre 7 de Open Sources Voices from the Open Source Revolution (DiBona et al., 1999). On trouvera galement des informations trs prcises dans louvrage de Stallman et al. (2010). 14. Le Digital PDP-10, lun des ordinateurs les plus puissants de lpoque comme le note Stallman dans le livre de DiBona et al. (1999).

12

Unix et les logiciels libres

Figure 1.6 Richard Stallman

1
se trouvent alors dans la situation paradoxale, o bien quayant toutes les comptences pour modier le pilote, ils nont pas le droit de le faire. Les vnements lire ce sujet le livre de Stallman et al. (2010) qui vont faire natre le projet gnu reposent tous sur le fait qu un instant donn, laccs au code source des programmes devient impossible. Ceci va lencontre de ltat desprit de communaut des dveloppeurs du laboratoire. Richard Stallman dcide alors dcrire lui-mme un systme dexploitation ! Il nomme ce systme gnu, pour gnu is Not Unix 15 . La premire pierre de ce projet est lditeur de texte Emacs, qui peu peu fait lobjet de demandes de la part dutilisateurs intresss. Un serveur est mis en place sur Internet, et Stallman envoie galement des bandes magntiques contenant Emacs, aux utilisateurs ne disposant pas daccs Internet, moyennant une contribution. Cest en 1983 que Stallman annonce ociellement sur Internet le projet gnu et cre en parallle, la Free Software Foundation (FSF) qui a pour but de rcolter des fonds en vendant les logiciels sur un support de stockage, et les manuels de ces logiciels. Aujourdhui, aprs plusieurs annes de travail men par des dveloppeurs dissmins tout autour de la plante, le projet gnu, cest--dire le systme Unix libre que voulait Stallman en est au stade suivant : 1. tous les utilitaires dun unix digne de ce nom sont nis : compilateur, diteur de texte, et tous les outils de la bote outils dunix ; ces outils ont aujourdhui une
15. Notez lhumour informaticien sur une dnition rcursive sans critre darrt ; une dnition qui fait inexorablement dborder la pile.

1.4 Le cas de Gnu/Linux

13

excellente rputation et sont souvent utiliss en lieu et place des outils proposs par les unix propritaires ; 2. le noyau (baptis Hurd) est oprationnel depuis quelques annes mais nest pas utilisable sur un site de production. Cest ici quintervient le noyau LINUX , et partir du dbut des annes 90, on peut dire quil existe un systme Unix libre, le systme gnu/LINUX.

1.3.3

Principe de la gpl

Le projet gnu donne naissance une licence particulire appele General Public Licence (GPL) qui spcie les termes qui rgissent un logiciel libre. Un logiciel sous GPL est un logiciel : 1. quon peut copier ; 2. quon peut distribuer ; 3. quon peut modier ; 4. quon peut vendre ; en respectant les contraintes suivantes : 1. on doit pouvoir en obtenir les sources (par exemple sur Internet) ; 2. il y est mentionn la ou les personnes qui en ont la proprit intellectuelle ; 3. on doit y trouver une copie de la GPL. Cette licence garantit donc quun logiciel libre (sous GPL) le reste jamais. Si une personne dcide de vendre, modier, distribuer le logiciel, il doit le faire en respectant les termes de la licence. Dans le cas de la vente, rien ne vous empche de graver un cdrom avec les sources du noyau LINUX, la mention de copyright de lauteur du noyau, et vendre le tout pour le prix qui vous semble le plus adapt !

1.4
1.4.1

Le cas de Gnu/Linux
Quest-ce que Linux ?
Cest un noyau unix.

est un programme dont les sources constituent un ensemble de chiers crits principalement en C totalisant un volume de plusieurs dizaines de mgaoctets. Ces sources constituent le noyau dun systme unix, mais ne forment pas un systme dexploitation part entire. Mme si le noyau LINUX est auto-susant dans le cadre de linformatique embarque, cest la runion des utilitaires gnu, du noyau LINUX, dune bibliothque graphique telle que XFree86 ou XOrg, qui cre le systme aujourdhui clbre baptis gnu/LINUX.
LINUX

14

Unix et les logiciels libres

1
1.4.2 Historique 16

Figure 1.7 Linus Torvalds

LINUX est n en 1991, autour dun projet de n dtudes dun tudiant nlandais de luniversit dHelsinki, nomm Linus Torvalds. Ce projet est une amlioration de Minix, le systme dexploitation cr par Tannenbaum pour le processeur Intel 386. Aprs quelques mois de dveloppement, Torvalds poste un message sur Usenet, pour annoncer publiquement son projet. Plusieurs personnes se lancent dans laventure et une premire version est diuse au mois daot 1991, portant le numro de version 0.0.1. Fin octobre 91, une version ocielle est annonce, la version 0.0.2, permettant de faire fonctionner quelques utilitaires GNU. Aujourdhui, linstar des autres logiciels dvelopps selon le modle des free softwares, LINUX est maintenu et amlior par quelques centaines de programmeurs dissmins sur la plante. Cest un noyau unix, rpondant la norme POSIX, et qui a t port sur plusieurs architectures telles que les processeurs Sparc ou Alpha. Ce noyau est disponible sous forme de sources sur le site ftp://ftp.kernel.org et ses miroirs : en version stable 2. 4 .20, (chire de version pair) dans lequel aucune nouvelle fonctionnalit nest insre ; en version de dveloppement 2. 5 .30 (chire de version impair) qui se transformera irrmdiablement en version stable 2.6.xx. NB : les versions de dveloppement ne sont pas adaptes une utilisation normale, mais destines aux programmeurs qui dsirent tester et dbugger les versions fraches du noyau. 16. Informations tires entre autres de louvrage de Card et al. (1997).

1.5 Quelques rexions sur les logiciels libres

15

1.5

Quelques rexions sur les logiciels libres

Les implications de ce que lon peut qualier de mouvement pour les logiciels libres sont multiples. Le fait mme de le qualier de mouvement induit une notion de politique et de philosophie. Voici les implications qui peuvent venir lesprit. Un espoir... Ce mouvement est avant tout porteur dun espoir, et cest en cela que certains osent prononcer le nom de rvolution, lespoir quil est possible pour un groupe de personnes de crer une communaut o chacun a envie de crer pour les autres en bnciant du travail des autres. Les logiciels libres proposent au citoyen de construire des machines avec lui, de lui laisser la libert de concevoir ces machines, ce morceau de pierre quil taillait bien avant dtre citoyen. Il a donc la libert de modier une chelle relative cette socit, de la crer ou dy participer. Cest peut-tre sur le plan de la politique quon peut trouver la plupart des composants dune rvolution. Gardons bien sr lesprit que ce bouleversement de socit sopre dans un milieu trs ferm quest celui de la production de logiciel. Ouverture et diffusion de savoir... Dans un secteur certes prcis de la science, la transparence qualie galement douverture est de mise, et le scientique dispose grce ces logiciels dune source de savoir qui nest ni retenue, ni capitalise des ns de prots. Mme si tout systme nit par tre perverti, ce qui se dgage de ce mouvement est la notion de diusion du savoir, une des notions les plus pures qui dans un monde idal, devrait tre lapanage du milieu de la recherche et de celui de la technologie. Une autre vision dInternet... Cest le rseau Internet qui a permis et qui permet encore aujourdhui ce modle de dveloppement dtre viable. Il parat important de souligner quInternet nest pas seulement un espace sur lequel se ruent des entrepreneurs, destin uniquement au commerce ou la publicit, mais quil a t et quil est toujours galement un lieu o un certain nombre de personnes communique et travaille en commun pour le bien dune communaut, en fournissant titre gracieux des informations scientiques et techniques, sous forme de manuels et de forums de discussions. Des logiciels alternatifs Dans un cadre plus politique, on peut galement armer que lensemble de ces logiciels constitue galement une alternative aux gants de ldition de logiciels dont la socit Microsoft fait incontournablement partie. Cette alternative vient probablement de questions que lon peut tre amen se poser, en tant quutilisateur de logiciels :

16

Unix et les logiciels libres

dois-je accepter que certains logiciels plantent ? dois-je accepter de ne pas pouvoir importer des donnes dun logiciel dun fabricant vers un autre dun fabricant dirent ? dois-je accepter que certaines versions de mon traitement de texte prfr ne soient pas compatibles entre elles ? dois-je accepter de changer de version de mon systme dexploitation, chaque nouvelle version de mon traitement de texte prfr ? dois-je accepter de changer dordinateur chaque version de mon systme dexploitation prfr ? On pourra ainsi se positionner contre les formats propritaires de stockage de chiers qui emprisonnent les utilisateurs dans un certain type de logiciels, et plus prcisment dans lutilisation de logiciels dune marque particulire. Lalternative se justie par le refus des logiciels dont les passerelles vers lextrieur sont sciemment dans un but commercial malsain bloques voire inexistantes. Par essence, les logiciels libres sont ouverts et peuvent thoriquement, et le plus souvent eectivement, communiquer entre eux, puisque le format de stockage est galement ouvert.

Du jeu... Une des motivations des hackers de la communaut des logiciels libres est sans aucun doute le plaisir que procure lamusement, le jeu. De la mme manire quun enfant trouve du plaisir assembler des pices de Lego ou de Meccano, et se satisfait de sa construction aussi humble quelle soit, un dveloppeur de programme tire du plaisir ce jeu qui consiste trouver les meilleurs mots pour causer ce @#{&!? dordinateur. Cette recherche ludique sappelle hacker (cf. plus bas). Un peu dart...
A lpoque o Bernard Gaulle distribuait librement lextension french de L TEX, il nissait la documentation de son logiciel en crivant : En esprant avoir t utile tous . Mme si on peut sinterroger sur les vritables motivations de ces milliers de bitouilleurs 17 , cette motivation provient dun profond humanisme et sans doute de lternelle interrogation de lexistentialiste. Si lart est la capacit propre ltre humain de crer en dehors de toute contingence de survie, alors on peut voir ce mouvement des logiciels libres comme un mouvement artistique. Le nom de la licence qui rgit le logiciel Perl la licence artistique en est sans doute lillustration.

Un peu de politique... Un groupe dingnieurs, de chercheurs, denthousiastes, se regroupent et mettent en commun leur passion pour linformatique et la programmation pour mener bien un projet ambitieux. Ce projet, ou lensemble de ces projets, (le projet gnu, LINUX,
17. Oui, oui certains ont traduit le mot hacker en bitouilleurs , bidouilleur de bit...

1.6 Actualit et avenir des logiciels libres

17

A L TEX pour ne citer que ceux-l) se trouvent tre des concurrents srieux des logiciels propritaires. Nous sommes donc aujourdhui dans une situation intressante o un groupe de personnes a montr que lon peut diuser un produit phare de la rvolution informatique sans avoir recours aux mcanismes du capitalisme. Utiliser les logiciels libres peut donc aussi constituer un choix politique.

En finir avec les hackers... Contrairement une ide rpandue par les mdias, le terme de hacker dsigne initialement un utilisateur enthousiaste de linformatique et dont le but est damliorer les systmes existants. Il ny a donc pas au dpart de connotation malsaine dans ce terme. Il ne faudra pas le confondre avec le terme de cracker que lon peut traduire par pirate individu dont lactivit (illgale) est de tenter de pntrer sur des systmes. Stallman se qualie lui-mme de system hacker, pour expliciter ses activits de modication de systme dexploitation de lordinateur PDP au sein de son labo. Le hacker est celui qui veut savoir comment les choses marchent, qui veut comprendre ce qui se cache derrire une technologie particulire pas ncessairement linformatique (Raymond, 2000).

1.6

Actualit et avenir des logiciels libres

Aujourdhui 18 , les logiciels libres sont en pleine eervescence et le terme de station de travail na plus de valeur. Il y a encore quelques annes, on entendait par station de travail, une machine onreuse, inaccessible pour le particulier, gre par un systme unix. lheure actuelle, les ordinateurs personnels dots dun systme tel que LINUX peuvent tenir tte aux dites stations de travail, en termes de puissance et abilit. Il y a quelques annes mon laboratoire de recherche avait constat quen squipant de PC munis de LINUX, on disposait de matriels 5 fois moins chers et 7 fois plus puissants que des stations de travail vendues par un revendeur bien connu 19 , dont nous tairons le nom ici. Un aspect intressant de LINUX est quil montre aux utilisateurs quune machine nest pas condamne tre gre par un systme dexploitation particulier. Lutilisateur a en eet le choix de coupler un processeur de son choix avec un systme dexploitation particulier. On peut, titre indicatif, installer sur une machine munie dun processeur Intel le systme gnu/LINUX , FreeBSD, BeOS, Solaris pour ne citer queux. Un PC nest donc pas condamn supporter Windows.
18. 1er mars 2011. 19. Qui orait du matriel plus able et gnralement accompagn dun contrat de maintenance, pour tre tout fait honnte dans la comparaison...

18

Unix et les logiciels libres

1.6.1

Le problme des drivers

Il y a encore quelque temps, lorsquun fabricant de cartes (vido, adaptateur SCSI, acquisition, etc.) sortait un produit sur le march, il fournissait un pilote logiciel (driver) pour des systmes dexploitation cibls. Parmi ces systmes, LINUX ne gurait pas. Aujourdhui, ces fabricants sont conscients que les utilisateurs de LINUX reprsentent un potentiel dachat de matriel non ngligeable. Cest pourquoi, on voit actuellement les constructeurs adopter deux positions : crer eux-mmes des pilotes pour LINUX (une clbre compagnie de carte vido 3D fournit un driver pour ses cartes) ; divulguer les spcications de leurs matriels, de manire ce que les dveloppeurs de la communaut puisse programmer ces pilotes. Dans ce cas prcis, il y a toujours un dlai de plusieurs mois avant quune carte soit oprationnelle sous LINUX . Dans le pire des cas, les fabricants ne divulguent pas les spcications de leur matriel. Il est alors impossible dutiliser le matriel en question, moins de procder lingnierie inverse (reverse engineering) qui nest pas toujours lgale dans certains pays. Il est en tous cas intressant de noter que plusieurs fabricants ont cd sous la pression de la communaut ; parmi ceux-l, les socits Matrox et Adaptec avaient fait grand bruit lorsquelles avaient enn accept la divulgation des spcications de leurs matriels.

1.6.2

Le problme des virus

Les virus informatiques se transmettent par lintermdiaire de chiers excutables que les utilisateurs schangent. On ne dispose bien videmment pas du code source de ces excutables qui contiennent un virus. Dans un environnement o tous les programmes sont installs sous forme de source, si un virus existe, il est alors visible dans le source dans le sens o le code pernicieux peut tre a priori localis. Cette visibilit permet son radication immdiate. En outre il semble que les virus ne soient pas aussi nombreux sur un systme comme LINUX . Ceci parce que les virus, sils mettent en vidence une certaine connaissance de la programmation pour son auteur, montrent surtout un tat desprit nihiliste. Dans le cadre des logiciels libres, on peut exprimer son talent en proposant une application la communaut. Il faut cependant garder lesprit les considrations suivantes : un logiciel sous forme de source, tlcharg depuis un site se doit dtre authenti comme ne contenant pas de virus. Cest la raison pour laquelle les sites primaires qui distribuent un package particulier fournissent galement une signature lectronique qui permet de vrier que larchive contenant le logiciel na pas t modie ; dans la situation o lon ne dispose pas de signature, il faudra se poser les questions suivantes :

1.6 Actualit et avenir des logiciels libres

19

1. le programme que je viens de tlcharger mane-t-il dun site ayant un caractre ociel ? 2. le programme lors de son installation doit-il tre excut avec des privilges du super utilisateur ? en cas de problme, il faut souligner que la communaut a, par le biais du rseau Internet, une capacit ragir trs rapidement, en publiant des annonces ou dventuelles mises jour des programmes concerns. Aujourdhui la tendance nest pas aux virus, mais lexploitation des trous de scurit des services rseau proposs par le systme. Lide est donc de dtourner des dfauts de programmation connus dun logiciel rseau pour obtenir un accs privilgi sur des machines distantes. Encore une fois, Internet permet aux dveloppeurs et aux distributeurs de ces outils de ragir rapidement face ce genre de dfaut. Un organisme centralisant les annonces de faille dans dirents logiciels est le CERT (dont le nom provient de computer emergency response team ) disposant dun site web : http://www.cert.org. Cet organisme ayant pour origine un incident survenu en 1988, recense de manire ocielle les vulnrabilits des logiciels communment utiliss pour la communication.

1.6.3

De lutopie la loi du march : du Free Software lOpen source

Aujourdhui le terme free software est remplac peu peu par le terme open source qui lve lambigut sur le mot free (libre ou gratuit ?) et insiste sur laspect douverture de ces logiciels. Il faut imaginer que lorsque Stallman cre le projet gnu, il est dans un tat desprit idaliste :
My work on free software is motivated by an idealistic goal: spreading freedom and cooperation. I want to encourage free software to spread, replacing proprietary software which forbids cooperation, and thus make our society better 20 . Stallman (2009, Copyleft: pragmatism idealism).

Stallman fait partie des partisans des logiciels libres les plus radicaux. Cest pourquoi la GPL est trs contraignante pour assurer quun logiciel libre le reste quoi quil arrive. Parmi les contraintes fortes de la GPL, lune delles interdit de distribuer un logiciel propritaire utilisant une bibliothque libre. En dautres termes, une socit dsirant vendre un logiciel non libre, ne peut utiliser une bibliothque libre pour dvelopper son logiciel. Cette contrainte a t leve avec une version moins restrictive : la LGPL (lesser general public license ). Aujourdhui pour ne pas erayer lentrepreneur avec la notion de gratuit ou lide de communaut libre but non lucratif, le terme Open Source a t cr. Ce terme dont le porte parole est sans doute Eric Raymond (cf. http://www.opensource.org),
20. Traduction : Mon travail autour des logiciels libres est motiv par un but idaliste : diuser la libert et la coopration. Je veux encourager les logiciels libres se dvelopper, pour remplacer les logiciels propritaires qui interdisent la coopration, et donc rendre notre socit meilleure.

20

Unix et les logiciels libres

dsigne tout logiciel rgi par une licence compatible avec lide des logiciels libres. La dnition de lopen source permet un dveloppeur de dnir une licence compatible avec lide des logiciels libres. Les principales ides sont les suivantes (DiBona et al., 1999, chapitre 14) : la libre redistribution, cest--dire la possibilit de distribuer titre gracieux ou non le logiciel protg par la licence ; disponibilit du code source, soit dans le package de distribution soit par tlchargement ; une licence open source doit autoriser (mais noblige pas) de mettre les modications sous les termes de cette licence. Ce point est trs dirent de ce que stipule la GPL, qui impose que les travaux drivs soient sous GPL. Les licences compatibles avec cette dnition sont, parmi une petite vingtaine que recense le site http://www.opensource.org : la licence BSD, la licence X, la licence artistique (de Perl), la licence de Netscape, la GPL et la LGPL. Lintrt quont vu les porte-paroles de lopen source rside dans le fait quon peut prsenter les logiciels libres comme une solution conomiquement viable et non comme le projet dune communaut dinformaticiens libertaires ou communistes (termes effrayant les hommes portant des cravates (DiBona et al., 1999, chapitre 14)). Il existe en fait beaucoup de socits qui ont adopt le modle open source (ou logiciel libre ce qui est encore une fois identique malgr les dissensions qui peuvent exister entre Stallman et Raymond) ; citons parmi celles-l : Cygnus Solution qui propose un kit de dveloppement bas sur le compilateur et le debugger de gnu ; RedHat Software qui vend une distribution LINUX bien connue ; Netscape Communication qui a adopt en 1998, le modle des logiciels libres pour dvelopper son navigateur ; Corel a cr sa propre distribution LINUX qui a pour but de porter ses clbres outils de dessins, retouche dimage, etc. la socit Sun (qui vient dtre rachete par Oracle ) sest investie dans deux logiciels phares : MySql et OpenOce ; on notera galement que les socits IBM, Apple, HP et SGI ont montr un intrt prononc pour le modle open source, en sponsorisant ou choisissant dutiliser les logiciels libres sur leur plate-forme. Ces entreprises sont en mesure de crer du prot, car elles vendent un service aux clients. Elles bncient du modle open source, dans la mesure o le client peut ventuellement modier le produit, lequel produit est maintenu activement par une communaut de dveloppeurs.

1.6.4

Des brevets sur les logiciels

Les brevets sur les logiciels constituent aujourdhui une des menaces srieuses au dveloppement des logiciels libres. Il faut savoir quaujourdhui il est possible de

1.6 Actualit et avenir des logiciels libres

21

dposer des brevets sur les logiciels aux tats Unix 21 , mais que cela est interdit en Europe. La directive europenne visant autoriser le dpt de brevets sur des logiciels a t rejete le 6 juillet 2005 par le parlement europen. La cration des brevets avait pour but initial de diuser linformation scientique et technique tout en assurant pendant un certain temps des royalties au dtenteur du brevet. Lide tait donc dinciter les crateurs diuser leur savoir plutt que de le garder secret. Aujourdhui lutilisation intensive des brevets est une vritable guerre commerciale dont le but est den dposer le plus possible et dattaquer ensuite en justice les utilisateurs frauduleux dides qui auraient fait lobjet dun dpt. Pour illustrer laspect pour le moins douteux de telles pratiques, on pourra mentionner la socit Microsoft qui a rcemment dpos un brevet sur le fait du cliquer sur une icne ou un bouton 22 et un autre sur la souris molette 23 ...

1.6.5

Quelques beaux exemples

Pour clore ce chapitre, il mest apparu ncessaire de prsenter ce que je considre comme les plus beaux projets de logiciels libres. Ces logiciels sont trs utiliss aujourdhui.
A TEX et L TEX : ce systme de composition de document 24 , est mon avis (partial et subjectif) un des plus beaux projets informatiques et scientiques. TEX et A L TEX permettent de rdiger des documents avec une trs grande souplesse et une qualit professionnelle (lire lexcellent ouvrage de Lozano (2008) pour sen persuader) ;

LINUX

: a permis et permet encore de faire dcouvrir aux utilisateurs curieux de linformatique un autre systme dexploitation : unix. Avoir une vision alternative des systmes assure la pluralit et vite de se diriger vers un totalitarisme culturel et technique. LINUX illustre galement qu partir dun dveloppement quasi chaotique (Eric Raymond parle de bazar ), il est sorti un noyau unix solide et ecace ;

gnu : une exprience de quelques annes avec les outils gnu mincite souligner la qualit de ces outils ; pour ce qui concerne les utilitaires unix, ils orent la plupart du temps beaucoup plus doptions que les versions des unix propritaires. Le compilateur C et son compre lditeur Emacs, sont galement des outils qui gagnent tre connus ; Perl : Larry Wall le crateur de Perl note dans la prface du livre de Schwartz (1995) : Perl a t cr pour des gens comme vous, par quelquun comme vous, en collaboration avec de nombreuses personnes comme vous. La magie de Perl sest tisse collectivement, point par point, pice par pice, dans le
21. 22. 23. 24. Une coquille dtecte par un lecteur que je laisse en ltat... Brevet US patent no 6727830. Brevet no 6700564. Qui a permis de composer le texte que vous avez sous les yeux.

22

Unix et les logiciels libres

cadre trs particulier de votre mentalit. Si vous trouvez que Perl est un peu bizarre, cela en est peut-tre la raison. . Ce langage trs puissant est un langage interprt utilis pour ladministration systme, la cration de pages HTML, et A plein dautres choses ; Perl fait partie de ces logiciels qui, linstar de L TEX, sont composs dun noyau de base et dune multitude de composants crs par les utilisateurs enthousiastes ; Gtk/Gimp : the gnu image manipulation program, un logiciel qui se prsente comme un concurrent de Photoshop de la socit Adobe. Gimp a t conu laide de la bibliothque graphique Gtk (Gimp toolkit ) (voir http://www.gimp.org et http://www.gtk.org); Autour du rseau : les logiciels apache (serveur web), bind (serveur dns) et sendmail (transport de messages), sont les logiciels qui sont aujourdhui des standards de fait. titre dexemple, plus de la moiti des serveurs web dInternet sont hbergs par apache.

Sommaire 2.1 2.2 2.3 2.4 2.5 Le shell Utilisateurs Le systme de chiers Processus Quelques services

Chapitre

2
Petit guide de survie
eval $(echo \ "3chA+2A96ADB+*+8157+7AE19A^395C304B" |\ tr "1+2*3456789ABCDE^0" "a\ b\|efijlmnorsuz@.") Tain cest p convivial !.

mande un investissement sur le plan de la documentation et de lapprentissage. Ce chapitre a donc pour but de prsenter les fonctionnalits de base dun systme unix sur le plan de son utilisation (c.--d. quil ne sera pas question ici dadministration dun systme). On verra donc dans un premier temps une prsentation succincte de linterface de base savoir le shell, suivront des prsentations des concepts dutilisateur, de systme de chiers, de processus. Le chapitre est clos par une explication rapide des services de base du systme (impression, tches planies, ...).

a convivialit dun systme unix rside dans la souplesse et la puissance des L outils dont on dispose pour dialoguer avec le systme. Il sagit certes dune convivialit laquelle peu dutilisateurs sont habitus ; essentiellement parce quelle de-

23

24

Petit guide de survie

2.1

Le shell

Le shell est une interface avec le systme unix. Il ore lutilisateur linterface de base avec le systme dexploitation. Ltymologie du mot nous apprend quon peut limaginer comme une coquille englobant le noyau et ses composants. Le shell est galement un programme quon appelle interprteur de commandes. Ce programme tourne dans une fentre ou sur une console en mode texte. Dans une fentre dun environnement graphique, il a lallure de la gure 2.1. On parle galement de terminal

2
Figure 2.1 Un shell dans une fentre (ou dmulateur de terminal) pour dsigner un cran ou une fentre dans laquelle est excut le shell. Il existe plusieurs shells dans le monde unix, les plus courants sont : sh : fait initialement rfrence au premier shell dunix conu par Steve Bourne, utilis notamment pour les scripts systme ; ksh : le Korn shell ; csh : le C shell (dont la syntaxe rappelle vaguement celle du C pour ce qui est des structures de contrle) ; bash : le shell de gnu 1 qui est, comme mentionn dans la page de manuel, trop gros et trop lent . Cest malgr tout celui sur lequel nous nous attarderons dans ce manuel ; tcsh : le Tenex C shell contient tout ce quapporte csh avec des fonctionnalits supplmentaires notamment une dition plus aise de la ligne de commande ; zsh le Zorn shell contenant un langage de programmation plus volu que bash
1. Bash signie Bourne Again Shell : un jeu de mot avec la construction anglaise born again qui signie renaissance.

2.1 Le shell

25

et des fonctionnalits de compltions avances 2 ; ... Le shell est utilis le plus souvent de manire interactive, pour passer des commandes au systme. Pour signier que le shell est prt recevoir ces commandes, il ache un prompt. Ce prompt peut contenir un nombre variable dinformations selon la conguration, et nous y ferons rfrence de la manire suivante : $ On peut illustrer le fonctionnement dun shell, avec lalgorithme suivant :
Pour toujours Faire

Afficher le prompt et attendre une commande Vrifier sa syntaxe Si la syntaxe est correcte Alors excuter la commande
Sinon

afficher un message derreur Notons enn que si nous prsentons ici le shell dans son utilisation interactive, il est galement utilis sous forme de scripts , dans ce cas les commandes passes au systme peuvent tre enregistres dans des chiers qui peuvent ensuite tre excuts. En cela le langage de commande peut tre utilis comme un langage interprt.

2.1.1

Quest-ce quune commande ?

Excuter ou lancer une commande, consiste de manire synoptique en ceci : nom-commande options arg1 arg2 ... argn ... rsultat de la commande sur le terminal ...
Entre

nom-commande est le nom de la commande excuter ; cette dernire peut accepter un certain nombre doptions dont la syntaxe est en gnral : -option par exemple -a, ou --option par exemple --verbose. Un exemple : $ ls -l guide-unix.tex Entre -rw-r--r-- 1 vincent users 2159 Nov $ 7 13:28 guide-unix.tex

2. Votre serviteur na aucune exprience dans ce shell et vous prie de bien vouloir excuser par avance labsence de script zsh dans ce manuel...

26

Petit guide de survie

Celui-ci excute la commande ls 3 avec loption l et largument guide-unix.tex. Le rsultat de la commande ls est expliqu la section 2.3.
On peut noter que commande, options et arguments 4 sont spars par des espaces. Il faut comprendre que lanalyse de la ligne de commande par le shell est eectue en sparant dans un premier temps les lments (commande, options et arguments) par des espaces. Au cas o un nom de chier contiendrait un espace, il faudra indiquer au shell que le nom est considrer comme un seul lment en procdant comme indiqu la section 2.1.5 page 30.

Commandes internes et commandes externes Une commande peut tre interne (builtin ) au shell, ou externe. Dans le premier cas la commande est interprte par le shell, dans lautre il peut sagir de nimporte quel chier excutable stock dans larborescence. Lalgorithme dinterprtation des commandes devient :
Pour toujours Faire

Afficher le prompt et attendre une commande Vrifier sa syntaxe Si la syntaxe est correcte Alors Si cest une commande interne Alors lexcuter
Sinon

chercher le fichier excutable correspondant lexcuter


Sinon

afficher un message derreur La recherche de lexcutable correspondant une commande externe consiste en lexamen dun ensemble de rpertoires susceptibles de contenir lexcutable en question. Cette liste de rpertoires dnie lors de la conguration du systme est stocke dans une variable denvironnement nomme PATH. Dans le shell utilis par votre serviteur : $ type cat cat is /bin/cat $ type echo echo is a shell builtin $
3. quivalent du dir de MSDOS, pour acher les proprits dun chier ou le contenu dun rpertoire. 4. Du point de vue du shell une option est un argument comme un autre ayant la particularit de commencer par le caractre -.

2.1 Le shell

27

La commande type nous informe que echo est une commande interne et que la commande cat ne lest pas (i.e. est un programme dans le rpertoire /bin). type est une commande interne du shell bash. Lquivalent pour la famille des C-shells est which. Messages derreurs Le shell et les commandes excutes peuvent informer lutilisateur quune erreur sest produite lors de lexcution dune commande. Cette information concernant lerreur se fait par un canal appel le ux derreur qui est par dfaut redirig sur votre cran. Il existe au moins quatre situations o le shell et les commandes renvoient une erreur : la commande nexiste pas : $ youpla bash: youpla: command not found $ largument spci ne correspond aucun chier : $ cp mlkj essai.tex cp: mlkj: No such file or directory $ lutilisateur ne possde pas les droits susants : $ cp g.dat / cp: cannot create file /g.dat: Permission denied $ la commande nest pas utilise avec les bonnes options : $ cat -l fichier.tmp cat: invalid option -- l Try cat --help for more information. $ linstar des botes de dialogue davertissement ou derreur qui surgissent dans les environnements graphiques, il est important de lire attentivement les messages pour comprendre pourquoi une commande choue. Composer les commandes On peut composer deux ou plusieurs commandes laide du caractre ; : $ ls guide-unix.tex ; echo bonjour guide-unix.tex bonjour $ Notons au passage que la commande echo ache lcran la chane de caractre qui suit. Il existe deux autres oprateurs permettant de combiner deux commandes : loprateur &&

28

Petit guide de survie

commande1 && commande2 excute commande2 si commande1 sexcute sans erreur ; loprateur || commande1 || commande2 excute commande2 si commande1 renvoie une erreur.
Lorsquil est dit ci-dessus que la commande renvoie une erreur , il sagit plus prcisment de la situation o la commande retourne une valeur dirente de 0 (voir aussi 5.2.4 page 138).

2.1.2

Convivialit et ergonomie

la n des annes 80, les diteurs de logiciels axaient leur publicit sur la convivialit de leurs produits. Un programme tait alors dit convivial lorsquil prsentait lutilisateur moult menus, botes de dialogue et autres icnes. Il savre cependant que pour une utilisation intensive dun logiciel, la dite convivialit devient plutt une contrainte et lutilisateur cherche rapidement les raccourcis clavier pour une utilisation plus confortable. Dautre part, si lon songe que le langage de commande est un langage en tant que tel, il permet lutilisateur dexprimer (tout) ce quil veut et cela de manire trs souple. Ceci est comparer avec un logiciel qui propose des fonctionnalits sous forme de menus ou de botes de dialogue, qui laissent nalement lutilisateur une marge de manuvre souvent restreinte. Cest pourquoi la vraie question nest pas celle de la pseudo-convivialit qui est plus un argument de vente auprs du grand public mais celle de lergonomie dun logiciel. Est-il possible dexprimer de manire concise et rapide la tche que lon dsire faire eectuer la machine ? Le shell est un programme ergonomique et lutilisateur qui a fait leort de lapprentissage du langage de commande le constate trs vite 5 .
Ah oui : lutilisation du langage de commande dunix repose sur lutilisation intensive du clavier. Il est donc important de se familiariser avec ce priphrique voire dapprendre via des mthodes adquates lutiliser de manire optimale.

Dans la mesure o le pressage de touches de clavier est lactivit premire de lutilisateur unix, quelques amnagements ont t mis en place : lhistorique des commandes : les touches et permettent de rappeler les commandes prcdemment tapes pour ventuellement les modier et les relancer ; (tabulation) permet de com la compltion des commandes : la touche plter les noms de commandes, les noms de chiers et de rpertoires partir des premiers caractres de leur nom. utiliser intensivement !
5. On prfre rapidement presser quelques touches de clavier plutt que de se lancer dans une vingtaine de clic-clic sur des demi-douzaines de fentres empiles les unes sur les autres.

2.1 Le shell

29

Si un jour vous vous connectez sur une vieille machine unix et/ou que vous avez dialoguer avec un vieux shell ne disposant ni de la compltion ni du rappel des commandes, ce jour-l vous comprendrez que bash (ou le shell que vous avez lhabitude dutiliser), malgr son caractre apparemment spartiate, est un programme vraiment moderne...

2.1.3

Rudiments sur les variables denvironnement

Lorsquun shell est excut par le systme, un certain nombre de variables dites denvironnement sont instancies. Ces variables permettent lutilisateur et aux programmes lancs par le shell dobtenir plusieurs informations sur le systme, la machine et lutilisateur, entre autres. La commande env ache lcran toutes les variables denvironnement pour le shell. En voici un extrait : $ env MAIL=/var/spool/mail/vincent HOSTTYPE=i386 PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin HOME=/home/vincent SHELL=/bin/bash USER=vincent OSTYPE=Linux $ On comprend aisment que ces variables denvironnement dnissent respectivement, le chier rceptacle du courrier, le type de la machine, la liste des rpertoires 6 o le shell va chercher les excutables (pour les commandes qui ne sont pas internes), le rpertoire priv de lutilisateur, le nom de lutilisateur et le type de systme dexploitation. En prxant le nom dune variable par un dollar ($), on accde la valeur de cette variable. Ainsi : $ echo $SHELL /bin/bash $ est un moyen de connatre le shell qui est associ votre utilisateur dans la base de donnes du systme.
En ralit toutes les variables dun shell ne sont pas des variables denvironnement, dans le sens o toutes les commandes ny ont pas ncessairement accs. Par contre nimporte quelle variable peut devenir une variable denvironnement laide de la commande interne export.
6. Voir ce sujet les paragraphes 6.1 page 166 et 5.4.2 page 151 qui traitent de la variable PATH.

30

Petit guide de survie

2.1.4

Caractres spciaux

Un certain nombre de caractres sont dits spciaux, car ils sont interprts dune manire particulire par le shell. Le plus connu de ces caractres est sans doute celui qui spare les rpertoires dans un chemin 7 . Sous unix, cest le slash (/). Par exemple : /home/users/hendrix/wahwah.dat. Voici une liste des caractres spciaux les plus communs du shell : $ permet le mcanisme dexpansion et donc permet de faire rfrence la valeur de la variable nomme aprs, mais aussi de faire des calculs ou dexcuter une autre commande ( 3.4.2 page 85) ; ~ remplace le rpertoire priv de lutilisateur ; & lance une commande en arrire-plan ; * remplace toute chane de caractres ; ? remplace tout caractre (voir la section suivante pour ces deux caractres) ; | pour crer un tube ; > et < pour les redirections ; ; est le sparateur de commandes ; # est le caractre utilis pour les commentaires ; ... Il est bien entendu que puisque ces caractres ont un rle particulier, il est peu recommand de les utiliser dans les noms de chiers, au risque de compliquer le dialogue avec le shell (voir le paragraphe sur les mcanismes dexpansion page 70).

2.1.5

Espaces dans les noms de chiers

Le caractre espace nest pas un caractre spcial pour le shell, cependant son utilisation dans les noms de chiers modie lgrement la manipulation des commandes. Imaginons par exemple que lon veuille eacer un chier nomm zeuhl wortz.txt , la commande nave suivante chouera : $ rm zeuhl wortz.txt rm: cannot remove zeuhl: No such file or directory rm: cannot remove wortz.txt: No such file or directory $ car le shell tente deacer deux chiers au lieu dun seul puisquil dlimite les mots laide du caractre espace. Pour expliquer au mssieur que zeuhl wortz.txt dsigne un seul chier, il est ncessaire dchapper le caractre espace : $ rm zeuhl\ wortz.txt ou dindiquer explicitement que le nom est compos dun seul mot en lentourant de guillemets (") ou dapostrophes () :
7. Le caractre / nest en ralit spcial que dans le traitement des rfrences sur les chiers ou rpertoires, et non pour le shell lui-mme.

2.2 Utilisateurs

31

$ rm "zeuhl wortz.txt" ou : $ rm zeuhl wortz.txt

2.1.6

Caractres gnriques

Il existe au moins deux moyens dutiliser les caractres gnriques (parfois dits wildcards ou jokers en anglais). Voici deux exemples en reprenant la commande ls : $ ls guide-unix* guide-unix.aux guide-unix.dvi $ $ ls guide-unix.??x guide-unix.aux guide-unix.tex $ liste les chiers dont lextension est compose de deux caractres quels quils soient et termine par un x. Une des tapes dinterprtation de ces commandes par le shell consiste remplacer les jokers par leur valeur ; ainsi, la dernire commande quivaut : $ ls guide-unix.aux guide-unix.tex guide-unix.log guide-unix.tex

liste tous les chiers du rpertoire courant commenant par guide-unix. Et :

Ce mcanisme de remplacement des jokers par une valeur se nomme en jargon (anglais) unix : pathname expansion ou globbing.
Notons ici que lon peut bien videmment composer les caractres * et ? et quil existe dautres formes de joker, comme par exemple la squence [...] que nous ne prsentons pas ici, et bien dautres qui dpendent du shell utilis. Il est pour linstant utile de noter que ces caractres, mme sils se rapprochent des expressions rgulires prsentes au paragraphe 3.5 page 88, ne doivent pas tre confondues avec icelles...

2.2

Utilisateurs

unix a t conu comme un systme multi-utilisateur, ce qui signie que chaque utilisateur est identi sur le systme par un utilisateur logique auquel correspond un certain nombre de droits ou privilges. un utilisateur sont, entre autres, associs : un numro ou identicateur : luid (pour user identier) ; une chane de caractres se rapprochant gnralement de ltat civil, appele login name ;

32

Petit guide de survie

le groupe auquel lutilisateur appartient, et ventuellement dautres groupes dutilisateurs supplmentaires ; un rpertoire priv (home directory) ; un shell qui sera utilis par dfaut aprs la connexion. On peut savoir sous quel utilisateur logique on est connect grce la commande whoami : $ whoami djobi $ En plus de son nom, un utilisateur est identi en interne par son uid ou user identier. Dautre part un utilisateur appartient un ou plusieurs groupes dutilisateurs. Chacun de ces groupes est galement identi par son nom et un numro appel gid ou group identier. On peut connatre lidentit dun utilisateur par la commande id : $ id lozano uid=208(lozano) gid=200(equipe) groups=200(equipe),300(image) $ lutilisateur lozano appartient aux groupes equipe et image. Cest gnralement ladministrateur du systme qui dcide de regrouper les utilisateurs dans des groupes qui retent la structure des personnes physiques qui utilisent les ressources informatiques. Chacun de ces groupes se voit gnralement attribuer un ensemble de privilges qui lui est propre. Pour terminer avec les utilisateurs, sachez quen gnral un utilisateur ne peut intervenir que sur un nombre limit dlments du systme dexploitation. Il peut : crer des chiers dans une zone particulire appele home directory ou rpertoire priv ou tout simplement home. En fonction de la conguration du systme les utilisateurs pourront bien sr crire dans dautres zones. Le rpertoire priv est dsign dans le shell par : $ echo ~ /home/utilisateurs/djobi $ inuer sur le cours des programmes quil a lui-mme lanc ; autoriser ou interdire la lecture ou lcriture des chiers quil a crs. Il ne peut pas : eacer les chiers dun autre utilisateur sauf si ce dernier ly autorise (en positionnant les droits corrects sur le rpertoire contenant le chier en question) ; interrompre des programmes lancs par un autre utilisateur (l aussi, sauf si il y est autoris par lutilisateur en question) ; crer des chiers nimporte o. Par consquent une machine gre par un systme dexploitation de type unix ne peut pas tre compromise par hasard ou maladresse par un utilisateur. Puisquil faut bien (maintenance, mise jour, etc.) que certains chiers soient modis, il existe au

2.3 Le systme de chiers

33

moins un utilisateur possdant tous les privilges sur le systme : lutilisateur dont luid est 0 portant gnralement le nom de root (car son rpertoire racine tait souvent install la racine (root en anglais) du systme de chier). Cet utilisateur a la possibilit et le droit darrter le systme, deacer tous les chiers (!), de crer des utilisateurs, et bien dautres choses qui constituent ce que lon nomme communment ladministration systme. Dans une structure o le nombre de machines administrer est consquent, il se cache plusieurs personnes physiques derrire cet uid 0.

2.3

Le systme de chiers

Le systme de chiers dunix est une vaste arborescence dont les nuds sont des rpertoires et les feuilles des chiers. Le terme de chier sentend ici dans un sens trs large, puisque sous unix, un chier peut contenir des donnes, mais peut aussi tre un lien sur un autre chier, un moyen daccs un priphrique (mmoire, cran, disque dur, ...) ou un canal de communication entre processus. Pour embrouiller un peu plus le tout, les rpertoires sont eux aussi des chiers. Nous nous intresserons ici aux chiers normaux (regular en anglais), cest--dire ceux qui contiennent des donnes ou sont des excutables, ainsi quaux liens et aux rpertoires.

2.3.1

Rfrencement des chiers et des rpertoires

Pour manipuler un chier ou un rpertoire dun systme de chiers, lutilisateur a besoin de les nommer, en dautres termes il a besoin de pouvoir dsigner un chier particulier de larborescence des chiers et ceci de manire univoque. Il existe pour ce faire, deux moyens : les rfrences absolues et les rfrences relatives, toutes deux dcrites ci-aprs. Rfrence absolue Pour dsigner un lment de larborescence en utilisant une rfrence absolue, on part de la racine du systme de chier et on descend jusquau chier ou rpertoire. De cette manire on dsignera les chiers bidule.dat et truc.txt de larborescence donne en exemple la gure 2.2 page suivante par : /users/bidule.dat /home/eleves/truc.txt Le caractre / joue deux rles : dune part il dsigne le rpertoire racine (root directory en anglais) ; dautre part il fait usage de sparateur de rpertoires dans lcriture des rfrences de chiers et rpertoires. Pour dsigner un rpertoire on utilisera le mme principe, ainsi les rpertoires eleves et users ont comme rfrence absolue :

34

Petit guide de survie

home

users

eleves

bidule.dat

truc.txt

Figure 2.2 Une arborescence de chiers pour lexemple

/home/eleves /users Rfrence relative Il est souvent utile de dsigner les chiers et rpertoires grce une rfrence relative. Dans ce cas on rfrencera un chier ou un rpertoire relativement un rpertoire de base. Par exemple : si /users est le rpertoire de base, alors il est possible de rfrencer les chiers bidule.dat et truc.txt comme suit : ./bidule.dat ../home/eleves/truc.txt si /home est le rpertoire de base, alors on peut les rfrencer comme suit : ../users/bidule.dat ./eleves/truc.txt Deux rpertoires particuliers existent dans chaque rpertoire : le rpertoire . qui dsigne le rpertoire courant ; le rpertoire .. qui dsigne le rpertoire parent. On pourra noter que lcriture ./bidule.dat est redondante et peut tre abrge en bidule.dat. Enn, le rpertoire de rfrence dont il a t question est souvent le rpertoire dit courant ou rpertoire de travail (working directory en anglais). Cest le rpertoire associ chaque processus. Cest aussi le rpertoire dans lequel on se trouve lorsquon lance une commande.
Le rpertoire . a galement une utilisation importante lorsquon veut excuter un programme situ dans le rpertoire courant, ce dernier ne se trouvant pas dans la liste des rpertoires de recherche de la variable PATH. Dans toutes les commandes unix qui manipulent des chiers ou des rpertoires, lutilisateur est libre de dsigner ces chiers ou rpertoires par le truchement des

2.3 Le systme de chiers

35

Partition 1

/usr

Partition1

Partition 1

/etc /mnt
Partition 2

/local /bin

/home1 /home2 /home3 /home4

/images /data

/export

/home /transfert

Disque dur 1

Disque dur 2

Disque amovible

(a) Partionnement des disques

/ /export
Disque dur 1 / partition 1

/usr /local

/etc /bin

/mnt /image /data

/home /transfert
Disque dur 1 / partition 2

Disque amovible / partition 1

2
/home1 /home2 /home3 /home4
Disque dur 2 / partition 1

(b) Montages

Figure 2.3 Exemple de partitionnements et montages correspondant.


rfrences absolues ou des rfrences relatives. Le choix (relative ou absolue) est souvent dict par le nombre le plus faible de touches de clavier presser...

2.3.2

Arborescence

Pour comprendre le fonctionnement de larborescence dun systme de chiers unix, supposons que la machine que nous utilisons soit compose des deux disques durs et du disque amovible de la gure 2.3b. Sous unix, une telle conguration de disques peut se prsenter sous la forme de la gure 2.3a. En jargon unix, on dit que chaque partition est monte sur (de la commande mount) ou gree sur un rpertoire particulier. Dans notre exemple : la partition 1 du disque dur 1 est monte sur la racine (/) ; la partition 2 du disque dur 1 est monte sur /export ; la partition 1 du disque dur 2 est monte sur /usr/local ;

36

Petit guide de survie

la partition 1 du disque amovible est monte sur /mnt. Ce quil faut retenir, cest que quelle que soit la conguration des disques sous-jacente au systme, il ny a toujours quune seule racine (rpertoire /) et donc une seule arborescence. Chaque partition est gree en un point particulier de larborescence globale on parle galement de lesystem pour dsigner la sous-arborescence gree 8 .
Notons galement que dirents mcanismes existent sous unix pour greer des systmes de chiers distants c.--d. rsidant sur une machine accessible via le rseau. Le plus utilis actuellement est le systme NFS (network lesystem) introduit par Sun.

Chaque nud de larborescence est identi en interne de manire univoque par deux nombres : 1. le numro de la partition ; 2. le numro du nud appele inode ou index node. En dautres termes, chaque chier possde un numro qui est unique sur la partition o il rside. On peut visualiser linode dun chier grce loption i de la commande ls :

$ ls -i *.tex 65444 guide-unix.tex $ ici, 65444 est linode du chier guide-unix.tex. Sur le systme o est tap ce document, les chiers suivants ont le mme inode : $ ls -i 19 $ ls -i 19 $ /lib/modules/2.2.12-20/misc/aedsp16.o /lib/modules/2.2.12-20/misc/aedsp16.o /usr/X11R6/man/man1/identify.1 /usr/X11R6/man/man1/identify.1

ce qui sexplique par le fait que le rpertoire lib appartient la partition / alors que X11R6 appartient une partition dirente monte sur le rpertoire /usr. Pour examiner les partitions de notre systme, on peut utiliser la commande df avec loption -h (pour human readable ) : $ df -h Filesystem /dev/hda1 /dev/hda7 Size 194M 1.1G Used Avail Use% Mounted on 42M 142M 23% / 566M 508M 53% /home

8. Rappelons que sous dautres systmes (la famille des fentres pour ne pas les nommer) on aurait eu dans notre tude de cas, les disques logiques C: et D: pour le premier disque dur, E: pour le deuxime disque dur et sans doute F: ou A: pour le support amovible ; ainsi quune arborescence propre associe chacune de ces lettres. Rappelons en outre que ces lettres sont une squelle du tristement clbre Disk Operating System.

2.3 Le systme de chiers

37

/dev/hda5 /dev/sda4 /dev/hdb $

791M 96M 643M

606M 95M 643M

144M 81% /usr 584k 99% /mnt/zip 0 100% /mnt/cdrom

Cette commande ache donc pour chaque partition le chier device associ (sous la forme /dev/xxx) sa taille respective ainsi que son taux doccupation. Les informations indiquant o doit tre monte chacune des partitions sont gnralement stockes dans un chier nomm /etc/fstab.
Loption -h est une option de la version gnu de la commande df. Votre sarcastique serviteur vous invitera donc mditer sur ces programmes censs produire des rsultats lisibles par un tre humain . Mais ne vous mprenez pas, les systmes unix dont la commande df ne dispose pas de loption -h sont quand mme destins aux humains...

2.3.3

Privilges

Il faut savoir que sous unix, on associe chaque chier trois types de propritaires : lutilisateur propritaire ; le groupe propritaire ; les autres utilisateurs.
La norme POSIX apporte une extension ce principe connue sous le nom acces control list (ACL), permettant de recourir si ncessaire un rglage plus n que les trois entits ci-dessus. Cette extension est prsente au paragraphe 2.3.10 page 50.

Chaque chier possde un certain nombre dattributs. Un sous-ensemble de ces attributs a trait aux privilges ou droits quont les utilisateurs lors de laccs un chier donn. Il y a trois types de privilges : 1. le droit de lire (read) signal par la lettre r ; 2. le droit dcrire (write) signal par la lettre w ; 3. le droit dexcuter (execute) signal par la lettre x. Ces trois types de droits associs aux trois types de propritaires forment un ensemble dinformations associes chaque chier ; ensemble que lon peut examiner grce la commande ls :

38

Petit guide de survie

$ ls -l guide-unix.tex vincent -rw-r--r-- 1

users

6836

Nov 7 14:34

guide-unix.tex

nom du chier. date de dernire modication. taille du chier en octets. groupe propritaire du chier. propritaire ou owner du chier. nombre de liens sur le chier. bloc des droits.
Nous verrons au paragraphe 2.3.9 page 47 la signication du terme lien sur un chier. Examinons dun peu plus prs le bloc des droits :

rw-

r--

r-droits des autres utilisateurs (read seulement). droits du groupe (read seulement). droits du propritaire (read, write, not executable). le chier est un chier normal.

2
Autre exemple : $ ls -l /usr/bin/env -rwxr-xr-x 1 root root $

6852 Aug 18 04:31 /usr/bin/env

Le chier /usr/bin/env appartient lutilisateur root et au groupe root. Seul lutilisateur root peut le modier et tout le monde peut lexcuter y compris les membres du groupe root : rwx : droits du propritaire (read, write, excutable) ; r-x : droits du groupe (read, executable) ; r-x : droits des autres (read, executable).
Pour tre plus prcis, on peut dire que le chier /usr/bin/env appartient lutilisateur dont luid est 0 et que la commande ls ache le premier nom correspondant cet uid. Tous les autres utilisateurs ayant le mme uid sont galement en mesure de le modier.

Un dernier exemple : $ ls -l ~/ drwxr-xr-x 3 vincent users 4096 Nov 7 12:48 LaTeX

2.3 Le systme de chiers

39

drwxr-xr-x $

2 vincent

users

4096 Nov

7 14:40 bin

Cette commande liste le rpertoire priv de lutilisateur (caractre ) et ache ici les droits des deux rpertoires qui y rsident : d : le chier est un rpertoire ; rwx : droits du propritaire (read, write, excutable) ; r-x : droits du groupe (read et excutable) ; r-x : droits des autres (read et excutable) ; les nombres 3 et 2 indiquent le nombre de sous-rpertoires contenus dans LaTeX et bin respectivement.
Il faut noter ici une particularit du systme unix : un rpertoire doit tre excutable pour pouvoir y pntrer, on parle alors de search permission en anglais. Dans lexemple ci-dessus, tout le monde y compris les membres du groupe users a le droit daccder aux rpertoires LaTeX et bin.

2.3.4

Parcourir larborescence

Pour connatre le rpertoire courant (i.e. celui o on se trouve au moment o on tape la commande) on peut taper la commande pwd (print working directory). Notez que ce rpertoire courant peut toujours tre dsign par le caractre . $ pwd /home/vincent/LaTeX/cours $ chaque utilisateur est associ un rpertoire priv ou home directory. Cest le rpertoire courant aprs la procdure de login. Pour se rendre dans ce rpertoire, on peut taper la commande cd sans argument : $ cd $ pwd /home/vincent $ /home/vincent est donc le rpertoire priv de lutilisateur vincent. Si lutilisateur est lozano, les commandes suivantes sont quivalentes la commande cd sans argument : $ cd ~ $ cd $HOME $ cd ~lozano $ On peut tout moment changer de rpertoire avec la commande cd (change directory) qui prend en argument un rpertoire, par exemple : $ cd /usr/local $

40

Petit guide de survie

Et, pour illustrer lutilisation dune rfrence relative : $ cd /usr $ ls -l drwxr-xr-x drwxr-xr-x drwxr-xr-x $ cd local $

8 root root 4096 Sep 25 00:21 X11R6 2 root root 20480 Nov 5 19:16 bin 11 root root 4096 Nov 5 18:56 local utilisation dune rfrence relative

Enn pour donner un exemple dutilisation du rpertoire .. dsignant le rpertoire pre : $ pwd /usr/local $ cd .. $ pwd /usr $

2.3.5

Manipuler les chiers

Les oprations courantes sur les chiers sont la copie, le dplacement ou renommage et leacement. Commenons par la copie : $ cd ~/LaTeX/cours $ ls *.tex truc.tex $ cp truc.tex muche.tex $ ls -l *.tex -rw-r--r-- 1 vincent users 1339 Nov -rw-r--r-- 1 vincent users 1339 Nov $

7 21:48 truc.tex 7 21:51 muche.tex

la commande cp (copy ) copie donc le chier donn en premier argument vers le chier donn en deuxime argument. Cette commande accepte galement la copie de un ou plusieurs chiers vers un rpertoire : $ cp /usr/local/bin/* . $ cette commande copie tous les chiers (sauf les sous-rpertoires) contenus dans le rpertoire /usr/local/bin dans le rpertoire courant. Pour dplacer un chier, on dispose de la commande mv (move ). De manire quelque peu analogue la commande cp, la commande mv accepte deux formes. La premire permet de renommer un chier : $ ls *.tex

2.3 Le systme de chiers

41

guide-unix.tex test.tex $ mv test.tex essai.tex $ ls *.tex guide-unix.tex essai.tex $ Lautre forme a pour but de dplacer un ou plusieurs chiers dans un rpertoire : $ mv essai.tex /tmp $ dplace le chier essai.tex dans le rpertoire /tmp. La commande rm (remove ) eace un chier. Sous unix leacement dun chier est dnitif, cest pourquoi, pour des raisons de scurit, leacement dun chier est gnralement congur par ladministrateur en mode interactif, cest--dire que le shell demande lutilisateur une conrmation : $ rm /tmp/esssai.tex rm: remove /tmp/essai.tex?yes $ Ici toute autre rponse que yes ou y fait chouer la commande rm.
Si sur votre systme la commande rm ne vous demande pas de conrmation, il faudra faire appel loption -i (pour interactif). Il est dailleurs assez courant de crer un alias pour viter de le prciser systmatiquement.

2.3.6

Et les rpertoires dans tout a ?

Et bien on peut en crer l o on a le droit, avec la commande mkdir (make directory) par exemple : $ mkdir tmp $ ls -l ... drwxr-xr-x $

2 vincent

users

4096 Nov

7 22:13 tmp

On peut galement dtruire un rpertoire avec la commande rmdir (remove directory) condition que le rpertoire en question soit vide. On peut cependant eacer un rpertoire non vide grce la commande rm et son option -r. Cette option permet deacer rcursivement le contenu dun rpertoire : $ rm -rf tmp $ eace le rpertoire tmp ; loption -f (force ) est ici cumule avec loption de rcursion et permet de forcer lexcution de la commande rm en mode non-interactif. Lutilisateur nest donc interrog aucun moment, cest donc une forme utiliser avec prudence...

42

Petit guide de survie

2.3.7

Gestion des supports amovibles

Une des grandes interrogations des utilisateurs novices dunix concerne laccs aux supports amovibles (disquettes, cdroms et autres cls USB). Laccs de tels priphriques dpend du systme install, mais dans tous les cas il consiste greer (monter) le systme de chiers du support amovible un endroit prcis de larborescence. Ce montage peut tre ralis manuellement avec la commande mount. Dans ce cas on trouvera dans le chier /etc/fstab une ligne ressemblant : /dev/cdrom /cdrom iso9660 ro,user,noauto 0 0

indiquant que lutilisateur lambda a le droit de monter un systme de chiers au format Iso9660 contenu dans un cdrom, dans le rpertoire /cdrom. Lutilisateur pourra donc se fendre dun : $ mount /cdrom $ pour avoir accs aux chiers du dit cdrom partir du rpertoire /cdrom. Une fois la (ou les) oprations de lecture eectue(s) lutilisateur devra lancer un :

$ umount /cdrom $ pour dtacher le systme de chiers du cdrom de larborescence du systme, et pouvoir jecter le disque du lecteur. Certaines versions dunix utilisent un systme de montage automatique des systmes de chiers stocks sur supports amovibles. Dans ce cas laccs au rpertoire /cdrom, /mnt/cdrom, ou quelque chose de ce genre provoquera le montage automatique du cdrom.

2.3.8

Changer les droits

Le propritaire et lui seul a le droit de changer les permissions associes un chier. Seul ladministrateur (utilisateur root) a la possibilit de changer le propritaire dun chier (commande chown). Enn le groupe propritaire peut tre chang par le propritaire (chgrp). La commande chmod permet au propritaire dun chier den changer les droits daccs soit pour partager des donnes avec dautres utilisateurs, soit au contraire pour rendre des donnes sensibles inaccessibles. Cette commande consiste modier les privilges des trois entits propritaires dun chier (utilisateur, groupe et les autres). Il existe deux syntaxes de la commande chmod, la premire est symbolique, lautre numrique. Nous utiliserons ici plus volontiers la premire en prsentant quelques tudes de cas o lon dsire modier les droits dun chier. Mais avant tout, posonsnous la question suivante :

2.3 Le systme de chiers

43

Quels sont les droits par dfaut ? Les droits par dfaut sont dnis par lintermdiaire dun masque de cration de chier. En jargon unix, ce masque est appel umask pour user le creation mask. Ce masque est associ un utilisateur et prcise quels droits aura par dfaut un chier lors de sa cration. Pour connatre son umask : $ umask -S u=rwx,g=rx,o=rx $ Ce qui signie quun chier est cr avec par dfaut : pour le propritaire : tous les droits ; pour le groupe : droits en lecture ; droits en lecture et excution pour les rpertoires ; idem pour les autres. Nous prendrons comme hypothse pour nos tudes de cas que lumask du systme est celui donn par la commande umask -S ci-dessus. Crons un rpertoire et un chier dans ce rpertoire : $ mkdir echange $ touch echange/donnees.txt $ La commande touch change les attributs de date dun chier en le crant sil nexiste pas. On peut alors examiner les droits sur ces chiers : $ ls -ld echange drwxr-xr-x 2 vincent $ ls -l echange -rw-r--r-- 1 vincent $ Attributs dun rpertoire En considrant le rpertoire comme un catalogue contenant une liste de chiers, on peut voir les trois types de droits comme suit : Lecture : compulser le catalogue, cest--dire lister le contenu du rpertoire avec la commande ls par exemple. criture : modier le catalogue, donc eacer les chiers, les renommer, les dplacer. Excution : cet attribut permet un utilisateur de pntrer dans ce rpertoire et daccder aux chiers qui sy trouvent. Voyons plus prcisment grce un exemple : $ chmod g-r echange users 4096 Nov 18 23:06 echange users 6 Nov 15 21:22 donnees.txt

44

Petit guide de survie

$ ls -ld echange drwx--xr-x 2 vincent $

users

4096 Nov 20 18:03 echange

la commande chmod ci-dessus retire aux membres du groupe users le droit de lire le rpertoire echange. Cest pourquoi lorsquun utilisateur autre que vincent (appelonsle rene), mais du groupe users, lance la commande : $ ls ~vincent/echange ls: /home/vincent/echange/: Permission denied $ elle choue, faute de privilges susants. Ici cest le droit dexaminer le contenu du rpertoire qui nest pas accord. Par contre, la commande : $ cat ~vincent/echange/donnees.txt $ est lgitime, puisque lattribut x pour le groupe du rpertoire echange est prsent et permet lutilisateur rene daccder aux chiers quil contient. Cest pourquoi, si lon supprime aussi le droit dexcution sur le rpertoire echange pour le groupe users, comme ceci : $ chmod g-x echange $ ls -ld echange drwx---r-x 2 vincent $

users

4096 Nov 20 18:03 echange

la commande suivante, lance par rene choue faute de droits susants : $ cat ~vincent/echange/donnees.txt cat: /home/vincent/echange/donnees.txt: Permission denied $
Il faut comprendre quun utilisateur ayant les droits dcriture sur un rpertoire peut eacer tous les chiers quil contient quels que soient les droits et propritaires de ces chiers.

Autoriser un membre du groupe lire un chier Avec le umask du paragraphe prcdent, les membres du groupe propritaire sont autoriss lire un chier nouvellement cr dans un rpertoire nouvellement cr. En eet : 1. le rpertoire qui contient le chier est excutable pour le groupe en question ; 2. le chier est lisible pour le groupe.

2.3 Le systme de chiers

45

Autoriser un membre du groupe modier un chier Pour autoriser un membre du groupe propritaire du chier donnees.txt du rpertoire echange modier un chier il sut dactiver lattribut w pour le groupe avec la commande chmod (en supposant que le rpertoire courant est echange) : $ chmod g+w donnees.txt $ ls -l donnees.txt -rw-rw-r-- 1 vincent users $

40 Nov 2 18:03 donnees.txt

Interdire aux autres la lecture dun chier Pour des raisons diverses on peut vouloir interdire la lecture dun chier aux utilisateurs nappartenant pas au groupe du chier. Pour ce faire, la commande : $ chmod o-r donnees.txt $ ls -l donnees.txt -rw-rw---- 1 vincent users $

0 Nov 20 18:03 donnees.txt

interdit aux autres laccs en lecture donnees.txt Autoriser au groupe la suppression dun chier Lorsquun chier est supprim du systme de chier, le rpertoire qui le contient est galement modi, car ce dernier contient la liste des chiers quil hberge. Par consquent, il nest pas ncessaire dactiver lattribut w sur un chier pour pouvoir leacer, il faut par contre sassurer que cet attribut est actif pour le rpertoire qui le contient. Dans le cas qui nous proccupe, la commande : $ ls -ld echange drwx---r-x 2 vincent $ chmod g+rwx echange $ ls -ld echange drwxrwxr-x 2 vincent $ users 4096 Nov 20 18:03 echange

users

4096 Nov 20 18:03 echange

accorde tous les droits (dont lattribut w) au groupe propritaire sur le rpertoire echange ; ce qui permet lutilisateur rene de pouvoir eacer le chier donnees.txt. Notation symbolique et notation octale La commande chmod telle quon la vue jusqu prsent obit la syntaxe suivante :

46

Petit guide de survie

chmod p

a , ... chier un ou plusieurs attributs : read, write, ou executable. un oprateur : + ou - pour activer ou dsactiver zro ou plusieurs propritaires : user, group, other ou all

Les arguments de la commande chmod peuvent tre constitus de plusieurs blocs p%a. Le cas chant ils doivent tre spars par des virgules. Les commandes suivantes sont donc correctes : $ $ $ $ $ chmod chmod chmod chmod o-rwx bidule g+rx bidule -w,o+x bidule a+r bidule

Dans lordre, chacune des commandes prcdentes : enlve tous les droits aux autres ; donne les droits en lecture et excution pour les membres du groupe propritaire ; enlve le droit en criture pour tout le monde et rajoute le droit en excution pour les autres ; donne tout le monde le droit en lecture. On notera donc que sans indication de propritaires, tous sont concerns et ceci en accord avec le umask. Dautre part loption -R de la commande chmod permet daecter le mode spci de manire rcursive aux chiers contenus dans les sous-rpertoires. Mais venons-en au fait : certains puristes utilisent ce quon appelle la notation octale pour positionner les droits dun chier. Cette notation consiste a coder chaque bloc rwx du bloc de droits en une donne numrique de la manire suivante : 22 r 21 w 20 x

On a alors, par exemple : -rwx------ cod par 700 ; -rw-r-xr-x cod par 655 ; -rw-r--r-- cod par 644. Ce codage octal peut tre utilis en lieu et place des symboles gor et rwx avec la commande chmod. Il est galement intressant de noter quon peut acher le umask en notation octale : $ umask 022 $ Cette valeur est le complment par rapport 777. Avec un tel masque les chiers sont crs avec les permissions 755.

2.3 Le systme de chiers

47

2.3.9

Liens

Une des notions un peu troublantes du systme de chiers dunix est la notion de lien. Comme on la vu prcdemment, en interne, le systme identie les chiers par un numro : linode. Liens physiques Lopration qui consiste relier un chier (un ensemble doctets sur un disque) un nom sur larborescence est prcisment la cration dun lien physique. Soit le chier ~/doc/unix/guide.tex : $ cd ~/doc/unix $ ls -li guide.tex 38564 -rw-r--r-- 1 vincent users 18114 Nov 7 22:44 guide.tex $ on constate que ce chier (cr par un diteur de texte) a pour inode 38564, et ne possde quun lien (~/doc/unix/guide.tex). On peut crer un nouveau lien sur ce chier ventuellement dans un rpertoire dirent si ce rpertoire est sur la mme partition que le chier guide.tex, grce la commande ln (link) dont la syntaxe est : ln cible du lien nom du lien Par exemple : $ cd ~/tmp $ ln ~/doc/unix/guide.tex unix.tex $ ls -li unix.tex 38564 -rw-r--r-- 2 vincent users 18114 Nov 7 22:44 unix.tex $ on peut alors constater (gure 2.4 page suivante) que le chier unix.tex possde maintenant deux liens physiques. Dans cette situation, il y a donc une seule reprsentation des donnes sur le disque ce qui est conrm par linode qui est identique (38564) pour les deux liens et deux noms associs cette reprsentation : 1. ~/doc/unix/guide.tex 2. ~/tmp/unix.tex Ce qui implique que lon peut modier le chier par le biais de lun ou lautre des liens. Pour ce qui est de la suppression dun lien, la rgle est la suivante : 1. tant que le nombre de liens physiques sur le chier en question est strictement suprieur 1, la commande rm aura pour eet la suppression du lien et non des donnes. 2. lorsque le nombre de liens physiques est gal 1, rm eace eectivement les donnes, puisquil ny a plus quun lien unique sur celles-ci.

48

Petit guide de survie

Donnes disque ~
38564

doc

tmp

unix

unix.tex

guide.tex

Figure 2.4 Exemple de liens physiques


Pour tre trs prcis, si le chier en question est ouvert par au moins un processus, le lien disparatra aprs la commande rm mais lespace quoccupent les donnes ne sera libr que quand le dernier processus ayant ouvert le chier se terminera.

Liens symboliques Lorsque lon veut lier un chier par lintermdiaire dun lien ne se trouvant pas sur la mme partition que le chier lui-mme, il est ncessaire de passer par lutilisation dun lien dit symbolique. Nous allons par exemple crer un lien symbolique sur notre chier guide-unix.tex depuis le rpertoire /tmp se trouvant sur une autre partition : $ cd /tmp $ ln -s ~/doc/unix/guide.tex test.tex $ ls -l test.tex lrwxrwxrwx 1 vincent users 32 Nov 21 16:41 test.tex -> /hom e/vincent/doc/unix/guide.tex $ Les liens rsultants sont indiqus la gure 2.5 page suivante. On remarquera les particularits dun lien symbolique : cest un chier dirent de celui sur lequel il pointe ; il possde son propre inode : $ ls -i test.tex 23902 test.tex $ le chier contient une rfrence sur un autre chier, ce qui explique par exemple que la taille du lien symbolique test.tex est de 32, qui correspond aux nombres de caractres du chemin du chier auquel il se rfre ;

2.3 Le systme de chiers

49

Donnes disque / home vincent doc unix guide.tex Liens


Physique Symbolique

tmp test.tex

38564

Figure 2.5 Exemple de lien symbolique. un lien symbolique est un chier spcial dont on ne peut changer les permissions, ce qui est indiqu par le bloc de droits : lrwxrwxrwx La plupart des oprations sur le lien symbolique est eectue sur le chier sur lequel il pointe. Par contre la suppression de ce lien obit aux rgles suivantes : 1. la commande rm supprime le lien symbolique lui-mme qui est un chier part entire et na pas dinuence sur le chier auquel il se rfre ; 2. par consquent, si on supprime le chier, le lien symbolique existe toujours et pointe sur un chier qui nexiste pas. Enn la dernire particularit du lien symbolique (qui le distingue du lien physique) provient du fait quil est possible de crer un tel lien sur un rpertoire. Par exemple : $ cd $ ln -s /usr/share/texmf/tex/latex macros $ ls -l macros lrwxrwxrwx 1 vincent users 26 Nov 21 17:02 macros -> /usr/sh are/texmf/tex/latex $ il est alors possible dutiliser le lien symbolique comme un raccourci vers un autre rpertoire. Notons ce sujet que la notion de lien symbolique dunix, peut sapparenter celle de raccourci de Windows. Cependant lutilisateur attentif de ce dernier systme aura remarqu que les raccourcis ne constituent juste quune aide lenvironnement graphique, mais quil est impossible de traiter le raccourci comme un vritable chier ou rpertoire le cas chant.

50

Petit guide de survie

Il peut tre intressant de noter que les commandes internes cd et pwd comprennent deux options : -L pour demander explicitement suivre les liens symboliques ; -P pour demander suivre la structure physique de larborescence.

2.3.10

Access control list (ACL)

Limites de la gestion des privilges Nous avons vu partir de la section 2.3.3 page 37 consacre aux privilges sur les chiers et rpertoires que par dfaut un systme unix attache trois privilges un chier : 1. les privilges de lutilisateur propritaire. 2. ceux du groupe propritaire. 3. ceux des autres. Par consquent la nesse du rglage des accs ne peut se faire quau niveau du groupe. En dautres termes pour rendre un chier accessible en lecture et criture un utilisateur et uniquement lui, il ny a pas dautre solution que de crer un groupe auquel appartient, puis daccorder les droits de lecture et dcriture au groupe . Imaginons que deux utilisateurs dont les noms de connexion sont andy et debrah veuillent collaborer sur le contenu dun chier poodle.dat. Tout dabord, ladministrateur doit crer un groupe (nommons-le zircon) puis faire en sorte que andy et debrah deviennent membres de ce groupe. Ensuite lutilisateur initialement propritaire du chier poodle.dat (par exemple andy) doit positionner les privilges sur celui-ci : $ ls -l poodle.dat -rw-r--r-- 1 andy users 3100 2009-05-11 22:51 poodle.dat $ chgrp zircon poodle.dat $ chmod g+rw poodle.dat $ ls -l poodle.dat -rw-rw-r-- 1 andy zircon 3100 2009-05-11 22:51 poodle.dat $ partir de maintenant, lutilisateur debrah peut lire et modier le contenu du chier poodle.dat.
Le problme ici est que la cration du groupe nest possible que pour ladministrateur du systme qui seul peut ajouter un nouveau groupe dutilisateurs. En outre si un autre utilisateur souhaitait se greer au projet, il faudrait nouveau lui faire une demande pour ajouter le nouveau venu au groupe. On voit donc clairement que la gestion des privilges propose par dfaut dans unix a linconvnient dtre trop statique pour lexemple prsent ci-dessus.

2.3 Le systme de chiers

51

Introduction aux ACL Nous vous proposons donc ici de dcouvrir quelques commandes permettant de rgler les privilges plus nement et de manire plus autonome. La gestion des ACL sous unix repose essentiellement sur deux commandes : getfacl examen des autorisations dun chier ; setfacl positionnement de ces autorisations.
Le systme de chier devra supporter les ACLs. Sous le systme gnu/LINUX il faudra le spcier explicitement dans les options de montage contenues dans le chier /etc/fstab. Le systme de votre serviteur contient par exemple : /dev/sdb5 /home ext3 acl,defaults 0 2

indiquant que la partition /dev/sdb5 est monte dans le rpertoire /home avec support pour les ACLs.

Accorder des droits un utilisateur Reprenons lexemple de nos deux compres andy et debrah souhaitant tous deux collaborer sur le chier poodle.dat : $ ls -l poodle.dat -rw-r--r-- 1 andy users $

3100 2009-05-11 22:51 poodle.dat

Pour autoriser debrah lire et modier le chier en question, andy devra taper : $ setfacl -m u:debrah:rw poodle.dat $ La syntaxe setfacl -m u:user:perm chier permet donc de modier (cest le sens de loption m) les autorisations de lutilisateur user (argument u:). Les autorisations perm peuvent tre dnies en utilisant la notation symbolique prsente au paragraphe 2.3.3 page 37.
Comme la commande chmod, setfacl autorise loption -R pour accorder les droits spcis tous les chiers et sous-rpertoires, rcursivement.

Examiner les autorisations associes un chier Loption -l de la commande ls propose un achage lgrement modi lorsque des autorisations ACLs sont associes un chier : $ ls -l poodle.dat -rw-rw-r--+ 1 andy users $ 3100 2009-05-11 22:51 poodle.dat

52

Petit guide de survie

Notez la prsence du signe +. La commande getfacl permet de lister les permissions associes : $ getfacl poodle.dat # file: poodle.dat # owner: lozano propritaire # group: lozano groupe propritaire user::rw droits du propritaire user:debrah:rw droits de lutilisateur debrah group::r- droits du groupe propritaire mask::rw cf. plus bas other::r- droits des autres $ Accorder des droits par dfaut dans un rpertoire Grce loption -d de la commande setfacl on peut accorder des droits par dfaut un rpertoire. En reprenant lexemple prcdent, la commande : $ setfacl -d -m u:muffin:rw . $

permet dautoriser la lecture et lcriture lutilisateur muffin pour tous les chiers crs dans le rpertoire courant. En dautres termes, tous les chiers crs par la suite seront lisibles et modiables par lutilisateur muffin.
Attention, la commande de lexemple ci-dessus naccorde pas lutilisateur muffin de crer des chiers dans le rpertoire courant.

Enn, les droits par dfaut peuvent tre retirs avec loption -k. Ici la commande : $ setfacl -k . $ supprime les droits par dfaut sur le rpertoire courant. Rvoquer des droits Pour supprimer les droits ajouts avec la setfacl et son option -m on peut utiliser : loption -b pour supprimer tous les droits de type ACL loption -x pour supprimer un entre, par exemple : $ setfacl -x u:debrah poodle.dat $ rvoque les droits accords sur le chier poodle.dat lutilisateur debrah. Masque ACL Lorsquau moins un privilge de type ACL a t accord un chier, un masque est cr contenant lunion de toutes les autorisations. Ce masque est construit automatiquement, ainsi : $ setfacl -m u:dinah:r righthereonthe.floora $ setfacl -m u:moe:r righthereonthe.floora

2.4 Processus

53

$ setfacl -m u:hum:rw $

righthereonthe.floora

Le masque cr et ach par la commande getfacl sera : $ getfacl righthereonthe.floora [...] user::dinah:r-user::moe:r-user::hym:rw[...] mask::rw union des trois permissions prcdentes [...] $ Lintrt de ce masque rside dans le fait quil peut tre modi pour appliquer une politique pour tous les utilisateurs. Par exemple pour ne conserver que le droit en lecture pour tous les utilisateurs ACL, on peut excuter la commande suivante : $ setfacl -m m::r righthereonthe.floora $

2.4

Processus

Le systme unix est multi-tche et multi-utilisateur. Le noyau gre lensemble des processus grce un programme appel lordonnanceur (scheduler). Ce dernier a pour but daccorder aux processus du temps-cpu, et ceci chacun tour de rle, en fonction de priorits le cas chant. Ainsi, un processus peut se trouver dans quatre tats : actif : le processus utilise le cpu prt : le processus attend que lordonnanceur lui fasse signe mais galement : endormi : le processus attend un vnement particulier (il ne consomme pas de cpu dans cet tat) ; suspendu : le processus a t interrompu par un signal. Chaque processus possde un numro qui lidentie auprs du systme. Ce numro est appel son pid ou process identifer. On verra plus bas que chaque processus lexception du tout premier cr, possde un processus pre qui lui donne naissance. Ainsi lensemble des processus dun systme unix constitue un arbre de processus. On notera ici qu la notion de processus, on associe gnralement la notion de terminal. Un terminal est un canal de communication entre un processus et lutilisateur. Il peut correspondre un terminal physique comme un cran ou un clavier, mais aussi ce quon appelle un mulateur de terminal comme une fentre XTerm. Dans les deux cas un chier spcial dans le rpertoire /dev (par exemple /dev/tty1 est la

54

Petit guide de survie

premire console en mode texte, sous linux) est associ au terminal, et les communications se font par le biais dappels systme sur ce chier. La variable TERM informe les applications sur le comportement du terminal (entre autres choses, la manire dont les caractres de contrle seront interprts).

2.4.1

Examiner les processus

La commande ps permet dexaminer la liste des processus tournant sur le systme. Cette commande comprend un nombre trs important doptions qui sont gnralement direntes selon les systmes, il nest donc pas question ici de les passer toutes en revue (pour a il sut de taper man ps !). Voyons tout de mme quelques exemples instructifs.
Notez quun certain nombre doptions de la commande ps a fait lobjet de standardisation notamment au travers de la Single Unix Specication (SUS) porte par lOpen Group, consortium ayant pour but de standardiser ce que devrait tre un systme unix. Par exemple, la commande ps de la distribution Debian actuelle est cense respecter les recommandations de la SUS version 2. Encore une fois, vous trouverez dans ce qui suit des options ne respectant pas ncessairement tous ces standards, veuillez nous en excuser par avance.

Ceux du terminal Jai lanc Emacs (diteur de texte grce auquel je tape ce document) dans une fentre xterm ; voici ce que me donne la commande ps dans cette fentre : $ ps PID 1322 1337 1338 $ TTY ttyp2 ttyp2 ttyp2 TIME 00:00:43 00:02:04 00:00:00 CMD bash emacs ps

On obtient donc une liste dont la premire colonne contient le pid de chaque processus, chacun de ces processus est associ au pseudoterminal du xterm dsign par ttyp2. La dernire colonne donne le nom de la commande associe au processus ; le temps donn ici est le temps-cpu utilis depuis le lancement de la commande. On pourra noter que puisque la commande ps est lance pour obtenir la liste des processus, son pid apparat galement dans la liste (ici pid 1338). Ceux des autres terminaux Loption x de la commande ps permet de lister les processus de lutilisateur qui ne sont par rattachs au terminal courant 9 :
9. Liste non exhaustive par souci de clart.

2.4 Processus

55

$ ps x PID TTY 345 ? 359 ? 1254 ttyp0 1354 ttyp3 29936 ttyp2 $

STAT S S S S R

TIME 0:00 0:01 0:00 0:00 0:00

COMMAND bash /home/vincent/.xsession fvwm2 lynx /usr/doc/vlunch/index.html xdvi.bin -name xdvi guide-unix.dvi ps -x

La nouvelle colonne STAT (status) donne ltat de chaque processus, ici S indique que le processus est endormi (sleeping), et R quil est prt (runnable). Ceux des autres utilisateurs La syntaxe suivante permet dobtenir la liste des processus lancs par un utilisateur du systme : $ ps -u rene PID TTY 663 tty1 765 ? 794 ttyp4 805 ttyp4 $ TIME 00:00:00 00:00:00 00:00:00 00:00:00 CMD bash xclock bash mutt

Lutilisateur rene est donc connect sur la premire console virtuelle, a lanc une horloge du systme X window, et est vraisemblablement en train de lire son courrier. Tous ! Enn on veut parfois tre en mesure de visualiser la liste de tous les processus sans critre restrictif de terminal ou dutilisateur. Il y a encore une fois plusieurs voies pour atteindre ce but. La version de la commande ps de LINUX supporte plusieurs styles de syntaxes ; nous en donnons ci-dessous deux exemples : $ ps aux USER PID %CPU %MEM root 1 0.1 0.1 root 2 0.0 0.0 root 3 0.0 0.0 root 4 0.0 0.0 root 5 0.0 0.0 root 210 0.0 0.3 root 221 0.0 0.3 daemon 237 0.0 0.0 root 253 0.0 0.3 root 284 0.0 0.3 $ TTY ? ? ? ? ? ? ? ? ? ttyS0 STAT S SW SW SW SW S S SW S S START 14:11 14:11 14:11 14:11 14:11 14:12 14:12 14:12 14:12 14:12 TIME 0:03 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 COMMAND init [5] [kflushd] [kupdate] [kpiod] [kswapd] syslogd -m 0 klogd [atd] crond gpm -t ms

56

Petit guide de survie

Cette commande liste sur le terminal tous les processus du systme ici elle est raccourcie bien videmment. Cette forme de listing fournit galement la date de dmarrage du processus (champ START), ainsi que le pourcentage de cpu et de mmoire utiliss (%CPU et %MEM respectivement). Il est galement intressant de noter que lon peut suivre la squence de dmarrage du systme dexploitation : le premier programme lanc porte le pid 1 et se nomme init. Les processus suivants concernent les services de base du systme unix. Voici une autre manire dobtenir la liste complte des processus : $ ps -ef UID root root root root root root root daemon root root $ PID 1 2 3 4 5 210 221 237 253 284 PPID 0 1 1 1 1 1 1 1 1 1 STIME 14:11 14:11 14:11 14:11 14:11 14:12 14:12 14:12 14:12 14:12 TTY ? ? ? ? ? ? ? ? ? ttyS0 TIME 00:00:03 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 CMD init [5] [kflushd] [kupdate] [kpiod] [kswapd] syslogd -m 0 klogd [atd] crond gpm -t ms

ici lachage est quelque peu dirent. STIME est lquivalent du START, et on a accs au ppid qui identie le processus pre dun processus particulier. On remarquera dans cette liste que tous les processus sont des ls dinit cest--dire lancs par celui-ci. Ceci lexception dinit lui-mme qui est le premier processus cr. Personnaliser lafchage On peut se limiter certaines informations en utilisant loption o de la commande ps ; cette option permet de spcier les champs que lon dsire voir sacher, par exemple : $ ps -xo pid,cmd PID CMD 346 [.xsession] 360 fvwm2 -s 363 xterm -ls -geometry 80x30+0+0 367 -bash 428 man fvwm2 $ nache que le pid et la commande dun processus. On a combin ici loption o avec loption x vue prcdemment.

2.4 Processus

57

Lien de parent Loption --forest associe avec la commande prcdente illustre larborescence des processus. On a isol ici les processus associs une session X ; on voit clairement grce au dessin sur la partie droite, et la correspondance entre pid et ppid, quelles sont les liations des processus. $ ps --forest -eo pid,ppid,cmd PID PPID CMD 324 1 [xdm] 334 324 \_ /etc/X11/X 335 324 \_ [xdm] 346 335 \_ [.xsession] 360 346 \_ fvwm2 -s 448 360 \_ xterm -ls 451 448 | \_ -bash 636 451 | \_ ps --forest -eo pid,ppid,cmd 576 360 \_ /usr/X11R6/lib/X11/fvwm2/FvwmAuto 577 360 \_ /usr/X11R6/lib/X11/fvwm2/FvwmPager $

2.4.2

Modier le droulement dun processus

Il existe au moins trois manires de modier le droulement normal dun processus : 1. changer la priorit dun processus avec la commande nice ; 2. utiliser la commande kill. Cette commande permet partir du pid dun processus, denvoyer ce quon appelle en jargon unix, un signal ce processus. En tant quutilisateur du systme, on envoie gnralement des signaux pour interrompre, arrter ou reprendre lexcution dun programme ; 3. utiliser le contrle de tche (job control) depuis le shell. Ce mcanisme permet de modier le droulement des programmes sexcutant dans un terminal donn. Priorit dun processus Par dfaut un processus lanc par un utilisateur a la mme priorit que celui dun autre utilisateur. Dans la situation o lon dsire lancer un processus gourmand sans gner les autres utilisateurs du systme, on peut utiliser la commande nice : $ nice -n priorit./groscalcul o 20 priorit 19, 19 dsignant la plus petite priorit (processus laissant sa place aux autres) et 20 la plus grande. Par dfaut, les utilisateurs nont pas le droit dutiliser une priorit ngative, par consquent tous les utilisateurs sont gaux face lutilisation des ressources de la machine.

58

Petit guide de survie

Notons lexistence de la commande renice permettant de baisser la priorit dun processus une fois quil est lanc. Par exemple, avec la commande : $ renice -10 -p 4358 4358: old priority 0, new priority 10 $ on change la priorit du processus de pid 4358 en lui aectant la valeur 10. La notion de signal Lorsquon veut interrompre ou suspendre un processus, lintervention revient toujours envoyer ce quon appelle un signal au processus en question. Lorsquun processus reoit un signal il interrompt le cours normal de son excution et peut : soit sarrter, cest le comportement par dfaut ; soit excuter une routine particulire que le concepteur de la commande aura eu soin de dnir et reprendre son cours normal. Selon la mouture de lunix et de la plate-forme sous-jacente, on dispose dune trentaine de signaux dont on peut avoir la liste avec la commande kill et loption -l. $ kill -l 1) SIGHUP 5) SIGTRAP 9) SIGKILL 13) SIGPIPE 18) SIGCONT 22) SIGTTOU 26) SIGVTALRM 30) SIGPWR $ 2) 6) 10) 14) 19) 23) 27) SIGINT SIGIOT SIGUSR1 SIGALRM SIGSTOP SIGURG SIGPROF 3) 7) 11) 15) 20) 24) 28) SIGQUIT SIGBUS SIGSEGV SIGTERM SIGTSTP SIGXCPU SIGWINCH 4) 8) 12) 17) 21) 25) 29) SIGILL SIGFPE SIGUSR2 SIGCHLD SIGTTIN SIGXFSZ SIGIO

Tous ces signaux peuvent tre dtourns de manire installer une routine excuter la rception de ce signal ; ceci lexception du signal KILL (no 9) et du signal STOP (no 19) qui ne peuvent tre dtourns et donc ont toujours pour eet darrter (respectivement dinterrompre) le processus. La commande kill Nous passerons ici en revue quelques utilisations de la commande kill. Dans un cadre trs pratique, il y a trois situations vitales o il est ncessaire de connatre cette commande : 1. un programme semballe , cest--dire accapare les ressources mmoire ou cpu du systme, il est alors ncessaire den stopper lexcution ; 2. un programme utilise trop de ressources pour le confort des autres utilisateurs, il est ncessaire de linterrompre momentanment ;

2.4 Processus

59

3. un programme ne rpond plus aux sollicitations de lutilisateur, il ny a pas dautres moyens que de linterrompre en lui envoyant un signal de n dexcution. Passons en revue ces trois situations en supposant que sur notre terminal la commande ps nous renvoie : $ ps -o pid,pcpu,pmem,state,cmd PID %CPU %MEM S CMD 2177 0.0 2.1 S -bash 2243 99.9 99.9 R winword-2005 2244 0.0 1.7 R ps -o pid,pcpu,pmem,state,cmd $ Anti-emballement On dcide que le programme winword-2005 prend beaucoup trop de ressources probablement cause dun bug on intervient en dcidant dliminer purement et simplement ce processus du systme : $ kill 2243 $ ce qui a pour eet denvoyer le signal TERM au processus de pid 2243. Il se peut que lenvoi de ce signal soit sans eet si le programme en question a t conu pour dtourner ce signal. Le processus de pid 2243 apparatra toujours dans la liste des processus et il faudra lui envoyer un signal KILL : $ kill -KILL 2243 $ qui comme on la vu prcdemment ne peut tre dtourn ; le processus de pid 2243 est donc irrmdiablement arrt. Assurer le confort des autres On considre ici que le fameux programme winword-2005 que tout le monde utilise sans vraiment savoir pourquoi, nest pas en train de semballer, mais simplement prend un peu trop de ressources. La tche eectue est lourde, mais importante pour lutilisateur qui dcide donc dinterrompre le programme pour le reprendre plus tard : $ kill -STOP 2243 $ On peut constater que le programme interrompu est eectivement dans cet tat en examinant le champ STATE : $ ps -o pid,pcpu,pmem,state,cmd PID %CPU %MEM S CMD 2177 0.0 2.1 S -bash 2243 0.0 25.3 T winword-2005 2244 0.0 1.7 R ps -o pid,pcpu,pmem,state,cmd $

60

Petit guide de survie

Ce champ est positionn T qui indique que le processus de pid 2243 est interrompu. Lutilisateur, soucieux dachever son travail, pourra alors lancer la commande en n de journe pour ne pas gner ses collgues : $ kill -CONT 2243 $ qui indique au processus de pid 2243 de reprendre son excution. Contrle de tches Le contrle de tches ou job control permet de manipuler les processus tournant sur un terminal donn. Sur chaque terminal, on distingue deux types de processus : 1. le processus en avant-plan, cest celui qui peut utiliser le terminal comme canal de communication avec lutilisateur par le biais du clavier ; on dit galement quon a la main sur ce type de processus ; 2. les processus en arrire-plan (ou tche de fond) ; ceux-l peuvent utiliser le terminal comme canal de sortie (pour acher des informations par exemple) mais ne peuvent lire les donnes que leur fournirait lutilisateur.
Ce qui est crit ci-dessus est le comportement quon rencontre gnralement sur un terminal avec la plupart des applications. Il nest par contre pas inutile de noter que selon quune application intercepte ou ignore les deux signaux particuliers TTOU et TTIN (respectivement criture ou lecture dun processus en arrire-plan), le comportement pourra tre dirent.

Les shells supportant le contrle de tches 10 orent un certain nombre de commandes et de combinaisons de touches qui permettent entre autres : dinterrompre ou darrter un programme ; de passer un programme en arrire ou en avant-plan ; de lister les processus en arrire-plan. Nous vous proposons de passer en revue ces fonctionnalits en se plaant dans le cadre dun exemple simple : supposons que dans un terminal donn, un utilisateur lance lditeur Emacs : $ emacs Une fois Emacs lanc, lutilisateur na plus la main sur le terminal 11 , et tout caractre saisi reste en attente, jusqu la n de lexcution dEmacs : $ emacs qdqsqmlskdjf n du progamme emacs $ qdqsqmlskdjf
10. Ce qui est le cas de la plupart des shells modernes. 11. Sauf si Emacs est lanc en mode texte dans le terminal...

2.4 Processus

61

bash: qdqsqmlskdjf: command not found $ Arrter le programme Pour arrter un programme en avant-plan, on peut utiliser la clbre combinaison de touche Ctrl c (Ctrl-c) : $ emacs $ Control + c

Ctrl-C envoie le signal INT au processus en avant-plan dans le terminal. Passage en arrire-plan Pour passer Emacs (le programme de notre exemple) en arrire-plan, il faut procder en deux temps : appuyer sur la touche Control puis la touche z en mme temps (on note souvent Ctrl-z) 12 , ce qui a pour eet denvoyer le signal STOP au programme sexcutant en avant-plan sur le terminal. $ emacs Control + z [1]+ Stopped emacs $ Il faut ensuite passer le programme en tche de fond grce la commande interne bg (background) : $ bg [1]+ emacs & $ Le numro entre crochet ([1]) est le numro de la tche dans le terminal courant. On parle aussi de job. On peut galement lancer directement une commande ou programme en tche de fond, en postxant la commande par le caractre & : $ emacs& [1] 1332 $ Ici le systme attribue Emacs le job [1], et le shell ache sur le terminal le pid correspondant (1332).
12. Cette combinaison est gnralement celle que lon trouve sur un systme unix, mais notez que cela peut tre dirent sur certains systmes.

62

Petit guide de survie

Lister les tches La commande jobs permet dobtenir une liste des tches en arrire-plan, ou interrompues, sur le terminal. Par exemple : $ xclock & xlogo & xbiff & [1] 1346 [2] 1347 [3] 1348 $ lance trois programmes donnant lieu la cration dune fentre graphique. On peut lister ces tches : $ jobs [1] Running [2]- Running [3]+ Running $ Passage en avant-plan xclock & xlogo & xbiff &

Il est possible de faire rfrence une tche par son numro grce la notation %numro_de_tche. Ceci est valable pour les commandes bg et kill vues prcdemment, mais aussi pour la commande permettant de passer une tche en avant-plan : la commande fg (foreground). Ainsi par exemple pour passer xlogo en avant-plan : $ fg %2 xlogo maintenant on na plus la main.

2.5

Quelques services

Un systme dexploitation peut tre vu comme une couche logicielle faisant linterface entre la machine et lutilisateur. Cette interface peut elle-mme tre apprhende comme un ensemble de services fournis lutilisateur. Outre les services vus jusquici permettant de lancer des programmes et de stocker des donnes 13 , il existe entre autres des services lis limpression et la planication. Les services dunix rpondent gnralement au principe client/serveur, dans lequel le client est lapplication vue par lutilisateur, et le serveur un daemon (disk and execution monitor), cest--dire un programme attendant en tche de fond, pour rpondre aux ventuelles requtes.
13. Seront tudis plus loin dans ce manuel les services lis la communication entres utilisateurs, et le tlchargement de chiers.

2.5 Quelques services

63

2.5.1

Impression

Sur les rseaux locaux, limpression sous unix se fait gnralement sur des imprimantes PostScript connectes un rseau. Le PostScript est un langage dimpression conu par la socit Adobe, cest un langage de description de page. Ce langage est interprt, et les imprimantes dites PostScript disposent dun interprteur implant sur une carte lectronique. Le principe pour imprimer est donc denvoyer un chier au format PostScript sur une imprimante. En fonction du format du chier initial, il faudra procder une conversion avec les logiciels suivants : a2ps convertit un chier texte en chier PostScript ; convert permet de convertir peu prs nimporte quel type dimage en PostScript ; dvips permet de convertir la sortie de TEX (format dvi) en PostScript. Si lon ne dispose pas dimprimante PostScript, il faut gnrer le PostScript comme indiqu prcdemment et utiliser un interprteur logiciel pour transformer ce PostScript en chier compatible avec limprimante en question (voir gure 2.6). Linterprteur PostScript couramment utilis sous unix est Ghostscript (http://www.cs.wisc.edu/ ~ghost). Les commandes de base disponibles pour lutilisateur sont :
Texte
a2ps

2
PS
PS ghostscript

Image

convert

Dvi

dvips

Non PS

Figure 2.6 Impression sous Unix. lpr : pour soumettre un chier imprimer ; lpq : pour lister la liste des jobs dimpression en attente ; lprm : pour enlever un job de la liste en attente. Selon le systme que vous utiliserez seront accessibles plusieurs les dimpression en fonction des imprimantes disponibles. Seront galement accessibles des options dpendantes des caractristiques de limprimante (alimentation manuelle, bac A3, recto/verso, etc.). Renseignez-vous auprs du mssieur qui vous sert dadministrateur systme.

64

Petit guide de survie

Il existe deux familles de commandes hrites de deux versions dunix. Historiquement, la branche BSD proposait les commandes lp, lpq et lprm, et les commandes correspondantes de la branche SysV taient lp, lpstat et cancel. Aujourdhui les programmes grant limpression sur un systme unix peuvent utiliser lune ou lautre de ces familles, voire les deux.

2.5.2

Le service at

La commande at permet de lancer une commande (at ) une heure particulire. Sa syntaxe est la suivante : at date On pourra par exemple lancer : $ at 23:00 at> groscalculdelamort at> Ctrl-D $ pour lancer 23 heures le programme groscalculdelamort qui utilise beaucoup de ressources. La sortie du programme sera envoye par mail lutilisateur aprs son excution. Dautres syntaxes existent pour spcier la date de lancement : $ at now + 2hours $ pour lancer un programme dans deux heures. Et : $ at 16:20 tomorrow $ pour demain 16:20, $ at $ 13:14 10/23/02

pour lancer un programme le 23 octobre 2002 13 heures 14. On peut galement lister les jobs prvus par la commande at grce la commande atq : $ atq 1 2 3 $ 2001-03-14 18:27 a 2001-03-15 16:20 a 2002-10-23 13:14 a

La commande atrm quant elle, permet de supprimer une tche prvue, en donnant son identicateur (le numro indiqu dans la premire colonne des informations renvoyes par atq) : $ atrm 1 $

2.5 Quelques services

65

On peut galement prparer les commandes dans un chier texte et utiliser ce chier notons-le commandes.at comme argument de la commande at : $ at -f commandes.at 15:00 tomorrow $

2.5.3

Le service cron

cron est un service quivalent ce que le systme dexploitation dit par la socit Microsoft appelle les tches planies . Linterface utilisateur est la commande crontab. Pour savoir quelles sont vos tches planies (dans le jargon unix, on dit inspecter sa crontab ), on lancera la commande : $ crontab -l no crontab for djobi $ Pour eacer toutes vos tches planies, la commande suivante sura : $ crontab -r $ Pour dnir une ou plusieurs tches planies, la commande : $ crontab -e lance un diteur (qui peut tre par dfaut vi) qui vous demande de saisir des informations dans un format particulier. Chaque ligne ce celui-ci devra contenir les informations suivantes : minutes heures jour du mois mois jour de la semaine commande o : minutes heures jour du mois mois jour de la semaine Par exemple la ligne : 10 0 * * 0 rm -rf ~/.wastebasket/* eace tous les dimanches minuit pass de dix minutes, le contenu du rpertoire poubelle /.wastebasket. La ligne : 0 12 30 12 * echo "bon anniversaire" | mail pote@truc.net envoie un mail votre pote tous les 30 dcembre midi. : prend des valeurs de 0 59 ; : de 0 23 ; : de 1 31 ; : de 1 12 ; : de 0 7 o 0 et 7 reprsentent le dimanche.

66

Petit guide de survie

La ligne : 0 8-18 * * * echo "a gaze ?" | mail pote@truc.net envoie un mail toutes les heures pile de (8 heures 18 heures) pour vous rappeler son bon souvenir. La ligne : 0 8-18/4 * * 1,3,5 rm -f ~/tmp/* vidange le rpertoire tmp de lutilisateur le lundi, mercredi et le jeudi, et ceci de 8 heures 18 heures, toutes les 4 heures. Notez enn que le service cron vous informe par mail du rsultat de lexcution de votre tche. Voir la page de manuel de crontab pour de plus amples informations, ainsi que lexemple du chapitre 6 paragraphe 6.4.5 page 202 illustrant une utilisation du service cron pour mettre des images tires au hasard en fond dcran.

2.5.4

Lutilitaire nohup

nohup permet de lancer une commande qui ne sera pas arrte lorsque lutilisateur se dconnectera du systme 14 . Lors de la dconnexion, tous les programmes reoivent en eet le signal HUP, qui a par dfaut leet de les arrter 15 . Pour lancer la commande cmd en nohup , on tapera :

nohup cmd Par exemple pour lancer un tlchargement qui va durer plusieurs heures, on peut utiliser wget avec nohup : $ nohup wget ftp://bidule.chouette.org/pub/truc-1.2.tar.gz nohup: appending output to nohup.out Ctrl-z [1]+ Stopped wget $ bg [1]+ wget & $ Le systme vous informe alors que la sortie du programme en loccurrence wget est redirige dans le chier nohup.out. Fichier quon pourra consulter lors de la prochaine connexion au systme.
Que faire alors si le programme lanc avec nohup est un programme interactif qui attend des donnes au clavier ? Une solution simple est de visualiser le contenu du chier nohup.out dans un autre terminal avec la commande tail -f nohup.out et rpondre aux questions dans le terminal o est lanc la commande en nohup. Par exemple si on ne dispose pas de wget mais uniquement de lutilitaire ftp, il faudra procder, avant de lancer le transfert proprement dit, un srie dinteraction avec le programme.
14. Il ne sagit donc par rellement dun service de planication, mais dune commande utile dans le cadre de la gestion des tches. 15. Notons cependant que certains logiciels sont programms pour dtourner ce signal.

2.5 Quelques services

67

Conclusion
Vous tes maintenant arms pour dcouvrir le chapitre suivant. Celui-ci va vous prsenter les utilitaires composant la bote outils dun systme unix. Le bon maniement de ces outils prsuppose que vous avez correctement digr le prsent chapitre. Cest par contre celui qui vous fera prendre conscience de toute la puissance de la ligne de commande 16 .

16. Le suspense est tout bonnement insoutenable...

Sommaire 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 Introduction lexpansion Redirections et tubes Les outils de base Le shell en tant que langage grep et la notion dexpressions rgulires awk sed tudes de cas

Chapitre

3
Cut prints selected parts of lines from each FILE to standard output. With no FILE, or when FILE is -, read standard input. man cut.

La bote outils

L voir des outils lmentaires destins une tche bien spcique ; chacun de ces outils devait tre conu de telle manire quil puisse communiquer avec les autres.

ide conductrice des dveloppeurs dunix de la premire heure tait de conce-

En tant quutilisateur dunix on retrouve cette philosophie tout moment : chaque utilitaire, linstar dune pice de meccano, est destin eectuer une tche simple et la connaissance de quelques pices permet de construire ses propres outils. Ce chapitre a pour objet de prsenter les mcanismes qui permettent de faire communiquer ces programmes entre eux, puis de prsenter les pices de la bote outils les plus communment utilises sous unix.

69

70

La bote outils

3.1

Introduction lexpansion

Avant daborder ltude de quelques outils unix, il convient de comprendre quelques-uns des mcanismes entrant en jeu dans linterprtation des commandes. Comme nous lavons vu prcdemment, certains caractres ont une signication particulire pour le shell. Lorsquon veut utiliser ces caractres autrement que pour leur signication spciale, il faut gnralement utiliser le caractre backslash (\) : $ echo \* * $ Sans le backslash, le caractre * aurait t remplac par tous les chiers du rpertoire courant. Un moyen couramment utilis avec le shell pour protger les caractres spciaux est dutiliser les caractres quote et double quote ". Le premier vite lexpansion de tout caractre : $ echo $USER # $USER # $ Le deuxime permet au caractre $ de conserver sa signication : $ echo "$USER #" lozano # $

Il sera souvent question de protger les caractres spciaux lors de lutilisation des outils que nous prsentons dans ce chapitre.

3.2

Redirections et tubes
Par dfaut, tout processus a accs trois canaux de communications (gure 3.1):
Entre Sortie

Processus

Erreur

Figure 3.1 Les trois ux associs un processus 1. le ux de sortie (standard output) par dfaut dirig vers le terminal courant ; 2. le ux derreur (standard error) galement dirig par dfaut vers le terminal courant ; 3. le ux dentre (standard input) sur lequel transitent par dfaut les donnes provenant du clavier.

3.2 Redirections et tubes

71

Ainsi, la commande : $ echo bonjour bonjour $ ache bonjour sur le ux de sortie. La commande : $ ls amlkjg ls: amlkj: No such file or directory $ ache le message sur le ux derreur. Et la commande (du shell bash) : $ read A hop l` a saisie par lutilisateur $ attend la saisie dune ligne sur le ux dentre, ligne qui sera stocke dans la variable A. Ce quil est intressant de comprendre, cest que la grande majorit des commandes et utilitaires dunix suivent le modle de ces trois ux standard, quon pourrait dnir de la manire suivante : tout achage est envoy par dfaut sur le ux de sortie ; tout message derreur est envoy sur le ux derreur ; toute donne peut tre lue depuis le ux dentre. titre dexemple, la commande grep suit ce modle. Cette commande est destine ne rcuprer que les lignes dun chier contenant une chane de caractres : 1. grep ache le rsultat sur le ux de sortie ; 2. les messages derreurs ventuels sont achs sur le ux derreur ; 3. grep peut attendre les donnes ltrer sur son ux dentre : $ grep bof on recherche la chane bof saisie par lutilisateur xxxbofyyy Entre xxxbofyyy correspondance : grep ache la ligne xxxbifyyy Entre saisie par lutilisateur pas de correspondance On peut indiquer une commande qui attend des donnes sur son ux dentre, la n des donnes laide du caractre EOF saisi par la combinaison de touches Ctrl d . Nous verrons par la suite que cest prcisment parce que la plupart des commandes unix suit ce modle des trois ux, quon peut composer les utilitaires avec une grande souplesse. Cette composabilit qui fait la grande force dunix est possible grce ce quon appelle les redirections.

72

La bote outils

3.2.1

Redirections

Il est possible de rediriger les trois ux prsents au paragraphe prcdent, grce une syntaxe particulire qui varie trs lgrement selon le shell utilis. Redirection du ux de sortie On peut rediriger le ux de sortie vers un chier : $ echo bonjour > test.txt $ ls -l test.txt -rw-r--r-1 vincent users 8 Dec 11 16:19 test.txt $ Le caractre > permet la redirection dans le chier test.txt. On peut noter que le choix du caractre voque la direction du ux vers le chier. Puis : $ more test.txt bonjour $ La commande more qui a pour but dacher le contenu dun chier lcran, permet ici de comprendre que echo a ralis son achage dans le chier test.txt et non lcran.

Redirection du ux derreur On peut dans certaines situations vouloir rcuprer les informations envoyes par un programme sur le ux derreur. Le principe est le mme que pour le ux de sortie, seul loprateur est dirent : $ ls qsmlkjf 2> erreur.txt $ cat erreur.txt ls: qsmlkjf: No such file or directory $ On peut galement coupler les deux redirections de la manire suivante : unprogramme > sortie.txt 2> erreur.txt Pour rediriger les deux ux (sortie et erreur) dans un mme chier, on pourra utiliser : unprogramme > sortie-erreur 2>&1 Ou plus simple : unprogramme >& sortie-erreur

3.2 Redirections et tubes

73

Redirection en mode ajout Loprateur > cre ou crase le chier destinataire de la redirection. On peut cependant utiliser le mode ajout (append) pour ne pas craser un chier dj existant : $ echo bonjour > donnees.txt $ echo salut >> donnees.txt $ cat donnees.txt bonjour salut $ Redirection du ux dentre Lorsquun programme attend des donnes depuis le clavier, on peut lui fournir directement ces donnes en utilisant le contenu dun chier. On dit alors quon redirige le ux dentre du programme en question. Le premier exemple que nous proposons utilise la commande bc qui est daprs la page de manuel, an arbitrary precision calculator language. Une session avec bc se prsente comme suit : $ bc -q 2+3*5 Entre 17 quit $ Si on stocke lexpression du calcul (2+3*5) dans un chier, on peut indiquer bc que les donnes proviennent de ce chier : $ cat calcul.dat 2+3*5 $ bc < calcul.dat 17 $ On dit quon a redirig le ux dentre de bc depuis le chier calcul.dat. Le second exemple concerne la commande mail. Pour envoyer un mail en utilisant cette commande, le principe est le suivant : $ mail -s "Des redirections" monpote Bon ben alors... A+ . EOT $

74

La bote outils

loption -s permet de spcier le sujet. Largument qui suit (monpote) est ladresse lectronique du destinataire du mail. Une fois la commande lance, on peut taper le texte du message ; le caractre . sur une seule ligne permet de nir le texte et denvoyer le message.
La version originelle de mail ne dispose pas de loption -s, cette option apparat dans le programme standard mailx. Sur le systme LINUX de votre serviteur mailx et mail font rfrence au mme programme. Attention par contre, dautres systmes peuvent tre congurs diremment.

Ce quil faut comprendre ici, cest que mail attend le texte du message sur le ux dentre. On peut alors rediriger cette entre depuis un chier qui contiendrait le corps du message : $ cat msg.txt msg.txt contient le message alors voil` a A+ $ mail -s "redirections" monpote < msg.txt $ Donc en supposant que lon ait saisi le message dans le chier msg.txt, la dernire commande mail peut se traduire par envoyer un mail en lisant les donnes depuis le chier msg.txt. On dit alors quon a redirig le ux dentre. Le trou noir

On trouve gnralement sur les systmes unix un chier particulier dont le nom est /dev/null : cest un trou noir qui absorbe toute redirection sans broncher ; ce chier est un chier spcial, il ne grossit pas lorsquon y redirige des donnes. Il peut tre utile pour ne pas tre drang par les messages derreur par exemple : id user > test 2> /dev/null cette commande crit dans le chier test les numros identiant lutilisateur user. Si lutilisateur nexiste pas le message derreur nest pas ach puisquenvoy dans /dev/null.

3.2.2

Les tubes (pipes)

Les tubes ou pipes orent un mcanisme permettant de composer plusieurs commandes en connectant le ux de sortie de lune avec le ux dentre de la suivante (gure 3.2). Reprenons lexemple de lenvoi du mail du paragraphe prcdent. Supposons que nous disposions de deux chiers de donnes contenant : $ more data-I.txt machin chose $

3.2 Redirections et tubes

75

Entre 1

Entre 2

Entre n

P1
Sortie 1

P2
Sortie 2

Pn
Sortie n

Figure 3.2 Principe des tubes

et : $ more data-II.txt bidule chouette $ On veut envoyer ces deux chiers au sieur monpote. Pour ce faire : $ cat data-I.txt data-II.txt | mail -s "some data" monpote $ La sortie de la commande cat qui ralise la concatnation des donnes des chiers data-I.txt et data-II.txt est utilise comme entre de la commande mail (corps du message). On peut composer l inni les tubes comme le montre lexemple suivant : on veut galement envoyer une copie des donnes tries au gars monpote. Le tri peut tre fait par la commande sort : $ sort data-I.txt data-II.txt bidule chose chouette machin $ On peut donc exploiter le fait que sort peut trier les donnes arrivant sur le ux dentre, pour envoyer le mail avec deux tubes : $ cat data-I.txt data-II.txt | sort | mail -s "some data" monpote $ donc ici, la sortie de cat est utilise comme entre pour sort qui envoie mail le corps du message sur le ux dentre. Notez enn quon aurait pu crire : $ sort data-I.txt data-II.txt | mail -s "some data" monpote $ car sort est capable de trier les chiers quon lui passe en arguments. Lexemple avait ici pour but de combiner plusieurs tubes.
Un point important noter est que lors de lutilisation de plusieurs commandes par lintermdiaire de tubes, chacune des commandes est lance en mme temps par

76

La bote outils

le systme. Bien que lon imagine visuellement un ux dinformation transitant de gauche droite, les commandes sont lances de manire concurrente.

Toute utilisation srieuse du shell dunix passe par une utilisation frquente des tubes et redirections. Les utilitaires prsents dans la suite de ce chapitre peuvent se voir comme des ltres, cest--dire que lon peut considrer quils ltrent le ux de sortie des programmes auxquels ils sappliquent. En dautres termes, un ltre peut tre utilis avec un tube puisquil attend systmatiquement des donnes sur son ux dentre et envoie le rsultat du ltrage sur son ux de sortie.

3.3

Les outils de base

Nous donnons ici quelques outils frquemment utiliss sous unix dont il faut connatre lexistence. Chacun de ces outils est prsent avec quelques options, galement les plus communes. Pour une utilisation avance il faudra se rfrer aux pages de manuel. Nous utiliserons pour les exemples le chier suivant : $ cat fichier.dat Jimi Hendrix 1970 Jim Morrison 1971 Janis Joplin 1969 $

3.3.1

Afcher

Le rle de la commande cat est de concatner (concatenate) plusieurs chiers. Le rsultat de cette concatnation tant envoy sur le ux de sortie. Ainsi : cat chier1 chier2 ... chiern concatne les chiers de 1 n et les ache sur le ux de sortie. Le ltre more peut tre utilis lorsque lachage est trop long pour le terminal. Les chiers sont alors achs page par page : cat chier1 chier2 | more Selon les systmes on peut utiliser la commande less 1 (plus ergonomique) la place de more.
1. Encore un jeu de mots dinformaticien : le remplaant de lanctre more est less, ah-a ah-a, assez ri... Japprends linstant que la nouvelle volution de more sappelle most, arf, arf, arf... hum, un peu de srieux.

3.3 Les outils de base

77

3.3.2

Trier

Cest la commande sort : $ sort fichier.dat Janis Joplin 1969 Jimi Hendrix 1970 Jim Morrison 1971 $ Par dfaut les lignes sont classes selon la premire colonne. On peut classer selon les noms : $ sort -k2 fichier.dat Jimi Hendrix 1970 Janis Joplin 1969 Jim Morrison 1971 $ Loption -k pour key en anglais spcie la clef du tri. Pour trier selon les dates : $ sort -n -k3 fichier.dat Janis Joplin 1969 Jimi Hendrix 1970 Jim Morrison 1971 $ Notez lutilisation de loption -n qui permet dutiliser lordre numrique (par dfaut cest lordre lexicographique). Loption -u peut quant elle tre utilise pour supprimer les doublons.

3.3.3

Dcouper en colonnes

La commande cut permet dacher une ou plusieurs colonnes dun ux de donnes : $ cut -d -f1,3 fichier.dat Jimi 1970 Jim 1971 Janis 1969 $ Le sparateur de colonnes est par dfaut la tabulation. On peut en spcier un autre avec loption -d (pour dlimiteur). Ici on a utilis le caractre espace comme dlimiteur. On a ensuite spci les champs (option -f pour eld) numro 1 et numro 3 (respectivement prnom et date). Voici pour samuser un exemple dutilisation des tubes : $ cut -d -f1,3 fichier.dat | sort -k2 -n

78

La bote outils

Janis 1969 Jimi 1970 Jim 1971 $ Ce qui permet de trier par anne le rsultat du cut prcdent...

3.3.4

Recoller les colonnes

Supposons que lon dispose dun chier : $ cat groups.dat The Experience The Doors Kosmik Band $ On peut alors fusionner ce chier avec notre chier dtoiles lantes : $ paste -d fichier.dat groups.dat Jimi Hendrix 1970 The Experience Jim Morrison 1971 The Doors Janis Joplin 1969 Kosmik Band $

On utilise ici aussi le caractre espace la place de celui par dfaut (tabulation). On pourra galement se rfrer la commande join qui elle, fusionne deux chiers selon un champ commun.

3.3.5

Compter

La commande wc (pour word count) permet de compter les caractres, les mots et les lignes dun ux de donnes : $ wc fichier.dat 3 9 $ 54

Ce qui signie que le chier en question possde 3 lignes, 9 mots et 54 octets (les espaces et sauts de ligne sont comptabiliss). On peut galement acher uniquement lun de ces nombres, par exemple le nombre de lignes : $ wc -l fichier.dat 3 $ les options pour le nombre de mots et de caractres sont respectivement w (word ) et c (byte ).

3.3 Les outils de base

79

Attention, mme si aujourdhui un caractre est encore cod sur un octet, on devrait trouver lavenir de plus en plus de chiers texte dont les caractres sont cods sur plusieurs octets. Dans ce cas on pourra utiliser loption -m (pour multibyte) pour compter le nombre de caractres et non doctets.

3.3.6

Tte--queue

Les commandes head et tail comme leur nom lindique, permettent dacher la tte ou la queue dun chier ou du ux dentre. Par exemple : $ head -n 2 fichier.dat Jimi Hendrix 1970 Jim Morrison 1971 $ ache les deux premires lignes de notre chier. Loption -c permet dacher les n premiers octets : $ head -c 7 fichier.dat Jimi He$ De manire analogue tail ache la n dun ux : $ tail -n 1 fichier.dat Janis Joplin 1969 $ Loption -c est galement disponible. La nuance avec la commande tail est quen utilisant un nombre de lignes n (ou doctets) commenant par +, tail ache les donnes partir de la ne ligne (ou ne caractre). Ainsi : $ tail -n +2 fichier.dat Jim Morrison 1971 Janis Joplin 1969 $ ache le chier fichier.dat partir de la deuxime ligne. Une autre utilisation de la commande tail est la surveillance dun chier qui grossit. En considrant quun chier data.log reoit rgulirement des donnes, on peut surveiller les dernires donnes en utilisant loption -f de tail : $ tail -f data.log 189 123 234 On interrompt lachage avec Ctrl
c

80

La bote outils

3.3.7

Utilitaires disques et chiers

Chercher Pour chercher un chier ou un rpertoire on peut utiliser la commande find. Cette commande est trs puissante et permet de chercher des chiers avec de trs nombreux critres (type de chier, nom, taille, permission, propritaires, date de modications, etc.). Chacun de ces critres peut tre combin par des ou ou des et . Nous ne vous proposerons ici que quelques exemples : $ find ~ -name core /home/equipe/lozano/LaTeX/test/core /home/equipe/lozano/LaTeX/these/core /home/equipe/lozano/LaTeX/these/src/core /home/equipe/lozano/src/pas/core /home/equipe/lozano/install/ummstdod/core $ Cette commande cherche les chiers dont le nom est core partir du rpertoire priv. $ find . -name "*.tex" ./guide-unix.tex $

Celle-ci trouve les chiers dont lextension est .tex partir du rpertoire courant. Et : $ find ~/cours -type d -a -name "po*" /home/equipe/lozano/cours/pov /home/equipe/lozano/cours/pov.bak /home/equipe/lozano/cours/images/pov-hof $ trouve tous les rpertoires dont le nom commence par po. Loption -a couple les critres par un et . Cette option est implicite et peut donc tre omise.
La commande find peut-tre particulirement coteuse lorsquon doit scanner toute larborescence. Cest pour cette raison que certains unix proposent la commande locate qui utilise un chier de donnes contenant lemplacement de tous les chiers sur le systme. Ce chier de donnes doit tre mis jour rgulirement (gnralement une ou deux fois par jour) par cron. Lavantage de cette mthode est bien entendu la rapidit de la recherche, linconvnient rside dans le fait que le chier de donnes nest pas jour en temps rel et ne contient pas dautres informations que les noms des chiers (et pas leur contenu).

Obtenir des informations La commande du donne la taille quoccupe un rpertoire ou un chier.

3.3 Les outils de base

81

$ du -b guide-unix.tex 71680 guide-unix.tex $ Loption -b ache en octets (byte). Si largument de cette commande est un rpertoire le calcul doccupation disque est fait rcursivement sur tous les chiers et sous-rpertoires : $ du -k ~/cours 590 /home/equipe/lozano/cours/unix 380 /home/equipe/lozano/cours/c++ 1755 /home/equipe/lozano/cours/images 7736 /home/equipe/lozano/cours/pov $ Loption -k est utilise ici pour acher en kilo-octets. On peut obtenir le total de chaque sous-rpertoire grce loption -s (summarize) : $ du -sh ~/cours 10M /home/equipe/lozano/cours $ La commande df donne le taux dencombrement des partitions relatives aux disques locaux et rseaux. Loption -h (human readable) de cette commande donne loccupation des partitions en mga-octets, giga-octets, etc. $ df -h Filesystem Size /dev/sda5 197M /dev/sda3 972M /dev/sda6 197M count:/export/home0 2.8G count:/export/home5 969M count:/export/softs 969M count:/export/home6 969M mailhost:/var/spool/mail 972M $ Archivage
Avertissement : cette section fera sans doute faire des bonds aux puristes qui diront juste titre que les seules commandes standardises par Posix sont pax et compress. Jai choisi ici de prsenter tar et gzip (et mme bzip2) car il sagit de commandes trs rpandues et galement parce que jai lhabitude de les utiliser !

Used Avail Use% Mounted on 56M 131M 30% /tmp 471M 450M 51% /usr 9.8M 177M 5% /var 1.7G 1015M 63% /mnt/count/home0 247M 672M 27% /mnt/count/home5 238M 681M 26% /mnt/count/softs 614M 305M 67% /mnt/count/home6 53M 869M 6% /var/spool/mail

Larchivage est une tche trs frquente lorsquon manipule des chiers. unix distingue deux oprations dans larchivage :

82

La bote outils

1. larchivage proprement dit qui consiste rassembler plusieurs chiers dans un seul, qui constitue larchive ; 2. la compression de larchive pour en optimiser la taille. Cette opration doit tre eectue sauf dans de rares cas o les chiers archivs sont dj compresss (tas de chiers Jpeg ou Pdf par exemple). La premire opration est ralise par la commande tar (tape archiver, utilise historiquement pour archiver sur bande magntique), la deuxime par gzip 2 . Nous donnerons ici un exemple trs classique darchivage : larchivage des chiers contenus dans un rpertoire : $ pwd /home/equipe/lozano/cours/unix $ cd .. $ tar cvf ~/transfert/unix.tar unix unix unix/arborescence.eps unix/arborescence.fig unix/flux.fig ... etc ...

cration de larchive

$ ls -l ~/transfert/unix.tar -rw-r----- 1 lozano equipe 768000 Dec 13 14:49 unix.tar $ gzip ~/transfert/unix.tar compression de larchive $ ls -l ~/transfert/unix.tar.gz -rw-r----- 1 lozano equipe 239039 Dec 13 14:49 unix.tar.gz $ Voici quelques explications : loption c de tar cre larchive (create) ; loption f prcise que larchive crer est un chier (le) (et non un enregistrement sur une bande magntique) ; loption v (verbose) permet dacher les chiers (et leur chemin) en cours darchivage ; le nom de larchive suit (unix.tar) puis le nom du rpertoire contenant les chiers archiver ; la commande gzip compresse larchive en la renommant avec le suxe .gz. Lopration de dsarchivage se droule en utilisant les commandes gzip et tar dans lordre inverse. Par exemple, pour dcompacter larchive prcdente dans le rpertoire ~/tmp :
2. gzip est devenu le standard de facto de compression sous unix ; malgr tout, on ne trouve sous certains systmes que la commande compress qui suit peu ou prou la mme syntaxe que gzip. Notons galement que gzip sera moyen terme probablement supplant par bzip2 qui permet dobtenir un meilleur taux de compression.

3.3 Les outils de base

83

$ cd ~/tmp $ gzip -d ~/transfert/unix.tar.gz dcompression $ tar xvf ~/transfert/unix.tar dcompactage unix/ unix/arborescence.eps unix/arborescence.fig unix/flux.fig ... etc ... $ ls unix Makefile Makefile~ patati.eps ... etc ... $

disques.fig ecoute.sh fichier.dat

groups.dat guide-unix.aux guide-unix.dvi

guide-unix.tex~ guide-unix.toc missfont.log

Notez loption -d de gzip pour dcompresser, et loption x de tar pour extraire (extract). La version gnu de tar permet dappeler gzip automatiquement grce loption z, ce qui permet de raliser larchivage et la compression sur la mme ligne de commande : $ tar xfz ~/transfert/unix.tar.gz $ On pourra galement appeler bzip2 pour les archives compresses avec cet utilitaire, grce loption j : $ tar xfj ~/transfert/unix.tar.bz2 $ Puisque nous avons vu les tubes, les puristes rtorqueront que mme sans la version gnu de tar il est possible de nutiliser quune seule ligne de commande ; ceci en tirant partie du fait que gzip et tar suivent le modle des trois ux : $ tar cf - unix | gzip -c > ~/transfert/unix.tar.gz $ Petites explications : le caractre - indique tar que larchive doit tre envoy sur le ux de sortie ; gzip compresse les donnes provenant du ux dentre et les envoie sur le ux de sortie grce loption -c ; le rsultat est redirig dans le chier ~/transfert/unix.tar.gz. La dcompression sur une ligne de commande peut tre faite comme suit : $ gzip -dc ~/transfert/unix.tar.gz | tar xvf -

84

La bote outils

3.4

Le shell en tant que langage

Jusqu maintenant nous avons vu le shell comme un interprteur de commandes qui se contente dexcuter les commandes quon lui passe. En ralit le shell est un langage de programmation assez volu permettant dautomatiser un grand nombre de tches quotidiennes. Le shell (et nous parlerons ici essentiellement du shell bash) dispose donc de variables, de tableaux, de structures de contrle (if, while, for), et galement de la notion de fonctions. Toutes ces fonctionnalits sont dtailles au chapitre 5. Nous vous prsenterons ici par le biais dune tude de cas deux fonctionnalits intressantes du shell : la substitution de commande et la boucle pour . Le problme est le suivant : suite une erreur lors dun transfert de chier, on a dans un rpertoire une liste de chiers dont les noms sont en majuscules. On veut transformer ces noms en minuscules. Lalgorithme que nous allons implmenter en langage de commande pourrait scrire :
Pour chaque fichier f dont lextension est JPG Faire

renommer f en minuscule

3.4.1

Afcher des informations avec printf

La commande printf est un grand classique quon retrouve dans plusieurs langages de programmation (C, Php pour ne citer que ceux-l). Lide de cette commande est de raliser un achage format (cest le f de printf). Cette commande remplace souvent avantageusement la commande echo bien plus limite. Pour ce qui est de son utilisation, printf attend une chane de format prcisant lallure de lachage, suivie dun nombre variable darguments. Par exemple : $ printf "%d est un nombre pseudo-al eatoire\n" $RANDOM 14234 est un nombre pseudo-al eatoire $ Ce premier exemple peut tre traduit en franais par : je souhaite acher un entier (%d) en base 10, suivi de la phrase est un nombre pseudo-alatoire , suivie dun saut de ligne (\n). Dans lexemple suivant la chane de format est suivie par 2 arguments : $ printf "En voici 2 autres : %d et %d\n" $RANDOM $RANDOM En voici 2 autres : 23943 et 83442 $ On comprend donc qu chaque %d contenu dans la chane de format doit correspondre un argument. printf reconnat un certain nombre de type de donnes, entre autres :

3.4 Le shell en tant que langage

85

%d pour acher un entier en base dcimale (on peut galement utiliser %o pour la base octale et %x pour la base hxadcimale) ; %f pour acher un nombre virgule ottante ; %s pour acher une chane ; Par ailleurs, chacun de ces types de donnes accepte un certain nombre de modicateurs. En voici quelques-uns : $ printf "==[%010d]==\n" $RANDOM ==[0000007052]== $ pour acher un entier sur 10 caractres combls avec des zros si ncessaire. $ printf "==[%-20s]==\n" $USER ==[lozano ]== $ pour une chane produite sur 20 caractres aligne gauche (signe - ). Dautres exemples devraient vous venir lesprit aprs avoir lu le fantastique manuel .

3.4.2

Substitution de commande

La substitution de commande est un mcanisme permettant dexploiter la sortie dune commande dans lappel dune autre commande. La syntaxe permettant de raliser la substitution est $(...). Pour comprendre comment cela se passe, soit la commande suivante, achant le nombre de ligne du chier fichier.dat : $ wc -l fichier.dat 3 fichier.dat $ On se dbarrasse pour lexemple du nom de chier : $ wc -l fichier.dat | cut -f1 -d 3 $ On peut galement sen dbarasser en utilisant une redirection : $ wc -l < fichier.dat 3 $ Si on voulait maintenant utiliser cette valeur dans une commande : $ echo Il y a $(wc -l < fichier.dat) musiciens Il y a 3 musiciens $

86

La bote outils

Ici, dans un premier lieu, ce qui se trouve entre les caractres $(...) est remplac par ce quache la commande wc -l ..., cest--dire 3, puis la commande echo ralise lachage. Avec printf on crira : $ printf Il y a %d musiciens "$(wc -l < fichier.dat)" $ Un autre exemple : sachant que la commande date ache la date sous un format que lon peut dnir : $ date +%h%d Dec15 $ Il est possible de sauvegarder un chier comme suit : $ cp source.cc source.cc.$(date +%h%d) $ La commande cp ci-dessus copie le chier source.cc en un chier dont le nom est source.cc. concatn avec ce que renvoie la commande date. $ ls source.cc* source.cc source.cc.Dec15 $
Il existe une autre syntaxe pour la substitution de commande. En lieu et place de la forme $(commande), certains vieux shells ne disposent que de la syntaxe utilisant le backquote () : commande Quon se le dise...

3.4.3

La structure for de bash

Le shell bash propose une structure de contrle nomme for que lon peut traduire par pour chaque , la syntaxe en est la suivante : for variable in liste ; do com1 ; com2 ; ... ; done On peut donc crire quelque chose de la forme : $ for F in *.fig ; do echo "$F.tmp" ; done arborescence.fig.tmp disques.fig.tmp flux.fig.tmp pipes.fig.tmp $ On ache ici, pour F prenant les valeurs de lexpansion de *.fig, la variable F suivie de la chane .tmp, ce qui a, je vous laccorde, peu dintrt.

3.4 Le shell en tant que langage

87

Notez ici les guillemets dans la syntaxe echo "$F.tmp" qui a pour but de ne pas considrer $F.tmp comme une liste si jamais il existe un chier dont le nom contient un espace.

On peut imaginer un autre exemple, qui utilise lexpansion de commande : $ for F in $(find . -name *.jpg) ; do xzgv "$F" & ; done $ qui lance xzgv (un visualiseur dimage) en tche de fond, pour chaque chier portant lextension jpg dans le rpertoire courant et ses sous-rpertoires.
Lexemple ci-dessus possde une limitation : il ne fonctionne pas si le nom des chiers portant lextension jpg contient un espace (ou un saut de ligne, ce qui est plutt rare...). Nous vous renvoyons au paragraphe sur la variable IFS pour pallier ce problme.

3.4.4

Revenons nos moutons

Nos moutons , cest notre problme de transformation de noms de chiers majuscules en minuscules. La commande tr (translate) a la capacit de transformer une chane de caractres : $ echo SALUT | tr A-Z a-z salut $ Donc pour renommer nos chiers on peut imaginer la commande suivante, qui rassemble les concepts vus dans ce paragraphe : $ for F in $(find . -name *JPG) ; do Entre et?> mv "$F" "$(echo $F | tr A-Z a-z)"; done $ Ce qui peut se traduire en franais par : tous les chiers nissant par JPG doivent tre renomms en utilisant le rsultat de lachage du nom original ltr par tr (cest--dire en minuscule).
Cette commande prsente linconvnient de ne pas fonctionner si les images JPG en question se trouvent dans des sous-rpertoires dont les noms contiennent des majuscules. Elle possde en outre les mmes limitations que lexemple prcdent (noms de chier contenant un espace ou un saut de ligne). Par ailleurs, il est bon de savoir que ce genre de tches (copie/dplacement de chiers en salve) peut tre ralis de manire sre (en limitant les risques dcrasement de chiers) grce lutilitaire mmv disponible dans toutes les bonnes crmeries. Dans la commande prcdente, lutilisateur a appuy sur la touche Entre avant que la commande find ne soit complte. Le shell ache alors un autre prompt qui se distingue du prompt habituel, pour informer lutilisateur que la commande est incomplte.

88

La bote outils

La manire dacher ce prompt est dnie par la variable PS2. Dans la suite de ce document nous nindiquerons plus la pression sur la touche Entre dans les exemples.

3.5 grep et la notion dexpressions rgulires


La commande grep est une commande clbre dunix et permet dacher les lignes dun ux correspondant un motif donn. Par exemple : $ grep Hendrix fichier.dat Jimi Hendrix 1970 $ ou : $ grep Jim fichier.dat Jimi Hendrix 1970 Jim Morrison 1971 $ Les motifs en question (Hendrix et Jim) dans les deux exemples prcdents se nomment en jargon unix 3 une expression rgulire (ou une expression rationnelle 4 ) (regular expression parfois abrg en regexp ). Ltude de la thorie des expressions rgulires pourrait faire lobjet dun document de la taille de ce guide de survie. Voici cependant sous forme dun tableau quoi correspondent quelques-uns des motifs dune expression rgulire. . * ? + ^ $ [abc] [^abc] {n} {n,m} dsigne nimporte quel caractre zro ou plusieurs fois llment prcdent zro ou une fois llment prcdent une ou plusieurs fois llment prcdent correspond au dbut de la ligne correspond la n de la ligne un caractre parmi abc tout caractre sauf a, b ou c exactement n fois llment prcdent au moins n fois et au plus m fois llment prcdent 5 . B B E E B B B B E E

La version de grep utilise pour lexemple est celle de chez gnu. Cette commande comprend trois ensembles dexpressions rgulires (basique, tendue et Perl). Dans le tableau prcdent les deux premiers ensembles sont indiqus respectivement par B et E dans la colonne de droite.
3. Et plus gnralement dans le domaine de ltude des langages informatiques. 4. Jutilise pour ma part la premire forme, ne pas taper svp... 5. Dans cette expression, n ou m peuvent tre omis.

3.5 grep et la notion dexpressions rgulires

89

Voyons quelles sont les applications de ces motifs. La commande : $ grep 197.$ fichier.dat Jimi Hendrix 1970 Jim Morrison 1971 $ rcupre les lignes nissant par la chane 197 suivie dun caractre quel quil soit.
Notez quil est sage de quoter (entourer par des apostrophes) le motif car beaucoup de caractres composant les expressions rgulires sont des caractres spciaux pour le shell.

La commande : $ grep ^Ji fichier.dat Jimi Hendrix 1970 Jim Morrison 1971 $ rcupre les lignes commenant par la chane Ji . La commande : $ grep ^J.*1970 fichier.dat Jimi Hendrix 1970 $ rcupre les lignes commenant par J et contenant 1970 . La commande : $ grep -E Jimi? fichier.dat Jimi Hendrix 1970 Jim Morrison 1971 $ rcupre les lignes contenant Jimi ou Jim . Il est ici ncessaire dutiliser loption -E (extended regexp) pour pouvoir utiliser le caractre ?. Parmi les options intressantes de grep, en voici trois : loption -w (word) permet de restreindre le rsultat de la correspondance un mot entier : $ grep Jim fichier.dat Jimi Hendrix 1970 Jim Morrison 1971 $ mais : $ grep -w Jim fichier.dat Jim Morrison 1971 $

90

La bote outils

Pour le Gnu grep qui dispose de loption -w, un mot est dni comme un ensemble de caractres parmi les lettres, les chires et le caractre soulign _ (underscore).

loption -i (ignore case) permet dignorer la casse (minuscule ou majuscule) dans la correspondance avec le motif : $ grep -i jimi fichier.dat Jimi Hendrix 1970 $ loption -v (revert match) inverse le sens de la correspondance et nache que les lignes qui ne correspondent pas lexpression rgulire : $ grep -vi jim fichier.dat Janis Joplin 1969 $ La commande grep a t utilise pour les exemples avec un chier comme argument, mais elle peut bien videmment faire la correspondance sur son ux dentre et tre compose avec des tubes. Par exemple, la commande : $ ps -ef lozano lozano lozano lozano ... $ | grep ^lozano 11396 1 0 14:53 11398 11396 0 14:53 11512 11398 0 14:58 11513 11398 0 14:58 ? pts/2 pts/2 pts/2 00:00:00 00:00:00 00:00:00 00:00:00 xterm -ls -bash ps -ef grep lozano

ltre le rsultat de la commande ps en ne renvoyant que les lignes commenant par la chane lozano. Ce qui permet davoir la liste des processus dont lozano est le propritaire. Notez enn que la commande ps -fu lozano aurait donn un rsultat identique...

3.6 awk
On peut voir awk 6 comme un ltre permettant deectuer des modications sur les lignes dun ux ; ces lignes tant slectionnes par lintermdiaire dune expression rgulire (dans le mme esprit que grep) ou dune condition quelconque. Cependant awk dispose dun langage de programmation spcial (dont la syntaxe pourrait se rapprocher de celle du C) permettant de manipuler et modier les lignes slectionnes comme un ensemble de champs ( linstar de cut). La syntaxe gnrale dun programme awk est une suite de rgles dnies comme un couple de motifs et dactions : les motifs permettent de slectionner des lignes dans le ux et sont :
6. Du nom de ses auteurs initiaux en 1977, Alfred V. Aho, Peter J. Weinberger, and Brian W. Kernighan

3.6 awk

91

soit des expressions rgulires et doivent tre dlimits par des / (par exemple /abc/) ; soit des expressions simples (galit, ingalit,...) ; les actions sont excutes pour chaque motif et sont dlimites par des { et } (comme par exemple dans lexpression {print "bonjour\n"}). Ces caractres ayant une signication particulire pour le shell, il faut les protger par des cotes . Voici un petit programme awk : $ awk {print $1,$3} fichier.dat Jimi 1970 Jim 1971 Janis 1969 $ Dans cet exemple, on slectionne toutes les lignes (pas de motif spci) et on ache les champs numro 1 ($1) et 3 ($3) correspondant aux prnoms et dates de chacune de ces lignes. awk dlimite les champs par un nombre quelconque despaces ou tabulations 7 . On peut utiliser une expression rgulire comme ceci : $ awk /^Jim/{print $1,$3} fichier.dat Jimi 1970 Jim 1971 $ o lexpression rgulire Jim spcie ligne commenant par Jim . Voici un autre exemple : $ awk $3==1970{print "En "$3" "$2"..."} fichier.dat En 1970 Hendrix... $ Ici on a slectionn les lignes laide dune expression simple : un test dgalit sur le 3e champ. On peut en outre eectuer un appariement de motif uniquement sur un champ particulier, grce loprateur ~ de awk : $ awk $2 ~ /lin$/ {print "Cette ch` ere "$1"..."} fichier.dat Cette ch` ere Janis... $ Loprateur ~ permet en eet de ltrer le ux avec une correspondance sur un champ (ici le 2e doit nir par lin ). On peut utiliser des variables en leur donnant un nom. Leur manipulation (aectation, comparaison,...) sapparente celle du langage C. On peut par exemple faire la moyenne des annes comme suit : $ awk {s+=$3} END{print "moyenne : "s/NR} fichier.dat
7. Comportement qui peut tre chang par loption -F.

92

La bote outils

moyenne : 1970 $ on a ajout pour chaque ligne la valeur du 3e champ la variable s. Et dans la clause END (qui nest excute qu la n), on divise par NR le nombre denregistrements (lignes) du ux (number of record). La commande print peut galement tre remplace par la commande printf. awk dispose dun langage complet, possdant des structures de contrle (boucle for, boucle while, if,...), un ensemble doutils pour le traitement des chanes de caractres, ainsi que des fonctions mathmatiques (racine carr, log, fonctions trigonomtriques, etc.).

3.7 sed
sed (pour stream editor) est, comme son nom lindique, un diteur de ux. Il permet de faire des transformations sur des chanes de caractres. Nous donnerons un exemple simple qui consiste remplacer une chane de caractres dans un chier. La syntaxe est alors : sed s/recherche/remplace/ chier ou

sed s/recherche/remplace/ < chier o recherche est la chane recherche et remplace la chane qui servira de remplacement. Par exemple, pour changer le nom dune variable dans un source C : $ sed s/iterateur/compteur/g < fichier.c > nouveau.c $ Ici sed lit le contenu de fichier.c et ralise le remplacement (commande s pour substitute) de la chane iterateur par la chane compteur . La commande g (global) assure que la chane sera remplace plusieurs fois par ligne le cas chant. Enn notons que, comme awk, sed renvoie son rsultat sur le ux de sortie. En imaginant que lon veuille faire la mme opration sur plusieurs chiers, on peut utiliser la commande for vue prcdemment : $ for F in *.c ; do et?> sed s/iterateur/compteur/g < "$F" > tmp && et?> mv -f tmp "$F"; done $ La commande s de sed dispose galement de registres qui permettent de rutiliser des parties de la chane qui correspondent aux motifs spcis. Considrons lexemple suivant : partir de notre clbre chier fichier.dat contenant :

3.7 sed

93

fichier.dat Jimi Hendrix 1970 Jim Morrison 1971 Janis Joplin 1969 on veut construire la liste : Hen1970 Mor1971 Jop1969 Soit lexpression rgulire suivante : ^[A-Za-z]* [A-Z][a-z]{2}[a-z]* [0-9]{4} cette expression est capable de reconnatre : un dbut de ligne suivi dune suite de caractres en minuscules ou en majuscules ([A-Za-z]*) ; suivie dun espace ; suivi dune majuscule (([A-Z]), suivie de deux minuscules ([a-z]{2}), suivies dun nombre quelconque de lettres en minuscules ([a-z]*) ; suivi dun espace ; suivi dexactement quatre chires ([0-9]{4}). De manire utiliser cette expression avec sed, il est ncessaire dutiliser loption -r forant lutilisation des expressions rgulires tendues (extended regexp) : $ sed -r s/^[A-Za-z]* [A-Z][a-z]{2}[a-z]* [0-9]{4}/xxx/ fichier.dat xxx xxx xxx $ Toutes les lignes correspondent lexpression rgulire, elles sont donc remplaces par xxx . De manire rutiliser des parties de lexpression rgulire dans le remplacement, on les dlimite par les caractres ( et ), les registres ainsi forms sont nomms \1, \2, etc. Dans notre exemple nous allons rcuprer les trois premires lettres du nom et lanne : $ sed -r s/^[A-Za-z]* ([A-Z][a-z]{2})[a-z]* ([0-9]{4})/\1\2/ \ fichier.dat Hen1970 Mor1971 Jop1969 $ Notez la position des couples de caractres ( et ). Le registre \1 contient le nom, et le registre \2 contient lanne.

94

La bote outils

Sans la version gnu de sed qui propose loption -r, on doit utiliser les caractres \( et \) pour dlimiter les motifs rutiliser. Dautre part on utilise lexpression rgulire pour prciser quun motif est rpt n fois doit tre \{n\} et non {n}. Ce qui donne : ^[A-Za-z]* \([A-Z][a-z]\{2\}\)[a-z]* \([0-9]\{4\}\) pour la partie gauche de la commande s...

Notons, juste pour rire, que la solution ce problme en utilisant awk est la suivante : $ awk {print substr($2,0,3)$3} fichier.dat Hen1970 Mor1971 Jop1969 $ Mais gardons lesprit que cet exemple vise surtout illustrer la puissance des expressions rgulires.

3.8

tudes de cas

Nous vous prsentons dans cette section trois tudes de cas mettant en application la plupart des outils standard dunix.

3.8.1

Manipuler la liste des utilisateurs

Sur un systme unix, on peut obtenir la liste des utilisateurs potentiels du systme grce la commande getent passwd 8 . Cette commande renvoie le chier contenant les caractristiques de chaque utilisateur : $ getent passwd merle_g:x:1321:1300:MERLE Gerard/home/4annee/merle_g:/bin/tcsh talji_y:x:966:900:TALJI Yacine:/home/1/talji_y:/bin/tcsh maurin_r:x:945:900:MAURIN Raphaelle:/home/1/maurin_r:/bin/tcsh sergen_c:x:1415:1400:SERGENT Chris:/home/5/sergen_c:/bin/tcsh arnaud_l:x:1416:1400:ARNAUD Lionel:/home/5/arnaud_l:/bin/tcsh lepeti_c:x:1408:1400:LEPETIT Claire:/home/5/lepeti_c:/bin/tcsh ... etc ... $ Le ux renvoy a la structure suivante, de gauche droite : le login_name de lutilisateur ;
8. Sur votre systme il peut sagir dune autre commande...

3.8 tudes de cas

95

un x pour le champ mot de passe ; le numro (uid pour user identier) de lutilisateur ; le numro (gid pour group identier) du groupe de lutilisateur ; son nom en clair ; son rpertoire racine ; son shell de connexion. On peut noter que ces champs sont spars par des : . Le nombre dutilisateurs potentiels est donc le nombre de lignes renvoyes par la commande getent : $ getent passwd | wc -l 277 $ Pour obtenir la liste des utilisateurs dont le groupe principal est un groupe particulier, par exemple le groupe numro 1300, on peut agir comme suit : $ getent passwd | grep -w 1300 | cut -d: -f5 MERLE Geraldine ESCOFFIER Carole GACON-LOCATELLI Anne BOYAUD Xavier SIGUIER Vincent LASNIER Christophe PEROCHE Jerome ... etc ... $ on fait une recherche de toutes les lignes contenant la chane 1300 (ce qui nest pas exactement ce que lon cherche, je vous laccorde, mais lisez la suite), et pour ces lignes, on ache le 5e champ (en prcisant que le sparateur est : ). Pour classer par ordre alphabtique, il sut de rajouter un tube avec sort : $ getent passwd | grep -w 1300 | cut -d: -f5 | sort ALBERT-GONDRAND Johanne BARNEOUD Julien BAROQUE Philippe ARTOS Romain ... $ Enn si on voulait acher le rsultat sous la forme prnom-nom, on pourrait rajouter un petit awk : $ getent passwd | grep 1300 | cut -d: -f5 | sort | et?> awk {print $2" "$1} Johanne ALBERT-GONDRAND Julien BARNEOUD

96

La bote outils

Philippe BAROQUE Romain BARTOS ... $


Les lecteurs attentifs auront sans doute not que le ltre grep 1300 pourra slectionner une ligne contenant la chane 1300, mme sil ne sagit pas du numro de groupe. Pour remdier ce problme on pourrait utiliser la place du grep 1300 : gawk -F: $4==1300{print $5} qui aurait tout de mme quelque peu surcharg notre exemple vocation pdagogique (loption F indique awk le sparateur de champ des donnes en entre, la variable OFS pour output eld separator )...

3.8.2

Envoyer des mails

Pour faire ce quon appelle du mailing (envoyer le mme message plusieurs utilisateurs), on peut crer deux chiers : destinataires contenant les adresses lectroniques des destinataires, et : message contenant le message envoyer. On peut crer destinataires manuellement ; on peut galement le crer automatiquement, par exemple les destinataires groupe 1300 pourraient tre construits comme suit : $ getent passwd | awk -F: $4 == 1300 { print $1 } > destinataires $ Lenvoi des messages est ralis grce une boucle for : $ for U in $(cat destinataires); do\ et?> mail -s "salut" $U < messages et?> done $ Si la commande mail de votre systme est capable denvoyer des messages plusieurs utilisateurs la fois, vous pourriez galement crire : $ mail -s "salut" $(getent passwd | awk -F: $4 == 1300{print $1}) $

3.8.3

Estimer loccupation de certains chiers

Pour estimer la taille dun certain type de chier (comme les images, les chiers PostScript, ...) on peut procder comme suit : tout dabord rechercher ces chiers avec la commande find :

3.8 tudes de cas

97

$ find ~/ -name "*.ps" /home/equipe/lozano/LaTeX/test/test.ps /home/equipe/lozano/LaTeX/local/local.ps /home/equipe/lozano/LaTeX/local/local.2up.ps ... $ qui donne la liste de tous les chiers PostScript (extension ps) dans la zone de lutilisateur. La version gnu de find permet galement dacher les caractristiques des chiers lists grce une option tout fait analogue au printf du C : $ find ~/ -name "*.ps" -printf "%p %k\n" /home/equipe/lozano/LaTeX/test/test.ps 6 /home/equipe/lozano/LaTeX/local/local.ps 1850 /home/equipe/lozano/LaTeX/local/local.2up.ps 1880 ... $ la chane de format du printf utilise %p pour le nom du chier, et %k pour sa taille arrondie en kilo-octets (voir laide de la commande find). Grce un tube avec awk on peut acher les chiers dont la taille est suprieure 1 mga-octet : $ find ~/ -name "*.ps" -printf "%p %k\n" | et?> awk $2 > 1024 {print $1" "$2} /home/equipe/lozano/LaTeX/local/local.ps 1850 /home/equipe/lozano/LaTeX/local/local.2up.ps 1881 /home/equipe/lozano/LaTeX/util/local.ps 1855 /home/equipe/lozano/install/lettre/doc/letdoc2.ps 1385 ... $ On peut galement obtenir la taille totale de ces chiers : $ find ~/ -name "*.ps" -printf "%k\n" | et?> awk {taille+=$1}END{print taille} 52202 $ Pour nir si on voulait eacer tous ces chiers, ou seulement ceux dont la taille est suprieure un seuil donn, il surait de procder comme suit : $ find ~/ -name "*.ps" | xargs rm -f $ Sans argument particulier, find ache la liste des chiers rpondant au critre. La commande xargs passe en argument de la commande qui la suit (ici rm -f) le ux quelle reoit en entre. Donc ici on va excuter rm -f avec comme argument tous les chiers renvoys par la commande find.

98

La bote outils

Voici un autre exemple dutilisation de la commande xargs : supposons quon veuille chercher dans quel chier include (les chiers entte du langage C) est dni lappel systme gethostbyname 9 . Pour ce faire on va chercher tous les chiers dont lextension est .h du rpertoire /usr/include et de ses sous-rpertoires : $ find /usr/include -name "*.h" /usr/include/utempter.h /usr/include/apm.h /usr/include/ansidecl.h /usr/include/bfd.h ... $ Pour lensemble de ces chiers on va utiliser grep pour chercher la chane de caractres gethostbyname : $ find /usr/include -name "*.h" | xargs grep -w gethostbyname /usr/include/netdb.h:extern struct hostent *gethostbyname __P ((__const char *__name)); /usr/include/tcpd.h:#define gethostbyname fix_gethostbyname $ Cette ide peut tre utilise pour chercher une chane dans un ensemble de chiers. Un autre forme juste pour conrmer lpigraphe de la prface :

$ grep --include=*.h -rw gethostbyname /usr/include $ demande grep de faire une recherche rcursive (-r) dans le rpertoire spci en dernier argument (/usr/include/) en nexaminant que les chiers dont le nom nit par .h (ceci est une exclusivit gnu)...

Conclusion
Vous tes maintenant arms pour tudier les chapitres suivants respectivement consacrs la communication via le rseau, au dveloppement de programmes et la conguration de son environnement. Le chapitre traitant du dveloppement inclut une partie non ngligeable prsentant le shell en tant que langage de programmation en mode non interactif. De manire gnrale le prsent chapitre donne un aperu de la philosophie dunix et doit vous permettre dapprhender dirents outils et logiciels que vous serez susceptible de rencontrer.

9. Encore un exemple farfelu lorsquon sait que man gethostbyname donne linformation recherche.

Sommaire 4.1 4.2 4.3 4.4 4.5 Concepts connatre Quatre grands classiques Outils de communication dUnix Courrier lectronique Le oube

Chapitre

4
Communiquer !
Report bugs to bug-gro@prep.ai.mit.edu. Include a complete, self-contained example that will allow the bug to be reproduced, and say which version of gro you are using. Extrait du manuel de gro.

e protocole rseau TCP/IP a t intgr au dbut des annes 80, dans la L branche BSD dunix. On trouve donc parmi les utilitaires standard des outils axs sur la communication entre utilisateurs, le transfert de chiers, laccs des machines

distantes, etc. Ce chapitre propose tout dabord un aperu du concept dadresse IP et du systme de nommage des machines sur Internet (DNS). Il prsente ensuite les outils classiques de communication que sont ftp, telnet, rlogin et ssh. Aprs que les outils rseaux propres unix ont t passs en revue, le chapitre est clos par la prsentation des utilitaires de base pour envoyer des mails et pour accder des ressources localises sur le Web.

99

100

Communiquer !

4.1

Concepts connatre

Pour comprendre de quoi il est question dans ce chapitre, il est ncessaire de connatre quelques concepts lis la technologie dun rseau.

4.1.1

Notion dadresse IP

Ladresse IP (pour Internet Protocol ) est un ensemble de quatre nombres destin identier de manire univoque une machine sur un rseau local et sur Internet. Cette adresse se compose de quatre octets de la forme : xxx.yyy.zzz.ttt Par exemple : 172.30.4.78 est une adresse IP. On peut donc potentiellement rfrencer 256 256 256 256 = 2564 = 4294967296 soit plus de quatre milliards de machines 1 .
Aujourdhui les rseaux utilisent IP version 4 pour laquelle les adresses sont codes sur 4 octets comme expliqu ci-dessus. Cependant, bien que quatre milliards dadresses peuvent paratre susants pour identier chacune des machines, on arrive aujourdhui une pnurie. Cest la principale raison pour laquelle le protocole IP dispose aujourdhui dune version 6 dans laquelle les adresses sont codes sur 16 octets. On peut donc adresser : 25616 = 340282366920938463463374607431768211456 machines.

4.1.2

Notion de DNS

De manire viter aux utilisateurs dun rseau de se souvenir des adresses IP des machines, un systme de nommage a t mis en place depuis presque vingt ans. Ce systme sappelle le Domain Name System ou DNS. Il utilise un protocole qui assure la traduction dune adresse IP en un nom de machine (ftp.lip6.fr par exemple) et inversement. Le protocole repose sur les ides suivantes : les machines du rseau sont regroupes en domaine ; ces domaines sont organiss en arborescence ; chaque sous-domaine est gr par un serveur responsable des machines quil contient. On est donc en prsence dune base de donnes dcentralise ; un systme de cache est utilis pour limiter le trac rseau. Le domaine racine est not . ; le point sert galement de sparateur de sousdomaine ( linstar du / pour les rpertoires). Sous le domaine racine existe un certain nombre de sous-domaines : un domaine pour chaque pays, par exemple fr pour la France, de pour lAllemagne, es pour lEspagne, etc.
1. En ralit une partie des ces adresses sont dites prives cest--dire quelles sont rserves un usage interne et ne sont donc pas visibles de lextrieur.

4.1 Concepts connatre

101

le domaine org pour les organisations but non lucratif (par exemple le clbre www.gnu.org) ; le domaine edu regroupant initialement les universits amricaines (par exemple, le serveur web de luniversit de Chicago est www.uchicago.edu) ; le domaine net regroupant les machines dont le contenu est ax sur le rseau ; le domaine com destin hberger les sites dont le but est de vous faire acheter des marchandises virtuelles ou non 2 ; ... Chacun de ces domaines peut ensuite contenir des sous-domaines, pouvant galement contenir des sous-domaines, etc. Lensemble forme donc une arborescence dont la racine est le domaine . , chaque nud est un sous-domaine, et chaque feuille est une machine 3 ayant une adresse IP donne. Par exemple, sur la gure 4.1, la machine
. org gnu www ftp zeuhl mekanik freejazz fr lip6 ftp

dolphy

ayler

Figure 4.1 Arborescence de domaine DNS. ayler appartient au domaine freejazz, lui-mme sous-domaine du domaine fr. Lors dune requte de connexion sur une machine un systme complexe dinterrogation de larborescence des serveurs de noms permet dobtenir la traduction dun nom vers une adresse IP et inversement (pour les lecteurs intresss se rfrer au manuel de Albitz et Liu (1998)).

4.1.3

Quelques utilitaires rseau

Suivant les droits que vous auront donns le ou les administrateurs du site sur lequel vous travaillez, vous aurez la possibilit dobtenir des informations ayant trait aux adresses et aux noms des machines qui vous entourent.
2. Que penser alors dun slogan dune clbre compagnie de tlphone franaise qui disait il y a quelques annes : bienvenue dans un monde .com ? 3. Ou plus rigoureusement linterface dune machine.

102

Communiquer !

ping La commande ping permet, laide dun protocole particulier 4 , dobtenir un cho dune machine distante, et ainsi de savoir si elle est susceptible de pouvoir changer des informations avec la vtre. Sa syntaxe est la suivante : ping machine_distante Par exemple $ ping ftp.lip6.fr ftp.lip6.fr is alive $ host host permet dobtenir ladresse IP dune machine daprs son nom et inversement. La syntaxe est : host nom_machine ou adr_IP_machine Par exemple pour la rsolution directe : $ host ayler.freejazz.fr ayler.freejazz.fr has address 145.23.6.5 $ Et pour la rsolution inverse : $ host 145.23.6.5 5.6.23.145. IN-ADDR.ARPA domain name pointer ayler.freejazz.fr $
On trouvera dans les commandes nslookup et dig des fonctionnalits plus volues. La dernire est plus simple dutilisation que la premire et permet une meilleure intgration dans les scripts shell.

traceroute traceroute est un utilitaire permettant dobtenir la liste des machines relais (passerelles) qui interviennent sur le trajet des informations qui transitent de votre machine vers une machine distante. Sa syntaxe est : traceroute machine_distante
4. Le protocole ICMP pour Internet Control Message Protocol.

4.1 Concepts connatre

103

Par exemple : $ traceroute www.mekanik.org 1 ghost-lan (182.16.1.254) 1.15 ms * 0.91 ms 2 cisco (183.40.200.65) 2.96 ms 2.90 ms 2.85 ms 3 all.jazz.net (183.38.56.245) 152.64 ms 21.48 ms 21.20 ms 4 jazz.net (183.38.56.105) 25.12 ms 103.28 ms 247.98 ms 5 jazz.net (183.38.56.105) 78.73 ms 25.23 ms 149.62 ms 6 musik.fr (185.230.88.13) 192.93 ms 25.23 ms 149.62 ms 7 intercon.musik.fr (124.57.254.123) 364.57 ms * 56.35 ms 8 all.mekanik.org (185.83.118.1) 144.20 ms 75.32 ms * 9 www.mekanik.org (185.83.118.1) 52.02 ms 45.06 ms 49.07 ms $ nslookup et dig La commande nslookup permet dinterroger un serveur de nom de manire plus souple que la commande host. Un exemple succinct de session avec nslookup serait : $ nslookup Default Server: dolphy.freejazz.fr serveur de nom utilis Address: 145.23.65.13 > ayler qui est ayler ? Default Server: dolphy.freejazz.fr Address: 145.23.65.13 Name: ayler.freejazz.fr Address: 145.23.65.57 $ Un aspect de nslookup qui peut tre utile est quon peut obtenir la liste des machines qui soccupent du courrier pour un domaine donn : > set query=MX > zeuhl.org demande dinfo sur un domaine Default Server: dolphy.freejazz.fr Address: 145.23.65.13 Non-authoritative answer: zeuhl.org mail exchanger = zain.zeuhl.org Authoritative answers can be found from: zeuhl.org nameserver = wortz.zeuhl.org wortz.zeuhl.org internet address = 185.83.118.2 $

104

Communiquer !

Ici on demande nslookup de renvoyer des informations concernant le mail exchanger (MX). La rponse illustre le fait que le DNS utilise un systme de cache : il y a en eet une rponse qui ne fait pas autorit (non authoritative), celle de dolphy, qui est dans le cache du serveur du domaine local. Il est dautre part mentionn que lon peut avoir une rponse qui fait autorit (cest--dire digne de conance) en utilisant expressment le serveur de nom du domaine zeuhl.org dont ladresse est indique. Le mme type de requtes peut tre eectu laide de la commande dig. Par exemple : $ dig dolphy.freejazz.fr [...snipsnip...] ;; ANSWER SECTION: nephtys.lip6.fr. 21184 IN A ;; Query time: 42 msec ;; SERVER: 212.27.53.252#53(212.27.53.252) [...snipsnip] $ $ dig +short dolpy.freejazz.fr 145.23.65.13 $ La rsolution inverse se fait laide de loption -x : $ dig +short -x 185.83.118.2 wortz.zeuhl.org $

195.83.118.1

Pour rendre dig moins bavarde on peut utiliser loption +short :

4.2

Quatre grands classiques

Comme toutes les applications rseau, les quatre grands classiques que nous prsentons dans cette section (ftp, telnet, rlogin et ssh) utilisent des protocoles dchange de donnes entre deux machines distantes, bass sur larchitecture suivante : le client est un programme tournant sur la machine locale. Cest lutilitaire manipul par lutilisateur lui permettant deectuer des transferts de donnes ; le serveur est un programme qui tourne sur la machine distante dont lexistence est gnralement ignore par lutilisateur.

4.2.1

ftp

ftp (le transfert protocol ) permet dchanger des chiers entre deux machines du rseau. Lapplication cliente permet de se connecter sur la machine distante et

4.2 Quatre grands classiques

105

dy dposer (upload ) ou dy rcuprer (download ) des chiers. Il existe des clients graphiques pour eectuer les transferts, nanmoins il est bon de connatre linterface basique qui est une interface texte. Sa syntaxe est la suivante : ftp machine_distante Supposons quon dispose dun compte ftp dont le login est albert avec un mot de passe donn : $ ftp ayler.freejazz.fr Connected to ayler.freejazz.fr 220- Salut gar con ! Name (albert.freejazz.fr:stundher): albert saisie du login 331 Password required for ayler. Password: saisie du mot de passe 230 User albert logged in. Remote system type is UNIX. Using binary mode to transfer files. $
Dans lchange entre le client et le serveur on notera qu chaque requte le serveur rpond avec un code dni par le protocole (220 : serveur prt pour un nouvel utilisateur, 331 : utilisateur ok, mot de passe ncessaire, 230 : utilisateur connect, etc.)

Une fois connect on peut se dplacer dans larborescence du serveur avec des commandes analogues celle dun shell unix (cd, ls, pwd, etc. 5 ) : ftp> cd transfert changement de rpertoire 250 CWD command successful. ftp> dir liste de ce rpertoire 200 PORT command successful. 150 Opening ASCII mode data connection for directory listing. -rw-r----1 208 200 20241 Nov 20 2000 data.gz -rw-r----1 208 200 2946 Apr 5 2000 data.txt 226 Transfer complete. $ Le transfert de chier peut se faire dans deux modes : ascii utilis pour transfrer des chiers texte (ne contenant que des caractres Ascii) ; attention cest gnralement le mode par dfaut des clients ftp en ligne de commande ; binaire utilis pour transfrer tout autre type de chier, dans le doute on utilisera ce mode.
5. Faire help pour avoir la liste des commandes disponibles.

106

Communiquer !

Les deux modes de transfert (binaire ou Ascii) permettent de transfrer correctement un chier texte unix vers un systme Windows ou MacOs, et inversement. En eet, sur ces trois familles de systme (unix, MacOs et Windows) le caractre de saut de ligne est cod diremment : le caractre 13 pour unix, le caractre 10 pour MacOs, et le couple 13 et 10 pour Windows. Le mode Ascii tient compte de ces dirences, tandis que le mode binaire rcupre chacun des octets sans traitement particulier.

On peut donc transfrer un chier en mode ascii comme suit : ftp> get data.txt rcupration du chier data.txt local: data.txt remote: data.txt 150 Opening ASCII mode connection for data.txt (2946 bytes). 226 Transfer complete. 2946 bytes received in 2.9 seconds (0.98 Kbytes/s) $ ou en mode binaire : ftp> bin passage en mode binaire 200 Type set to I. ftp> get data.gz local: data.gz remote: data.gz 200 PORT command successful. 150 Opening BINARY mode connection for data.gz (20241 bytes) 226 Transfer complete. 20241 bytes received in 8.4 seconds (2.35 Kbytes/s) $ On peut alors mettre poliment 6 n la connexion :

ftp> bye 221 Goodbye. $ Les clients ftp disposent gnralement des commandes suivantes : mget hash ... Notez enn que toutes ces commandes peuvent tre abrges (e.g. prom la place de prompt).
6. Certains serveurs peuvent dailleurs vous reprocher votre manque de politesse, si vous utilisez une autre commande...

: pour rcuprer plusieurs chiers en mme temps ; : ache un # tous les kilo-octets pour indiquer lavancement du transfert ;

prompt : dsactive les conrmations demandes lutilisateur lors dun mget ; !cmd : excute cmd sur la machine locale ;

4.2 Quatre grands classiques

107

Il est courant que des serveurs proposent des chiers de manire publique. On appelle souvent ces serveurs des serveurs ftp anonymes , car il nest pas ncessaire davoir un compte pour se connecter sur ces machines. Tous les serveurs distribuant des logiciels libres proposent un accs anonyme. Dans ce cas : le login est : ftp ou anonymous le mot de passe : votre adresse lectronique de manire ce que ladministrateur du site puisse faire des statistiques.

4.2.2

telnet et rlogin

telnet et rlogin sont galement des protocoles client/serveur et proposent un service de connexion pour utiliser les ressources (processeurs, mmoire, disque, etc.) dune machine distante. Cette dernire doit excuter un serveur telnet ou rlogin pour pouvoir proposer le service. Une session se prsente alors sous cette forme : $ telnet mekanik.zeuhl.org nom de la machine distante Trying 123.45.67.89... Connected to mekanik.zeuhl.org (123.45.67.89). Escape character is ^]. Green Hat Linux release 16.0 (Klimt) Kernel 5.2.5-15smp on an i986 login: stundehr passwd: saisie du mot de passe mekanik:~> prompt de la machine distante Notez quil faut bien sr avoir un compte utilisateur sur la machine distante. Une fois connect on dispose dun terminal excutant un shell particulier ; on peut donc passer des commandes au systme distant. Pour eectuer des connexions en mode graphique on se reportera au paragraphe 6.4.4. rlogin fonctionne de manire identique telnet la dirence prs quil considre que par dfaut le login sur la machine distante est le mme que celui de la machine locale. Il permet en outre dutiliser un mcanisme de conance permettant dviter de saisir le mot de passe. Ainsi, si le rpertoire priv de lutilisateur stundehr sur ayler.freejazz.org (la machine distante), contient un chier .rhosts : /.rhosts # stundehr de mekanik.zeuhl.org est le bienvenu mekanik.zeuhl.org stundehr on pourra alors se connecter sur ayler depuis mekanik en tant quutilisateur stundehr sans avoir saisir ni login name, ni mot de passe : stundehr@mekanik:~> rlogin ayler.freejazz.org stundehr@ayler:~>

108

Communiquer !

Notez que lon peut prciser un utilisateur dirent pour rlogin avec loption -l. Ainsi en tant albert sur ayler.freejazz.org, on peut excuter : $ rlogin -l stundehr mekanik.zeuhl.org pour prciser quon tente de se connecter en tant quutilisateur stundehr.

4.2.3

Secure shell (ssh)

Les deux commandes prcdentes prsentent un inconvnient majeur : les transactions entre le serveur et le client ne sont pas chires ; il est ainsi possible laide doutils spcialiss de voir passer en clair sur le rseau les commandes tapes par lutilisateur, et, nettement plus inquittant, le mot de passe saisi lors de linitialisation de la connexion. Cest pourquoi on utilise aujourdhui la commande ssh permettant de mettre en uvre des transactions cryptes. La syntaxe est identique celle de rlogin. La commande suivante, par exemple, permet de se connecter en tant quutilisateur stundehr. $ ssh -l stundehr mekanik.zeuhl.org Password: Lautre forme est : $ ssh stundehr@mekanik.zeuhl.org Password:

Si, pour direntes raisons, vous acceptez le fait de saisir un mot de passe pour vous connecter sur une machine distante, vous pouvez passer directement la section suivante ( 4.3 page 112). Si vous souhaitez utiliser un mcanisme de conance avec ssh et ainsi viter davoir saisir systmatiquement un mot de passe, on aura recours au principe de chirement 7 par cl publique. Dans cette technique de cryptographie, on gnre deux cls : une publique accessible par tous et une prive qui doit tre garde secrte. On peut alors procder deux oprations gnriques : Le chirement dun message : pour envoyer un message un destinataire D on le chire avec la cl publique de D. Ce dernier et lui seul pourra dchirer le message avec sa cl prive. La signature lectronique : lexpditeur dun message peut le signer avec sa cl prive. Nimporte quel destinataire pourra sassurer de lorigine de ce message grce la cl publique de celui qui prtend tre lexpditeur.
7. Le chirement dun message est une technique de cryptographie permettant de le brouiller pour le rendre illisible. La cryptographie, quant elle, est la science de lchange des messages protgs.

4.2 Quatre grands classiques

109

Pour mettre en application le chirement par cl publique dans le cadre de ssh, on procde comme suit : 1. cration du couple de cls prive et publique ; 2. diusion de la cl publique vers les machines sur lesquelles on veut se connecter. Par la suite, une connexion sur une machine distante sera tablie aprs les tapes suivantes : 1. le client contacte le serveur en envoyant la cl ; publique 8 ; 2. le serveur examine si cette cl fait partie des cls autorises. Dans larmative il gnre un nombre alatoire A quil chire avec la cl publique et quil envoie au client ; 3. tant donn que ce dernier est en possession de la cl prive il est le seul pouvoir dchirer le message contenant le nombre A. Laccs la cl prive est gnralement verrouille par une phrase secrte (cf. plus bas) connue par son propritaire. Elle pourra lui tre demande lors de cette tape. Finalement le client renvoie ce quil a dchir (qui doit correspondre au nombre A) au serveur ; 4. le serveur compare la rponse du client 9 au nombre quil a lui-mme gnr. Si et seulement si les deux informations sont identiques laccs est autoris. Cration du couple de cls On cre la cl prive et la cl publique grce la commande suivante : $ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/lozano/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/lozano/.ssh/id_rsa. Your public key has been saved in /home/lozano/.ssh/id_rsa.pub. The key fingerprint is: e2:bb:3b:82:56:da:34:02:d4:85:f3:b3:4b:b9:7b:1e stundehr@mekanik [...] $
Dans la squence ci-dessus, on doit saisir une pass phrase qui vous sera demande ltape 3 pour que le client accde la cl prive. Il est possible ici de laisser cette phrase vide ; le client ssh aura alors accs votre cl prive sans quon vous demande de mot de passe. Si une phrase secrte est saisie, il sera ncessaire de passer par un agent ssh (cf. 4.2.3 page 111) qui vous vitera de saisir cette phrase chaque connexion.
8. Rappelez-vous quon a dpos la cl publique sur ledit serveur... 9. En ralit ce sont les signatures MD5 qui sont compares.

110

Communiquer !

Votre rpertoire contient dsormais deux chiers (la cl prive ne doit bien videmment tre lisible que par vous) : $ ls -1 ~/.ssh/id* /home/stundehr/.ssh/id_rsa /home/stundehr/.ssh/id_rsa.pub $ la cl prive la cl publique

On peut bien sr crer plusieurs couples de cls en prcisant le nom du chier au moment de lexcution de la commande ssh-keygen. Diffusion de la cl publique La diusion de la cl publique consiste dposer le contenu du chier correspondant dans le chier ~/.ssh/authorized_keys du serveur sur lequel on veut se connecter. Il existe plusieurs mthodes pour faire cette opration. En supposant la conguration suivante : machine locale utilisateur free.jazz.org ayler machine distante utilisateur cool.jazz.org miles

voici une mthode 10 qui fonctionne si le chier nexiste pas encore sur la machine cool.jazz.org : $ scp ~/.ssh/id_rsa.pub miles@cool.jazz.org:~/clef.pub miles@cool.jazz.orgs password : id_rsa.pub 100% 396 1KB/s 00:00 $

Puis aprs stre connect sur le serveur cool.jazz.org, il faut crer le rpertoire ~/.ssh et un chier authorized_keys 11 : $ mkdir .ssh $ chmod go-rwx .ssh $ mv clef.pub .ssh/authorized_keys $ Si le chier existe dj, on remplacera la dernire commande par : $ cat clef.pub >> .ssh/authorized_keys $ rm clef.pub $ qui ajoute au chier authorized_keys le contenu de la cl publique copie sur le serveur. Pour les r3b3lz , on peut aussi excuter la commande depuis le client : $ ssh miles@... < ~/.ssh/id_rsa.pub "cat - >> ~/.ssh/autorized_keys" $
10. La commande scp est prsente plus loin la section 4.3.6 page 115. 11. On suppose ici, par souci de clart, que / est le rpertoire de travail.

4.2 Quatre grands classiques

111

Cette commande (dans laquelle jai remplac le nom de la machine distante par [...] ) excute sur le serveur distant la commande : cat - >> ~/.ssh/authorized_keys qui elle, attend sur son entre des donnes qui seront ajoutes au chier situ droite de loprateur append >>. Ces donnes attendues sont envoyes sur lentre de la commande ssh qui les transmet au serveur.
Au moins sur la distribution Ubuntu, toutes ces solutions peuvent tre automatises grce un script shell connu sous le nom ssh-copy-id qui prend en argument le login et la machine distante sur laquelle on veut copier la cl publique.

Dverouillage de la phrase secrte Si vous avez suivi jusquici, que vous avez saisi une pass phrase non vide au moment de la cration des cls, alors lors dune connexion ssh sur la machine distante vous avez d obtenir : $ ssh miles@cool.jazz.org Enter passphrase for key /home/ayler/.ssh/id_rsa: $ Ce qui, je vous entends le dire in petto, ne nous avance gure... Cest vrai : nous tions censs simplier la connexion ssh et voilatipa quon nous demande un mot de passe ! Cest ici quintervient la notion d agent ssh un logiciel qui garde trace des cls utilises pendant une session.
Je ne rentrerai pas ici dans les dtails de linstallation ou du lancement dun agent ssh. La plupart des distributions en lance un (sous le nom ssh-agent) au moment du lancement de la session X. Lenvironnement Gnome pour ne pas le citer, lance mme son propre gestionnaire de cls (gnome-keyring-daemon).

Lorsque lagent ssh est actif, on peut lui demander gentiment dajouter dans son trousseau notre cl prive : $ ssh-add Enter passphrase for /home/ayler/.ssh/id_rsa: Identity added: /home/ayler/.ssh/id_rsa (/home/ayler/.ssh/id_rsa) $ Sans argument cette commande demande le dverrouillage de la cl correspondant au chier ~/.ssh/id_rsa.
partir de maintenant et jusqu la n de la session, vous devriez pouvoir vous connecter sur votre serveur sans saisir de mot de passe (ouf...)

112

Communiquer !

Quelques petites choses que vous aimeriez faire : lister les cls gres par lagent : ssh-add -l ; eacer toutes les cls mmorises par lagent : ssh-add -D ; changer la phrase secrte associe une cl : ssh-keygen -p -P ancienne -N nouvelle -f chier remplace l ancienne phrase par une nouvelle pour la cl prive stocke dans le chier .
Pour avoir accs vos serveurs prfrs par ssh sans avoir saisir de mot de passe, il vous faudra : 1. distribuer votre cl publique sur chacun des serveurs ; 2. dverrouiller votre cl secrte en dbut de chaque session. Certains agents vous permettent de ne faire quune fois pour toute la deuxime opration, dautres vous obligent modier le dmarrage de votre session pour automatiser ce dverrouillage.

4.3

Outils de communication dUnix

Voici quelques outils quon retrouve sur un systme unix. Dans la mesure o ces outils autorisent les utilisateurs agir sur des machines distantes, il est possible que certains de ces services ne soit pas disponibles, pour des raisons de scurit, sur les systmes o le lecteur les testera.

4.3.1

who

who permet dobtenir la liste des utilisateurs connects sur le systme. Il sagit des utilisateurs connects sur la console (lcran situ physiquement cot de la machine), ou par telnet, ou par rlogin, etc. $ who albert albert stundehr $ console pts/0 ttyp1 Mar 20 17:04 Mar 20 17:04 Mar 20 17:28

La deuxime colonne indique les terminaux o sont connects les utilisateurs albert et stundehr. Cette commande peut aussi indiquer si lutilisateur est connect distance sur le systme et le cas chant la machine depuis laquelle il est connect.
On trouve parfois la commande rwho qui indique quels utilisateurs sont connects sur les machines unix du rseau local. Lavantage de cette commande rside dans le fait quil nest pas ncessaire de se connecter sur une machine pour savoir quels autres utilisateurs lutilisent.

4.3 Outils de communication dUnix

113

4.3.2

Changer didentit

La commande su permet de devenir un autre utilisateur. Il faut bien sr connatre son mot de passe : su user Par exemple en tant connect en tant quutilisateur albert, on peut faire : $ su stundehr Password: saisie du mot de passe de stundehr $ on devient alors lutilisateur stundehr. Cest--dire quon lance un shell en tant que stundehr. Notez quen faisant : $ su - stundehr Password: $ le shell lanc est alors un shell de connexion (login shell ).

4.3.3

write

write envoie un message particulier sur le terminal dun utilisateur : $ write stundehr bonjour mon gars Ctrl-d pour nir le message $ Un utilisateur peut tre spci sous la forme user@machine, sil est connect sur une machine distante. En outre tout utilisateur peut dsactiver la rception de message avec la commande : $ mesg n $ et : $ mesg y $ pour la ractiver.

4.3.4

nger

finger renvoie les informations de connexion dun utilisateur donn sur une machine donne. Ces informations concernent lutilisateur lui-mme (nom dtat civil, rpertoire de travail, shell de connexion), ses dernires connexions, sil a lu son mail, et plein dautres choses. La syntaxe est :

114

Communiquer !

finger utilisateur@machine Si utilisateur dispose dans son rpertoire racine sur machine, des chiers .plan ou .project, leur contenu est alors ach par la commande finger. On peut donc mettre dans ces chiers des informations quon dsire diuser (comme ses coordonnes par exemple). Si lutilisateur utilise un chier .forward, son contenu est galement ach par finger. Voici un exemple : $ finger bidule@machine.distante.fr Login: bidule Name: Machin Bidule Directory: /home/bidule Shell: /bin/bash On since Mon Apr 30 10:32 (CEST) on pts/1 from :0.0 22 minutes 10 seconds idle On since Mon Apr 30 09:23 (CEST) on pts/2 from :0.0 On since Mon Apr 30 10:55 (CEST) on pts/3 from :0.0 2 minutes 50 seconds idle No mail. No Plan. $ tant notoirement faible sur le plan de la scurit, le serveur finger est souvent dsactiv sur les machines.

4.3.5

talk

talk comme son nom lindique permet de parler avec un autre utilisateur sur la mme machine ou sur une machine distante. Une fois la commande lance, la fentre du terminal est divise en deux parties, et chaque utilisateur voit ce que tape lautre en temps rel 12 . Pour initier une discussion, il est ncessaire que les deux protagonistes lancent la commande talk, dont la syntaxe est : talk utilisateur@machine Ainsi : lun (stundehr) lance : talk albert@ayler.freejazz.org lautre (albert) : talk stundehr@mekanik.zeuhl.org Aprs quelques secondes, une fois la connexion tablie, chacun des utilisateurs a devant les yeux un cran o chacun voit le texte de lautre dans la partie infrieure :
12. Plus prcisment, la vitesse autorise par le dbit du rseau.

4.3 Outils de communication dUnix

115

Utilisateur Machine

: albert : ayler.freejazz.fr

Utilisateur Machine

: stundehr : mekanik.zeuhl.org

Salut stundehr !

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

-----------------------------Salut stundehr !

stundehr peut alors rpondre son tour :


Utilisateur Machine : albert : ayler.freejazz.fr Utilisateur Machine : stundehr : mekanik.zeuhl.org

Salut stundehr !

Salut albert !

-----------------------------Salut albert !

-----------------------------Salut stundehr !

Le caractre EOF (gnralement Ctrl-d) met n la session, et la combinaison Ctrl-l rafrachit lcran, ce qui est parfois utile.

4.3.6

remote commandes

Nous avons dj vu une commande de la famille r (r pour remote cest--dire distance ) : rlogin. Il existe deux autres commandes de ce type : rcp permettant de copier un chier sur (ou depuis) une machine et rsh pour lancer un shell distant.
Aujourdhui il est vivement dconseill dutiliser ces commandes pour des raisons de scurit car toutes les informations transitent en clair sur le rseau. Nous prsenterons donc leurs quivalents scuriss savoir scp et ssh.

scp permet de copier un chier dune machine une autre : scp utilisateur@machine:chier chier_dest Par exemple : $ rcp ayler@mekanik.zeuhl.org:/home/ayler/ghost.mp3 . $

116

Communiquer !

ssh permet en plus de la connexion prsente au 4.2.3 de lancer une commande sur une machine distante. La syntaxe est : ssh machine commande Par exemple : $ ssh mekanik.zeuhl.org ls -l -rw-r----1 albert sax 199 Sep 1 2000 ghost.mp3 -rwxr----1 albert sax 61 May 4 2000 -rwxr----1 albert sax 77 May 4 2000 $ On peut noter qu linstar de la commande rlogin, les commandes ssh et scp acceptent loption -l permettant de spcier un autre utilisateur pour la connexion.

4.4

Le courrier lectronique 13

Bien quil existe de nombreux logiciels de lecture de mail sous unix 14 , il est bon de connatre les outils de base que propose unix pour pouvoir lire son courrier simplement en lanant une session ssh sur la machine sur laquelle vous recevez votre courrier.

4.4.1

Format des adresses

Une bote aux lettres lectronique est identie par une adresse de la forme : nom@domaine La partie domaine peut dsigner une machine existante, mais la plupart du temps dsigne un domaine gnrique, comme par exemple dans :

bart@uchicago.edu uchicago est un nom de domaine et non de machine. De manire analogue, la partie nom de ladresse lectronique ne correspond pas ncessairement un utilisateur du systme distant, ainsi lutilisateur zappa qui a un compte unix sur une machine du domaine uncleme.at peut avoir ladresse suivante : frank@uncleme.at On peut trouver galement la forme : Frank Zappa <franck@uncleme.at> forme permettant de rajouter des fantaisies autour dune adresse existante, tant que les fantaisies en question se limitent lextrieur des < et >.
13. Le ml comme disent les acadmiciens, le courriel comme disent les Qubcois, le-mail comme disent les anglophones, le mail comme disent les Franais. 14. Pour sen assurer, on peut faire une recherche sur le site http://sourceforge.net.

4.4 Courrier lectronique

117

4.4.2

Mail user agents

Parmi lensemble des logiciels utiliss sous unix pour acheminer le courrier existent deux familles : les mail transport agents (MTA) : les logiciels chargs dacheminer le courrier dune machine une autre ; on peut faire lanalogie avec le facteur ou la poste qui dlivre les courriers dans les botes ; les mail user agents (MUA) : logiciels destins lutilisateur permettant la fois de consulter sa bote aux lettres, et denvoyer des courriers (au mail transport agent qui fait suivre). En tant quutilisateur unix, on est confront la deuxime catgorie, la premire tant rserve aux tches dadministration systme. Il existe sous unix une multitude de logiciels de messagerie utilisateur, le plus commun est mail. Ce mail existe galement sous dautres variantes Mail et mailx. Tous ces utilitaires ont des syntaxes gnralement lgrement direntes selon les systmes 15 . Toujours est-il que le principe est souvent le suivant, pour envoyer un mail franck@uncleme.at : $ mail franck@uncleme.at Subject: Dental floss Hi. . Un point seul sur une ligne pour envoyer le message $ En ayant dj rdig le message dans un diteur de texte (Emacs pour ne pas le nommer), on peut directement utiliser les redirections 16 : $ cat tofranck Hi. Jazz is not dead, It just smells funny. $ mail -s "Dental floss" franck@uncleme.at < tofranck $ Certains logiciels proposent loption -c pour positionner le champ CC: (copie carbone), et bien dautres encore. Par exemple mutt (http://www.mutt.org) utilise loption -a pour attacher un chier. Et : $ mutt -a arf.jpg -s "Blow j." franck@uncleme.at < tofranck $ o arf.jpg est une image au format Jpeg qui sera envoye sous forme dattachement.
15. Nous vous invitons donc compulser les pages de manuels traitant de ces utilitaires. 16. Comme indiqu prcdemment la commande mail utilise ici accepte loption -s ce qui nest pas toujours le cas sur un systme autre que LINUX . On sorientera dans ce cas vers la commande mailx.

118

Communiquer !

4.4.3

Faire suivre son courrier

Il arrive souvent davoir des comptes sur plusieurs machines unix. Dans ce cas on peut vouloir ne relever quune bote aux lettres. Pour ce faire il est ncessaire de faire suivre le courrier destin aux autres botes sur la seule bote que lon veut consulter. On utilise alors un chier nomm .forward qui doit se situer dans le rpertoire priv. Par exemple : /.forward albert@ayler.freejazz.fr permet de faire suivre tout courrier arrivant sur la machine concerne ladresse albert@ayler.freejazz.fr. Si lutilisateur (stundher) utilisant ce .forward souhaite galement conserver une copie sur la machine, il peut ajouter une ligne son chier : /.forward \stundehr albert@ayler.freejazz.fr Notez lutilisation du \ pour viter une rcursion sans n.
Tout ce qui est racont ici au sujet de lacheminement du courrier laide du chier .forward ne sera eectif que si la machine unix du rseau local sur laquelle on cre le .forward est eectivement la machine qui reoit le courrier et que le MTA de cette machine utilise le mcanisme du .forward.

4.5

Le oube

De manire analogue ce quil a t dit prcdemment sur le courrier lectronique, il existe de nombreux navigateurs web trs intuitifs comme Netscape, Mozilla, Opera, pour ne citer que les plus connus. Le but de ce paragraphe est la prsentation doutils particuliers ne prsentant pas dinterface graphique, mais ayant un intrt vident.

4.5.1

Format des adresses

Le standard pour localiser une ressource sur le rseau est luniform resource locator ou URL, ou encore localiseur uniforme de ressources , sa forme la plus simple est toujours : protocole://machine/chier Par exemple dans lurl : http://www.freejazz.fr/dolphy/horns/bassclarinet.jpg

4.5 Le oube

119

le protocole est http (hypertext transfert protocol, le protocole de transfert hypertexte utilis sur le Web), la machine est www.freejazz.fr, et le chier dsigne une image nomme bassclarinet.jpg dans le rpertoire dolpy/horns. De mme : ftp://ftp.lip6.fr/pub/Linux/Readme dsigne le chier Readme stock dans le rpertoire pub/Linux de la machine dont le nom est ftp.lip6.fr et accessible via ftp.

4.5.2

Wget laspirateur

wget est un utilitaire du projet gnu permettant le tlchargement de chiers en utilisant le protocole ftp ou http. wget eectue ces tlchargements sans intervention de lutilisateur et en suivant ventuellement des liens ou les sous-rpertoires dun serveur web ou ftp : $ wget http://www.freejazz.fr/dolphy/bassclarinet.jpg tlchargera le chier bassclarinet.jpg. Mais cet utilitaire est particulirement utile pour tlcharger plusieurs chiers. Par exemple pour aspirer tout ou partie dun site oube, on pourra crire : $ wget -r -l1 http://www.bidule.fr/machin/chose qui sauvera : 1. le chier index.html du rpertoire machin/chose ; 2. tous les liens apparaissant dans ce chier index.html ; cest la signication des options -r (rcursif) et -l1 lien de niveau 1 . En lanant : $ wget -r -l2 http://www.bidule.fr/machin/chose on tlcharge galement les liens apparaissant dans les pages mentionnes dans le chier index.html (liens de niveau 2 ).
Lors de lutilisation de loption -r pour suivre rcursivement les liens jusqu un niveau donn, il est souvent utile de demander wget de ne pas remonter au rpertoire parent. Dans lexemple prcdent, ceci permet de se cantonner au rpertoire machin/chose et ses descendants. On formule ce souhait laide de loption -np ou --no-parent.

Pour nir avec cette courte introduction wget, il nest pas inutile de noter lusage qui suit. Supposons que la page dsigne par : http://www.truc.fr/machin/chose.html

120

Communiquer !

contient des liens sur des images au format Jpeg portant lextension jpg, alors la commande : $ wget -r -l1 -Ajpg http://www.truc.fr/machin/chose.html $ rcuprera uniquement ces chiers lexception de tous les autres liens de la page nomme chose.html. Notons que pour les commandes transfrant plusieurs chiers, wget crera de luimme sur la machine locale, un rpertoire pour la machine hte contenant le cas chant, dautres rpertoires apparaissant dans lurl. Pour viter cela, on pourra faire appel aux options : -nH ou --no-host pour ne pas crer de rpertoire correspondant la machine hte ; -nd ou --no-directories pour ne pas crer de rpertoire du tout ; --cut-dirs=nombre pour viter de crer nombre niveaux dans larborescence de rpertoires. Par exemple : $ wget -nH --cut-dirs=1 -r -l1 http://www.freejazz.fr/dolphy/horns/ crera le rpertoire horns dans le rpertoire courant pour y sauver les chiers aspirs. Comme la plupart de ces utilitaires ne faisant quune chose mais le faisant bien , on trouvera une foultitude doptions diverses et varies permettant darriver ses ns quelle que soit lexigence de la requte.
Dautres utilitaires eectuant le mme type de tche existent. Parmi eux les logiciels curl et lftp disponibles chez votre crmier le plus proche.

4.5.3

Lynx lextraterrestre

lynx (jeu de mots dinformaticiens anglophones sur links, les liens) est un butineur de la toile (web browser ) en mode texte. Le propos de lynx est de compulser des pages au format html. Ce browser peut tre utile dans les situations o lutilisateur veut viter de lancer les logiciels habituels gourmands en ressources, ou simplement lorsque lenvironnement courant ne permet pas dutiliser le mode graphique. Lutilisation de lynx est simple : che bas : lien suivant dans la page ; che haut : lien prcdent ; che droit : suivi du lien ; che gauche : dernier lien dans lhistorique ; En outre les touches : d : permet de tlcharger (download ) un chier dsign par le lien courant ; z : permet dinterrompre le tlchargement ;

4.5 Le oube

121

g : permet daller (go ) vers une autre url ; q : permet de quitter. lynx possde une aide en ligne trs complte quon peut consulter en pressant la touche ?, et un site web www.lynx.org. Ainsi pour consulter le site www.opensource. org, on tapera : $ lynx www.opensource.org On peut galement se connecter par ftp sur une machine en utilisant le format particulier des url : $ lynx ftp://stundehr@mekanik.zeuhl.org dans lhypothse o lon dispose dun compte dont le login est stundehr sur la machine mekanik.zeuhl.org.
Stphane Chazelas me soue que lynx est dpass et lourd. Dautres programmes existent permettant de naviguer en mode texte sur le oube, comme w3m et plus particulirement elinks ou links2...

Conclusion
Ce (court) chapitre a eu pour but de prsenter les utilitaires ayant trait la communication sous unix. Il est intressant de noter que tous les outils autour du transfert de donnes, de messagerie instantane ou dire, daccs aux systmes distance, etc. existent depuis longtemps et sont utilisables en mode texte. Ce deuxime aspect qui pourrait paratre curieux lheure daujourdhui, assure lutilisateur la possibilit de manipuler des outils rseaux lgers sil le souhaite, et surtout lui permet dautomatiser ses requtes ce qui est lobjet du chapitre suivant.

Sommaire 5.1 5.2 5.3 5.4 diter un chier Faire des scripts en shell Makele Faire des projets en langage C

Chapitre

5
Dvelopper !
\recursion.

% Les 5 premires lignes du source TeX \chapter{Dvelopper !} \label{chap-developper} \begin{epigraphe}{\recursion} \verb&\verb@\verb|\verb#\verb\verb/\verb+% Les 5 premires+\\/#|@&

velopper de to develop, mettre au point en anglais, est peut-tre lactiD vit quil est idal de raliser sous un systme unix. Il dispose en eet dune palette impressionnante doutils ddis une tche spcique quon peut voir

comme des composants logiciels pouvant communiquer entre eux de manire lgante et homogne. Nous verrons en ouverture de ce chapitre une prsentation dtaille des concepts fondamentaux de la programmation en shell ; la partie suivante est consacre ltude de lutilitaire make, outil puissant permettant de grer un projet de dveloppement. Ce chapitre est clos par la prsentation de lutilisation dun compilateur C sur un systme unix. Pour dvelopper sous unix, il faut en outre savoir comment diter un chier, ce pr-requis fait lobjet de la premire section de ce chapitre.

123

124

Dvelopper !

Certaines sections de ce chapitre exigent que vous ayez quelques notions de programmation ou dalgorithmique : savoir ce quest une variable et une boucle ne seront pas inutile pour comprendre la section 5.2 sur les scripts en shell. La section 5.4 sur les projets en langage C prsuppose que vous connaissez ce langage, sa lecture est donc trs certainement inutile si a nest pas le cas.

5.1

diter un chier

Vous entendrez sans doute un jour quelquun vous dire : sous unix, tout est chier 1 . En outre, comme nous avons vu que les commandes communiquent entre elles laide de ots de texte, la tche qui consiste diter (cest--dire crer/modier) un chier contenant du texte est une tche extrmement courante sous unix.

5.1.1

Sans diteur

Mme si cela reste rare, il peut arriver davoir crer un chier contenant du texte sans diteur de texte. Dans ce cas on peut utiliser les redirections, par exemple : $ echo bonjour > fichier.txt $ stocke la chane bonjour dans le chier fichier.txt. On peut mme, ventuellement ajouter des sauts de lignes (caractre \n ), ou des tabulations (caractres \t ) en utilisant loption -e de echo : $ echo -e "a\nb\nc\td" > bonjour.txt $ cat bonjour.txt a b c d $

Pour tre sr darriver ses ns dans ce genre de situation il est souvent prfrable dutiliser la commande printf plutt que la commande echo, en crivant : $ printf "a\nb\nc\td\n" > bonjour.txt $ Ceci parce que la commande echo de votre systme peut ne pas ragir loption -e.

Une autre manire de faire est dutiliser la commande cat avec une redirection : $ cat > bonjour.txt a Entre attente de donnes destines bonjour.txt

1. Si vous ne lavez jamais entendu, tentez de la placer lors dune soire entre amis, cela fait toujours de leet.

5.2 Faire des scripts en shell

125

b $

Entre Ctrl d

caractre de n de chier

Ces mthodes ne permettent videmment pas de modier le contenu du chier cr, autrement quen lcrasant avec de nouvelles donnes.

5.1.2

Avec un diteur

Deux diteurs sont trs rpandus sur les systmes unix, il sagit de vi (prononcer vi ae ) et Emacs (prononcer et max ou i max ). Les paragraphes 6.2 page 176 et 6.3 page 178 prsentent respectivement ces deux diteurs. Dans limmdiat voici ce quil faut savoir pour diter un chier avec Emacs : $ emacs bonjour.txt tapez alors tranquillement votre texte, puis pour le sauvegarder, appuyez sur les touches Ctrl x s (cest--dire x puis s tout en maintenant Ctrl enfonce). f Les menus Pour charger un chier existant, utilisez la commande Ctrl x Files/Save Buffer et Files/Open File... vous permettront deectuer galement ces oprations.

5.2

Faire des scripts en shell

Cette section a pour but dexposer les rudiments de la programmation en shell. Le shell utilis est bash. Cest le shell dvelopp par le projet gnu. Il incorpore les fonctionnalits du shell sh ainsi que certaines tires des shells csh et ksh. La modeste exprience de lauteur a montr quil est ncessaire dexprimenter pour parvenir ses ns avec le shell ; il permet cependant, une fois la phase dapprentissage passe 2 , dautomatiser certaines des tches quotidiennes dun utilisateur de systme unix et pour cette raison il est trs utile den connatre les principes de base. La lecture des chapitres 2 et 3 est un pr-requis indispensable la lecture de cette section.
Si vous utilisez un shell de connexion de type tcsh ou csh, rien ne vous empche de programmer avec sh ou bash. Cest pourquoi nous focaliserons ici notre attention sur le shell bash de la famille sh qui, encore une fois, ne vous engage pas changer vos habitudes interactives si vous utilisez un autre shell de connexion.

Enn, pour vous donner une ide de la complexit du programme bash, la commande : $ PAGER=cat man bash | wc -lw Reformatting bash(1), please wait... 4522 33934 $
2. Passe-t-elle un jour ?

126

Dvelopper !

que vous tes pratiquement capable de comprendre si vous avez lu jusquici, nous indique que la page de manuel de bash sur le systme de votre serviteur, contient 33934 mots soit environ 4500 lignes sur un terminal denviron 90 caractres de large. Pour info : $ pdftotext guide-unix.pdf - | wc -w 68837 $ guide-unix.pdf est le document que vous avez sous les yeux...

5.2.1

Commentaires

Tout langage de programmation dispose de symboles particuliers pour insrer des commentaires dans le code ; cest--dire des portions de texte qui seront ignores par linterprteur ou le compilateur le cas chant. Ce caractre en langage de commande dunix est le caractre #. Tout le texte suivant ce caractre jusqu la n de la ligne sera ignor. Notons toutefois que sil est suivi du caractres !, ce qui suit est interprt dune manire particulire par le systme comme expliqu au paragraphe suivant.

5.2.2

Choisir linterprteur

Un script en shell nest quun chier texte contenant une liste de commandes. Par exemple, un chier bidule contenant la commande : bidule echo bonjour est un script shell ! Pour excuter ce script on lance linterprteur de commande avec le chier comme argument :

$ bash bidule bonjour $ De manire simplier lutilisation du script bidule on peut prciser quel sera linterprteur du programme contenu dans le chier. Pour cela on place en tte du chier les deux caractres #! suivis de la rfrence absolue de linterprteur utilis : bidule #!/bin/bash echo bonjour il faudra ensuite rendre excutable le script : $ chmod +x bidule $

5.2 Faire des scripts en shell

127

Ces deux oprations permettent dutiliser le script en lappelant directement comme une commande : $ ./bidule bonjour $ Notons, quon peut gnraliser cette ide nimporte quel interprteur, par exemple, le chier test.awk : test.awk #!/usr/bin/awk -f /^Jim/{print $1,$3} Une fois rendu excutable, il donne bien ce quon attend du premier exemple de la section 3.6 page 90 : $ ./test.awk fichier.dat Jimi 1970 Jim 1971 $ ici cest donc la commande awk -f qui est charge dinterprter les commandes contenues dans test.awk.

5.2.3

Variables

Les variables du shell sont des symboles auxquels on aecte des valeurs. Ces variables ne sont pas ou trs faiblement types comme nous le verrons un peu plus bas. Laectation et la lecture des variables se fait grce la syntaxe suivante (voir aussi 2.1.3 page 29) : testvar.sh #!/bin/bash N=4 NOM=trucmuche echo "le nom est $NOM et la variable N vaut $N" qui donne lexcution : $ ./testvar.sh le nom est trucmuche et la variable N vaut 4 $ Dans certaines situations il est ncessaire dutiliser les accolades en plus du dollar pour lire le contenu de la variable. La syntaxe est alors ${N}.

128

Dvelopper !

#!/bin/bash BOF=loz echo mon nom est ${BOF}ano Sans les accolades, le shell aurait cherch la valeur de la variable $BOFano, variable qui nexiste pas. En shell, les variables ne sont pas dclares au sens dun langage de programmation compil. En fait toutes les variables existent potentiellement. Par consquent, le shell nmet pas de message derreur lorsquon tente daccder une variable laquelle on na jamais aect de valeur. Cette variable est considre comme tant vide lexpansion : varvide.sh #!/bin/bash BOF=loz echo mon nom est $BOFano donne lexcution : $ ./varvide.sh mon nom est $ ceci rend le dbuggage de scripts parfois dlicat. Pour pallier ce problme on peut utiliser la commande : $ set -u $ pour demander au shell de gnrer une erreur lorsquon veut faire rfrence une variable non intialise :

$ set -u $ echo $variablenonintialisee -bash: variablenonintialisee: unbound variable $ Arguments de la ligne de commande Les arguments passs en ligne de commandes cest--dire lors de lappel de la commande que constitue le script sont stocks dans les variables $0, $1, $2, etc. Ainsi : testarg.sh #!/bin/sh echo Arguments "[$0] [$1] [$2] [$3] [$4]"

5.2 Faire des scripts en shell

129

donne : $ ./testarg.sh -t bonjour "les amis" 34 Arguments [./testarg.sh] [-t] [bonjour] [les amis] [34] $ On peut noter qu linstar du langage C, largument numro 0 est le programme excuter, ici ./testarg.sh.
Notez en outre lutilisation des guillemets en ligne de commande. Lors de lexcution de testarg.sh on utilise ces guillemets pour regrouper les mots les et amis en une seule chane de caractres, on peut alors les considrer comme un seul argument.

Pour le traitement des paramtres de la ligne de commande, on dispose galement de quelques variables prdnies : la variable $# contient le nombre darguments de la ligne de commande sans compter la commande elle mme les arguments sont donc compts partir de $1; les variables $* et $@ contiennent toutes les deux lensemble des arguments partir de $1 mais ont une signication dirente lorsquelles sont utilises entre guillemets : testarg2.sh #!/bin/sh for ARG in "$*" ; do echo $ARG ; done donne : $ ./testarg2.sh a b c a b c $ dans ce cas lensemble des arguments est considr comme une seule chane de caractres et : testarg3.sh #!/bin/sh for ARG in "$@" ; do echo $ARG ; done donne : $ ./testarg3.sh a b c a b c $ ici chaque argument est considr comme une chane de caractres part entire. Modications Il existe plusieurs mcanismes permettant dagir sur les variables :

130

Dvelopper !

1. laide linstanciation de variables ; 2. le traitement du contenu. Chacun de ces mcanismes suit une syntaxe particulire (la plupart du temps assez dicilement mmorisable !). Voici donc titre dexemple quelques-uns des outils 3 correspondant : ${N:-4} renvoie la valeur de N si on lui en a aect une, 4 sinon ; ce qui permet dutiliser une valeur par dfaut ; ${N:?msg} renvoie le message derreur msg si N na pas t instanci et quitte le script ; ceci peut tre utile pour tester les arguments de la ligne de commande. Voici un exemple dutilisation de ces outils : varmod.sh #!/bin/sh NOM=${1:?"vous devez fournir un nom"} PRENOM=${2:-"djobi"} echo Qui : $PRENOM $NOM ce qui peut donner lexcution : $ ./varmod.sh ./varmod.sh: 1: vous devez fournir un nom $ le texte ./varmod.sh: 1: doit se comprendre comme : largument no 1 du script varmod.sh est manquant $ ./varmod.sh djoba Qui : djobi djoba $ ./varmod.sh goulbi goulba Qui : goulba goulbi $

Pour ce qui est des outils de traitement de contenu la syntaxe est : ${N%motif} et ${N%%motif} suppriment respectivement la plus petite et la plus longue chane rpondant lexpression rgulire motif, la n du contenu de la variable N ; ${N#motif} et ${N##motif} suppriment respectivement la plus petite et la plus longue chane rpondant lexpression rgulire motif, au dbut du contenu de la variable N. et voici un exemple trs instructif inspir par Newham et Rosenblatt (1998) : $ P=/home/local/etc/crashrc.conf.old $ echo ${P%%.*} supprime la plus grande chane commenant par . /home/local/etc/crashrc
3. Se reporter au man de bash pour des informations prcises.

5.2 Faire des scripts en shell

131

$ echo ${P%.*} supprime la plus petite chane commenant par . /home/local/etc/crashrc.conf $ echo ${P##/*/} supprime la plus grande chane entoure de / crashrc.conf.old $ echo ${P#/*/} supprime la plus petite chane entoure de / local/etc/crashrc.conf.old $ Une application de ce type doutils serait, par exemple, la conversion en salve, de plusieurs chiers JPEG en TIFF. En supposant que : les chiers portent lextension .jpg ; sont dans le rpertoire courant ; on dispose dun utilitaire que lon nommera convert qui est capable deectuer cette conversion ; on peut alors crire le script (voir 3.4.3 page 86 pour lutilisation de la boucle for) : #!/bin/sh for F in *.jpg ; do convert "$F" "${F%.jpg}.tif" done Dans ce script, si la variable F vaut une itration bidule.1.jpg alors : ${F%.jpg} vaut bidule.1, cest--dire le nom du chier auquel on a supprim la chane .jpg la n ; {F%.jpg}.tif vaut bidule.1.tif, cest--dire, bidule.1 concatn avec la chane .tif. Finalement, cette itration on excute la commande : convert bidule.1.jpg bidule.1.tif Ce principe est trs utile dans beaucoup de situations o lon veut traiter plusieurs chiers. Par exemple le trs classique cas o lon veut renommer un ensemble de chiers : $ ls *.wav audio1.wav audio2.wav audio3.wav audio4.wav audio5.wav audio6.wav audio7.wav audio8.wav audio9.wav $ Imaginons que lon veuille renommer ces chiers sous la forme suivante : crescent_x.wav On peut alors crire :

132

Dvelopper !

#!/bin/sh for F in audio*.wav ; do mv $F crescent_${F#audio} done


Un moyen mnmotechnique de se souvenir de la syntaxe de ces oprateurs est la suivante : # dsigne en anglais le numro (number ) et on dit gnralement numro 5 ; # supprime donc en dbut de chane ; inversement on dit gnralement 5 % , % supprime donc en n de chane. Le nombre de caractres # ou % rappelle si on supprime la plus petite (1 caractre) ou la plus longue (2 caractres) chane correspondant au motif. Tain cest p convivial ce bazar !

Arithmtique Bien que les variables du shell ne soient pas types, on peut cependant valuer des expressions arithmtiques ; ces expressions nauront un sens que si les contenus des variables sont des valeurs numriques, bien entendu. La syntaxe pour valuer une expression arithmtique est : $[expression_arithmtique] ou $((expression_arithmtique)) ( prfrer) Par exemple : $ $ 4 $ $ 7 $ N=3 echo $((N+1)) N=$[N+4] echo $N

Pour illustrer lutilisation de larithmtique sur les variables, considrons par exemple que lon dispose dun ensemble de chiers dont les noms ont la forme suivante : $ ls *.dat 2002-qsdfff.dat 2002-sdhjlk.dat 2002-yuiqso.dat 2003-azerzz.dat 2003-sddfg.dat 2003-qsdfrtuy.dat 2003-ertyf.dat 2004-ersssty.dat 2004-sdf.dat ... $

5.2 Faire des scripts en shell

133

cest--dire : anne sur 4 chires-n caractres.dat suite une erreur de manipulation, on dsire remplacer toutes les annes a par a 1 (donc 2002 par 2001, 2003 par 2002, etc.). Si lon suppose quune variable F prenne comme valeur le nom dun de ces chiers : 2002-ertyf.dat alors on peut extraire lanne (2002) comme suit : annee=${F%-*} maintenant la variable annee contient le nom du chier sans ce qui se trouve partir du caractre -. On peut alors dcrmenter cette variable : annee=$((annee-1)) le nouveau nom du chier sera compos de cette variable annee concatne avec ce qui se trouve aprs le caractre -, soit : $annee-${F#*-} Do le script de conversion utilisant une boucle for arithmetique.sh #!/bin/sh for F in ????-*.dat ; do annee=${F%-*} annee=$((annee-1)) mv "$F" $annee-${F#*-} done On aurait galement pu extraire les deux parties du nom de chier (anne et le reste) laide de sed comme le montre le programme suivant : arithmetique-2.sh #!/bin/sh for F in ????-*.dat ; do annee=$(echo "$F" | sed -r s/([0-9]{4})-.*/\1/) reste=$(echo "$F" | sed -r s/[0-9]{4}-(.*)/\1/) annee=$((annee-1)) echo mv "$F" $annee-$reste done

134

Dvelopper !

Pour information lexpression rgulire : [0-9]{4}-.* reconnatra une chane de caractres commenant par 4 chires, suivis dun tiret, suivi de ce qui vous passe par la tte. On notera galement lutilisation de la substitution de commande et dun tube pour stocker dans une variable lapplication de la commande sed la valeur $F.

5.2.4

Structure de contrle et tests

Les scripts en shell prennent leur intrt lorsque lon peut y insrer des boucles et autres structures conditionnelles et itratives. Chacune de ces structures de contrle inclut gnralement lvaluation dune expression boolenne.
On verra un peu plus loin quen ralit les valeurs des expressions boolennes correspondent toujours un code de retour dune commande. Et que la valeur de ce code est interprte comme vrai ou faux .

Tests La syntaxe pour eectuer un test que nous reprendrons plus loin avec les structures de contrle est la suivante : test expression_boolenne ou [ expression_boolenne ] Plusieurs tests sont disponibles, ayant trait au contrle de caractristiques de chiers (existence, excutabilit, etc.) et la comparaison de chane de caractres, ou dexpressions arithmtiques. Parmi celles-ci :

test -f chier -x chier -d chier chane1 =chane2 chane1 !=chane2 -z chane

renvoie vrai si... chier existe 4 chier est excutable 5 chier est un rpertoire 6 chane1 et chane2 sont identiques chane1 et chane2 sont direntes chane est vide

Les expressions boolennes eectuant des tests arithmtiques peuvent quant elles, tre ralises sous la forme :
4. et est un chier rgulier (regular le) un chier normal, quoi, pas un lien symbolique, ni un rpertoire, ni ... 5. ou compulsable pour un rpertoire. 6. ou un lien symbolique vers un rpertoire.

5.2 Faire des scripts en shell

135

expr1 oprateur expr2 o oprateur peut prendre les valeurs du tableau ci-dessous : -eq -ne -lt -gt -le -ge gal (equal ) dirent (not equal ) infrieur (less than ) suprieur (greater than ) infrieur ou gal (less than or equal ) suprieur ou gal (greater than or equal )

On peut galement combiner les expressions boolennes : test ! expr expr1 -a expr2 expr1 -o expr2 renvoie vrai si... expr renvoie faux expr1 et (and) expr2 renvoient vrai expr1 ou (or) expr2 renvoient vrai

Le shell notamment bash dispose de bien dautres outils de tests et nous vous invitons vivement compulser la page de manuel ou vous procurer louvrage de Newham et Rosenblatt (1998) pour de plus amples informations. Structures de contrle Voici trois structures de contrle disponibles dans bash. Ce sont les trois structures classiques dun langage de programmation : le if then else pour faire un choix partir dune expression boolenne ; le case permettant de faire un choix multiple en fonction dune expression ; le tant que dont le but est de ritrer des commandes tant quune expression est vraie. Le shell dispose de quelques autres structures que nous passerons sous silence. On peut galement se rfrer au paragraphe 3.4.3 page 86 pour la structure de contrle de type for . Toujours dans un souci de pragmatisme nous illustrons ici lusage de ces trois structures de contrle grce des exemples. Examinons tout dabord le if : testif.sh #!/bin/sh A=$1 B=$2 if [ $A -lt $B ]; then echo "largument 1 est plus petit que largument 2" else echo "largument 1 est plus grand que largument 2" fi

136

Dvelopper !

On peut noter lutilisation du test [...] et du mot-clef fi qui termine la clause if then else. Il ne faut pas omettre le point-virgule qui clt lexpression test. lexcution : $ ./testif.sh 4 6 largument 1 est plus petit que largument 2 $ ./testif.sh 45 6 largument 1 est plus grand que largument 2 $ Pour illustrer lutilisation du while crivons une petite boucle qui compte de 1 n (un nombre donn par lutilisateur) : testwhile.sh #!/bin/sh LAST=$1 n=1 while [ "$n" -le "$LAST" ]; do echo -n "$n" n=$((n+1)) done echo et voilou qui donne par exemple : $ ./testwhile.sh 10 1 2 3 4 5 6 7 8 9 10 et voilou $ Notez le mot-clef done qui clt la clause while. Ici loption -n de la commande echo ne cre pas de saut de ligne la n de lachage. Histoire de conrmer lassertion de Larry Wall 7 , on peut utiliser une boucle pour pour gnrer et acher une squence. On fera appel la commande seq dont voici un exemple dutilisation : $ seq 1 5 1 2 3 4 5 $ ce petit utilitaire a donc pour tche dacher les entiers de 1 5. Si vous tes curieux, la page de manuel vous indiquera que lon peut galement changer lincrment et deux ou trois autres choses. On peut donc crire le script suivant :
7. Theres more than one way to do it.

5.2 Faire des scripts en shell

137

compter.sh #!/bin/sh for I in $(seq 1 10); do printf "%d " "$I" done echo et voilou. qui donne le mme rsultat que le script prcdent.
Les puristes auront not que la commande seq nest disponible que pour les utilisateurs travaillant sur des systmes o le paquet coreutils de chez M. gnu est install.

Pour ce qui est du case, on peut imaginer que lon veuille crire un script permettant didentier lorigine des chiers en fonction de leur extension 8 . testcase-I.sh #!/bin/sh NOM=${1:?"Donnez un nom de fichier svp"} EXT=${NOM##*.} case $EXT in tex) echo on dirait un fichier TeX ;; dvi) echo on dirait un fichier device independant ;; ps) echo on dirait un fichier Postscript ;; *) echo chai p ;; esac On utilise ici le modicateur de variable ## pour supprimer la plus grande chane nissant par le caractre . et ainsi obtenir lextension. Le mot-clef esac (case lenvers) clt la clause case. Le choix par dfaut est indiqu par * (nimporte quelle chane de caractres). chaque choix correspond une srie de commandes excuter (ici une seule) ; srie qui doit tre termine par deux points-virgules ;; . On teste : $ ./testcase-I.sh ~/LaTeX/guide/guide-unix.tex on dirait un fichier TeX $ ./testcase-I.sh /etc/lpd.conf chai p^ o $
La chane de caractres prcdant la parenthse dans chaque clause de case peut tre un joker (wildcard), comme le montre la dernire clause qui utilise le caractre * pour indiquer toute (autre) chane de caractre .
8. Notez que lutilitaire file fait ce travail beaucoup mieux...

138

Dvelopper !

Une limitation du script prcdent est que les chiers : tex .tex seront pris pour un chier TEX. Ceci est d au fait que si : $ NOM=tex $ alors lexpression ${NOM##*.} renvoie tex car aucune substitution na pu tre ralise. On peut imaginer la solution suivante qui utilise les caractres gnriques du shell : testcase-II.sh #!/bin/bash NOM=${1:?"Donnez un nom de fichier svp"} case $NOM in *[^/].tex) echo on dirait un fichier TeX ;; *[^/].dvi) echo on dirait un fichier device independant ;; *[^/].ps) echo on dirait un fichier Postscript ;; *) echo chai p ;; esac Dans ce script, lexpression *[^/].tex veut dire toute chane de caractres compose de : * : toute chane mme vide ; [^/] : un caractre dirent de / ; .tex Les commandes renvoient une valeur ! Les expressions boolennes utilises par exemple dans la structure if sont en ralit la valeur de retour dune commande. En eet toute commande unix renvoie une valeur en fonction du succs de son excution. Il existe en outre une variable particulire contenant le code retour de la dernire commande excute : la variable $?. Voici un exemple avec la commande id qui donne des informations sur un utilisateur particulier : $ id lozano uid=1135(lozano) gid=200(users) groups=200(users) $ echo $? 0 tout sest bien pass. $ id djobi id: djobi: No such user $ id $? 1 Il y a eu un problme. $

5.2 Faire des scripts en shell

139

On peut alors utiliser cette valeur directement dans une structure de type if comme suit : testtest.sh #!/bin/bash if id $1 2> /dev/null 1>&2; then echo c\est un utilisateur else echo ce n\est pas un utilisateur fi Il est important de noter que dans la construction : if commande test ; then commandes fi commandes seront excutes si et seulement si commande test renvoie la valeur 0 (indpendamment de ce quelle peut acher). Dans notre exemple on a donc : $ ./testtest.sh lozano cest un utilisateur $ ./testtest.sh djobi ce nest pas un utilisateur $ On peut noter lutilisation de redirections 2> pour rediriger le ux derreur (2) et 1>&2 pour rediriger le ux de sortie (1) sur le ux derreur (2).
Un script renvoie la valeur retourne par la dernire commande excute. On peut cependant forcer le renvoi dune valeur particulire en utilisant la commande exit suivie dune valeur.

Pour nir ce paragraphe et boucler la boucle des expressions boolennes , supposons quil existe dans le rpertoire courant un chier guide-unix.tex et tapons : $ [ -f guide-unix.tex ] $ echo $? 0 le chier existe $ Puis : $ [ -f guide-unix.texitoi ] $ echo $? 1 le chier nexiste de pas $

140

Dvelopper !

O lon apprend donc que [ est une commande qui, comme beaucoup de ses copines, renvoie 0 si tout est ok, et 1 sinon...

5.2.5

Fonctions

Une des caractristiques des shells de la famille sh est la possibilit de crer des fonctions. Voici un exemple succinct qui illustre les syntaxes de dclaration et dappel, ainsi que la visibilit des variables : testfunc.sh #!/bin/sh N=4 function mafunc() { I=7 echo $1 $2 $N } mafunc a b # appel la fonction avec 2 arguments echo et : $I qui donne lexcution : $ ./testfunc.sh a b 4 et : 7 $ on notera donc qu lintrieur du corps de la fonction, les arguments de celle-ci sont nots $1, $2, etc. En outre : les variables instancies dans la fonction sont visibles en dehors (cest le cas de $I dans notre exemple) ; les variables instancies avant la dnition de la fonction sont visibles dans celle-ci (cest le cas de $N dans notre exemple). Enn, linstar dun script, on peut faire renvoyer une valeur une fonction avec la commande return suivie dune valeur. Voici un exemple dutilisation de fonction : on reprend le script arithmetique.sh du paragraphe 5.2.3 page 132 et on utilise une fonction pour faire le changement de nom : arithmetique-3.sh #!/bin/sh function changernom() { annee=${1%-*} annee=$[annee-1]

5.2 Faire des scripts en shell

141

mv "$1" "$annee-${1#*-}" } for F in ????-????.dat ; do changernom $F done

5.2.6

Input eld separator

Un jour ou lautre le dveloppeur de script shell est confront au problme suivant. Avec notre chier : Jimi Hendrix 1970 Jim Morrison 1971 Janis Joplin 1969 on crit navement le script ayant pour but deectuer un traitement par ligne des chiers passs en paramtre : naif.sh #!/bin/sh for ligne in $(cat "$@") ; do echo "Une ligne : $ligne" done On aura une certaine dception lexcution : $ ./naif.sh Une ligne : Une ligne : Une ligne : Une ligne : Une ligne : Une ligne : Une ligne : Une ligne : Une ligne : $ for ligne in fichier.dat Jimi Hendrix 1970 Jim Morrison 1971 Janis Joplin 1969 de :

Ceci vient du fait que les lments constituant la liste ; do ...

sont dlimits par les caractres contenus dans la variable IFS. Cette variable contient par dfaut :

142

Dvelopper !

le caractre espace, la tabulation, le saut de ligne. Or nous souhaiterions ici clairement que les lments de la liste soient dlimits par le saut de ligne. Il sut pour cela de modier le script : naif.sh #!/bin/sh # cest le saut de ligne qui fait office de sparateur pour # chaque lment dune liste IFS=" " for ligne in $(cat "$@") ; do echo "Une ligne : $ligne" done qui donnera ce quon attend, cest--dire : $ ./naif.sh Une ligne : Une ligne : Une ligne : $ fichier.dat Jimi Hendrix 1970 Jim Morrison 1971 Janis Joplin 1969

5.2.7

Fiabilit des scripts

Pour rendre ables les scripts que vous crirez, il faudra quils puissent traiter correctement les chiers aux noms bizarrodes . Le premier cas est le cas des noms de chiers contenant des espaces. Supposons que dans un rpertoire :

$ ls -1 bidule.dat le machin.dat truc.dat $ et que lon crive le script suivant 9 : for f in *.dat ; do echo "je vais effacer $f..." rm $f done
9. Qui na comme seul intrt lexemple, puisque rm *.dat fera aussi bien laaire.

5.3 Makele

143

Celui-ci achera, au moment de traiter le chier le machin.dat : Je vais effacer le machin.dat rm: cannot lstat le: No such file or directory rm: cannot lstat machin.dat: No such file or directory Cest--dire que la commande rm tente deacer deux chiers : le chier le et le chier machin.dat Pour faire comprendre la commande rm que le nom du chier est compos des deux mots, on doit crire : for f in *.dat ; do echo "je vais effacer $f..." rm "$f" on quote la variable done Autre situation tordue : lorsque le nom dun chier commence par le caractre tiret (-) par exemple -biduletruc.txt. Dans ce cas : $ ls -biduletruc.txt ls: invalid option -- e Try ls --help for more information. $ rm -biduletruc.txt rm: invalid option -- b Try rm --help for more information. $ ici e est la premire option inconnue la commande ls. Pour rm cest loption b. La solution 10 pour contourner ce problme est dinsrer dans la ligne de commande le couple -- pour indiquer que ce qui suit ne contiendra plus doption. Ainsi : $ ls -- -biduletruc.txt -biduletruc.txt $ On pourra faire de mme pour la commande rm.

5.3

Makele

Lutilitaire make est un outil destin, au dpart, grer la compilation dun projet incluant plusieurs chiers. Grce un chier le makefile on prcise quels sont les chiers recompiler lorsquon apporte une modication un ou plusieurs chiers composant le projet. Dans la pratique, make peut tre utilis dans le cadre dun projet
10. Une autre solution consiste prxer le nom du chier par ./

144

Dvelopper !

dont la gestion ne ncessite pas ncessairement de compilation ; en fait tout projet dans lequel on a besoin un moment donn de construire (ou faire ) un chier partir dun ou plusieurs autres, peut faire appel make. On distinguera donc deux concepts : 1. lutilitaire make lui-mme qui est un programme, dont les versions varient selon le systme ; nous utiliserons ici le make de gnu ; 2. le chier makefile, qui peut porter nimporte quel nom, et qui contient un ensemble de rgles pour dnir : (a) partir de quels chiers on construit le projet ; (b) quels sont les chiers refaire en fonction des modications apportes au projet. Ce chier est interprt par lutilitaire make.

5.3.1

Principes de base

Nous exposons ici les concepts de base de lutilisation de make en nous basant sur un exemple simple : supposons que nous utilisions le logiciel xfig 11 pour crer des dessins et que nous ayons besoin de les insrer dans un document sous la forme dun chier au format PostScript encapsul 12 . Une fois le chier test.fig sauv au format de xfig, on dsire automatiser lexportation en PostScript, avec la commande 13 : $ fig2dev -L eps test.fig > test.eps $ Notion de cible Comme nous le notions un peu plus haut, make permet de fabriquer des chiers. Le chier que lon veut construire sappelle en jargon make, la cible. Supposons que le chier exporter sappelle test.fig, le chier fabriquer se nommera test.eps. On cre alors un chier que lon nomme Makefile contenant :

test.eps : fig2dev -L eps test.fig > test.eps


le caractre indique linsertion dune tabulation. Sa prsence est indispensable pour que lutilitaire make analyse les rgles du chier makefile.
11. Qui est la fois laid et pratique, et dispose de fonctionnalits tonnantes comme son fameux open compound . 12. Le PostScript encapsul dire du Postscript dans la mesure o il est destin tre intgr dans un autre document. Le chier contient dailleurs cette n une bote englobante (bounding box) permettant dobtenir son encombrement. 13. Lexportation peut certes tre ralise interactivement avec la souris, depuis le logiciel xfig, mais tel nest pas notre propos.

5.3 Makele

145

Par dfaut, make cherche excuter la premire cible quil rencontre. Par convention, on dnit une cible all pour tout faire : all : test.eps test.eps : fig2dev -L eps test.fig > test.eps Pour construire le chier test.eps on peut alors au choix lancer : $ make fig2dev -L eps $ ou : $ make test.eps fig2dev -L eps test.fig > test.eps $ On peut dores et dj remarquer que la commande excuter est pralablement ache lcran ; ceci peut tre dsactiv (voir 5.3.5 page 148). Notion de dpendance chaque modication du chier test.fig, il est ncessaire dexporter nouveau en eps. Cest typiquement le genre de tche que lon peut coner make. On insre donc dans le chier Makefile une dpendance qui spcie que la construction du chier test.eps dpend de la date du chier test.fig : test.eps : test.fig fig2dev -L eps test.fig > test.eps La signication de cette dpendance est la suivante : 1. si le chier test.fig est plus rcent que le chier test.eps la prochaine invocation de make construira nouveau test.eps ; 2. sinon une invocation de make donnera : $ make make: test.eps is up to date. $ qui est tout simplement la traduction de est jour .
Lutilitaire make gre les dpendances en utilisant les dates associes aux chiers ; il est donc impratif que lhorloge du systme fonctionne correctement et en particulier, dans le cas dun systme en rseau, que lheure du systme stockant les chiers soit synchrone avec lheure du systme excutant lutilitaire lui-mme.

test.fig > test.eps

146

Dvelopper !

Notion de rgle Lensemble form par une cible, une ou des dpendances, et les commandes sappelle une rgle. La syntaxe gnrale est la suivante : cible : dpendances commande1 commande2 ... commanden Nous verrons par la suite que lon peut dnir des rgles relativement subtiles permettant dautomatiser la gestion de chiers de projets complexes.

5.3.2

Variables

Dans un chier Makefile on peut utiliser des variables, par exemple : FICHIER = test FIGOPTS=-Leps all : $(FICHIER).eps $(FICHIER).eps : $(FICHIER).fig fig2dev $(FIGOPTS) $(FICHIER).fig > $(FICHIER).eps La syntaxe sapparente donc celle du shell : aectation avec loprateur = ; accs avec loprateur $ et les parenthses.

5.3.3

Rgles implicites et variables prdnies

La rgle que lon a construite jusquici est adapte au chier test.fig et lui seul. Un moyen de gnraliser cette rgle dautres chiers est dutiliser ce quon nomme une rgle implicite, permettant de dnir de manire gnrale, comment construire un chier .eps partir dun chier .fig. Un chier Makefile rpondant ce problme peut tre le suivant :
1 2 3 4

EPSFILE = test.eps all : $(EPSFILE) %.eps : %.fig fig2dev -L eps $< > $@

On peut expliquer ce Makefile quelque peu cryptique de la manire suivante : la ligne 3 contient :

5.3 Makele

147

la cible %.eps : c.--d. nimporte quel chier dont lextension est eps ; la dpendance %.fig : un chier de mme nom sauf lextension qui est remplace par .fig ; la ligne 4 contient la commande proprement dite qui utilise des variables prdnies du gnu make : la variable $< pour le premier chier de la liste des dpendances (le chier test.fig dans notre exemple); la variable $@ qui dsigne le chier cible (test.eps). Le mcanisme de cration du chier test.eps est donc le suivant : 1. on doit faire test.eps (cible all) ; 2. pour ce faire, on dispose dune rgle permettant de faire un .eps partir dun .fig ; 3. il existe un chier test.fig dans le rpertoire ; 4. on peut donc faire test.eps.
Il existe bien entendu dautres variables automatiques, parmi celles-ci : $^ qui contient toutes les dpendances de la cible spares par des espaces. Voir le manuel info de gnu make pour plus de prcisions.

5.3.4

Outils sur les variables

On peut galement, grce certaines des fonctionnalits du gnu make, automatiser linstanciation des variables. Dans lexemple qui nous concerne, on peut dans un premier temps mettre dans une variable FIGFILE tous les chiers du rpertoire de travail portant lextension .fig : FIGFILE=$(wildcard *.fig) le mot-clef wildcard que lon peut traduire par joker ou caractre gnrique permet donc ici darriver nos ns. Une deuxime tape consiste crer la variable EPSFILE partir de FIGFILE en remplaant dans le contenu de cette dernire, la chane .fig par la chane .eps : EPSFILE=$(patsubst %.fig, %eps,$(FIGFILE)) Le mot-clef patsubst signie ici pattern substitution. Notre Makefile permettant de grer lexportation de nos dessins est maintenant capable de gnrer les .eps partir de tous les chiers .fig du rpertoire courant. On peut galement y rajouter une cible de nettoyage permettant deacer les chiers .eps lorsquils ne sont plus ncessaires :

148

Dvelopper !

FIGFILE=$(wildcard *.fig) EPSFILE=$(patsubst %.fig, %eps,$(FIGFILE)) all : $(EPSFILE) clean : rm -f $(EPSFILE) %.eps : %.fig fig2dev -L eps $< > $@ Un raccourci de patsubst pour la substitution prcdente est : EPSFILE=$(FIGFILE:.fig=.eps) qui remplace la chane .fig par la chane .eps, la n des mots. La forme patsubst est donc en quelque sorte une gnralisation de la prcdente. Plus gnralement, on peut instancier une variable en utilisant le mot clef shell suivi dune ou plusieurs commandes interprtes par le shell. Un exemple dune telle construction peut tre : # rcupre le dernier fichier TeX sauv TMP=$(shell ls -1tr *.tex | tail -1) # enlve lextension LASTTEXFILE=$(shell echo $(TMP) | sed s/\.tex$$// )
Il existe bien dautres outils de traitement sur les chanes de caractres dans les variables, parmi ceux-ci de nombreux oprateurs de type rechercher/remplacer , des oprateurs propres aux noms de chiers (suppression dextension, du rpertoire, etc.), des boucles de type pour chaque , voir ce sujet le manuel au format info du gnu make.

5.3.5

Options et fonctionnalits diverses

Options de make Comme toute commande unix, make peut prendre quelques options et paramtres : les paramtres doivent correspondre au nom dune cible du Makefile. Dans notre exemple, elle peut tre : $ make bidule.eps ... $ ou : $ make clean rm -f arborescence.eps disques.eps flux.eps pipes.eps $

5.3 Makele

149

si le chier bidule.fig existe. Si make ne trouve pas de rgle pour fabriquer la cible, un message derreur est renvoy : $ make djobi make: Nothing to be done for djobi. $ Si aucun paramtre nest prcis, cest la premire cible rencontre qui est excute. par dfaut make cherche les rgles et les cibles parmi quelques chiers dont les noms sont prdnis (Makefile, makefile, etc.), loption -f permet dutiliser un autre nom pour le chier : $ make -f bidule.mak ... $ loption -n demande make dacher les commandes prvues pour la cible en question, sans les excuter ; ce qui peut tre utile pour dbuguer les Makefile ; notez enn que si la commande dune rgle est prxe par le caractre @, cette commande nest pas ache avant dtre excute comme elle lest par dfaut : cible1 : echo six bleus 1 cible2 : @echo six bleus 2 $ make cible1 cible2 echo six bleus 1 echo de la commande six bleus 1 six bleus 2 pas decho pour cible2 $ Rgles prdnies Comme nous aurons loccasion de le voir au paragraphe 5.4 les utilitaires make, et notamment le gnu make, dnissent certaines rgles dites implicites pour fabriquer des chiers standards . titre dinformation, le gnu make dispose dun catalogue de rgles pour, entre autres : compiler du C, du C++, du Pascal ; faire des ditions de liens ; crer des chiers dvi partir des sources TEX ; ... Nous exploiterons ces rgles prdnies dans la section suivante ddie la compilation dun programme en langage C.

150

Dvelopper !

5.4

Faire des projets en langage C

Nous supposons ici que le lecteur connat le langage C, et prsentons les mcanismes de la cration dun excutable unix partir dun source crit en C. La cration dun programme passe par direntes phases danalyse dont on peut trouver des mthodes dans les livres de gnie logiciel et dalgorithmique. Nous nous attarderons ici sur la phase technique et supposons que le lecteur a un niveau correct en langage C.

5.4.1

Remarques prliminaires

Voici un petit glossaire qui permettra de clarier notre vocabulaire. Les dirents types de chiers que nous rencontrerons seront : Source : cest le chier texte qui contient le programme en langage C ; Excutable : cest le chier binaire qui contient des instructions destines au processeur (code machine) et qui peut tre charg en mmoire par le systme dexploitation ; Objet : cest un chier binaire rsultant de la compilation. Ce chier contient le code machine de certaines fonctions dnies par le programmeur et des appels des fonctions dnies autre part (dans un autre chier objet ou dans une bibliothque ) ; Bibliothque : cest un chier binaire sapparentant un chier objet et contenant le code dun certain nombre de fonctions rendues publiques ; Bibliothque dynamique : il sagit dune bibliothque dont le code machine nest pas insr dans lexcutable, mais qui est charg la demande lors de lexcution. Les actions que nous serons amens eectuer pour la gestion de notre projet seront : Compilation : cest la phase permettant de faire une analyse syntaxique, grammaticale et smantique du chier source et de crer, si cette premire phase se droule sans heurt, un chier objet ; elle se dcompose en preprocessing, compilation et assemblage ; dition de liens : cest la phase qui regroupe les chiers objets et les bibliothques, et qui aprs avoir vri que toutes les fonctions appeles dans les chiers objets pointent bien vers un code objet, cre un excutable. Ldition de liens en anglais se dit to link, et lutilitaire permettant de leectuer est le linker.

5.4.2

tude du cas simple : un seul chier source

Supposons que lon ait crer un excutable partir du chier suivant (voir aussi gure 5.1 page suivante) :

5.4 Faire des projets en langage C

151

simple.c
int f() { ... } int main() { ... f() ... }

simple.o

Compilation

Code de f Code de main


appel f

dition de liens

simple

Code de f Code de main


appel f

source

objet

excutable

Figure 5.1 Cration dun excutable partir dun seul chier source simple.c int f() { return 4; } int main() { int i=f(); printf("Bonjour tout le monde.\n"); return 0; } Cration de lexcutable On peut dans le cas simple dun projet se rduisant un seul chier source, lancer une commande qui cre directement lexcutable : $ gcc -o simple simple.c $ Cest loption -o nom qui permet de crer un excutable dont le nom est nom 14 . Ce nom peut tre choisi librement, aucune extension particulire nest ncessaire. Ce sont les attributs du chier qui le rendent excutable et non son nom.
Ici les phases de compilation et ddition de liens sont ralises automatiquement sans que lutilisateur nait le demander explicitement. Dans ce cas, lditeur de liens trouve le code de la fonction f dans le chier simple.c compil.

Excution On excute le chier rsultant de ldition de liens en lappelant par son nom :
14. Par dfaut ce nom est gnralement a.out, le nom que Thompson avait utilis pour le premier assembleur cr sur les toutes premires versions dunix.

152

Dvelopper !

$ ./simple Bonjour tout le monde. $ Tant que le rpertoire o rside lexcutable nest pas list dans le contenu de la variable PATH, il est ncessaire de prxer lexcutable par le chemin pour pouvoir lexcuter : cest ici la signication du ./ dans ./test. Dans le cas contraire, deux cas peuvent se produire : 1. le systme ne trouve pas votre programme, par exemple si votre programme sappelle bidule et que vous tentez de lexcuter comme suit : $ bidule bash: bidule: command not found $ 2. le systme nappelle pas votre programme. Par exemple si vous avez la mauvaise ide de nommer votre excutable test : $ test Il semble ne rien se passer $ type test test is a shell builtin $ il existe donc une autre commande nomme test et cest elle qui est excute la place de la votre.
Certains objecteront la lecture de ce paragraphe : Mais pourquoi ne pas rajouter le rpertoire courant dans la variable PATH 15 ? La rponse est que pour des raisons de scurit il nest pas conseill de rajouter . (le rpertoire courant) dans cette variable (lire ce sujet Garnkel et Spaord (1996)). Il est donc bon de prendre dores et dj lhabitude dutiliser le fameux ./ . On pourra galement lire le paragraphe 6.1.4 page 170 qui propose une autre solution.

Prprocesseur

Avant dtre compil, un source en langage C est pass la moulinette du prprocesseur. Ce programme va traiter toutes les directives de type #... et les remplacer par du code source. Il supprimera galement tous les commentaires. Le rsultat de ce traitement de texte sera prsent au compilateur. Sous unix, le prprocesseur porte le doux nom de cpp (C preprocessor ). On peut voir cpp en action en utilisant loption -E de gcc, sur un chier exemple : testcpp.c #define N 4 #define carre(a) ((a)*(a))
15. Si vous navez pas lintention dobjecter, continuez donc lire tranquillement en sautant ce qui suit...

5.4 Faire des projets en langage C

153

int main(int argc, char** argv) { int i=N,j,k; j=2*N; k=carre(i+j); return 0; } puis : $ gcc -E testcpp.c int main(int argc, char** argv) { int i= 4 ,j,k; j=2* 4 ; k= (( i+j )*( i+j )); return 0; } $ On peut galement noter que le prprocesseur de gcc dnit plusieurs symboles qui identient le systme sous-jacent. On peut utiliser ces symboles lorsquon veut crer du code C portable dun systme (unix) un autre : $ cpp -dM testcpp.c ... #define __linux__ 1 #define __gnu_linux__ 1 #define __unix__ 1 #define __i386__ 1 #define __INT_MAX__ 2147483647 #define __LONG_LONG_MAX__ 9223372036854775807LL #define __DBL_MIN__ 2.2250738585072014e-308 #define N 4 $ Ces symboles peuvent ensuite tre exploits par des directives de type #ifdef : #if defined __linux__ && defined __i386__ int fonction_de_la_mort(int,int) #else int fonction_de_la_mort(double,double) #endif

154

Dvelopper !

Rpertoires de recherche Lorsque cpp se met en branle, et quil rencontre une directive #include, il va chercher dans une liste de rpertoires le chier spci. On peut voir la liste de recherche par dfaut en utilisant nouveau loption -v de gcc : $ gcc -v -E fantome.c ... gcc version 3.3.5 (Debian 1:3.3.5-13) /usr/lib/gcc-lib/i486-linux/3.3.5/cc1 -E -quiet -v src/testcpp.c #include "..." search starts here: #include <...> search starts here: /usr/local/include /usr/i386-redhat-linux/include /usr/lib/gcc-lib/i486-linux/3.3.5/include /usr/include End of search list. $ On notera que : les chiers inclus par une directive du type #include "chier" sont recherchs partir du rpertoire courant ; on peut inuer sur la liste des rpertoires dans lesquels une directive #include recherche les chiers, grce loption -I de gcc. Si par exemple, on dsire inclure le chier bidule.h se trouvant dans ~/mes_includes, on spciera en ligne de commande : $ gcc -I ~/mes_includes -c monfichier.c avec : monfichier.c #include <bidule.h> /* ou "bidule.h" */ ...

Voir le code assembleur Sur les systmes unix utilisant lenvironnement de dveloppement de chez gnu, la plupart des langages de programmation compils (C, C++, Pascal, Prolog) sont dabord traduits en langage dassemblage, on fait ensuite appel loutil assembleur pour produire le chier objet. Par simple curiosit on peut voir le code assembleur produit pour le chier suivant : testas.c int mafonction(double d) { return 2.3*d-7.4; }

5.4 Faire des projets en langage C

155

On peut demander gcc de sarrter la phase dassemblage (cest--dire ne pas produire le chier objet) avec la commande suivante : $ gcc -S testas.c $ ls -l testas.* -rw-r--r-- 1 lozano lozano 57 Nov 11 18:30 testas.c -rw-r--r-- 1 lozano lozano 640 Nov 11 18:31 testas.s $ On peut alors toujours dans le cadre dune curiosit malsaine examiner le contenant du code assembleur gnr, avec la commande cat : $ cat testas.s ... mafonction: pushl %ebp movl %esp, %ebp subl $16, %esp ... $ On peut ensuite traduire ce code en appelant explicitement loutil assembleur : $ as testas.s -o testas.o $ Autres options intressantes gcc dispose de moult options que nous ne dtaillerons bien videmment pas ici. Voici cependant quelques options utiles connatre pour mener bien vos projets : loption -Onombre 16 met en route direntes mthodes doptimisation pour produire du code plus rapide ou utilisant moins de mmoire. En ce qui concerne nombre, il peut prendre des valeurs de 0 3 (0 : pas doptimisation, 3 : optimisation max) ; loption -Wall ache tous les warnings de compilation ; cest une option incontournable qui permet dattirer lattention du programmeur sur des portions de programmes douteuses (variables non initialises, problme de transtypage, ...) ; -Dmacro est une option passe au prprocesseur qui produit le mme rsultat que linclusion dans le source dune ligne #define macro 1 ;

5.4.3

Compilation spare

Dans le contexte de la compilation spare on a compiler plusieurs modules source. Examinons, en guise dexemple, la situation (gure 5.2 page suivante) dans
16. Ici il sagit dun O majuscule, pour optimisation.

156

Dvelopper !

main.c
int f() {... } int main() { i=g(f()); }

main.o

Compilation

code de f code de main


appel f appel g

dition de liens

main

code de f code de main


appel f appel g

source
mod.c
float g() { ... }

objet
mod.o

Compilation code de g

code de g

excutable source objet

Figure 5.2 Compilation spare laquelle un chier contient le main : #include <stdio.h> #include "mod.h" int f() { return 4; } int main(int argc, char** argv) { int i=g(f()); return 0; }

main.c

qui fait appel une fonction g dont la dclaration se trouve dans mod.h et la dnition dans mod.c : mod.h float g(float); mod.c float g(float f) { return 2*f; } Pour compiler ce projet :

5.4 Faire des projets en langage C

157

1. On doit compiler sparment main.c et mod.c ; 2. Faire ldition de liens partir des chiers objets crs. Compilation en ligne de commande Pour crer un chier objet partir dun source en langage C cest--dire procder la phase de compilation on peut lancer la commande : $ gcc -c main.c -o main.o compilation du premier module $ gcc -c mod.c -o mod.o compilation du deuxime module $ Il faut noter ici loption -c du compilateur qui prcise quon neectue que la compilation et loption -o (output ) prcise que les chiers objet doivent tre stocks dans les chiers main.o et mod.o. dition de liens en ligne de commande Pour passer la phase suivante qui est la cration de lexcutable par le biais de ldition de liens, on utilise la commande suivante : $ gcc -o main main.o mod.o $ Pour eectuer ldition de liens, on prcise donc le nom de lexcutable avec loption -o, et on spcie quels sont les chiers objet lier.

5.4.4

Bibliothques

Lier un excutable avec une bibliothque Pour ce qui concerne Linux et cest le cas de la plupart des systmes unix les excutables crs sont des excutables dynamiques, cest--dire que le code quils contiennent fait appel des bibliothques dynamiques. Soit le source suivant : bonjour.c #include <stdio.h> int main() { printf("bonjour tout le monde\n"); return 0; } et la commande suivante pour crer un excutable : $ gcc -o bonjour bonjour.c $

158

Dvelopper !

bonjour.c
int main() { printf(...); }

bonjour.o

Compilation

Code de main
appel printf

dition de liens

bonjour

source

objet
libc.so

Code de main
appel printf

Code de printf

librairie dynamique

excutable

Figure 5.3 dition de liens dynamique. On peut examiner lexcutable cr avec la commande ldd pour obtenir les bibliothques dont il dpend : $ ldd bonjour libc.so.6 => /lib/libc.so.6 (0x4001a000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) $ On voit donc ici que lexcutable bonjour est li dynamiquement avec la bibliothque standard, dite libC (voir gure 5.3). Ces deux bibliothques sont automatiquement ajoutes ldition de liens, sur le systme Linux de lauteur. La premire contient le code de la bibliothque standard du C (et donc celui de la fonction printf), la deuxime contient les instructions permettant de charger dynamiquement les bibliothques. Dans certaines situations, il faut prciser explicitement que le code fait appel des fonctions dnies dans une bibliothque spcique. Par exemple pour compiler le chier en langage C suivant faisant appel une routine de la bibliothque mathmatique : testmath.c #include <stdio.h> #include <stdlib.h> #include <math.h> int main(int argc, char** argv)

5.4 Faire des projets en langage C

159

bonjour.c
int main() { printf(...); sqrt(...); atof(...); }

bonjour.o

Compilation

Code de main
appel printf appel sqrt appel atof

dition de liens

bonjour

source
libm.a

objet
libc.a

Code de main
appel printf appel sqrt appel atof

Code de sqrt

Code de printf Code de atof

Code de sqrt Code de printf Code de atof

librairies statiques

excutable

Figure 5.4 dition de liens statique. { if (argc==2) /* renvoie la racine de largument 1 */ printf("%f\n",sqrt(atof(argv[1]))); return 0; } on procdera comme suit : $ gcc -c testmath.c -o testmath.o $ gcc -o testmath testmath.o -lm $ Loption -l prcise que lon veut ajouter la bibliothque mathmatique du C ldition de liens. On a alors : $ ldd testmath libm.so.6 => /lib/libm.so.6 (0x40021000) libc.so.6 => /lib/libc.so.6 (0x40043000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) $ on constate donc que lexcutable testmath est li dynamiquement avec la bibliothque mathmatique stocke dans le chier /lib/libm.so.6. Il est possible de forcer la cration dun excutable statique. Pour cela on impose alors au linker dinsrer dans lexcutable le code des fonctions provenant de ou des bibliothques ncessaires :

160

Dvelopper !

$ gcc -static -o testmath.stat testmath.o -lm $ ls -lh testmath* -rwxr-xr-x 1 lozano lozano 12K Nov 11 17:54 -rw-r--r-- 1 lozano lozano 223 Nov 11 17:54 -rw-r--r-- 1 lozano lozano 948 Nov 11 17:54 -rwxr-xr-x 1 lozano lozano 471K Nov 11 17:58 $

testmath testmath.c testmath.o testmath.stat

On pourra noter la dirence de taille des excutables crs. Ceci conrme que dans le cas statique le code des fonctions issu des bibliothques est insr dans lexcutable (voir gure 5.4 page prcdente). O sont les bibliothques ? Lorsquon prcise, lors de ldition de liens, loption -l suivie de m, le linker cherche dans une srie de rpertoires prdtermine, un chier nomm libm.so pour la bibliothque dynamique et libm.a pour la bibliothque statique. Dans le cas o la bibliothque inclure nest pas dans la liste de rpertoires standard, il est ncessaire dutiliser loption -L suivie du rpertoire o se trouve la bibliothque en question. Par exemple, on crira : $ gcc -L ~/lib -o djobi djobi.o -lmabib $ si la bibliothque libmabib.so ou libmabib.a se trouve dans le rpertoire ~/lib. Sil sagit dune bibliothque dynamique (libmabib.so), pour pouvoir excuter le chier djobi, il faudra imprativement indiquer au programme qui charge les bibliothques dynamiques o se trouve libmabib.so. On peut raliser cela en positionnant la variable denvironnement LD_LIBRARY_PATH avec la liste des rpertoires susceptibles de contenir des bibliothques dynamiques : export LD_LIBRARY_PATH=dir1 :dir2 : $LD_LIBRARY_PATH

Dans notre exemple on crira : $ export LD_LIBRARY_PATH=~/lib:$LD_LIBRARY_PATH $ titre indicatif, sous le systme HPUX (lunix de Hewlett Packard) cette variable se nomme SHLIB_PATH. Crer une bibliothque On peut crer des bibliothques qui seront lies statiquement ou dynamiquement lors de ldition de liens. La cration dune bibliothque consiste rassembler un certain nombre de chiers objets dans un seul chier. On supposera, titre dexemple, que lon dispose de trois chiers : mod1.o mod2.o et mod3.o rsultant de la compilation de trois chiers crits en langage C.

5.4 Faire des projets en langage C

161

Statique

Pour crer une bibliothque statique, on pourra utiliser la commande :

$ ar ruv libbidule.a mod1.o mod2.o mod3.o ar: cr eation de libbidule.a a - mod1.o a - mod2.o a - mod3.o $ La commande ar cre un chier bibliothque libbidule.a. Loption ru permet dinsrer en remplaant chaque objet dans larchive, loption v permet de rendre la commande ar plus bavarde quelle ne lest par dfaut. On se reportera la page de manuel pour plus de dtail. Une fois la bibliothque statique cre on peut lutiliser lors dune dition de liens comme suit : $ gcc -L. -o monappli monmain.o -lbidule $ On notera : 1. loption -L pour indiquer quil faut chercher la bibliothque dans le rpertoire courant ; 2. la syntaxe -lbidule qui cherche une bibliothque nomme libbidule.a
Loption -s de la commande ar ou lutilisation de la commande ranlib en lieu et place de ar permet de crer un index des symboles et ainsi dacclerer les ditions de liens que lon ralisera avec la bibliothque.

Dynamique vante :

Pour crer une bibliothque dynamique on utilisera la syntaxe sui-

$ gcc -shared -o libbidule.so mod1.o mod2.o mod3.o $ Pour utiliser une telle bibliothque ldition de liens : $ gcc -L. -o monappli monmain.o -lbidule $
Il faudra sassurer que la variable denvironnement LD_LIBRARY_PATH contienne le rpertoire o se trouve libbidule.so pour que cette dernire puisse tre charge au moment de lexcution de monappli (cf. 5.4.4 page ci-contre).

5.4.5

Se simplier la vie avec make

Encore une fois, nous supposons que le lecteur a sa disposition le gnu make. Ce dernier dnit deux rgles lies la gestion de projet en C et C++. La premire rgle est la suivante :

162

Dvelopper !

%.o : %.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $< qui indique comment construire le chier objet partir du chier C. Les variables CPPFLAGS et CFLAGS permettent respectivement de passer des options au prprocesseur et au compilateur 17 . On pourra donc utiliser par exemple le makefile suivant : makefile.test.1 CFLAGS=-Wall CPPFLAGS=-I/usr/local/machin-chose test.o : test.c ce qui donnera : $ make -f makefile.test.1 cc -Wall -I/usr/local/machin-chose $ -c test.c -o test.o

Le gnu make positionne par dfaut la variable $(CC) la valeur cc. En outre, il dnit un ensemble de rgles pour ldition de liens : sil ny a quun seul chier objet, la rgle est la suivante : % : %.o $(CC) $(LDFLAGS) $< $(LOADLIBES) LDFLAGS permet de passer des options au linker, et LOADLIBES permet dindiquer quelles sont les bibliothques ncessaires ldition de liens. sil sagit dune compilation spare, une rgle du type : main : main.o fichier1.o fichier2.o lancera la compilation des chiers main.c, fichier1.c et fichier2.c, puis ldition de liens avec les trois chiers objets gnrs pour crer lexcutable main. Dans le cas de la compilation spare, il est ncessaire quun des chiers source porte le nom de la cible (ici cest main.c). Voyons deux exemples, le premier pour le cas dun seul chier objet : makefile.test.2 CFLAGS=-Wall CPPFLAGS=-I/usr/local/machin-chose LDFLAGS=-L/usr/local/bidule-truc LOADLIBES=-lbidule test : test.o qui donne : $ make -f makefile.test.2 test
17. En C++, CFLAGS devient CXXFLAGS.

5.4 Faire des projets en langage C

163

cc -Wall -I/usr/local/machin-chose -c test.c -o test.o cc -L/usr/local/bidule-truc test.o -lbidule -o test $ Dans le cas de la compilation spare, on pourra crire le makefile suivant qui permet de crer lexcutable de lexemple du paragraphe 5.4.3 page 155 : makefile.test.3 CFLAGS=-Wall CPPFLAGS=-I/usr/local/machin-chose LDFLAGS=-L/usr/local/bidule-truc LOADLIBES=-lbidule main : main.o mod.o qui donne : $ make -f makefile.test.3 cc -Wall -I/usr/local/machin-chose -c main.c -o main.o cc -Wall -I/usr/local/machin-chose -c mod.c -o mod.o cc -L/usr/local/bidule-truc main.o mod.o -lbidule -o main $ Pour nir cette section sur lutilisation de make dans le cadre dun projet en langage C, nous allons voir comment on peut demander gcc de gnrer pour nous les dpendances du projet. Dans notre exemple de compilation spare, ces dpendances sont les suivantes : mod.o dpend uniquement de mod.c : on doit reconstruire le premier si le dernier a t modi ; main.o dpend de main.c et de mod.h cause de la prsence de la directive #include "mod.h" : si mod.h ou main.c a t modi il faut reconstruire main.o. Cette liste peut tre gnre automatiquement par gcc grce loption -MM qui ache les dpendances lies aux chiers inclus avec la directive du prprocesseur #include"chier". Ainsi : $ gcc -MM main.c mod.c main.o: main.c mod.h mod.o: mod.c $ On peut utiliser cette option de -MM directement dans le makefile lui-mme : CFLAGS=-Wall CPPFLAGS=-I/usr/local/machin-chose LDFLAGS=-L/usr/local/bidule-chouette LOADLIBES=-lbidule

164

Dvelopper !

OBJFILES=main.o est_f.o CFILES=$(OBJFILES:.o=.c) main : $(OBJFILES) depend.dat : $(CC) -MM $(CPPFLAGS) $(CFLAGS) $(CFILES) > depend.dat -include depend.dat Dans ce makefile, on a dni une cible nomme depend.dat dont le but est de construire le chier de dpendances depend.dat. La directive -include permet ensuite dinclure le chier depend.dat mme si celui-ci nexiste pas (cest la signication du tiret qui prxe include). On pourra galement remarquer lutilisation des variables $(OBJFILES) et $(CFILES), cres ici pour rationaliser le makefile (cf. 5.3.4 page 147).

Conclusion
La digestion des informations fournies dans ce chapitre devrait vous donner les bases ncessaires pour crer des scripts divers et varis, lesquels, linstar de ceux de lauteur, iront en se complexiant et samliorant. La connaissance des outils standard dunix (awk, sed, etc.), couple avec celles des scripts shell et du fonctionnement de make, est un atout majeur pour entamer un projet de dveloppement ambitieux. Cest galement un atout pour se lancer dans les tches dadministration systme. La connaissance des principes de base de la compilation sous unix est quant elle importante, car elle permet de comprendre les mcanismes qui entrent en jeu dans la cration dun excutable.

Sommaire 6.1 6.2 6.3 6.4 6.5 Avec le shell Avec vi Avec Emacs Avec Xwindow Installer des logiciels

Chapitre

6
Se mettre laise !
On login (subject to the -noprofile option): if /etc/profile exists, source it. if ~/.bash_profile exists, source it, On exit: if ~/.bash_logout exists, source it. man bash.

velopper un projet cest aussi tre dans un environnement agrable et corresD pondant ses propres besoins. Ce chapitre a pour but de prsenter la conguration de lenvironnement de travail pour que le programmeur puisse se focaliser sur

son travail. Ce chapitre nest pas un inventaire de ce que lon peut congurer sous unix, mais consiste en une prsentation des mcanismes de conguration proprement dits. Nous prsentons donc ici, la conguration du shell, lutilisation demacs et vi, le principe de la conguration dun environnement graphique, ainsi que linstallation de logiciels pour un utilisateur sans privilge. Cette dernire section est termine par une prsentation de la gestion des paquets Debian.

165

166

Se mettre laise !

6.1

Avec le shell

Le shell est lenvironnement de travail de base sous unix. Grce au shell on peut dialoguer avec le systme par le biais de commandes, de scripts, en lanant des logiciels, etc. Il est donc important que cet environnement soit congur le mieux possible par rapport au besoin de lutilisateur. La plupart des congurations eectues au niveau du shell se font : soit laide de variables dites variables denvironnement ; soit en positionnement des variables propres au shell utilis.
Les possibilits de conguration prsentes dans cette section ne prennent leur intrt que couples avec les chiers de dmarrage : la conguration dun environnement utilisateur passe par le positionnement de variables dans ces chiers de dmarrage de manire rendre actif lenvironnement personnalis chaque connexion.

Les variables denvironnement sont des variables qui sont exportes cest-dire transmises aux processus ls du shell, par lune des syntaxes suivantes : export variable=valeur pour la famille sh, ou : setenv variable valeur, pour la famille csh. Voyons sur un exemple comment sont exportes ces variables en considrant le script suivant : testexport.sh #!/bin/bash echo X=$X echo Y=$Y $ X=4 $ export Y=5 $ ./testexport.sh X= Y=5 $

on constate ici que le script testexport.sh connat la valeur de la variable Y mais X, elle, est inconnue car uniquement dnie pour le shell.

6.1.1

Le prompt

On peut changer lallure du prompt en modiant le contenu de la variable PS1. Par exemple : $ PS1="vasyfaitpter# " vasyfaitpter# date Wed Jun 7 11:55:21 CEST 2000 vasyfaitpter#

6.1 Avec le shell

167

On peut avoir un prompt un peu plus volu dans lequel il est possible dajouter entre autres (ce qui suit est spcique bash) : le nom de lutilisateur : \u (user ) ; le nom de la machine : \h (host name ) ; le rpertoire de travail : \w ou \W pour une forme abrge (working directory ) ; la date et lheure : \d et \t (date et time ). Nous avons un petit faible pour le prompt suivant : $ PS1="\u@\h:\w>" lozano@coltrane:~/tcqvatvs/guide> ou plus succinctement : $ PS1="\h\w>" coltrane~/tcqvatvs/guide> Les shells utilisent galement un prompt particulier pour indiquer quune commande nest pas complte bien que lutilisateur ait press la touche Entre . Ce prompt sache sous bash en fonction de la valeur de la variable PS2. Par dfaut cette variable contient la chane > , on peut y mettre par exemple : $ PS2="et?> " $ pour attirer lattention. Ainsi : $ for x in 1 2 3 ; do et?> echo $[x+1] et?> done 2 3 4 $
Les autres shells disposent galement de variables permettant de spcier lallure du prompt ; la syntaxe est lgrement dirente mais lide gnrale est la mme.

6.1.2

Historique des commandes

Comme nous avons pu le noter, les shells dunix proposent gnralement un mcanisme dhistorique permettant aux vaillants utilisateurs de rappeler les commandes dj saisies, pour ventuellement les corriger ou simplement les r-excuter. Lutilisateur peut compulser cet historique avec la commande history : $ history ... ... 510 xdvi guide-unix.dvi &

168

Se mettre laise !

511 512 513 514 $

pdflatex guide-unix acroread guide-unix.pdf & xfig figs/lien_symbolique.fig& history

Par dfaut le shell bash stocke cet historique, chaque fois quon quitte un shell, dans un chier dont le nom est stock dans la variable HISTFILE. Par exemple sur la machine de votre serviteur : $ echo $HISTFILE /home0/vincent/.bash_history $ Deux autres variables sont bonnes connatre : HISTFILESIZE le nombre de lignes mmoriser pour lhistorique ; HISTCONTROL quon peut positionner la valeur : ignoredups pour ne pas stocker dans lhistorique deux commandes identiques ; ignorespace pour ne pas stocker les lignes commenant par un espace ; ignoreboth pour cumuler les deux eets prcdents. Pour info, sur mon systme : $ echo $HISTFILESIZE $HISTCONTROL 500 ignoreboth $

6.1.3

Alias et fonctions

Il est souvent intressant dutiliser les alias pour crer ce quon pourrait appeler des raccourcis de commandes. Par exemple, au lieu dcrire : $ telnet -l lozano coltrane.freejazz.org Trying xx.xx.xx.xx... Connected to coltrane.freejazz.org Escape character is ^]. ... $ On peut dnir un alias : $ alias trane=telnet -l lozano coltrane.freejazz.org $ trane Trying xx.xx.xx.xx... Connected to coltrane.freejazz.org. Escape character is ^]. $

6.1 Avec le shell

169

Contrairement aux alias de tcsh, ceux de bash se contentent deectuer le remplacement de lalias par sa dnition. Mais cette dnition ne peut contenir de rfrence aux arguments de la ligne de commande. Il faut pour cela utiliser des fonctions de bash.

Voici un exemple simple de fonction : supposons que lon se connecte rgulirement sur la machine ayler.freejazz.org mais sous des utilisateurs dirents. On pourrait avoir lide de gnie dcrire : function sshayler() { ${1?:="donnez moi un login plize..."} ssh -X -l $1 ayler.freejazz.org } Une fois cette fonction stocke dans un chier de dmarrage, on pourra simplement taper : sshayler vincent $ pour se connecter en tant quutilisateur vincent sur ayler.freejazz.org, quelle joie... Notons enn quil y a un ordre de priorit dans lexcution des commandes, alias et autres fonctions ; cet ordre est le suivant : 1. les alias ; 2. les fonctions ; 3. les commandes internes ; 4. les commandes externes. Ainsi, si par exemple on dnit un alias : $ alias xdvi=xdvi -keep $ Alors la commande : $ xdvi bidule.dvi & $ fera dabord appel lalias qui lui, fera appel la commande externe. Loption -a de la commande type peut donner des informations ce sujet : $ type -a xdvi xdvi is aliased to xdvi -keep alias xdvi is /usr/bin/xdvi commande externe $

170

Se mettre laise !

6.1.4

Environnement de dveloppement

Lorsquon dveloppe des applications il arrive quon veuille les stocker dans un sous-rpertoire du rpertoire priv tel que, par exemple, ~/bin. Sans modication particulire de lenvironnement les programmes stocks dans ce rpertoire ne pourront tre excuts sans spcier le nom complet du rpertoire de stockage : /bin/mon-excutable Pour remdier cet inconvnient on peut modier la variable denvironnement PATH. Cette variable contient une liste de rpertoires spars par des : dans lesquels le shell va chercher les excutables appels en ligne de commande. Par exemple, sur notre systme : $ echo $PATH /usr/local/Acrobat5/bin:/usr/local/bin: /bin:/usr/bin:/usr/X11R6/bin $ Par consquent, pour rajouter ~/bin dans cette liste, on peut crire : $ export PATH=~/bin:$PATH $ Ceci permet dajouter en dbut de liste notre rpertoire de stockage des excutables maison . Lorsque ces excutables sont lis dynamiquement avec des bibliothques maison , on pourra stocker ces bibliothques dans un rpertoire, par exemple ~/lib ; et pour faire en sorte que leur chargement se droule correctement il faudra mettre jour la variable denvironnement LD_LIBRARY_PATH : $ export LD_LIBRARY_PATH=~/lib:$LD_LIBRARY_PATH $ On pourra aussi se reporter au paragraphe 5.4.4 page 160 pour plus dinformations au sujet des bibliothques dynamiques.

6.1.5

Interaction avec les logiciels

Certains logiciels font appel des variables denvironnement pour fonctionner. On ne peut videmment pas dresser une liste exhaustive de ces variables. Voici cependant quelques exemples qui permettront de comprendre le mcanisme global : beaucoup de logiciels sont conus pour avoir un comportement par dfaut que lon peut surcharger en positionnant une variable denvironnement. certains programmes utilisent la variable EDITOR au moment de lancer ldition dun texte ; ils supposent gnralement que lditeur par dfaut est vi ; si pour une raison ou une autre vous dsirez utiliser un autre diteur : $ export EDITOR=mon_diteur $

6.1 Avec le shell

171

fera laaire ; la variable TERM indique au systme le type de terminal utilis. La valeur passepartout est le vt100 compatible avec la plupart des terminaux et qui sut la plupart des applications. On pourra donc crire : $ export TERM=vt100 $ reset ... $ en cas de liaison dicile avec une machine distante possdant un systme nidentiant pas votre type de terminal. la variable PAGER dnit le programme charg dacher les pages de manuel avec la commande man ; ... En rgle gnrale, les pages de manuel contiennent une rubrique baptise Environnement qui dcrit les variables denvironnement ayant une inuence sur le programme en question.

6.1.6

Sauvegarder ses congurations grce aux chiers de dmarrage

Lorsque le systme lance un processus de shell, ce dernier va lire suivant sa famille sh ou csh dans un ordre dni, un certain nombre de chiers pouvant contenir des commandes ou des initialisations de variables denvironnement. Ces chiers sont appels chiers de dmarrage et portent gnralement le doux nom, de login, profile, et autre monshellrc... Pour comprendre le fonctionnement des chiers de dmarrage, il faut dabord distinguer les trois types de lancement dun shell : login shell : ou shell de connexion, il est lanc lors de la connexion (ou login ) sur le systme ; non login interactive shell : il sagit dun shell lanc autrement que par une procdure de connexion, par exemple par lintermdiaire dune fentre xterm ; non interactive : shell lanc pour interprter un chier de commande ; Dans le cas du shell bash, les chiers lus sont les suivants : login shell : ~/.bash_profile ; non login shell : ~/.bashrc ; non interactif : le chier dont le nom est dans la variable ENV. Voici un exemple de conguration classique des chiers de dmarrage. De manire tenir compte la fois de la phase de connexion (login shell) et des shells interactifs (non login interactive shell), une solution est darticuler la lecture des chiers ~/.bash_profile et ~/.bashrc comme suit :

172

Se mettre laise !

/.bash_profile if [ -f ~/.bashrc ]; then . ~/.bashrc fi # exportation de variables : ... et :

/.bashrc # dfinition dalias et fonctions ...

Ainsi, les variables utiles la conguration de lenvironnement sont initialises une fois pour toute la connexion. Ce qui suit est un extrait des chiers de conguration de lauteur : /.bash_profile if [ -f ~/.bashrc ]; then . ~/.bashrc fi export PATH=~/bin:$PATH export MANPATH=~/man:$MANPATH export POVINI=~/povray3.6/povray.ini export TEXINPUTS=~/LaTeX/myinputs: export LD_LIBRARY_PATH=~/lib:~/src/lib:~/lib/GL PS2="et?> " HISTCONTROL=ignoreboth umask 027 et : alias alias alias alias alias alias alias rm=rm -i mv=mv -i cp=cp -i up=cd .. uup=cd ../.. ou=find . -name ltr=ls -ltr

/.bashrc

function cleantex() { /bin/rm -f $1.aux $1.log $1.bbl $1.blg $1.mtc* $1.?dx\

6.1 Avec le shell

173

$1.?lg $1.?nd $1.toc }


Pour ajouter un rpertoire personnel la liste des rpertoires de recherche, le shell bash pris comme support dans ce manuel permet dcrire : export PATH=~/bin:$PATH Cependant certains shells ne procdent pas lexpansion du ~, il faudra alors crire : PATH=~/bin:$PATH export PATH

6.1.7

tude(s) de cas

A Un autre L TEX A Lorsquon utilise ce merveilleux et monstrueux logiciel quest L TEX pour produire des documents, on fait appel deux programmes distincts : on lance le visualiseur de document xdvi avec la commande : xdvi madoc.dvi &

puis, intervalles rguliers, on lance la compilation du source : latex madoc.tex Une fois la compilation termine, il faut rendre active la fentre de logiciel xdvi pour visualiser les changements dans le document. Or, en lisant la documentation de xdvi on peut tomber sur : SIGNALS When xdvi receives a USR1 signal, it rereads the dvi file. Lide qui germe donc dans lesprit du lecteur desprit vif est la suivante : il serait intressant de pouvoir envoyer automatiquement ce signal au programme xdvi chaque A compilation avec L TEX, et ce pour viter davoir cliquer sur la fentre du visualiseur pour la rendre active... Voici lalgorithme propos :
Dbut

lancer la compilation du document D.tex trouver le pid p du xdvi qui visualise D.dvi Si p existe Alors envoyer le signal USR1 au programme de pid p
FinSi Fin

174

Se mettre laise !

Et voici comment on peut implmenter cet algorithme en shell : function latex() { # on enlve lventuelle extension j=${1%.*} # appel du vrai LaTeX command latex $j # rcupration du pid de(s) xdvi(s) pids=$(ps -ef | grep xdvi.bin | grep $j.dvi \ | awk {print $2}) # envoi du signal USR1 pour chacun deux for p in $pids ; do kill -USR1 $p done } On notera que dans la fonction, on fait appel command latex pour viter un appel rcursif la fonction. Le reste de la fonction fait appel des outils (ps, grep, awk, boucle for du shell) prsents dans les chapitres prcdents (en particulier les chapitres 2 et 3). Il est intressant de noter que la commande fuser permettant dobtenir la liste des processus utilisant un chier particulier, nous ore une autre solution au problme. En eet si on tape : $ fuser guide-unix.dvi guide-unix.dvi: 2587 $ alors le systme nous indique que le processus de pid 2587 a ouvert le chier en question. La version de fuser de votre serviteur permet en outre laide de loption -k denvoyer un signal particulier au(x) processus dtect(s). Ainsi : $ fuser -k -USR1 guide-unix.dvi $

permet denvoyer le signal USR1 aux processus utilisant guide-unix.dvi... Une poubelle Sous unix, lutilisateur na gnralement pas la possibilit de rcuprer un chier quil a eac. La solution adopte par les systmes dexploitation consiste proposer lutilisateur une corbeille dans laquelle on dplace les chiers plutt que de les eacer rellement 1 . Lorsque la corbeille est vide, les chiers sont eectivement
1. Ceci sans parler des sauvegardes journalires des donnes que tout bon administrateur systme doit assurer...

6.1 Avec le shell

175

eacs. Il est tout fait possible denvisager de congurer lenvironnement de travail pour mettre en place un tel mcanisme. Voici quelques bauches que le lecteur pourra lui-mme faire voluer selon ses besoins : corbeille CORBEILLE=~/.corbeille # # nouvelle commande rm # function rm() { # si la corbeille nexiste pas, on la cre if [ ! -d $CORBEILLE ]; then mkdir $CORBEILLE fi # on dplace tous les fichiers de la ligne de commande # dans la corbeille mv -f "$@" $CORBEILLE } Cette nouvelle commande rm peut tre utilise aussi bien pour un ensemble de chiers que pour un ensemble de rpertoires. On peut galement crer une commande de vidange de la corbeille : corbeille function vidange() { rm -rf $CORBEILLE } Cette nouvelle version de la commande rm est limite par le fait que tous les chiers et rpertoires eacs sont dplacs dans le mme rpertoire (celui faisant oce de corbeille). Par consquent : il ny aucune trace dans la corbeille du rpertoire dans lequel tait initialement stock le chier ou rpertoire eac ; si on eace deux chiers portant le mme nom, seul le dernier sera sauvegard dans la poubelle ; si on eace un rpertoire portant le nom dun chier dj eac le shell nous enverra sur les roses avec le message : mv: cannot overwrite non-directory /.corbeille/dir with directory dir/ Enn, cette fonction ne traite pas le cas des options ventuellement passes en ligne de commande. Pour viter dcraser un chier dj dans la corbeille, on peut utiliser loption backup de la commande mv du projet gnu :

176

Se mettre laise !

mv -f --backup=numbered $* $CORBEILLE Cette option permettera de numroter les chiers dupliqus en faisant appel la syntaxe : nom du chier.~numro~ Par exemple, toutes les sauvegardes du chier bidule.txt, seront nommes : bidule.txt bidule.txt.~1~ bidule.txt.~2~ bidule.txt.~3~ ...

6.2

Avec vi

vi prononcer vi ae est lditeur de rfrence des systmes unix; cest en quelque sorte le dnominateur commun des diteurs de texte dans la mesure o la majorit des systmes unix possde au moins cet diteur. Cest une des raisons pour lesquelles il est bon de connatre le principe de son fonctionnement. Le concept le plus important de vi est quil fonctionne selon deux modes : Mode commande : dans ce mode on peut passer des ordres ddition vi (eacement dune ligne, dplacement du curseur, etc.). Mode insertion : dans ce mode on peut saisir du texte. Ce principe quelque peu archaque 2 peut surprendre au premier abord, cest pourquoi nous avons dress une liste des pourquoi utiliser vi : parce que dans certaines situations, seul vi est disponible : par exemple lorsquon se connecte sur une machine distante pour modier un chier ; parce que cest puissant , en eet derrire un aspect simpliste 3 et rudimentaire 4 se cache une multitude de fonctionnalits surprenantes pour ldition de texte ; parce que cest lger , donc le lancement est trs rapide, et peu de ressources mmoire ou calcul sont greves ; et enn parce que a fait snob ;-) 5 Aprs cette introduction, voici quelques commandes de vi connatre, ces commandes susent survivre dans la majorit des cas :

i ESC :w

passe en mode insertion (on peut alors taper du texte) ; revient en mode commande (quitte le mode insertion) ; sauve le chier ;

2. Ne pas taper svp. Je madresse aux djeuns qui ne connaissent que des diteurs o il y a de jolis onglets/boutons/menus/icones/... 3. cf. note 2. 4. cf. note 2. 5. Parmi les querelles de clochers du monde unix, le dbat Emacs versus vi est trs clbre. Cette remarque douteuse narrange dailleurs pas les choses.

6.2 Avec vi

177

:q

quitte vi. Cette commande et la prcdente peuvent tre utilises en mme temps (:wq) et dans le cas o lon doit forcer la sauvegarde ou la sortie il est ncessaire dajouter un !, par exemple (:q!), pour quitter vi sans sauver mme si le chier a t modi ; eace une ou n lignes ; passe en mode insertion aprs le curseur ; va en dbut ou n de ligne (ces deux commandes rappellent la syntaxe des expressions rgulires) ; cherche la chane motif dans le texte ; cherche loccurrence suivante ; rpte la dernire action ; remplace par texte la portion comprise entre le curseur et la n du mot courant (change word ) ; avance ou recule dun mot ; insre une ligne vierge et commence linsertion en dessous ou au dessus du curseur ; copie une ou n lignes (yank ) colle le texte copi (ou coup) par nimporte quelle commande qui copie (par exemple Y) ou qui coupe (par exemple d) en dessous ou au dessus de curseur ;

dd ou n dd a ou $ / motif n . cw texte ESC w ou b o ou O Y ou n Y p ou P

Voici un exemple de rechercher/remplacer dans vi 6 : $ vi bidule ... $ Puis une fois dans lditeur taper les commandes suivantes pour remplacer la chane machin par la chane chose : 1. /machin 2. cw chose 3. n 4. .
Entre Esc

5. rpter partir de 3 tant que cest ncessaire. :%s/machin/chose/g


6. Accrochez-vous...

cherche la premire occurrence la remplace cherche la suivante

la remplace nouveau

Le mme remplacment peut se faire en mode commande en tapant :

178

Se mettre laise !

Sur certains systmes, le vi disponible est vim pour vi improved (soit vi amlior , ce qui en dit long sur ltat du premier 7 ). Cette version est moins lgre que la version originale mais apporte beaucoup de fonctionnalits et des facilits pour sa conguration.

6.3

Avec Emacs 8

Prsenter Emacs en quelques pages est une tche dicile. Donner envie au lecteur dutiliser ce logiciel extraordinaire en est une autre. La premire chose que lon peut dire au sujet de cet diteur de texte tout faire est que son nom est une contraction de Editing MACroS et que son origine remonte 1976 date laquelle Richard M. Stallman, fondateur du projet GNU, commena le dveloppement dEmacs. Emacs fait partie des stars des logiciels libres, dans le sens o cest sans doute A un modle de logiciel ouvert. linstar de L TEX, les utilisateurs enthousiastes ont montr que grce cette ouverture on pouvait ajouter de nombreuses fonctionnalits ce logiciel fascinant. Emacs est essentiellement utilis pour les facilits quil apporte ldition de chier source au sens large du terme ; lauteur qui en a une exprience somme toute assez maigre a pu diter les chiers suivants : scripts shell, langage A C, C++, Lisp, Pascal, Perl, PostScript, script Matlab, chiers L TEX et HTML, des Makeles, script de Persistence of Vision, et tout ceci en bnciant de linsertion de commentaires, de lindentation automatique et de la mise en vidence des mots clefs en couleur, entre autres choses. Mais bien que son rle premier soit ldition de chiers texte, il est aussi capable de jouer aux tours de hano (M-x hanoi), au morpion (M-x gomoku), Ttris (M-x tetris), de vous psychanalyser (M-x doctor), de lire les mails et les news, de transfrer des chiers par ftp, de compulser un calendrier (M-x calendar) permettant notamment de savoir que la date du jour (4 juillet 2000) correspondant au septidi de Messidor de lanne 209 de la Rvolution franaise, diter des chiers en hexadcimal (M-x hexl-mode), jen passe et des pires... Cette section est une introduction aux concepts fondamentaux dEmacs ainsi quaux commandes connatre pour y prendre got. Nous donnons en n de ce paragraphe quelques ides pour chercher de laide pour les explorations futures.

6.3.1

Concepts de base

Pour commencer, il est important de noter quEmacs a la particularit de pouvoir sexcuter aussi bien en mode texte dans un terminal quen mode graphique (ou fentre) en sappuyant sur un serveur X. Dans lun ou lautre des modes, on pourra utiliser les commandes prsentes dans cette section.
7. cf. note 5. 8. Cette section est beaucoup plus longue que celle consacre lditeur vi. Je suis un utilisateur quotidien et enthousiaste dEmacs, cest pourquoi de manire totalement subjective et partiale, je mtendrais quelque peu sur le sujet...

6.3 Avec Emacs

179

Mini buffer

Window

Frame

6
Buffers

Figure 6.1 Emacs dans un environnement graphique

180

Se mettre laise !

Les objets graphiques qui composent lditeur Emacs sont les suivants : Frame : Emacs est multi-fentre, et nomme chacune delles frame 9 . La gure 6.1 montre une session avec deux frames ; Window : les frames contiennent une ou plusieurs windows. La gure 6.1 montre trois windows : une dans la frame de gauche et deux dans la frame de droite ; Buer : les donnes qui sont aches dans les windows sont des zones mmoires appeles buers. Ces zones contiennent du texte diter. Un buer peut tre sauvegard sur disque, cr partir dun chier, etc. En fait sous Emacs, tout est buer ; Minibuer : buer particulier compos dune ligne tout en bas de chaque frame. Cest dans cette zone qua lieu la majeure partie des interactions avec lutilisateur ; Status bar : ou barre dtat, situe en bas de chaque window, elle indique direntes informations ; ici : le nom du chier, lheure, la position du curseur, le mode ddition (cf. plus bas), etc. :

Menu : chaque frame dispose dun menu permettant de lancer diverses fonctions. Les deux autres concepts fondamentaux sont les suivants : Commandes : toute action excute dans lditeur, quelle quelle soit, est le rsultat de linterprtation dune fonction Lisp 10 . Cette fonction peut tre appele par son nom, par une combinaison de touches, ou par le biais du menu. Il faut noter que toutes les fonctions nont pas ncessairement de combinaison de touches ou dentre dans le menu ;

Mode : chaque buer est pilot par Emacs dans un mode particulier. Le mode en question correspond la manire dont les commandes vont tre interprtes. titre dexemple, les fonctions dindentation, de mise en couleur, de mise en A commentaire, sont interprtes diremment selon quEmacs est en mode L TEX, ou en mode C pour ne citer que ceux-l.
9. Nous conserverons ici dessein le jargon anglais dEmacs en utilisant une fonte particulire. 10. Le Lisp dont le nom vient de langlais list processing est le langage utilis pour concevoir les direntes extensions dEmacs. La conguration de celui-ci demande dailleurs de connatre les rudiments de ce langage.

6.3 Avec Emacs

181

6.3.2

Notations utilises

Dans les diverses documentations que lon trouve traitant dEmacs, et dans emacs lui-mme, on retrouve les notations suivantes au sujet des combinaisons de touches : C-t : pour une pression sur Ctrl et la touche t ; M-t : dsigne lutilisation de la touche Meta : une pression sur Alt et la touche t, ou dfaut : une pression sur Esc puis la touche t. ESC : la touche Esc ; RET : la touche Entre ; SPC : la barre despacement ; Ainsi : M-x signie Alt et x ou Esc puis x ; C-x C-c signie Ctrl et x et Ctrl et c , que lon peut obtenir en maintenant Ctrl enfonce tout en tapant dans lordre x puis c .

6.3.3

Appeler une commande

partir de lexemple de la commande douverture dun chier, nous allons passer en revue quelques-unes des notions importantes dEmacs concernant lappel des commandes. On peut appeler la commande douverture de chier (find-file) de quatre manires : par son nom laide de la combinaison : M-x find-file ; laide de la combinaison : C-x C-f ; laide dun ventuel raccourci clavier dni sur votre installation ; laide de lentre File/Open File dans la barre de menu. Le minibuffer Dans les trois cas le lancement de cette commande donne le focus au minibuer, et lutilisateur doit entrer le nom du chier quil veut ouvrir ou un nom quelconque pour crer un nouveau buer. M-x find-file Entre monfichier.txt Entre
) permet Dans le minibuer la touche Espace ( ) ou Tab ( de complter automatiquement un nom de commande ou un nom de chier. En cas dquivoque une pression sur ces touches cre une nouvelle window avec un buer contenant les direntes alternatives possibles la compltion. Par exemple si on tape :

M-x find on fait apparatre une fentre contenant le buer suivant :

182

Se mettre laise !

Click mouse-2 on a completion to select it. In this buffer, type RET to select the completion near point. Possible completions are: find-alternate-file find-dired find-file-at-point find-file-other-frame find-file-read-only find-file-read-only-other-window find-function-at-point find-function-other-frame find-grep-dired find-tag find-tag-other-frame find-tag-regexp find-variable-at-point find-variable-other-window

find-alternate-file-other-window find-file find-file-literally find-file-other-window find-file-read-only-other-frame find-function find-function-on-key find-function-other-window find-name-dired find-tag-noselect find-tag-other-window find-variable find-variable-other-frame

qui montre donc toutes les commandes dont le nom commence par find . Donc en tapant les deux premiers caractres : M-x find fi
Entre

on complte jusqu find-file et il est alors possible de saisir le nom du chier que lon veut charger. On notera que la compltion automatique fonctionne aussi sur les noms de chiers. Enn, la fentre dinformation vous indique galement que vous pouvez utiliser le bouton du milieu de votre souris 11 pour choisir le chier parmi la slection. Stop ! Pour interrompre une action entreprise dans le minibuer, il faut utiliser la combinaison C-g qui appelle la fonction keyboard-quit. Cette fonction est galement utile pour interrompre lexcution dune commande.

Lorsquon dbute sous Emacs, on a tendance laisser traner son curseur dans le minibuer ; ce qui peut entraner un comportement trange de lditeur qui vous narguera par des : Command attempted to use minibuffer while in minibuffer dans ce cas une ou deux pressions sur C-g remet Emacs dans le droit chemin.
11. Si votre souris na quun bouton, cest que vous avez un Machinetoque, changer alors dordinateur ; si votre souris na que deux boutons, vous vous tes fait avoir par le protocole micro logiciel , changez de souris.

6.3 Avec Emacs

183

Historique La combinaison C-x ESC ESC rappelle la dernire commande excute. Les touches et dans le minibuer permettent alors de choisir et ventuellement modier lune des dernires commandes excutes :

Redo: (find-file "/tcqvatvs/guide/chap-configurer.tex" 1) cet historique permet en outre davoir une premire ide de la syntaxe dappel des commandes Lisp. Arguments et rptition Certaines commandes dEmacs attendent un argument numrique. On peut passer cet argument en prxant lappel de la commande par C-u n, pour passer la valeur n. Si la commande en question nattend pas dargument elle sera simplement excute n fois. Par exemple la squence : C-u 24 a, insre : aaaaaaaaaaaaaaaaaaaaaaaa dans le buer courant.

6.3.4

Manipuler les objets dEmacs

Les objets dEmacs frame, window, buer, etc. peuvent tre manipuls via un certain nombre de fonctions quil est souhaitable de connatre. Frame les tches courantes autour des frames sont la cration et la destruction. On cre une nouvelle frame avec : C-x 5 2 ou : M-x make-frame-command par le menu File/Make New Frame on dtruit celle sur laquelle on se trouve avec : C-x 5 0 ou : M-x delete-frame en cliquant sauvagement sur le bouton delete window de son gestionnaire de fentres prfr.
Il est bien vident que les frames dEmacs ne sont disponibles que dans un environnement permettant le multi-fentrage comme X window...

Window on peut crer de nouvelles fentres dans une frame partir de la premire : C-x 3 divise horizontalement la window actuelle ; C-x 2 divise verticalement la window actuelle ; C-x 1 ne conserve que la window contenant le curseur

184

Se mettre laise !

Figure 6.2 The Emacs quad tree

ces combinaisons de touches correspondent respectivement aux fonctions : M-x split-window-horizontaly ; M-x split-window-verticaly ; M-x delete-other-windows. Il est particulirement intressant de noter quaprs une srie de C-x 2 et C-x 3 dans cet ordre on obtient un quad tree la mode Emacs (voir gure 6.2). Mais ne nous garons pas dans des considrations douteuses, puisquon peut aussi redimensionner une fentre coupe en deux horizontalement (aprs un C-x 2) laide de : C-x ou M-x enlarge-window ; en dplaant la status bar laide du bouton du milieu de votre souris.

6.3 Avec Emacs

185

Buer on peut tuer un buer, lorsquon a ni dditer un chier, ou simplement parce que le buer en question nest plus utile lors de la session, avec : C-x C-k ou M-x kill-buffer, ou : le menu File/Kill Current Buffer Notez bien que si le buer a t modi depuis la dernire sauvegarde, vous devrez rpondre quelques questions qui vous seront gentiment poses par le truchement du minibuer. Il est galement possible davoir la liste de tous les buers ouverts depuis le dbut de la session avec : C-x C-b ou M-x list-buffers, ou : par le menu Buffers/List All Buffers Une partie de cette liste est visible dans les premires entres du menu Buffers.

6.3.5

Les tches basiques

Se dplacer / effacer Malgr ce que dit le tutorial dEmacs, qui prconise lusage des combinaisons (C-f, C-b, C-n et C-b) pour dplacer le curseur, il semble raisonnable de penser quen ce dbut de sicle, on peut utiliser les ches du clavier. Il est cependant intressant de noter que ces raccourcis existent ils sont facilement mmorisables : forward, backward, next, previous pour les utiliser en cas durgence. Les autres combinaisons utiles pour se dplacer sont : C-e/C-a va en n/dbut de ligne ; C- et C- va un mot vers la gauche et vers la droite respectivement (on pourra galement utiliser M-f (forward) et M-b (backward) ; C- et C- va un paragraphe vers le haut et vers le bas respectivement ; C-l centre verticalement le curseur au milieu de la window courante en dplaant le texte le cas chant ; M-< et M-> permettent daller ou dbut et la n du buer, ces fonctions sont galement disponibles avec les touches Home et Fin si votre clavier en dispose ; Pour eacer du texte, les touches delete et backspace ont leet escompt. On peut en outre eacer partir du curseur jusqu la n de la ligne avec C-k. Cette opration sapparente un couper puisque le texte eac est stock pour ventuellement tre coll. Notez galement que M- eace le mot avant le curseur. Slectionner Pour slectionner une zone, il sut de se placer au dbut de la zone que lon veut traiter et appuyer sur C-SPC. En fonction de la conguration dEmacs, lorsquon dplace le curseur, on voit apparatre la zone slectionne en inverse vido . La souris permet galement de slectionner une zone, bien entendu.

186

Se mettre laise !

Copier, Couper, Coller... Une fois la zone slectionne, on peut procder aux trois oprations classiques : C-w : couper ; C-y : coller ; M-w : copier. Le coller dEmacs apporte beaucoup de souplesse, puisquune fois la squence C-y entre, on peut ventuellement choisir le texte coller grce la combinaison M-y qui permet de choisir une selection parmi les zones copies ou coupes jusqu prsent. Dfaire, refaire Emacs dispose dun undo permettant de remonter jusquaux premires modications apportes lors du dmarrage de la session. Le undo sobtient grce la combinaison C-_ ou C-x u 12 . Une proprit intressante du undo dEmacs est quil peut aisment se transformer en redo . Pour cela il sut de taper le fameux C-g. Si on peut voir le undo comme une remonte vers le pass , un C-g permet de faire en sorte que lutilisation du C-_ suivant revienne vers le futur : C-_ C-_ C-g C-_ Manipulation de chiers Les trois oprations qui sont indubitablement utiles sont : La sauvegarde : qui sauve le contenu du buer dans un chier est obtenue grce : C-x C-s ou M-x save-buffer, ou : menu File/Save Buffer. abcdef abcde abcd abcd abcde undo undo glurps ! redo

Le chargement : permet dinsrer le contenu dun chier dans un buer tout neuf. Si le chier nexiste pas, un buer est cr portant le nom spci et la sauvegarde suivante crera le chier sur le disque. Nous avons vu prcdemment que le chargement pouvait tre ralis grce : la commande M-x find-file, ou le raccourci C-x C-f, ou le menu File/Open File. La mise jour : il arrive que le chier dont on a un buer dans Emacs soit modi par une source extrieure (un autre programme). Dans ce cas la copie dont
12. le premier est plus simple sur un clavier franais.

6.3 Avec Emacs

187

on dispose dans le buer nest plus jour par rapport au contenu du chier, il faut donc utiliser la commande : M-x revert-buffer ou : menu File/Revert Buffer qui recharge le contenu du chier dans le buer courant. Dans cette situation, Emacs avertit lutilisateur par plusieurs messages dans le minibuer. Dautres oprations peuvent tre utiles connatre comme le clbre sauver sous (C-x C-w ou M-x write-file) qui sauve le buer dans un chier portant un autre nom. Est galement intressante M-x insert-file (ou C-x i) qui insre lendroit o est le curseur le contenu dun chier. Rechercher / Remplacer Voici les deux fonctions connatre pour rechercher des chanes de caractres dans un buer et ventuellement les remplacer. Juste chercher... La premire est la fonction M-x isearch-forward dont un raccourci pratique est C-s. Ds que la combinaison C-s est presse, Emacs attend par lintermdiaire du minibuer les lettres composant la chane de caractres rechercher. chaque lettre entre, le curseur se dplace sur la premire partie du texte correspondant la chane forme jusque l. On a alors plusieurs alternatives : la chane est introuvable (message Failing I-search) ; la chane a t trouve : en pressant nouveau sur C-s le curseur se positionne sur loccurrence suivante ; si on presse C-g le curseur se repositionne l o il se trouvait au dbut de la recherche et celle-ci sarrte ; si on presse Entre , le curseur reste dans sa position actuelle et la recherche sarrte. Le pendant de C-s est C-r qui eectue le mme travail, mais en cherchant vers le haut (M-x isearch-backward). On peut dailleurs passer du backward au forward sans problme lors dune recherche. Chercher et remplacer La fonction M-x query-replace, dont le raccourci est M-%, permet, comme son nom lindique, de chercher une chane et de la remplacer par une autre. Le minibuer vous demandera donc deux chanes pour eectuer les remplacements. Si une chane est trouve, Emacs vous demandera ce que vous dsirez faire, vous pourrez alors rpondre : y pour remplacer ; b pour ne pas remplacer ; ! pour remplacer partout ; q pour quitter ; h pour voir les autres possibilits ! Une particularit de cette commande est quelle peut agir uniquement sur une zone si elle est pralablement slectionne. Notez aussi quEmacs est gnralement congur

188

Se mettre laise !

pour prserver les majuscules dans le remplacement, cest--dire que dans un texte o lon demande de remplacer a par b , A sera remplac par B . Il existe une version amliore de la commande M-x search-replace : la commande query-replace-regexp (dont le raccourci est M-C-%) qui permet de chercher et remplacer des chanes spcies partir dexpressions rgulires. Par exemple : M-C-% Entre ^b.*e$ Entre hopl Entre dans le texte de gauche, donne le texte de droite : bcde bbd cde bqmlksdjfe hopl bbd cde hopl

Nous rappelons que ^b.*e$ signie : une ligne qui commence par b suivi dune srie de caractres et nissant par e . Indenter / Commenter Un des plaisirs que lon peut tirer de lutilisation de ce gros patapouf dEmacs 13 est lindentation automatique des sources et linsertion de commentaires 14 . Il ny a rien de dicile apprendre dans ce paragraphe puisque tout est fait automatiquement en fonction du mode utilis. Prenons lexemple dun chier C++. chaque pression le curseur se mettra la bonne place , cest--dire en fonction sur la touche de limbrication des diverses boucles et autres blocs. Si le curseur ne se met pas une position correcte cest que le source comporte une erreur de syntaxe. Il y a trois commandes connatre : M-x indent-region qui indente la zone slectionne en fonction du mode utilis ; M-x comment-region qui commente la rgion slectionne en fonction de la syntaxe du langage correspondant au mode dEmacs pour le buer ; C-u M-x comment-region qui retire les commentaires de la zone slectionne.
LorsquEmacs est en mode langage C, on peut commenter une rgion pralablement slectionne avec le raccourci C-c C-c. Pour dcommenter on pourra utiliser le raccourci C-u C-c C-c.

6.3.6

Emacs et les Makeles

La commande M-x compile permet dexcuter une commande dans un shell ls dEmacs. Ainsi lorsquon lance cette fonction, le minibuer attend une commande excuter :
13. Des mauvaises langues disent que Emacs est lacronyme de Emacs makes a computer slow . 14. Notez bien que dautres diteurs comme vim pour ne pas le citer, sont galement capables de ce genre de prouesses.

6.3 Avec Emacs

189

(a)

(b)

Figure 6.3 Commentaires et indentation automatique : pour passer de la gure (a) la gure (b), on a appel la fonction M-x indent-region aprs avoir slectionn le buer entier ; puis aprs avoir slectionn le corps de la fonction f(), on a fait appel la commande M-x comment-region pour commenter son code.

190

Se mettre laise !

(a)

(b)

Figure 6.4 Compilation dans Emacs Compile command: make On peut alors remplacer make par la commande de son choix, par exemple echo salut les coins coins et presser la touche Entre . La commande est alors excute dans un shell et le rsultat est ach dans un buer nomm *compilation* : cd /home/vincent/LaTeX/tcqvatvs/guide/ echo salut les coinscoins salut les coinscoins Compilation finished at Wed Jul 5 23:17:32

Ce qui nest certes pas passionnant. Cependant si en lieu et place dun bonjour aux canards, on invoque make, cela devient plus intressant. En eet, en ditant un chier C (par exemple), on peut lancer la compilation dans Emacs. Lditeur devient alors un environnement de dveloppement qui se sut lui-mme. Le buer *compilation* peut en eet tre utilis pour cerner les erreurs de compilation. La gure 6.4b montre le contenu de ce buer lorsque le source contient une erreur. Un clic de souris avec

6.3 Avec Emacs

191

le bouton du milieu sur la ligne contenant lerreur positionne le curseur la ligne du programme source correspondant.

6.3.7

Personnaliser

Macros Si on reprend ltymologie du mot Emacs on pense macro . Les macros sont des squences de touches que lutilisateur peut enregistrer et rutiliser plus tard. Le principe denregistrement dune macro est le suivant : 1. commencer lenregistrement ; 2. tapoter sur le clavier la squence de touches quon veut mmoriser ; 3. nir lenregistrement ; 4. donner un nom la macro dnie ; 5. stocker ventuellement le code de la macro. Le commencement et la n de lenregistrement sont stipuls par les commandes M-x start-kbd-macro et M-x end-kbd-macro dont les raccourcis lgants sont C-x ( et C-x ) . Toute touche tape entre le dbut et la n de lenregistrement est stocke dans la macro courante. On peut ensuite donner un nom la macro dnie avec M-x name-last-kbd-macro, et enn insrer le code Lisp de cette macro dans le chier de dmarrage laide de la commande M-x insert-named-kbd-macro. Voyons un exemple : cest une pratique courante en langage C, dinsrer dans les chiers include la directive de compilation suivante : #ifndef __BIDULE_H #define __BIDULE_H (...contenu du chier include...) #endif Pour viter dinsrer systmatiquement ces directives, chaque cration dun chier include, on peut envisager de crer une macro de la manire suivante : 1. top dpart : C-x ( 2. enregistrement de la macro : M-x < aller au dbut du buer #ifndef ___H Entre #define ___H Entre M-x > aller la n du buer Entre #endif 3. C-x ) : n denregistrement. partir dici tout ce quon tape est enregistr

192

Se mettre laise !

4. donner un nom la macro avec M-x name-last-kbd-macro : dans le minibuer on rpond par exemple insert-ifndef qui est ma foi un nom trs seyant pour cette macro. On peut maintenant utiliser cette macro comme une autre commande. Il manque notre exemple lassociation dune combinaison de touche cette macro et la sauvegarde de cette macro pour les sessions suivantes ; cest lobjet des paragraphes suivants. Raccourcis clavier On peut associer une combinaison de touches une fonction en utilisant la commande M-x global-set-key. Cette commande demande lutilisateur la combinaison puis la fonction y associer. On pourra par exemple associer la combinaison de touches F5 (ou F10, ou C-x C-...) 15 la fonction qui commente une rgion : M-x global-set-key Le chier .emacs On peut stocker des congurations personnelles telles que des raccourcis clavier par exemple dans un chier qui est charg chaque lancement dEmacs. Ce chier doit porter le nom .emacs et doit rsider dans le rpertoire priv de lutilisateur. La petite dicult rside dans le fait que le contenu de ce chier doit tre en Lisp. La composition dun chier .emacs dpasse le cadre de ce manuel 16 cest pourquoi nous donnerons ici quelques possibilits : ; pour preserver les liens lors dune sauvegarde : (setq backup-by-copying-when-linked t) ; remplace une selection par ce que lon tape (delete-selection-mode t) ; numero de colonne (setq column-number-mode t) ; bip visible et non sonore (setq visible-bell t)
Entre

F5 Entre comment-region Entre

Notez tout de mme, quun moyen possible pour construire son propre chier .emacs peut consister : 1. excuter la commande que lon veut sauvegarder dans le .emacs, par exemple M-x standard-display-european pour acher les caractres accentus ; 2. faire apparatre le code Lisp dappel dans le minibuer avec lhistorique C-x ESC ESC ;
15. On peut utiliser la combinaison C-h k pour vrier si la combinaison choisie nest pas dj utilise par Emacs. 16. Et surtout les comptences de lauteur...

6.3 Avec Emacs

193

3. copier ce code dans son .emacs : (standard-display-european nil) en utilisant le mcanisme de copier/coller dEmacs ; 4. recharger le .emacs avec la commande M-x load-file Cette mthode est bien entendu limite lajout de fonctionnalits simples. Francisation Pour forcer Emacs acher les caractres accentus, il peut tre ncessaire de lancer la commande M-x standard-display-european. Ainsi la phrase qui par dfaut sachait comme ceci : cet apr\350s midi d\351t\351 \340 la campagne... sachera comme cela : cet aprs midi dt la campagne... Modes Comme on la entraperu un peu plus haut, chaque buer est pilot par un mode particulier qui gre lindentation, la mise en couleur, etc. Ce mode est indiqu dans la barre dtat. chaque chargement de chier, Emacs se place dans un mode ddition particulier en fonction de lextension du chier. Cette reconnaissance peut chouer dans certains cas. On peut alors basculer manuellement dans le mode dsir avec les commandes M-x c++-mode, sh-mode, latex-mode, etc. On peut galement charger le mode dsir de manire automatique. Un exemple : lors du chargement dun chier dont lextension est .h, le mode C est lanc ; si lon prfre le mode C++, il faudra insrer dans son .emacs : (setq auto-mode-alist (cons ("\\.h\\" . c++-mode) auto-mode-alist)) Certains modes sont dits mineurs par opposition aux modes majeurs (minor and major modes ) dans la mesure o ils sont chargs en plus du mode majeur. Cest le cas par exemple des modes : M-x outline-minor-mode qui permet dutiliser un mode plan dans les A chiers L TEX orant la possibilit de masquer certaines sections (paragraphes, sous paragraphes, etc.) ; M-x auto-fill-mode qui permet de passer la ligne automatiquement dans les buers en fonction dun nombre de caractres dni pour chaque ligne. On peut charger ces modes mineurs grces aux commandes introduites ci-dessus, ou automatiquement en utilisant la notion de hook. Un hook associ un mode donn est, entre autres, un moyen dexcuter des commandes lorsque le mode en question est charg. Les deux lignes suivantes dans votre .emacs :

194

Se mettre laise !

(add-hook LaTeX-mode-hook (function ( lambda() (auto-fill-mode)))) (add-hook LaTeX-mode-hook (function ( lambda() (outline-minor-mode))))
A chargent automatiquement les modes outline et auto-fill lorsque un chier L TEX est charg avec le LaTeX-mode.

Le bureau Lors dune session Emacs, on ouvre une quantit de buers plus ou moins importante. Il est agrable de pouvoir recharger ces buers lors de la session suivante. Pour ce faire il faut procder en deux temps : 1. ajouter la ligne : (desktop-read) ; chargement du bureau dans son .emacs (le caractre ; est le commentaire du Lisp) ; 2. excuter la commande M-x desktop-save (une seule fois sut). Prcisez que vous voulez sauver votre bureau dans votre rpertoire racine, et le tour est jou. chaque lancement dEmacs, vos buers seront chargs. Si vous tes curieux vous pouvez jeter un il dans le chier .emacs.desktop qui contient une description des chiers charger. Notez que la sauvegarde du bureau ne tient pas compte des frames.

6.3.8

laide

La touche magique pour obtenir de laide partir demacs est C-h. Cette touche est un prxe aisment mmorisable qui, associ avec dautres combinaisons fournit les informations suivantes : C-h C-k donne la signication de la combinaison de touches que vous taperez (k pour key ) ; cest aussi utile pour savoir si une combinaison de touche est active ; C-h C-f dcrit la fonction dont vous donnerez le nom ; C-h C-t lance le trs instructif tutorial dEmacs ; C-h C-i lance lensemble des manuels au format info installs sur votre ordinateur ; il y a bien sr le manuel dEmacs.

6.4

Avec Xwindow

Mais quest-ce donc que cet trange X, ou X window ou Xlib ? Derrire ce joli nom se cachent plusieurs concepts runis en un seul : une interface graphique, un protocole rseau et une bibliothque de dveloppement ! On peut voir X comme la couche intermdiaire entre le matriel et les applications graphiques. Pour linstant on peut se contenter de dire que la couche X est la couche ncessaire pour pouvoir utiliser unix en mode graphique, cest--dire dans un environnement multi-fentres, avec des jolis menus, la souris et tout.

6.4 Avec Xwindow

195

6.4.1

Principe gnral

X est bas sur le principe de client-serveur. Les rles de lun et lautre des acteurs sont les suivants : Serveur : cest le logiciel qui a pour but de piloter la carte graphique et lcran de la machine destine acher, ainsi que rpondre au mouvement de la souris et aux pressions des touches du clavier. Il faut quil y ait un serveur X en attente sur une machine pour pouvoir accder la couche graphique. Le client : cest lapplication qui aprs stre connecte au serveur, lutilise pour eectuer entre autres les achages. Par exemple, si vous utilisez un navigateur pdf ou un visualiseur ps pour consulter ce document, les achages sont grs par le serveur X, les vnements de la souris et du clavier sont intercepts par le serveur et grs par le client par le truchement dune le dattente dvnements.

Client X Serveur X

Figure 6.5 Principe de fonctionnement du protocole X : les requtes sont issues du matriel (clavier/souris). Elles sont interceptes par le serveur, et sont gres par le client par lintermdiaire dune le dattente dvnements. Le traitement de ces requtes correspond un achage particulier. En sappuyant sur la gure 6.5 voyons quel est le principe du mode client-serveur de X: 1. au lancement, le client (cest--dire lapplication) va se connecter au serveur ; le rsultat de la connexion consiste en ltablissement dun canal de communication entre lapplication et les priphriques dachage et de saisie de la machine pilote par le serveur ; ce canal en jargon X est appel un display ;

196

Se mettre laise !

2. une fois connect, le client va demander au serveur dacher un certain nombre de choses, qui correspondent lapplication elle-mme ; 3. le client se met alors en attente dvnements ; 4. lorsque lutilisateur presse une touche de clavier ou manipule la souris, le serveur avertit le client de la position de la souris, du bouton qui a t press, etc. Le client ragit alors en fonction de ces informations et envoie un ordre au serveur (par exemple si la zone o survient un clic de souris est un bouton, le client va demander au serveur dacher un bouton enfonc).

6.4.2

Les diffrentes couches

Lorsquon est face un environnement graphique sous unix, il faut distinguer plusieurs couches direntes : X : cest la couche de base, cest in ne toujours X qui dessine lcran ; comme on peut le constater la gure 6.6a page suivante, une application est excute dans une fentre qui nest quun rectangle lcran ; Le gestionnaire de fentres : cest le programme qui habille les fentres avec des barres de titres, ascenseurs et autres fonctionnalits qui permettent lutilisateur de les redimensionner, dplacer, iconier, etc. Chacun de ces programmes (appels en anglais window managers ) apporte un look and feel particulier lenvironnement : lachage (le look) et la manire de manipuler les fentres (le feel) dpendent du gestionnaire de fentres. Les plus connus sont fvwm (gure 6.6b), windowmaker (gure 6.6d), afterstep (gure 6.6c), mwm ; Les widgets : ce sont les dirents objets qui composent une application (boutons, ascenseurs, menus, botes de dialogue, etc.). Ces objets sont construits par le biais de bibliothques dont les plus connues sont Xt, Xaw, Gtk, Qt, Motif, lesquelles sont bties partir des bibliothques X de base ; Les environnements intgrs : il y a quelques annes, devant la multitude de choix possibles quant aux gestionnaires de fentres et la relative dicult quil y a congurer lenvironnement graphique, plusieurs vendeurs dunix (Sun, HP, IBM) ont dcid de crer le Common Desktop Environnement (dit CDE) destin homogniser linterface graphique des systmes unix. Dans le monde des logiciels libres, lide a galement sduit et deux environnements intgrs sont ns : Gnome et Kde. Ces environnements ne seront pas traits dans ce manuel, ceci dans un souci douverture. Nous prfrons en eet prsenter les couches infrieures pour une meilleure comprhension globale 17 .
17. Aussi parce qu mon humble avis, bien que ces environnements permettent au novice de sinitier unix, ils tendent reproduire ce quon reproche Windows : savoir la dissimulation des informations...

6.4 Avec Xwindow

197

(a) Xlogo tout nu

(b) Avec fvwm

(c) Avec afterstep

(d) Avec windowmaker

Figure 6.6 Dirents gestionnaires de fentres

198

Se mettre laise !

6.4.3

Comprendre le dmarrage

Un systme unix peut passer en mode graphique par deux moyens : 1. directement au dmarrage, dans ce cas la fentre de login est une fentre graphique et le chier /.xsession de lutilisateur est excut ; 2. manuellement : lutilisateur se connecte sur une console texte, et excute un utilitaire gnralement appel startx ou quelque chose dapprochant, qui permet de lancer lenvironnement graphique ; dans ce cas prcis cest le chier /.xinitrc de lutilisateur qui est excut. Il est souvent susant de faire en sorte que le chier /.xsession soit un lien symbolique sur le chier /.xinitrc. Attention, ce dernier doit tre excutable. Voici un exemple de chier de dmarrage : /.xinitrc #!/bin/sh # .xinitrc # pas de beep xset b off # fond xsetroot -solid lightseagreen # un terminal pour commencer xterm +ls & # gestionnaire de fentres exec fvwm2 On comprend quau lancement de X, on va successivement, imposer un bip silencieux, donner une couleur la fentre racine 18 , lancer un terminal X, et nalement lancer le gestionnaire de fentre.
Dans un tel chier, le dernier programme ici fvwm2 ne doit pas tre lanc en tche de fond, et la terminaison de celui-ci implique la n de la session X. Le dmarrage de X sur votre systme nest peut tre pas tout fait identique ce qui est dcrit plus haut. Pour savoir comment a se passe chez vous, jouez les Hercule Poirot, et vous pourrez tomber, comme sur le systme de lauteur, sur un chier /etc/X11/xdm/Xsession dont voici la n : /etc/X11/xdm/Xsession if [ -x "$HOME/.xsession" ]; then exec "$HOME/.xsession" elif [ -x "$HOME/.Xclients" ]; then exec "$HOME/.Xclients" elif [ -x /etc/X11/xinit/Xclients ]; then
18. La fentre appele racine est la fentre constituant le bureau de lenvironnement, elle ne peut tre dplace ou iconie, et contient toutes les autres.

6.4 Avec Xwindow

199

exec /etc/X11/xinit/Xclients else exec xsm fi extrait que vous tes mme de comprendre si vous avez lu attentivement le chapitre 5 !

Nous donnons ici nouveau et titre dinformation, larborescence des processus correspondant une session X : PID PPID CMD 324 1 [xdm] 334 324 \_ /etc/X11/X 335 324 \_ [xdm] 346 335 \_ [.xsession] 360 346 \_ fvwm2 -s 448 360 \_xterm -ls 451 448 | \_-bash 636 451 | \_ ps --forest -eo pid,ppid,cmd 576 360 \_ /usr/X11R6/lib/X11/fvwm2/FvwmAuto 577 360 \_ /usr/X11R6/lib/X11/fvwm2/FvwmPager

6.4.4

X et le rseau

Un des aspects particulirement souple de X est sa capacit faire communiquer le client et le serveur travers un rseau. En dautres termes, il est possible pour une machine distante excutant une application graphique (client X), denvoyer les achages sur la machine que vous avez devant les yeux cest--dire utiliser le serveur X local. Cette ide est illustre la gure 6.7 page suivante. La variable denvironnement DISPLAY Lorsquune application X dmarre, elle cherche se connecter au serveur spci par la variable DISPLAY sauf si lapplication a t programme pour se connecter un serveur spcique. La variable DISPLAY a la forme suivante : machine:numro_display.numro_cran machine est le nom de la machine. Selon le contexte, cela peut tre : le nom de la machine seul : mekanik ; le nom complet de la machine : mekanik.zeuhl.org ; rien du tout, lapplication cherchera se connecter au serveur X de la machine sur laquelle elle sexcute.

200

Se mettre laise !

Machine distante Client X CPU

RSEAU Machine locale Serveur X

Figure 6.7 X en tant que protocole rseau

Le nombre numro_display correspond au numro du canal initialis par le serveur, le premier porte le numro 0. Dans la plupart des cas les machines nont quun seul display, cest--dire quil ny a quun seul ensemble clavier/souris qui communique avec le serveur. Ce nombre ne doit pas tre omis. numro_cran, quant lui, est le numro associ aux crans attachs un canal donn. Ainsi si une machine possde deux crans, le premier portera le numro 0, le suivant 1, etc. La plupart des applications dispose dune option -display, -d ou --display pour passer outre leet de la variable DISPLAY, en crivant par exemple : $ xclock -display machine.domain.org:0 & [1] 3452 $ qui lance une magnique horloge sur la machine machine.domain.org si elle la autoris. Autoriser des machines se connecter un serveur De manire viter que toutes les machines connectes au mme rseau que vous (par exemple Internet !) ne puissent utiliser votre serveur X, il est ncessaire dadopter une politique dautorisation. La premire politique consiste nautoriser que certaines machines dont on stockera les noms dans une liste. On verra que la gestion de cette liste est eectue par lutilitaire xhost. En supposant quun utilisateur assis devant la machine mekanik veuille utiliser les ressources de calcul de la machine distante ayler, tout en achant sur lcran de mekanik, voici les tapes eectuer : 1. autoriser la machine distante ayler utiliser le serveur X de la machine locale mekanik ; 2. se connecter sur ayler ;

6.4 Avec Xwindow

201

3. spcier que le serveur X utiliser est sur la machine mekanik ; cest--dire quon veut acher sur lcran de la machine locale et non sur celui de la machine distante ayler ; 4. lancer lapplication ! ce qui se traduit dans un shell par 19 : $ xhost +ayler.freejazz.org autorisation ayler.freejazz.org has been added to control list $ rlogin ayler.freejazz.org connexion sur la machine distante $ export DISPLAY=mekanik.zeuhl.org:0.0 achage sur mekanik xappli & [1] 15678 $ Autoriser des utilisateurs se connecter un serveur Lorsque la politique base sur les machines est trop laxiste (autoriser une machine cest autoriser tous les utilisateurs de cette machine), il faut envisager dautoriser uniquement certains utilisateurs. Pour ce faire, on sappuie sur lutilitaire xauth qui gre un ensemble de clefs appeles cookies dans le jargon de xauth associes chaque display pour un utilisateur donn. Le principe est le suivant : pour autoriser une machine B acher sur une machine A, il faut : rcuprer un cookie de la machine A ; le faire connatre la machine B Pour rcuprer un cookie sur la machine locale A, on fait : $ xauth nlist A:0 0000 0004 a1031e2f 0001 30 0012 4d49542d4d414749432d434f4f4b4 9452d310010 002e46651c4158584654595d61125506 $ qui ache le cookie correspondant au display A:0 sur la sortie standard. Dans une autre fentre, on se connecte sur la machine distante, et on lance la commande : $ xauth nmerge qui attend un cookie sur son entre standard. Par un habile copier/coller on peut fournir le cookie de la machine A. Une solution lgante, si les deux machines le permettent, est de lancer sur la machine locale A : $ xauth nlist A:0 | rsh B /usr/X11R6/bin/xauth nmerge $ en utilisant la commande rsh qui lance le xauth sur la machine A depuis la machine B.
19. Pour lutilisation de rlogin, se rfrer 4.2.2 page 107

202

Se mettre laise !

Compter sur ssh pour lautorisation Aujourdhui sur certains systmes, on peut utiliser loption -X de la commande ssh permettant de passer outre la conguration (fastidieuse) des cookies : $ ssh -X machine_distante Password: Une fois connect sur la machine distante, les clients X utiliseront automatiquement le serveur de la machine locale et feront transiter les requtes X en utilisant le cryptage de ssh.

6.4.5

tude de cas : fond dcran

Dans lenvironnement X, on peut imposer une couleur la fentre racine avec la commande xsetroot, par exemple : $ xsetroot -solid black $ met le fond dcran la couleur noire. Dans cette tude de cas, on se propose de mettre en fond dcran une image tire au hasard parmi une srie. Pour ce faire, on utilisera le programme xloadimage. Si lon dispose dune image fond.jpg, on pourra la mettre en fond dcran avec la commande : $ xloadimage -border black -center -onroot fond.png fond.jpg is a 1075x716 JPEG image, [...], Huffman coding. Merging...done Building XImage...done $ Supposons maintenant que lon dispose de plusieurs images dans un rpertoire : $ ls ~/photos/fonds fond-00.png fond-02.png fond-01.png fond-03.png $ fond-04.png fond-05.png fond-06.png fond-07.png

Pour choisir une image au hasard, on va dabord compter le nombre dimages du rpertoire et le stocker dans une variable : $ nbf=$(ls -l ~photos/fonds/fond-??.png | wc -l) $ echo $nbf 8 $ On peut ensuite choisir un nombre au hasard en exploitant la variable RANDOM et loprateur modulo du shell : $ f=$[RANDOM%nbf]

6.4 Avec Xwindow

203

$ echo $f 3 $ la variable RANDOM contient une valeur tire alatoirement entre 0 et 32 767 20 . Loprateur % renvoie le reste de la division entire. Par consquent lexpression arithmtique $[RANDOM%nbf] renvoie un nombre tir alatoirement entre 0 et nbf-1. Il ne reste plus qu construire le nom du chier partir de ce nombre. Pour cela, on peut utiliser la commande printf fonctionnant comme celle du langage C : $ printf "~/photos/fond/fond-%02d.png\n" $f ~/photos/fond/fond-03.png $
Outre le fait que $RANDOM nest pas aussi alatoire quon le souhaiterait en particulier dans les bits de poids faible, cette variable ne fait pas partie de la norme Posix mais est disponible dans les shells bash et ksh.

Voici enn une possibilit de script rassemblant les commandes prcdentes : fond.sh #!/bin/sh # rpertoire stockant les images dirfonds="$HOME/photos/fonds" # nombre dimages dans ce rpertoires nbfonds=$(ls -l $dirfonds/fond-??.png | wc -l) # numro du fond tir alatoirement nfondchoisi=$(echo $[RANDOM%$nbfonds]) # nom du fond tir alatoirement fondchoisi=$(printf "$dirfonds/fond-%02d.png" $nfondchoisi) # chargement en fond dcran xloadimage -display :0 -border black -center \ -onroot $fondchoisi > /dev/null Il ne reste plus qu lancer ce script dans le chier de dmarrage de la session X (le chier .xsession), et dans la crontab de lutilisateur sduit par ce merveilleux fond dcran dynamique. Ainsi par exemple : $ crontab -l
20. Le valeur 32 767 correspond au plus grand nombre entier positif que lon peut gnrer laide de 16 bits, soit 216 1. Vous pouvez placer cela lors dune soire entre ami, cela fait toujours beaucoup deet.

204

Se mettre laise !

0-59/15 * * * * ~/bin/fond.sh $ changera de fond dcran tous les quarts dheure. Notez bien que ce cron naura de sens que si le systme sur lequel vous vous connectez vous propose un serveur X...
Loption -display de la commande xloadimage dans le script est ncessaire car au moment o le script est lanc par le daemon cron, la variable DISPLAY est vide. Vous aurez galement not quon redirige dans le chier trou noir , les bavardages du programme xloadimage, ceci pour viter que le daemon cron ne nous les envoie par mail tous les quarts dheure...

6.5

Installer des logiciels

Nous nirons ce chapitre par une prsentation succincte de la manire dinstaller des logiciels sur son propre compte. Cette activit peut en eet tre vue comme la conguration de son environnement de dveloppement, puisquon a parfois besoin dinstaller des utilitaires pour son usage personnel sans exiger de ladministrateur quils soient installs pour tous les utilisateurs. Les instructions primordiales sont les suivantes : lire la doc ! celle-ci se trouve gnralement dans des chiers portant les noms README, INSTALL, LISEZMOI, etc. matriser lutilisation des outils darchivage et de compression (gzip et tar) ; matriser lutilisation de lutilitaire make dans le cas dinstallation sous forme de source. On considrera donc que le package binaire ou source installer se prsente sous forme dune archive compresse et que lutilisateur est capable de la dcompacter dans un rpertoire particulier.

6.5.1

Installer des binaires

Une fois larchive dcompresse, il faut suivre les instructions se trouvant dans le chier dcrivant linstallation. Certaines archives contiennent des scripts permettant de copier les chiers dans des rpertoires spciques de manire plus ou moins automatique. On peut toujours diter ces scripts pour les adapter ses besoins. En tout tat de cause, linstallation de programme binaire consiste la plupart du temps copier : un ou plusieurs chiers excutables dans un endroit spcique ; des bibliothques. des pages de manuels et autres chiers info. En supposant que le logiciel sinstalle dans le rpertoire ~/monsoft, il faudra sassurer que le systme puisse accder ces dirents chiers de la manire suivante : mettre jour la variable PATH :

6.5 Installer des logiciels

205

export PATH=~/monsoft/bin:$PATH mettre jour la variable MANPATH : export MANPATH=~/monsoft/man:$MANPATH mettre jour la variable LD_LIBRARY_PATH : export LD_LIBRARY_PATH=~/monsoft/lib:$LD_LIBRARY_PATH Dans le cas de petits utilitaires on peut se contenter dinstaller les chiers avec dautres utilitaires, par exemple dans les rpertoires : ~/bin pour les excutables ; ~/man pour les pages de manuels ; ~/lib pour les bibliothques dynamiques.

6.5.2

Installer des sources

Linstallation de programmes sous forme de sources peut tre plus dlicate cause des problmes de portabilit entres les direntes versions dunix. Lorsque larchive est propose sous forme de sources, elle fournit un Makefile contenant diverses informations que lon peut adapter son installation : le compilateur utilis, ainsi que les options associes ; les rpertoires dinstallations (pour les binaires, le manuel, etc. ) ... Ces informations sont proposes sous la forme de variables make. Une fois le Makefile adapt (le chier INSTALL ou le Makefile lui-mme contient des instructions qui guident le choix de ces options), il faut crer lexcutable, gnralement en lanant simplement la commande : $ make ... $ Puis il faudra lancer linstallation proprement dite des chiers ; ce qui est gnralement eectu grce la commande : $ make install ... $ encore une fois les Makefile peuvent tre prpars de manire direntes selon le logiciel installer, il est donc impratif de lire les documentations fournies pour connatre les cibles exactes. ce propos, la commande : $ make -n install ... $ vous permettera de simuler linstallation et davoir un aperu des rpertoires dans lesquels seront installs les chiers.

206

Se mettre laise !

Pour simplier la vie des vaillants utilisateurs, le projet GNU a cr un utilitaire permettant dadapter automatiquement le Makefile votre systme, ceci tout en gardant un certain degr de souplesse. Cet utilitaire se prsente dans larchive des sources sous la forme dun script nomm configure : $ ./configure ... $ permet aprs un temps de scrutation de votre systme de crer un Makefile retant les caractristiques de lunix sur lequel vous travaillez. Une fois le Makefile cr, les commandes dcrites plus haut (make et make install) ont le mme rle. Le script configure tient gnralement compte du fait que le logiciel sinstallera dans le rpertoire /usr/local, ce qui est une pratique courante. Dans la mesure o vous navez gnralement pas les droits daccs ce rpertoire, vous pouvez spcier la racine de linstallation, avec : $ ./configure --prefix=$HOME/monsoft ... $ qui congurera le Makefile pour que lutilitaire soit install avec comme racine /monsoft. La commande ./configure --help vous donnera les autres options disponibles pour le package que vous installez.

6.5.3

Installer des paquet Debian

Ce qui suit vous sera utile uniquement si votre unix est un systme gnu/LINUX et si celui-ci est install via des paquets Debian. Cest la cas bien videmment de la clbre Debian mais aussi de la star du moment : la distribution Ubuntu.

Les distributions de gnu/LINUX Debian et Ubuntu utilisent le mme systme de paquets pour installer les logiciels. Ce systme permet de grer les direntes versions mettre jour et dinclure dans chaque paquet des scripts de pr-installation et post-installation qui sont lancs, comme leur nom lindique, avant et aprs linstallation des binaires 21 du paquet 22 . Dans son utilisation la plus courante, le principe de la gestion des paquets repose sur lutilisation de dpts accessibles depuis le rseau ou depuis des priphriques amovibles (cdrom, dvd, ...). Ces dpts contiennent les versions ocielles des paquets constituant la distribution. Il en existe des miroirs dans dirents pays acclrant ainsi laccs aux ressources. Vous devriez trouver sur votre systme un chier /etc/apt/sources.list dont voici ce que pourrait tre un extrait : $ cat /etc/apt/sources.list
21. Les paquets Debian peuvent galement contenir les sources des logiciels. 22. De tels scripts existent galement pour lopration de suppression du paquet.

6.5 Installer des logiciels

207

[...] deb http://ftp.fr.debian.org/debian/ lenny main deb http://security.debian.org/ lenny/updates main contrib non-free deb http://www.debian-multimedia.org lenny main [...] $ Dans la mesure o les chiers stocks sur ces machines distantes voluent il est ncessaire de mettre jour la liste des paquets sur votre systme. Cette liste est conserve dans le chier : /var/cache/apt/pgkcache.bin Mme sil est fort probable que votre distribution mette jour automatiquement par cron ce chier, il nest pas inutile de savoir quon peut explicitement rafrachir ce chier grce la commande : apt-get update Ensuite un certain nombre doprations classiques sont possibles en utilisant entre autres, cette mme commande apt-get : installation dun paquet : apt-get install nom_du_paquet eacement dun paquet (y compris ses chiers de conguration) apt-get purge remove nom_du_paquet mettre jour toutes les paquets pour lesquels existe une nouvelle version : apt-get upgrade chercher parmi les paquets (installs ou non) ceux qui correspondent un motif particulier : apt-cache names-only search motif Le motif doit tre saisi comme une expression rgulire. Par exemple tous les paquets commenant par lib et nissant par pgsql peuvent tre lists grce la commande : apt-cache names-only search ^lib.*pgsql$ Pour chercher les paquets dont le nom ou la description contiendrait le mot penguin suivi du mot race : apt-cache search penguin.*race Pour nir cette prsentation, sur les paquets Debian, il faut savoir quil existe un utilitaire de plus bas niveau permettant dagir directement sur un paquet, cest--dire sans passer un dpt : la commande dpkg. Cette commande est dailleurs nalement appele par la commande apt-get par exemple. Elle permet donc dinstaller ou denlever un paquet, mais aussi dextraire toutes les informations dun chier au format des paquets Debian.

208

Se mettre laise !

Pour conclure
Vous tes donc arm pour naviguer dans un systme unix puisque vous avez maintenant les connaissances de base pour manipuler un diteur de texte, congurer votre shell et votre environnement graphique. Ces connaissances, couples avec celle du chapitre 5 sur le dveloppement, et du chapitre 4 sur le rseau, vous donnent les bases ncessaires lexploration de ce systme particulirement vaste quest unix. Le chapitre qui suit vous donnera quelques pistes pour trouver les informations qui vous manquent.

Sommaire 7.1 7.2 7.3 7.4 7.5 7.6 Quoi fait quoi ? Les pages de manuel Le format info Le logiciel Les HOWTO La documentation en ligne

Chapitre

7
laide !
?h Sorry, I already gave what help I could... Maybe you should try asking a human? TEX Version 3.14159.

austrit dun terminal laisse pantois nombre dutilisateurs arontant pour la L premire fois un systme Unix. Combien de fois lUnixien na-t-il pas entendu un utilisateur se plaindre du manque de convivialit du systme par rapport ses concurrents intgrant aide en ligne, lignes chaudes et autres systmes dassistance lutilisateur ? Ce chapitre a donc pour principal objectif de tordre le cou cette ide dindisponibilit dinformation.

209

210

laide !

7.1

Quoi fait quoi ?

unix fournit une plthore de commandes. En shell bash, par exemple, le fait dappuyer par deux fois sur la touche tabulation dans un terminal provoque lapparition du message : There are 2727 possibilities. Do you really wish to see them all? (y or n) Linterprteur de commande signie par l quil nous donne la possibilit de choisir parmi 2727 commandes direntes et ayant a priori toutes une action dirente. Dans cette section, nous ne donnerons pas la signication et laction de chacune de ces 2727 commandes mais plutt le moyen de vous permettre daccder linformation concernant chacune dentre elle. En eet, lun des principaux avantages dunix est de permettre laccs ce genre dinformations.

7.1.1

propos

La premire question est probablement de savoir ce que vous dsirez faire. Supposons que vous cherchiez visualiser le contenu de votre rpertoire de travail. Malheureusement, vous ne connaissez pas la commande qui permet de le faire. Un outil permet de faire une recherche parmi les commandes disponibles : apropos. Son utilisation est des plus simples. Tapez simplement apropos suivi dun mot-cl (en anglais) dnissant au mieux votre requte. Pour notre exemple, nous cherchons visualiser le contenu de notre rpertoire de travail (en anglais : to display working directory content ). Essayons : $ apropos display $ Cette commande devrait faire apparatre un grand nombre (155 sur mon systme) de lignes ressemblant probablement 1 : bell (n) - Ring a displays bell bitmap (n) - Images that display two colors cal (1) - displays a calendar ckalloc, memory, ckfree, Tcl_DisplayMemory, Tcl_InitMemory, Tcl_ValidateAllMemory (n) - Validated memory allocation interface. Si vous aussi, vous prtendez tre un informaticien plein de qualits 2 vous ne lirez pas (sauf peut-tre en dernier recours) ces 75 lignes. Le mot-cl display ntait probablement pas susamment signicatif. Essayons autre chose :
1. Nous vous faisons grce de 71 lignes. 2. Voir ce sujet Wall et al. (1996) et sa dnition de la paresse.

7.1 Quoi fait quoi ?

211

$ apropos working cd (n) chdir, fchdir (2) getcwd (3) pwd (1) pwd (n) rcsclean (1) $

Change working directory change working directory Get current working directory print name of current/working directory Return the current working directory clean up working files

Nous obtenons moins dinformations mais malheureusement pas celle qui nous intresse 3 . Essayons encore : $ apropos content dir (1) gl_copyscreen (3) ls (1) perltoc (1) pick (1) pair_content (3x) stat (1) vdir (1) vga_dumpregs (3) xev (1x) $ list directory contents copy the screen contents of contexts list directory contents perl documentation table of contents search for messages by content curses color manipulation routines print inode contents list directory contents dump the contents of the SVGA registers print contents of X events

Il semble que la commande recherche soit dir ou ls ou vdir. Essayons lune dentre elles : $ ls 2Hypergraphes Admin Archives Arkeia ConfigNT $ Impression LaTeX Logo Mac Mail Microsoft Mygale NT Netscape Oueb Sarah Transfert Web archive bin games local nsmail test tmp

... et nous avons donc bien obtenu le contenu du rpertoire courant. En conclusion, apropos peut tre considr comme un moteur de recherche sur le rle des commandes disponibles.

7.1.2

Mais cest quoi donc ?

Il arrive parfois doublier ce que peut faire une commande. Supposons que lon vous ait parl de la commande find en vous disant quelle tait fabuleuse. La commande whatis devrait vous clairer.
3. Il nempche que vous savez maintenant changer de rpertoire...

212

laide !

$ whatis find find (1) $

- search for files in a directory hierarchy

Notez que whatis ne sait pas ncessairement de quoi vous lui causez : $ whatis trouver trouver: nothing appropriate $ whatis permet donc dobtenir une information succincte sur le rle dune commande shell.

7.2

Les pages de manuel

Le paragraphe prcdent nous a permis de constater que find permettait de rechercher des chiers dans une arborescence. Supposons que vous vouliez rechercher un chier dnomm toto perdu quelque part sur votre home. Un find toto lanc en ligne de commande produit un navrant find: toto: No such file or directory. Vous vous douterez alors que find attend peut-tre autre chose pour lui permettre de trouver ce fameux toto. Une commande va nous aider grandement : man. Osons un man find. Devant vos yeux bahis devrait apparatre une page de manuel (raccourci en anglais en manpage ) concernant find.

7.2.1

Une page de manuel

Les pages de manuel ont cette proprit davoir une structure assez xe. Dtaillons quelques-unes de ses principales entres : Name qui dnit en une ligne ce que fait la commande. Cest dailleurs cette ligne qui est ache par whatis. Il sagit de la seule partie requise pour faire dune page de documentation quelconque une manpage ; Synopsis qui prcise la forme dappel de la commande. Le synopsis prcise de plus toutes les options quil est possible de passer la commande et ses arguments ventuels ; Description qui dcrit eectivement laction de la commande, prcise le rle de chaque argument ;

Options prcise le rle de chaque option (vous vous en doutiez, non ?); See Also vous donne quelques commandes qui ont une action similaire la commande dont vous avez la page de manuel sous les yeux et parfois les commandes utilises par la commande. Parfois on trouve galement en n de page, des exemples et les bugs connus du programme document.

7.2 Les pages de manuel

213

7.2.2

Hirarchie des pages de manuel

Vous aurez constat que la page de manuel de find commence en fait non pas par NAME, mais en fait par un nbuleux FIND(1). Les pages de manuel sont souvent hirarchises en douze sections numrotes de 1 9, n, o et l. Dcrivons succinctement cette hirarchie. 1 commandes de lutilisateur pouvant tre lances par nimporte qui ; 2 appels systme (fonctions fournies par le noyau) ; 3 fonctions propres certaines bibliothques (C, X windows, etc.) ; 4 ports et priphriques (cest--dire les chiers de /dev) ; 5 descriptions de formats de chier de conguration ; 6 jeux ; 7 divers (essentiellement des conventions) ; 8 outils dadministration systme ; 9 routines des noyaux (propre LINUX ). Les sections suivantes ont vraisemblablement t abondonnes mais peuvent tre toutefois prsentes sur de vieux systmes : n ce quil y a de nouveau. Les documentations rsidant dans cette partie se doivent dtre dplaces au bout dun certain temps dans la section approprie ; o vieilles documentations condamnes la disparition ; l documentation locale propre un systme, un site. Notons quil nest pas conseill dutiliser les trois dernires sections et que ces dernires ont de plus en plus tendance disparatre (sur le systme o ces lignes sont crites, seule subsiste la section n 4 ). Il peut arriver quun mot donn corresponde des pages de manuel de direntes sections. Par exemple, vous cherchez une information sur la fonction C printf : $ apropos printf format (n) - Format a string in the style of sprintf gl_printf (3) - write formatted output in graphic mode printf (1) - format and print data sprintf, printf,(3) - formatted output conversion printftest (6) - tests the vgagl gl_printf function snprintf, vsnprintf (3) - formatted output conversion $
4. Et elle ne contient que 210 pages de documentation alors que la section 1 en contient environ 1300.

214

laide !

Si vous vous contentez dun man printf, votre grand dsarroi, vous ne pourrez visualiser que la page de documentation correspondant la section 1. Comment spcier man daller regarder dans la section 3 ? Facile : essayez un man 3 printf et rjouissez-vous : $ man 3 printf PRINTF(3) Linux Programmers Manual PRINTF(3) NAME printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - formatted output conversion SYNOPSIS #include <stdio.h> ... $ Bien entendu, il est ncessaire dinterroger une section dans laquelle existe la page de documentation. Il y a fort parier quun man 2 printf vous rtorque narquoisement quil ny a pas dentre pour printf dans la section 2 du manuel.

7.2.3

La variable denvironnement MANPATH

Le plus rageant avec lutilisation de man est dobtenir un insoutenable No manual entry for (le nom de la commande). Par exemple, un man xv produit No manual entry for xv. La premire ide qui peut vous venir lesprit est quil nexiste pas de documentation pour cet outil quest xv. Cest possible mais regardons de plus prs une certaine variable denvironnement dnomme MANPATH. $ echo $MANPATH /usr/share/man:/usr/local/man $ Cette variable a le mme format que PATH et indique la commande man les endroits o rechercher les pages de manuel. Dans lexemple prcdent, man ira donc dans /usr/share/man puis (en cas dchec) dans /usr/local/man pour tenter de trouver linformation qui vous intresse. Aucune page ntant associe xv, man vous le signie poliment. Il sut de rajouter un nouveau rpertoire de recherche (/usr/X11R6/man sous Linux) la variable MANPATH pour voir apparatre la page de documentation.

$ export MANPATH=$MANPATH:/usr/X11R6/man $ man xv XV(1) XV(1) NAME xv - interactive image display for the X Window System ... etc ... $

7.3 Le format info

215

Cette variable devrait tre a priori correctement congure pour aller visiter les points de chute classiques des pages de manuel, cest--dire (cette liste ne se veut en aucun cas exhaustive) /usr/share/man, /usr/local/man et /usr/X11R6/man. Dans le cas o vous souhaiteriez installer certaines pages de manuel certains endroits prcis de votre compte utilisateur, vous pouvez utiliser la mme dmarche et ajouter dans vos chiers de dmarrage : export MANPATH=$HOME/man:$MANPATH de manire ajouter vos pages de manuels aux pages traites par la commande man.

7.2.4

Recherche exhaustive

Il peut arriver quen dsespoir de cause, vous dsiriez eectuer une recherche exhaustive dun mot donn dans lensemble des pages de manuel. Si vous choisissez de prendre ce risque, sachez que cest possible mais quil y a de grandes chances que cela prenne un certain temps 5 .

7.2.5

La commande ultime

Pour toutes les subtilits concernant votre version locale de man, vous navez nalement quune seule commande connatre : man man. La boucle est donc boucle.

7.3

Le format info

Il existe un systme de documentation rpandu sur les systmes unix bas sur les outils gnu : le systme Texinfo. Lide de ce systme est de pouvoir produire partir dun source, la fois une information de type hypertexte et un document imprimable. Dun point de vue technique, ce mme source est pass la moulinette de TEX pour produire la version papier, et par lutilitaire makeinfo pour produire la version hypertexte. On manipule la version imprimable comme un document au format dvi traditionnel 6 , et la version hypertexte avec la commande info : $ info whoami $ vous permet de vous esbaudir avec quelque chose devant ressembler File: sh-utils.info, Node: whoami invocation, Next: groups invocation, Prev: logname invocation, Up: User information
5. Par exemple, la toute n du sicle dernier, un man -K yaourt a pris environ une minute sur notre beau bi-Xeon (500 MHz - 512 Mo de RAM) et plus de cinq minutes sur notre bon vieux 486 (33 MHz - 24 Mo). 6. Voir ce sujet, le merveilleux ouvrage de Lozano (2008).

216

laide !

whoami: Print effective user id ================================= whoami prints the user name associated with the current effective user id. It is equivalent to the command id -un. The only options are --help and --version. *Note Common options::. Les commandes connatre pour manipuler info dans un terminal sont : SPC/- : pour dler vers la page suivante/prcdente ; u : pour le lien pre (up ) ; n/p pour le lien suivant/prcdent (next /previous ) dans la hirarchie l pour le lien prcdent dans lhistorique (last ) ; RET pour pntrer dans un lien q pour quitter info.

Si vous disposez dEmacs, il existe une interface cliquable permettant dviter de sencombrer lesprit avec les commandes prcdentes tout en vous donnant la possibilit de manipuler joyeusement le bouton du milieu de votre souris prfre. Notez enn que sil ny a pas de page info associe une commande, lexcution de info <nom_de_commande> vous achera simplement la page de manuel de la commande en question. Si la page de manuel nexiste pas non plus, info vous achera le sommaire de lensemble des pages dinfo existant sur votre site. Pour boucler la boucle de manire analogue la commande man, essayez : $ info info $

7.4

Le logiciel

Tout bon logiciel devrait tre fourni avec une documentation prsentant lensemble de ses fonctionnalits. Sous LINUX, cette documentation se trouve gnralement installe dans le rpertoire /usr/doc ou /usr/share/doc. Un ls devrait peut-tre assouvir votre curiosit. Ces documentations sont gnralement rdiges en pur texte ASCII et more ou less devrait vous permettre de les dcouvrir. Si vous ne savez vraiment pas quoi peut servir une commande ou un logiciel donns, vous pouvez toujours tenter de lexcuter avec loption -h ou --help, cest parfois susant.

7.5 Les HOWTO

217

7.5

Les HOWTO

Il existe autour de gnu/LINUX, un systme de documentation dnomm la documentation HOWTO (en engliche, comment faire ) 7 . Cet ensemble de documents fait lui-mme partie dun vaste projet de documentation nomm le linux documentation project sur lequel on peut obtenir des infos sur le site http://www.linuxdoc.org. Sur la plupart des distributions de LINUX , les Howtos sont installs dans le rpertoire recevant la documentation sur votre systme 8 . Initialement formates au format sgml, ces docs sont disponibles aux formats texte, PostScript, html et dvi. On trouve en vrac (plus de 400 thmes sur une Debian Sarge), des informations destines la fois lutilisateur, ladministrateur ou au programmeur, sur les modems, limpression, le son, linteraction avec le Palm Pilot, la programmation du port srie, la conguration des cartes SCSI, le jeu Quake, lutilisation de LINUX en Thalande ou en Slovnie, bref tout sujet sur lequel un utilisateur de LINUX sinterroge un jour ou lautre. Toutes ces documentations sont pour la plupart trs claires, prenant lutilisateur novice par la main de manire trs progressive, avec moult exemples ; elles portent des noms signicatifs qui peuvent tre utiliss comme argument aux moteurs de recherche : Printing-Howto, Serial-Programming-Howto, etc. Lisez donc le Howto-Howto !

7.6

La documentation en ligne

Si malgr les lectures des pages de manuels et de howtos, vous narrivez toujours pas comprendre comment peut fonctionner telle ou telle commande, ou comment faire faire ceci ou cela un logiciel particulier, rien nest encore perdu ! Il vous reste le monde extrieur, des personnes qui ont les mmes problmes que vous ou qui les ont dj rsolus.

7.6.1

Les newsgroups

La premire source dinformations du point de vue de sa richesse mais aussi de son bruit est sans doute les groupes ou forums de discussion (newsgroups ). Apprenez en eet que si vous vous posez une question donne, la probabilit pour que quelquun se la soit dj pose et surtout ait la rponse, est extrmement grande. Les news constituent un vaste panneau dachage que tout le monde peut consulter, sur lequel on peut poser des messages certaines conditions ; ce vaste panneau est spar en thmes (group ) hirarchiss. Parmi les milliers de thmatiques abordes, on trouve quelques groupes autour dunix. Ces groupes font partie de la hirarchie comp.os pour les groupes traitant de linformatique (computer ) et plus prcis7. Pour les allergiques Shakespeare (et les autres), certaines documentations ont t traduites dans notre belle langue. 8. Le rpertoire /usr/share/doc/HOWTO sur la distribution Debian.

218

laide !

ment des systmes dexploitation (operating ssystem ), ou de son pendant francophone fr.comp.os. On trouvera parmi ces groupes : fr.comp.os.unix : discussion autour dunix; fr.comp.os.linux.annonces : les annonces concernant les nouvelles versions ou les rencontres entre utilisateurs ; fr.comp.os.linux.moderated : groupe modr sur lutilisation de LINUX ; ... On pourra galement lire les groupes comp.os.linux.* de la hirarchie anglophone. Il est important de comprendre que ces groupes suivent quelques rgles dusage dont lignorance peut vous faire envoyer plus ou moins poliment sur les roses : on veillera respecter la ntiquette 9 dans le cadre de la communication de un plusieurs ; on testera son logiciel de news sur un groupe comme fr.test et non sur le groupe sur lequel on a lintention de poster ; on veillera lire attentivement toutes les documentations disponibles (notamment les faqs) avant de poser une question dont la rponse se trouve dans une dizaine de manuels, au risque dobtenir une rponse du genre : man softquejarrivepasfairemarcher ou RTFM (qui signie dans sa version polie : read the fantastic manual ) ; il faudra lire les archives des mois prcdents pour viter de poser une question pose la veille ; une bonne source dinformation pour rechercher dans les archives est le site groups.google.com qui fonctionne comme un moteur de recherche ; on tentera de trouver la charte du groupe si elle existe et la lire ; certains groupes sont modrs, cest--dire quun groupe de personnes ltre votre message avant de le poster sur le groupe. Le ltrage a pour but de vrier ladquation du contenu avec le thme du groupe. Par consquent votre message napparatra pas immdiatement sur le groupe, inutile donc de le reposter ! Le mieux est sans doute de se renseigner prcisment sur lusage des news en consultant des documents destins aux nouveaux utilisateurs, comme par exemple http: //UsenetFR.free.fr/BU.htm.

7.6.2

Les mailing lists

Les listes de diusion (ou mailing lists ) ont un caractre plus condentiel puisquil faut explicitement sabonner auprs dun serveur pour recevoir les messages traitant dun thme donn. Lorsquon envoie un message la liste, tous les adhrents le reoivent galement ; le principe est donc dirent du fonctionnement des news. On pourra trouver des listes de discussions traitant de points particuliers de LINUX comme par exemple : linux-8086 - for the 8086 systems
9. voir par exemple une traduction en franais http://www.sri.ucl.ac.be/SRI/rfc1855.fr. html

7.6 La documentation en ligne

219

linux-admin linux-kernel - General kernel discussion linux-kernel-announce linux-sound .... plus de soixante listes rfrences sur http://www.linux.org/docs/lists.html. Pour sabonner, il faut envoyer un mail poli au gentil robot qui manage tout a : majordomo@vger.kernel.org. Le corps du message doit contenir le mot subscribe (sabonner) suivi du nom de la liste. Sans sabonner on pourra consulter les archives des messages, par exemple sur : http://www.tux.org/hypermail http://news.gmane.org

7.6.3

Le oube

La majorit des logiciels suivant le modle open source dispose dune page web dite home page. Sur cette page se trouve une description du logiciel, des documentations pour lutiliser et/ou linstaller, et la dernire version tlcharger. Outre les moteurs de recherche gnraux, on pourra consulter : freshmeat.net : donnant des infos quotidiennes sur les nouveaux projets et disposant dun moteur de recherche ; sourceforge.net : hbergeant plusieurs projets de logiciels libres, dispose galement dun outil de recherche.

7.6.4

Les foires aux questions

Le terme faq pour frequently asked question est parfois traduit par foire 10 aux questions . Certaines personnes collectent donc les questions frquemment poses par les ptits nouveaux et les Grands Anciens et, de ce fait, les rponses frquemment donnes pour crire des compendiums extrmement riches en informations, astuces et autres indices pour le dbutant (et le conrm aussi parfois). Une recherche sur le Oube avec votre moteur de recherche prfr avec votre question et le mot-cl FAQ pourrait vous permettre datteindre le nirvana assez rapidement. Vous trouverez sur les sites : http://www.linuxdoc.org/FAQ/Linux-FAQ/index.html http://www.linuxdoc.org/FAQ/ la FAQ ocielle de LINUX et celles de quelques-uns des logiciels connexes.
10. Traduction qui a le lger inconvnient de faire perdre la notion de questions frquemment poses.

220

laide !

7.6.5

Les Request for comments

Mme sil sagit de documents trs techniques, il peut tre utile de connatre lexistence des RFCs (request for comments). Ces documents maintenus par lIETF (Internet Engineering Task Force 11 ) dcrivent les standards utiliss sur le rseau Internet. Chacun de ces documents est identif par un numro et passe de ltat de brouillon (draft) ltat de standard aprs un processus de correction. On retrouvera parmi les RFCs la description des protocoles rseau que nous utilisons quotidiennement (http, smtp pour le mail, etc.).

Bon courage !

7
11. http://www.ietf.org

Bibliographie
P. Albitz et C. Liu : DNS and BIND, chapitre 1. OReilly, 3e dition, 1998. R. Card, E. Dumas et F. Mvel : programmation Linux 2.0. Eyrolles, 1997. C. DiBona, S. Ockman et M. Stone : Open Sources Voices from the Open Source Revolution. OReilly & Associate, 1999. Traduit en franais par un collectif et paru chez le mme diteur, sous le nom Tribune libre, tnors de linformatique libre . S. Garfinkel et G. Spafford : Practical UNIX & Internet Security. OReilly, 2e dition, 1996. H Grgoire : Mmoires de Grgoire, ancien vque de Blois. Ambroise Dupont, Paris, 1837. Brian Kernighan et Dennis Ritchie : Le langage C. Dunod, 2e dition, 2004. N. Leclerq : Logiciel libre : une volont de transparence. linux-france. org/ article/ these , 1999. http: // www.

A Vincent Lozano : Tout ce que vous avez toujours voulu savoir sur L TEX sans jamais oser le demander. Framabook/In Libro Veritas, 2008. http://www.enise. fr/cours/info/latex et http://www.framabook.org/latex.html.

D. Newham et B. Rosenblatt : Learning the bash shell. OReilly, 1998. Louvrage indispensable pour apprendre le shell de chez gnu. Eric Raymond : How to become a hacker. http: // www. catb. org/ ~esr/ faqs/ hacker-howto. html , 2000. 221

222

Bibliographie

J.-M. Rifflet : La programmation sous UNIX. Ediscience international, 3e dition, 1995. Didier Roche : Simple comme Ubuntu. Framabook, 2010. P. H. Salus : A Quarter-Century Of Unix. Addison Wesley, 1994. LE livre pour dcouvrir la gense dunix. R. L. Schwartz : Introduction Perl. OReilly International Thomson, 1995. Traduction de Josianne Vinh. R Stallman : Free Software Free Society: selected essays of Richard M. Stallman. CreateSpace, 2009. R. Stallman, Williams S. et Masutti Ch. : Richard Stallman et la rvolution du logiciel libre une biographie autorise. Eyrolles, 2010. http://www.framabook. org/stallman.html. A Tanenbaum : Architecture de lordinateur. Sciences Sup. Dunod, 4e dition, 2001. L. Wall, T. Christiansen et R. L. Schwartz : Programming Perl. OReilly, 2e dition, 1996.

Glossaire
C Nom donn au langage avec lequel le systme unix initial a t conu. On peut mme dire que le langage C a t cr pour btir ce systme dexploitation. Deux des fondateurs dunix y ont consacr un livre Kernighan et Ritchie (2004). Commande Une commande est un ordre quon passe au systme dexploitation via un interprteur de commande (appel galement shell). Chaque commande fait appel soit un excutable stock dans le systme de chiers, soit une commande interne. La puissance dunix provient essentiellement du fait que ces commandes peuvent tre combines entre elles via des tubes. De plus elles sinsrent naturellement dans des scripts quon peut excuter comme nimporte quel programme. Distribution Dans le monde dunix et de LINUX en particulier, une distribution est constitue du noyau LINUX , dun ensemble dutilitaires du projet gnu et dun ensemble de logiciels divers et varis. Ce qui caractrise la distribution est galement le systme permettant dinstaller et de mettre jour ces logiciels. titre indicatif, en 2010 la distribution Debian contient plus de 25000 paquets. Les dpendances (logiciels ncessaires linstallation) et la diusion dun paquet sont grs par une personne qui nest la plupart du temps pas celle qui a conu le logiciel empaquet. 223

224

Glossaire

Emacs diteur de texte et galement religion ou glise. Tous les dogmes de cette religion sont prsents la section 6.3 page 178. Gnu Acronyme de gnu is not unix. Cest le nom que Richard Stallman a donn au projet quil a lanc en 1983 pour concevoir un unix entirement libre. Dans le monde unix, le projet gnu est connu pour son diteur Emacs, son compilateur C, son interprteur de commande Bash et pour tous les utilitaires qui gravitent autour de la ligne de commande (manipulation de chiers, processus, etc. ). Un petit aperu de la gense du projet gnu est prsent au chapitre 1. Howto Comment faire pour ... : cest lobjectif de cet ensemble de documents qui ont t rdigs au fur et mesure de lvolution des logiciels concerns. Ces prcieux documents didactiques ont pour but dassister lutilisateur dans des domaines trs varis autour de linstallation et la conguration de gnu/LINUX. Lien Dans le systme de chiers dunix un lien physique correspond lassociation entre un nom et les donnes eectives du chier. Ce qui peut surprendre au premier abord, cest quon peut crer plusieurs liens vers les mmes donnes physiques. En dautres termes un chier peut avoir plusieurs noms. Les liens symboliques quant eux, font correspondre un nom un autre nom. Tout ceci est expliqu la section 2.3.9 page 47 Linux Cest un noyau unix n dun projet initi par Linus Torvalds. Il sagit donc dun ensemble de modules logiciels orant aux programmes les abstractions communes aux systmes dexploitation modernes : la notion de chiers, la notion de processus et la notion de mmoire virtuelle. Il est majoritairement crit en langage C, les sources qui le constituent occupent environ 40 Mo compresss. Makele Lutilitaire make est un outil dont le propos est dautomatiser la cration de chiers partir dautres chiers selon des rgles que dnit lutilisateur. Ces rgles sont crites selon une syntaxe particulire dans un chier quon nomme gnralement le makefile. Vous pouvez dcouvrir quelques fonctionnalits de make la page 143.

Glossaire

225

Posix Portable Operating System Interface (le x de ce nom propos par Richard Stallman est l pour rappeler lhritage dunix) est constitu dun ensemble de documents dnissant ce que devrait tre les composants (interfaces utilisateurs et interfaces logicielles) dun systme dexploitation compatible avec un systme unix. Processus Il sagit de lobjet que manipule le systme dexploitation lorsquun programme est en cours dxcution. Chaque processus se voit attribuer un numro unique. Le systme (et en particulier le noyau) est charg de leurs rserver le (ou les) processeur(s) tour de rle et de manire optimale. Tout ce quil faut savoir sur les processus se trouve la section 2.4 page 53. RFC Les Request for comments sont des documents maintenus par lIETF (Internet Engineering Task Force) qui dcrivent les standards utiliss sur le rseau Internet. On retrouvera parmi les RFCs la description des protocoles rseau que nous utilisons quotidiennement (http, smtp pour le mail, etc.). Shell Le shell est la couche logicielle qui enferme (comme dans une coquille shell) le systme dexploitation et constitue une interface pour lutilisateur nal. Il sagit donc du moyen qu ce dernier de communiquer avec le systme. On appelle galement shell les programmes implmentant cette interface sous la forme dun interprteur de commande. Bash, Zsh, Tcsh en font partie parmi quelques autres. Il faut galement noter que le shell, en tant quinterprteur de commande, fournit aux utilisateurs un vritable langage de programmation. Il est question du shell dans les chapitres 2 et 3 ainsi qu la section 5.2 page 125 pour laspect programmation. Tubes Un tube est un objet du systme permettant de faire communiquer deux processus via deux interfaces (une entre et une sortie). Un tube permet donc de mettre en relation la sortie dune commande avec lentre dune autre. On peut ainsi combiner plusieurs commandes lmentaires pour en fabriquer une plus complexe. Cest dailleurs en les crant que Douglas MacIlroy a nonc la dsormais clbre rgle de construction des utilitaires du systme Unix (voir ce sujet 1.2.1 page 6). Les tubes sont prsents la section 3.2 page 70.

226

Glossaire

Unix Cest le nom donn initialement (1969) au systme dexploitation cr par ken Thompson. Ce systme faisant suite au projet Multics, Brian Kernighan propose dabord Unics qui deviendra ensuite unix . Aujourdhui unix dsigne essentiellement une famille de systme dexploitation. X X est la fois lensemble des logiciels permettant de grer les applications en mode graphique sur un systme unix, mais aussi un protocole rseau permettant ces applications de diriger lachage vers une machine autre que celle o elles sexcutent. X ou X window a t cr au dbut des annes 80 par le MIT. Il en est question dans cet ouvrage la section 6.4 page 194. man Cest la commande permettant aux valeureux utilisateurs du shell dobtenir le manuel dcrivant exhaustivement une commande. Les pages de manuel (man pages) si elles sont un peu ardues car peu didactique, constituent souvent linformation faisant rfrence pour un utilitaire donn. root Cest le nom donn lutilisateur ayant tous les privilges sur un systme unix. Le nom vient du fait que sa maison (home), cest--dire son rpertoire priv, se trouve souvent la racine du systme de chiers. tant donn quunix est un systme o tout le monde il est gaux on y trouve, comme souvent, un tyran. Dans le monde unix cest root, qui peut tuer vos processus et dtruire vos chiers... vi Clbre diteur, gnralement install par dfaut sur les systmes unix. Dans sa toute premire version, il a t conu par Billy Joy, linstigateur de la branche BSD. Il est question de vi la section 6.2 page 176.

Index
Symboles
; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30, 70 / . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 1>&2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 2> . . . . . . . . . . . . . . . . . . . . . . . . . . . 72, 139 ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 < . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30, 72 >> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 # . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30, 126 $* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 $? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 $@ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 $# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 $ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30, 70 && . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 & . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 \ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30, 32 227 || . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30, 75

A
a2ps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 acces control list . . . . . . . . . . . . . . . . . . 37 actif (processus) . . . . . . . . . . . . . . . . . . 53 adresse web (url) . . . . . . . . . . . . . . . . . . . . 118 lectronique . . . . . . . . . . . . . . . . . 116 adresse IP . . . . . . . . . . . . . . . . . . . . . . . 100 acher . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 afterstep . . . . . . . . . . . . . . . . . . . . 196, 197 aide apropos . . . . . . . . . . . . . . . . . . . . 210 dans emacs . . . . . . . . . . . . . . . . . . 194 en ligne . . . . . . . . . . . . . . . . . 217220 FAQs . . . . . . . . . . . . . . . . . . . . . . . 219 HOWTOS . . . . . . . . . . . . . . . . . . 217 info . . . . . . . . . . . . . . . . . . . . . . . . 215 mailing lists . . . . . . . . . . . . . . . . . 218 man . . . . . . . . . . . . . . . . . . . . . . . . . 212

228

Index

newgroups . . . . . . . . . . . . . . . . . . 217 Rfc . . . . . . . . . . . . . . . . . . . . . . . . . 220 sur le oube . . . . . . . . . . . . . . . . . 219 whatis . . . . . . . . . . . . . . . . . . . . . . 211 alias de commande . . . . . . . . . . . . . . .168 and . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 annuler dans emacs . . . . . . . . . . . . . . 186 apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 append . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 apropos . . . . . . . . . . . . . . . . . . . . 210, 211 apt-get . . . . . . . . . . . . . . . . . . . . . . . . . 207 ar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 arborescence . . . . . . . . . . . . . . . . . . . . . . 35 DNS . . . . . . . . . . . . . . . . . . . . . . . . 100 racine . . . . . . . . . . . . . . . . . . . . . . . . 36 serveur ftp . . . . . . . . . . . . . . . . . . 105 archivage . . . . . . . . . . . . . . . . . . . . . . . . . 81 arguments dans emacs . . . . . . . . . . . . . . . . . . 183 de fonction en shell . . . . . . . . . .141 de la ligne de commande . . . . 128 arrire plan . . . . . . . . . . . . . . . . . . . . . . . 60 ascii (transfert ftp) . . . . . . . . . . . . . . 105 aspirer un site web . . . . . . . . . . . . . . . 119 at . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64, 65 atq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 atrm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 autorisation avec X . . . . . . . . . .200202 avant-plan . . . . . . . . . . . . . . . . . . . . . . . . 60 awk . . . . . . . . . . . 9092, 9496, 164, 174

bibliothque . . . . . . . . . . . . . . . . . . . . . 150 emplacement . . . . . . . . . . . . . . . . 160 bibliothque dynamique . . . . . . . . . . 150 bibliothque et dition de liens . . . 157 binaire (transfert ftp) . . . . . . . . . . . . 105 bind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 boucle for . . . . . . . . . . . . . . . . . . . 86, 131 bounding box . . . . . . . . . . . . . . . . . . . . 144 buer demacs . . . . . . . . . . . . . . . . . . . 185 bureau demacs . . . . . . . . . . . . . . . . . . 194 byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 bzip2 . . . . . . . . . . . . . . . . . . . . . . . . . 8183

C
cancel . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 caractres de n de chier . . . . . . . . . . . . . . . 71 espace . . . . . . . . . . . . . . . . . . . . . . . . 30 gnriques . . . . . . . . . . . . . . . . . . . . 31 spciaux . . . . . . . . . . . . . . . . . . . . . .30 case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 cat . . . . . . . . . . . . . . 27, 75, 76, 124, 155 cc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 cd . . . . . . . . . . . . . . . . . . . . . . . . 39, 50, 105 change directory . . . . . . . . . . . . . . . . . . 39 charger dans emacs . . . . . . . . . . . . . . 186 chercher . . . . . . . . . . . . . . . . . . . . . . . . . . 80 chgrp . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42 chmod . . . . . . . . . . . . . . . . . . 42, 4446, 51 chown . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42 cible make . . . . . . . . . . . . . . . . . . . . . . . 144 client Xwindow . . . . . . . . . . . . . . . . . . 195 commande . . . . . . . . . . . . . . . . . . . . . . . . 25 composition . . . . . . . . . . . . . . . . . . 27 emacs . . . . . . . . . . . . . . . . . . . . . . . 180 expansion . . . . . . . . . . . . . . . . . . . . 70 externe . . . . . . . . . . . . . . . . . . . . . . . 26 historique . . . . . . . . . . . . . . . . . . . 167 interne . . . . . . . . . . . . . . . . . . . . . . . 26 substitution . . . . . . . . . . . . . . . . . . 85 distance . . . . . . . . . . . . . . 107, 115

B
background . . . . . . . . . . . . . . . . . . . . . . . 61 backquote . . . . . . . . . . . . . . . . . . . . . . . . 86 backslash . . . . . . . . . . . . . . . . . . . . . . . . . 70 backward . . . . . . . . . . . . . . . . . . . . . . . . 185 bash vii, 125, 126, 167, 168, 173, 203, 210 bash . . . . . . . . . . .86, 125, 135, 169, 171 bc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 bg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

Index

229

commentaire en shell . . . . . . . . . . . . 126 commenter dans emacs . . . . . . . . . . 188 compilation . . . . . . . . . . . . . . . . . . . . . . 150 avec make . . . . . . . . . . . . . . . . . . . 161 en ligne de commande . . 155, 157 gnrer les dpendances . . . . . 163 optimisation . . . . . . . . . . . . . . . . 155 options . . . . . . . . . . . . . . . . . . . . . . 155 prprocesseur . . . . . . . . . . . . . . . 152 rpertoires de recherche . . . . . 153 spare . . . . . . . . . . . . . . . . . . . . . . 155 warnings . . . . . . . . . . . . . . . . . . . . 155 compltion emacs . . . . . . . . . . . . . . . . . . . . . . . 182 compress . . . . . . . . . . . . . . . . . . . . . 81, 82 compression de chiers . . . . . . . . . . . . 82 compter . . . . . . . . . . . . . . . . . . . . . . . 78, 95 concatenate . . . . . . . . . . . . . . . . . . . . . . . 76 concatner . . . . . . . . . . . . . . . . . . . . . . . . 76 connexion ftp . . . . . . . . . . . . . . . . . . . . . . . . . . 105 rlogin . . . . . . . . . . . . . . . . . . . . . . . 107 ssh . . . . . . . . . . . . . . . . . . . . . . . . . . 108 telnet . . . . . . . . . . . . . . . . . . . . . . . 107 control-c . . . . . . . . . . . . . . . . . . . . . . . . . . 61 control-z . . . . . . . . . . . . . . . . . . . . . . . . . . 61 convert . . . . . . . . . . . . . . . . . . . . . . . . . . . .63 convivialit . . . . . . . . . . . . . . . . . . . . . . . 23 copier/coller dans emacs . . . . . . . . . 186 coreutils . . . . . . . . . . . . . . . . . . . . . . . . . .137 courrier lectronique . . . . . . . .voir mail cp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40, 86 cpp . . . . . . . . . . . . . . . . . . . . . . . . . 152, 153 create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 cron . . . . . . . . . . . . . . . . . . . . . 66, 204, 207 cron . . . . . . . . . . . . . . . . . . 65, 66, 80, 204 crontab . . . . . . . . . . . . . . . . . . . . . . .65, 66 csh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 csh . . . . . . . . . . . . . . . . . . . . 125, 166, 171 Ctrl-d (n de chier) . . . . . . . . . . . . . . 71 curl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 cut . . . . . . . . . . . . . . . . . . . . . . . . 77, 78, 90

D
daemon . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 se dplacer dans emacs . . . . . . . . . . .185 /dev/null . . . . . . . . . . . . . . . . . . . . . . . . 74 df . . . . . . . . . . . . . . . . . . . . . . . . . 36, 37, 81 dig . . . . . . . . . . . . . . . . . . . . . . . . . 102, 104 dir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 discussion en rseau . . . . . . . . . . . . . .114 DISPLAY . . . . . . . . . . . . . . . 199, 200, 204 display Xwindow . . . . . . . . . . . . . . . . 195 disques informations . . . . . . . . . . . . . . . . . .80 logiques . . . . . . . . . . . . . . . . . . . . . . 35 physiques . . . . . . . . . . . . . . . . . . . . 35 djgpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii dns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 domain name system . . . . . . . . . . . . 100 done . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 dpkg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 draft . . . . . . . . . . . . . . . . . . . . . . . . . . . . .220 driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 droits bloc . . . . . . . . . . . . . . . . . . . . . . . . . . 37 changer . . . . . . . . . . . . . . . . . . . 4243 chier . . . . . . . . . . . . . . . . . . . . . . . . 37 par dfaut . . . . . . . . . . . . . . . . . . . . 43 utilisateur . . . . . . . . . . . . . . . . . . . . 32 du . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 dvips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 dbut et n . . . . . . . . . . . . . . . . . . . . . . . 79 dcouper . . . . . . . . . . . . . . . . . . . . . . . . . . 77 dmarrage (chiers de) . . . . . . . . . . .171 dmarrage de Xwindow . . . . . . . . . . 198 dpendance make . . . . . . . . . . . . . . . . 145

E
echo . . . . . . . . . 27, 72, 84, 86, 124, 136 diter un chier . . . . . . . . . . . . . . . . . . 124 dition de liens . . . . . . . . . . . . . . . . . . 150

230

Index

avec bibliothques . . . . . . . . . . . 157 en ligne de commande . . . . . . . 157 rpertoires de recherches . . . . 160 EDITOR . . . . . . . . . . . . . . . . . . . . . . . . . . 170 eacer dans emacs . . . . . . . . . . . . . . . 185 elinks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Emacs . 12, 54, 125, 176, 178, 180, 188 emacs aide . . . . . . . . . . . . . . . . . . . . . . . . . 194 arguments . . . . . . . . . . . . . . . . . . .183 buer . . . . . . . . . . . . . . . . . . . . . . . 185 bureau . . . . . . . . . . . . . . . . . . . . . . 194 charger . . . . . . . . . . . . . . . . . . . . . .186 commande . . . . . . . . . . . . . . . . . . 180 commenter . . . . . . . . . . . . . . . . . . 188 compltion . . . . . . . . . . . . . . . . . . 182 copier/coller . . . . . . . . . . . . . . . . 186 eacer . . . . . . . . . . . . . . . . . . . . . . 185 .emacs . . . . . . . . . . . . . . . . . . . . . . 192 et les Makeles . . . . . . . . . . . . . . 188 frame . . . . . . . . . . . . . . . . . . . . . . . 183 francisation . . . . . . . . . . . . . . . . . 193 historique . . . . . . . . . . . . . . . . . . . 183 macros . . . . . . . . . . . . . . . . . . . . . . 191 minibuer . . . . . . . . . . . . . . . . . . . 181 mode . . . . . . . . . . . . . . . . . . . . . . . 180 modes . . . . . . . . . . . . . . . . . . . . . . . 193 personnaliser . . . . . . . . . . . 191194 raccourcis . . . . . . . . . . . . . . . . . . . 192 rechercher/remplacer . . . . . . . . 187 sauver . . . . . . . . . . . . . . . . . . . . . . .186 se dplacer . . . . . . . . . . . . . . . . . . 185 slectionner . . . . . . . . . . . . . . . . . 185 undo/redo . . . . . . . . . . . . . . . . . . 186 window . . . . . . . . . . . . . . . . . . . . . 183 emacs . . . . . . . . . . . . . . . . . . . . . . . vii, 181 .emacs . . . . . . . . . . . . . . . . . . . . . . . . . . 192 emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 endormi (processus) . . . . . . . . . . . . . . . 53 entre standard . . . . . . . . . . . . . . . . . . . 70 ENV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 env . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

environnement de dveloppement . . . . . . . . . . . 170 des logiciels . . . . . . . . . . . . . . . . . 170 variable d . . . . . . . . . . . . . . . . . . . .29 EOF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 erreur standard . . . . . . . . . . . . . . . . . . . 70 espace (nom de chier) . . . . . . . . . . . . 30 exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 expansion . . . . . . . . . . . . . . . . . . . . . 31, 70 export . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 expression rgulire . . . . 31, 88, 90, 93 extended regexp . . . . . . . . . . . . . . . 89, 93 extract . . . . . . . . . . . . . . . . . . . . . . . . . . . .83 excutable . . . . . . . . . . . . . . . . . . . . . . . 150 li dynamiquement . . . . . . . . . . 157 li statiquement . . . . . . . . . . . . . 159 localisation . . . . . . . . . . . . . . . . . . 170 excution . . . . . . . . . . . . . . . . . . . . . . . . 151

F
FAQs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 fg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 chier archivage . . . . . . . . . . . . . . . . . . . . . 81 attributs . . . . . . . . . . . . . . . . . . . . . 37 avec espace . . . . . . . . . . . . . . . . . . . 30 compression . . . . . . . . . . . . . . . . . . 82 copie . . . . . . . . . . . . . . . . . . . . . . . . . 40 droits . . . . . . . . . . . . . . . . . . . . . . . . 37 dplacement . . . . . . . . . . . . . . . . . . 40 eacer . . . . . . . . . . . . . . . . . . . . . . . . 41 diter . . . . . . . . . . . . . . . . . . . . . . . 124 excutable . . . . . . . . . . . . . . 150, 151 informations . . . . . . . . . . . . . . . . . .80 nom . . . . . . . . . . . . . . . . . . . . . . . . . . 30 objet . . . . . . . . . . . . . . . . . . . 150, 157 occupation . . . . . . . . . . . . . . . . . . . 96 propritaire . . . . . . . . . . . . . . . . . . 42 renommer . . . . . . . . . . . . . . . . . . . . 40 source . . . . . . . . . . . . . . . . . . . . . . . 150 systme de . . . . . . . . . . . . . . . . . . . 33

Index

231

taille . . . . . . . . . . . . . . . . . . . . . . . . . 80 transfert . . . . . . . . . . . . . . . . . . . . 104 eld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 le . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 find . . . . . . . . . 80, 87, 96, 97, 211213 finger . . . . . . . . . . . . . . . . . . . . . 113, 114 fonction du shell . . . . . . . . . . . . . . . . . 140 for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 foreground . . . . . . . . . . . . . . . . . . . . . . . . 62 forward . . . . . . . . . . . . . . . . . . . . . . . . . . 185 .forward . . . . . . . . . . . . . . . . . . . . . . . . 118 frame demacs . . . . . . . . . . . . . . . . . . . 183 francisation demacs . . . . . . . . . . . . . 193 ftp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 ftp . . . . . . . . . . . . . . . . . . . . . . . . . . . 66, 99 fuser . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 fvwm . . . . . . . . . . . . . . . . . . . . . . . 196, 197 fvwm2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

H
hash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 head . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 HISTCONTROL . . . . . . . . . . . . . . . . . . . . 168 HISTFILE . . . . . . . . . . . . . . . . . . . . . . . . 168 HISTFILESIZE . . . . . . . . . . . . . . . . . . . 168 historique . . . . . . . . . . . . . . . . . . . . . . . . 167 emacs . . . . . . . . . . . . . . . . . . . . . . . 183 history . . . . . . . . . . . . . . . . . . . . . . . . . 167 home . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 home directory . . . . . . . . . . . . . . . . 32, 39 host . . . . . . . . . . . . . . . . . . . . . . . . 102, 103 HOWTOS . . . . . . . . . . . . . . . . . . . . . . . 217 human readable . . . . . . . . . . . . . . . . . . . 81

I
ICMP . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 id . . . . . . . . . . . . . . . . . . . . . . . . . . . 32, 138 identicateur dutilisateur . . . . . . . . . . . . . . . . . . 31 de groupe . . . . . . . . . . . . . . . . . . . . 32 de processus . . . . . . . . . . . . . . . . . . 53 if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 IFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 ignore case . . . . . . . . . . . . . . . . . . . . . . . . 90 impression . . . . . . . . . . . . . . . . . . . . . . . . 63 improved . . . . . . . . . . . . . . . . . . . . . . . . 178 index node . . . . . . . . . . . . . . . . . . . . . . . . 36 info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 info . . . . . . . . . . . . . . . . . . . . . . . . 215, 216 inode . . . . . . . . . . . . . . . . . . . . . . . . . .36, 47 installer des logiciels . . . . . . . . 204206 Internet Engineering Task Force 12 220 interprteur . . . . . . . . . . . . . . . . . . . . . .126 invite . . . . . . . . . . . . . . . . . . . voir prompt IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
12. http://www.ietf.org

G
gcc . . . . . . . . . . . . . . . . . . . . . . iv, 154, 163 gcc . . . . . . . . . . . . . . . . . . . . 152155, 163 gestionnaire de fentres . . . . . . . . . . 196 getent . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 getfacl . . . . . . . . . . . . . . . . . . . . . . . 5153 Gimp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 globbing . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Gnome . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 gnome-keyring-daemon . . . . . . . . . . . 111 grep . . . . . . . . . . . . . . 71, 8890, 98, 174 gro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 group identier . . . . . . . . . . . . . . . . 32, 95 groupe . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 utilisateur . . . . . . . . . . . . . . . . . . . . 31 Gtk . . . . . . . . . . . . . . . . . . . . . . . . . . 22, 196 gzip . . . . . . . . . . . . . . . . . . . . . .8183, 204

232

Index

J
job . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 job control . . . . . . . . . . . . . . . . . . . . 57, 60 join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 joker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

K
Kde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 kill . . . . . . . . . . . . . . . . . . . . . . 57, 58, 62 ksh . . . . . . . . . . . . . . . . . . . . . . . . . 125, 203

L
LD_LIBRARY_PATH . 160, 161, 170, 205 ldd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 less . . . . . . . . . . . . . . . . . . . . . . . . . 76, 216 lftp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 lien . . . . . . . . . . . . . . . . . . . . . . . . 38, 4749 physique . . . . . . . . . . . . . . . . . . . . . 47 symbolique . . . . . . . . . . . . . . . . . . . 48 like this . . . . . . . . . . . . . . . . . . . . . . . . . . . ix link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 link . . . . . . . . . . . . . . . . . . . . . . voir edition links2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 list processing . . . . . . . . . . . . . . . . . . . 180 ln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 locate . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 logiciels connexes a2ps . . . . . . . . . . . . . . . . . . . . . . . . . . 63 afterstep . . . . . . . . . . . . . . . . 196, 197 apache . . . . . . . . . . . . . . . . . . . . . . . 22 bash vii, 125, 126, 167, 168, 173, 203, 210 bind . . . . . . . . . . . . . . . . . . . . . . . . . . 22 convert . . . . . . . . . . . . . . . . . . . . . . . 63 coreutils . . . . . . . . . . . . . . . . . . . . . 137 cron . . . . . . . . . . . . . . . . 66, 204, 207 csh . . . . . . . . . . . . . . . . . . . . . . . . . . 125 curl . . . . . . . . . . . . . . . . . . . . . . . . . 120 djgpp . . . . . . . . . . . . . . . . . . . . . . . . . iii

dvips . . . . . . . . . . . . . . . . . . . . . . . . . 63 elinks . . . . . . . . . . . . . . . . . . . . . . . . 121 Emacs 12, 54, 125, 176, 178, 180, 188 emacs . . . . . . . . . . . . . . . . . . . vii, 181 ftp . . . . . . . . . . . . . . . . . . . . . . . . . . 104 fvwm . . . . . . . . . . . . . . . . . . . 196, 197 fvwm2 . . . . . . . . . . . . . . . . . . . . . . . 198 gcc . . . . . . . . . . . . . . . . . iv, 154, 163 Gimp . . . . . . . . . . . . . . . . . . . . . . . . . 22 Gnome . . . . . . . . . . . . . . . . . . . . . . 196 gnome-keyring-daemon . . . . . . . 111 gro . . . . . . . . . . . . . . . . . . . . . . . . . 99 Gtk . . . . . . . . . . . . . . . . . . . . . . 22, 196 info . . . . . . . . . . . . . . . . . . . . . . . . . 216 Kde . . . . . . . . . . . . . . . . . . . . . . . . . 196 ksh . . . . . . . . . . . . . . . . . . . . . 125, 203 lftp . . . . . . . . . . . . . . . . . . . . . . . . . . 120 links2 . . . . . . . . . . . . . . . . . . . . . . . 121 lynx . . . . . . . . . . . . . . . . . . . . 120, 121 make . . . . . . . . . .123, 149, 163, 190 Motif . . . . . . . . . . . . . . . . . . . . . . . .196 Mozilla . . . . . . . . . . . . . . . . . . . . . . 118 mutt . . . . . . . . . . . . . . . . . . . . . . . . 117 mwm . . . . . . . . . . . . . . . . . . . . . . . . 196 MySql . . . . . . . . . . . . . . . . . . . . . . . . 20 Netscape . . . . . . . . . . . . . . . . . . . . 118 OpenOce . . . . . . . . . . . . . . . . . . . 20 Opera . . . . . . . . . . . . . . . . . . . . . . . 118 Perl . . . . . . . . . . . . . . . . . . . 16, 2022 Qt . . . . . . . . . . . . . . . . . . . . . . . . . . 196 rlogin . . . . . . . . . . . . . . 104, 107, 112 sed . . . . . . . . . . . . . . . . . . . . . . ix, 133 sendmail . . . . . . . . . . . . . . . . . . . . . . 22 sh . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 ssh . . . . . . . . . . . . . . . . . . . . . 104, 111 telnet . . . . . . . . . . . . . . 104, 107, 112 vi . . . . . . . . . . . . . . vii, 125, 176178 vim . . . . . . . . . . . . . . . . . . . . . 178, 188 w3m . . . . . . . . . . . . . . . . . . . . . . . . 121 wget . . . . . . . . . . . . . . . . 66, 119, 120 windowmaker . . . . . . . . . . . 196, 197

Index

233

X . . . . . 20, 178, 194196, 198204 X window . . . . . . . . . . . . . . . . . . . 194 Xaw . . . . . . . . . . . . . . . . . . . . . . . . . 196 xdvi . . . . . . . . . . . . . . . . . . . . . . . . . 173 Xlib . . . . . . . . . . . . . . . . . . . . . . . . . 194 xloadimage . . . . . . . . . . . . . 202, 204 Xt . . . . . . . . . . . . . . . . . . . . . . . . . . .196 lp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 lpq . . . . . . . . . . . . . . . . . . . . . . . . . . . 63, 64 lpr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 lprm . . . . . . . . . . . . . . . . . . . . . . . . . . 63, 64 lpstat . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 ls . . . . 26, 31, 3638, 43, 51, 105, 143, 211, 216 lynx . . . . . . . . . . . . . . . . . . . . . . . . . 120, 121

M
machine adresse . . . . . . . . . . . . . . . . . . . . . . 100 nom . . . . . . . . . . . . . . . . . . . . . . . . .100 macros demacs . . . . . . . . . . . . . . . . . . 191 Mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 mail . . . . . . . . . . . . . . . . . . . . . . . . .116118 adresses lectroniques . . . . . . . 116 envoyer . . . . . . . . . . . . . . . . . . . . . . .96 faire suivre . . . . . . . . . . . . . . . . . . 118 logiciel de . . . . . . . . . . . . . . . . . . . 117 machine relais (MX) . . . . . . . . 104 mail transport agent . . . . . . . . 117 mail user agent . . . . . . . . . . . . . . 117 MTA . . . . . . . . . . . . . . . . . . . . . . . . 117 MUA . . . . . . . . . . . . . . . . . . . . . . . 117 mail . . . . . . . . . . . . . . . . . . 7375, 96, 117 mailing . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 mailing lists . . . . . . . . . . . . . . . . . . . . . 218 mailx . . . . . . . . . . . . . . . . . . . . . . . . 74, 117 make . . . . . . . . . . . . . . 123, 149, 163, 190 make 143149, 161, 162, 164, 204, 205 cible . . . . . . . . . . . . . . . . . . . . . . . . 144 compiler avec . . . . . . . . . . . . . . . 161 dans emacs . . . . . . . . . . . . . . . . . . 188

dpendance . . . . . . . . . . . . . . . . . 145 gnrer les dpendances . . . . . 163 rgle . . . . . . . . . . . . . . . . . . . . . . . . 146 rgle implicite . . . . . . . . . . . . . . . 146 variable . . . . . . . . . . . . . . . . . . . . . 147 variables . . . . . . . . . . . . . . . . . . . . 146 make directory . . . . . . . . . . . . . . . . . . . . 41 makeinfo . . . . . . . . . . . . . . . . . . . . . . . . 215 man . . . . . . . . . . . 171, 212, 214216, 218 MANPATH . . . . . . . . . . . . . . . . . . . . 205, 214 messages derreur . . . . . . . . . . . . . . . . . . . . . . 27 messages console . . . . . . . . . . . . . . . . . 113 mget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 minibuer emacs . . . . . . . . . . . . . . . . . . . . . . . 181 mkdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41 mode emacs . . . . . . . . . . . . . . . . . . 180, 193 montage de partition . . . . . . . . . . . . . . 35 more . . . . . . . . . . . . . . . . . . . . . 72, 76, 216 most . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Motif . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 mount . . . . . . . . . . . . . . . . . . . . . . . . . 35, 42 Mozilla . . . . . . . . . . . . . . . . . . . . . . . . . . .118 MTA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 MUA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 multibyte . . . . . . . . . . . . . . . . . . . . . . . . . 79 mutt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 mv . . . . . . . . . . . . . . . . . . . . . . . . . . . 40, 175 mwm . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 MySql . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20

N
Netscape . . . . . . . . . . . . . . . . . . . . . . . . . 118 newsgroups . . . . . . . . . . . . . . . . . . . . . . 217 NFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 nice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 nohup . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66 nom de chier . . . . . . . . . . . . . . . . . . . . . 30

234

Index

nom de machine . . . . . . . . . . . . . . . . . 100 non authoritative . . . . . . . . . . . . . . . . 104 nslookup . . . . . . . . . . . . . . . . . . . 102104 number of record . . . . . . . . . . . . . . . . . 92

O
objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 OpenOce . . . . . . . . . . . . . . . . . . . . . . . . 20 Opera . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 optimisation la compilation . . . . 155 or . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 ordonnanceur . . . . . . . . . . . . . . . . . . . . . 53

lister . . . . . . . . . . . . . . . . . . . . . . . . . 54 parents . . . . . . . . . . . . . . . . . . . . . . . 57 priorit . . . . . . . . . . . . . . . . . . . . . . . 57 rependre . . . . . . . . . . . . . . . . . . . . . 60 tat . . . . . . . . . . . . . . . . . . . . . . . . . . 53 prompt . . . . . . . . . . . . . . . . . . . 25, 87, 166 prompt . . . . . . . . . . . . . . . . . . . . . . . . . . 106 propritaire . . . . . . . . . . . . . . . . . . . . . . . 42 prprocesseur du C . . . . . . . . . . . . . . 152 ps . . . . . . . . . . . . . . . . . 5456, 59, 90, 174 PS1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 PS2 . . . . . . . . . . . . . . . . . . . . . . . . . . 88, 167 pwd . . . . . . . . . . . . . . . . . . . . . . 39, 50, 105

P
PAGER . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 partition . . . . . . . . . . . . . . . . . . . . . . . . . . 35 montage . . . . . . . . . . . . . . . . . . . . . . 35 taux doccupation . . . . . . . . 37, 81 PATH . . . . . . . . 26, 29, 34, 152, 170, 204 pathname expansion . . . . . . . . . . . . . . 31 pax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Perl . . . . . . . . . . . . . . . . . . . . . . . . 16, 2022 personnaliser emacs . . . . . . . . . 191194 pid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 ping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 PostScript . . . . . . . . . . . . . . . . . . . . . . . . 63 preprocessing . . . . . . . . . . . . . . . . . . . . 150 print working directory . . . . . . . . . . . 39 printf . . . . . . . . . 84, 86, 124, 203, 213 priorit dun processus . . . . . . . . . . . . 53, 57 privilges . . . . . . . . . . . . . . . . . voir droits processus . . . . . . . . . . . . . . . . . . . . . . 5362 des utilisateurs . . . . . . . . . . . . . . . 55 en arrire-plan . . . . . . . . . . . . . . . 60 en avant-plan . . . . . . . . . . . . . 60, 62 en tche de fond . . . . . . . . . . . . . .60 et signaux . . . . . . . . . . . . . . . . . . . . 58 interrompre . . . . . . . . . . . . . . . . . . 59

Q
Qt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

R
raccourci . . . . . . . . . . . . . . . . . . . . . . . . . .49 raccourcis demacs . . . . . . . . . . . . . . . 192 racine de larborescence . . . . . . . . . . . . . 36 RANDOM . . . . . . . . . . . . . . . . . . . . . 202, 203 ranlib . . . . . . . . . . . . . . . . . . . . . . . . . . 161 rcp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 rechercher remplacer dans emacs . 187 recoller . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 redirection du ux de sortie . . . . . . . . . . . . . . 72 redirections . . . . . . . . . . . . . . . . . . . . 7076 du ux dentre . . . . . . . . . . . . . . 73 du ux derreur . . . . . . . . . . . . . . 72 tubes . . . . . . . . . . . . . . . . . . . . . 7476 regular expression 88, voir expression rgulire regular le . . . . . . . . . . . . . . . . . . . . . . . 134 remove directory . . . . . . . . . . . . . . . . . . 41 renice . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 request for comments . . . . . . . . . . . . 220

Index

235

return . . . . . . . . . . . . . . . . . . . . . . . . . . 140 reverse engineering . . . . . . . . . . . . . . . . 18 revert match . . . . . . . . . . . . . . . . . . . . . . 90 Rfc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 .rhosts . . . . . . . . . . . . . . . . . . . . . . . . . 107 rlogin . . . . . . . . . . . . . . . . . . 104, 107, 112 rlogin . . . . . . . . 99, 108, 115, 116, 201 rm . . . . . . . . . . . . . . . . . . . . 41, 4749, 143 rmdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41 root utilisateur . . . . . . . . . . . . . . . . . . . . 33 rsh . . . . . . . . . . . . . . . . . . . . . . . . . 115, 201 runnable . . . . . . . . . . . . . . . . . . . . . . . . . . 55 rwho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 rgle make . . . . . . . . . . . . . . . . . . . . . . . 146 rgle implicite make . . . . . . . . . . . . . . 146 rpertoire . . . . . . . . . . . . . . . . . . . . . . . . . 39 attributs . . . . . . . . . . . . . . . . . . . . . 43 cration . . . . . . . . . . . . . . . . . . . . . . 41 eacement . . . . . . . . . . . . . . . . . . . .41 et lien . . . . . . . . . . . . . . . . . . . . . . . . 49 home . . . . . . . . . . . . . . . . . . . . . 32, 39 taille . . . . . . . . . . . . . . . . . . . . . . . . . 80 utilisateur . . . . . . . . . . . . . . . . . . . . 31 rseau utilitaires . . . . . . . . . . . . . . . . . . . 101

S
sauver dans emacs . . . . . . . . . . . . . . . 186 scheduler . . . . . . . . . . . . . . . . . . . . . . . . . 53 scheduler . . . . . . . . . . . . . . . . . . . . . . . . . .53 scp . . . . . . . . . . . . . . . . . . . . 110, 115, 116 scripts shell . . . . . . . . . . . . . . . . . 125141 search permission . . . . . . . . . . . . . . . . . 39 sed . . . . . . . . . . . . . . . . . . . . . . . . . . . ix, 133 sed . . . . . . . . . . . . . . . . . . 9294, 134, 164 sendmail . . . . . . . . . . . . . . . . . . . . . . . . . . 22 seq . . . . . . . . . . . . . . . . . . . . . . . . . 136, 137 serveur X . . . . . . . . . . . . . . . . . . . . . . . . 195 service cron . . . . . . . . . . . . . . . . . . . . . . . . . . 65

daemon . . . . . . . . . . . . . . . . . . . . . . 62 impression . . . . . . . . . . . . . . . . . . . 63 services at . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 setfacl . . . . . . . . . . . . . . . . . . . . . . .51, 52 sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 sh . . . . . . . . . . . . . . . . . . . . . 125, 166, 171 shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 alias . . . . . . . . . . . . . . . . . . . . . . . . 168 arguments (ligne de commande) 128 boucle for . . . . . . . . . . . . . . 86, 131 commentaire . . . . . . . . . . . . . . . . 126 conguration . . . . . . . . . . . 166173 dmarrage . . . . . . . . . . . . . . . . . . 171 fonction . . . . . . . . . . . . . . . . . . . . . 140 historique . . . . . . . . . . . . . . . . . . . 167 interactif . . . . . . . . . . . . . . . . . . . . . 25 langage . . . . . . . . . . . . . . . . . . . . . . .84 prompt . . . . . . . . . . . . . . . . . . 25, 166 scripts . . . . . . . . . . . . . . . . . . 125141 structures de contrle . . . . . . . 135 test . . . . . . . . . . . . . . . . . . . . . . . . . 134 utilisateur . . . . . . . . . . . . . . . . . . . . 31 variable arithmtique, 132 modication, 129 variables . . . . . . . . . . . . . . . . . . . . 127 SHLIB_PATH . . . . . . . . . . . . . . . . . . . . . 160 signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 CONT . . . . . . . . . . . . . . . . . . . . . . . . . 60 KILL . . . . . . . . . . . . . . . . . . . . . . . . . 59 STOP . . . . . . . . . . . . . . . . . . . . . . . . . 59 Single Unix Specication . . . . . . . . . . 54 sleeping . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 sort . . . . . . . . . . . . . . . . . . . . . . . . . . 75, 77 sortie standard . . . . . . . . . . . . . . . . . . . . 70 source . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 ssh . . . . . . . . . . . . . . . . . . . . . . . . . . 104, 111 ssh . .99, 108, 109, 111, 112, 115, 116, 202 ssh-agent . . . . . . . . . . . . . . . . . . . . . . . 111 ssh-copy-id . . . . . . . . . . . . . . . . . . . . 111

236

Index

ssh-keygen . . . . . . . . . . . . . . . . . . . . . 110 standard error . . . . . . . . . . . . . . . . . . . . . . . . . 70 input . . . . . . . . . . . . . . . . . . . . . . . . . 70 output . . . . . . . . . . . . . . . . . . . . . . . 70 standard error . . . . . . . . . . . . . . . . . . . . 70 standard input . . . . . . . . . . . . . . . . . . . . 70 standard output . . . . . . . . . . . . . . . . . . 70 status . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55 stream editor . . . . . . . . . . . . . . . . . . . . . 92 structures de contrle . . . . . . . . . . . . 135 if . . . . . . . . . . . . . . . . . . . . . . . . . . 138 su . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 substitute . . . . . . . . . . . . . . . . . . . . . . . . . 92 substitution de commande . . . . . . . . 85 summarize . . . . . . . . . . . . . . . . . . . . . . . . 81 suspendu (processus) . . . . . . . . . . . . . .53 systme de chier . . . . . . . . . . . . . . . . . 33 slectionner dans emacs . . . . . . . . . . 185

-x . . . . . . . . . . . . . . . . . . . . . . . . . . 134 test en shell . . . . . . . . . . . . . . . . . . . . . .134 tiret . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 toto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 touch . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43 tr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 traceroute . . . . . . . . . . . . . . . . . . . . . 102 transfert ascii . . . . . . . . . . . . . . . . . . . . . . . . .105 binaire . . . . . . . . . . . . . . . . . . . . . . 105 transfert de chier . . . . . . . . . . . . . . . 104 translate . . . . . . . . . . . . . . . . . . . . . . . . . . 87 trier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 trou noir . . . . . . . . . . . . . . . . . . . . . . . . . . 74 tubes . . . . . . . . . . . . . . . . . . . . . . . . . . 7476 type . . . . . . . . . . . . . . . . . . . . . . . . . 27, 169 tche de fond . . . . . . . . . . . . . . . . . . . . . . . 60 en arrire-plan . . . . . . . . . . . . . . . 62

T
tabulation avec make . . . . . . . . . . . . . 144 tail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 talk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 tape archiver . . . . . . . . . . . . . . . . . . . . . .82 tar . . . . . . . . . . . . . . . . . . . . . . . . . . . .8183 tcsh . . . . . . . . . . . . . . . . . . . . . . . . 125, 169 telnet . . . . . . . . . . . . . . . . . . 104, 107, 112 telnet . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 TERM . . . . . . . . . . . . . . . . . . . . . . . . . 54, 171 terminal . . . . . . . . . . . . . . . . . . . . . . . . . . 53 et processus . . . . . . . . . . . . . . . . . . 54 test -d . . . . . . . . . . . . . . . . . . . . . . . . . . 134 -eq . . . . . . . . . . . . . . . . . . . . . . . . . 135 -f . . . . . . . . . . . . . . . . . . . . . . . . . . 134 -ge . . . . . . . . . . . . . . . . . . . . . . . . . 135 -gt . . . . . . . . . . . . . . . . . . . . . . . . . 135 -le . . . . . . . . . . . . . . . . . . . . . . . . . 135 -lt . . . . . . . . . . . . . . . . . . . . . . . . . 135 -ne . . . . . . . . . . . . . . . . . . . . . . . . . 135

U
uid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 umask . . . . . . . . . . . . . . . . . . . . . . . . 43, 46 umask . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46 underscore . . . . . . . . . . . . . . . . . . . . . . . . 90 undo/redo dans emacs . . . . . . . . . . . 186 uniform resource locator . . . . . . . . . 118 url . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 US patent . . . . . . . . . . . . . . . . . . . . . . . . 21 user identier . . . . . . . . . . . . . . 31, 32, 95 utilisateur changer d . . . . . . . . . . . . . . . . . . .113 identicateur . . . . . . . . . . . . . . . . . 31 informations . . . . . . . . . . . . . . . . 113 liste des . . . . . . . . . . . . . . . . . 94, 112 logique . . . . . . . . . . . . . . . . . . . . . . . 31 processus des . . . . . . . . . . . . . . . . . 55 root . . . . . . . . . . . . . . . . . . . . . . . . . . 33 rpertoire . . . . . . . . . . . . . . . . . . . . 31 utilitaires disques et chiers . . . 8083 utilitaires rseau . . . . . . . . . . . . . . . . . 101

Index

237

V
variable denvironnement . . . . . . . . . . . . . .29 du shell . . . . . . . . . . . . . . . . . . . . . 127 make . . . . . . . . . . . . . . . . . . . 146, 147 shell arithmtique, 132 modication, 129 vdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 verbose . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 vi . . . . . . . . . . . . . . . . . . vii, 125, 176178 vi . . . . . . . . . . 7, 65, 165, 170, 176, 177 vim . . . . . . . . . . . . . . . . . . . . . . . . . 178, 188

X
X . . . . . . . . . .20, 178, 194196, 198204 X window . . . . . . . . . . . . . . . . . . . . . . . . 194 xargs . . . . . . . . . . . . . . . . . . . . . . . . . 97, 98 xauth . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Xaw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 xdvi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .173 xdvi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 xfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 xhost . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Xlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 xloadimage . . . . . . . . . . . . . . . . . . 202, 204 xloadimage . . . . . . . . . . . . . . . . . . . . . 204 .xinitrc . . . . . . . . . . . . . . . . . . . . . . . . 198 .xsession . . . . . . . . . . . . . . . . . . . . . . . 198 xsetroot . . . . . . . . . . . . . . . . . . . . . . . . 202 Xt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 xterm . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 xv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Xwindow autorisation . . . . . . . . . . . . 200202 client . . . . . . . . . . . . . . . . . . . . . . . 195 display . . . . . . . . . . . . . . . . . . . . . . 195 DISPLAY . . . . . . . . . . . . . . . . . . . . 199 dmarrage . . . . . . . . . . . . . . . . . . 198 principe gnral . . . . . . . . . . . . . 195 serveur . . . . . . . . . . . . . . . . . . . . . . 195 window manager . . . . . . . . . . . . 196 .xinitrc . . . . . . . . . . . . . . . . . . . 198 .xsession . . . . . . . . . . . . . . . . . . 198 xzgv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

W
w3m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 warning la compilation . . . . . . . . 155 wc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 wget . . . . . . . . . . . . . . . . . . . . 66, 119, 120 whatis . . . . . . . . . . . . . . . . . . . . . 211, 212 which . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27 while . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 who . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 whoami . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 wildcard . . . . . . . . . . . . . . . . . . . . . . . . . 137 wildcard . . . . . . . . . . . . . . . . . . . . . . . . . . 31 window demacs . . . . . . . . . . . . . . . . . 183 window manager . . . . . . . . . . . . . . . . . 196 windowmaker . . . . . . . . . . . . . . . . 196, 197 word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 word count . . . . . . . . . . . . . . . . . . . . . . . 78 World wide web . . . . . . . . . . . voir www write . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 www . . . . . . . . . . . . . . . . . . . . . . . . 118121 adresse (url) . . . . . . . . . . . . . . . . 118 aspirer un site . . . . . . . . . . . . . . . 119 naviguer en mode texte . . . . . 120

Table des matires


1 Unix et les logiciels libres 1.1 Avant-propos : la naissance dun logiciel . 1.1.1 Du source . . . . . . . . . . . . . . 1.1.2 De la portablilit . . . . . . . . . . 1.2 Unix . . . . . . . . . . . . . . . . . . . . . 1.2.1 Historique . . . . . . . . . . . . . . 1.2.2 Architecture et caractristiques . . 1.3 Les logiciels libres . . . . . . . . . . . . . . 1.3.1 Les dirents types de logiciels . . 1.3.2 Historique du projet Gnu . . . . . 1.3.3 Principe de la gpl . . . . . . . . . . 1.4 Le cas de Gnu/Linux . . . . . . . . . . . . 1.4.1 Quest-ce que Linux ? . . . . . . . 1.4.2 Historique . . . . . . . . . . . . . . 1.5 Quelques rexions sur les logiciels libres . 1.6 Actualit et avenir des logiciels libres . . . 1.6.1 Le problme des drivers . . . . 1.6.2 Le problme des virus . . . . . 1.6.3 De lutopie la loi du march . . . 1.6.4 Des brevets sur les logiciels . . . . 1.6.5 Quelques beaux exemples . . . . . 239 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 2 3 5 6 9 10 10 11 13 13 13 14 15 17 18 18 19 20 21

240

Table des matires

2 Petit guide de survie 2.1 Le shell . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 Quest-ce quune commande ? . . . . . . . . . 2.1.2 Convivialit et ergonomie . . . . . . . . . . 2.1.3 Rudiments sur les variables denvironnement 2.1.4 Caractres spciaux . . . . . . . . . . . . . . 2.1.5 Espaces dans les noms de chiers . . . . . . . 2.1.6 Caractres gnriques . . . . . . . . . . . . . 2.2 Utilisateurs . . . . . . . . . . . . . . . . . . . . . . . 2.3 Le systme de chiers . . . . . . . . . . . . . . . . . 2.3.1 Rfrencement des chiers et des rpertoires . 2.3.2 Arborescence . . . . . . . . . . . . . . . . . . 2.3.3 Privilges . . . . . . . . . . . . . . . . . . . . 2.3.4 Parcourir larborescence . . . . . . . . . . . . 2.3.5 Manipuler les chiers . . . . . . . . . . . . . . 2.3.6 Et les rpertoires dans tout a ? . . . . . . . . 2.3.7 Gestion des supports amovibles . . . . . . . . 2.3.8 Changer les droits . . . . . . . . . . . . . . . 2.3.9 Liens . . . . . . . . . . . . . . . . . . . . . . . 2.3.10 Access control list (ACL) . . . . . . . . . . . 2.4 Processus . . . . . . . . . . . . . . . . . . . . . . . . 2.4.1 Examiner les processus . . . . . . . . . . . . . 2.4.2 Modier le droulement dun processus . . . 2.5 Quelques services . . . . . . . . . . . . . . . . . . . . 2.5.1 Impression . . . . . . . . . . . . . . . . . . . 2.5.2 Le service at . . . . . . . . . . . . . . . . . . 2.5.3 Le service cron . . . . . . . . . . . . . . . . . 2.5.4 Lutilitaire nohup . . . . . . . . . . . . . . . . 3 La bote outils 3.1 Introduction lexpansion . . . . . 3.2 Redirections et tubes . . . . . . . . 3.2.1 Redirections . . . . . . . . . 3.2.2 Les tubes (pipes) . . . . . . 3.3 Les outils de base . . . . . . . . . . 3.3.1 Acher . . . . . . . . . . . 3.3.2 Trier . . . . . . . . . . . . . 3.3.3 Dcouper en colonnes . . . 3.3.4 Recoller les colonnes . . . . 3.3.5 Compter . . . . . . . . . . . 3.3.6 Tte--queue . . . . . . . . 3.3.7 Utilitaires disques et chiers 3.4 Le shell en tant que langage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23 24 25 28 29 30 30 31 31 33 33 35 37 39 40 41 42 42 47 50 53 54 57 62 63 64 65 66 69 70 70 72 74 76 76 77 77 78 78 79 80 84

Table des matires

241

3.5 3.6 3.7 3.8

3.4.1 Acher des informations avec printf . 3.4.2 Substitution de commande . . . . . . . 3.4.3 La structure for de bash . . . . . . . . 3.4.4 Revenons nos moutons . . . . . . . . . grep et la notion dexpressions rgulires . . . awk . . . . . . . . . . . . . . . . . . . . . . . . . sed . . . . . . . . . . . . . . . . . . . . . . . . . tudes de cas . . . . . . . . . . . . . . . . . . . 3.8.1 Manipuler la liste des utilisateurs . . . . 3.8.2 Envoyer des mails . . . . . . . . . . . . 3.8.3 Estimer loccupation de certains chiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

84 85 86 87 88 90 92 94 94 96 96 99 100 100 100 101 104 104 107 108 112 112 113 113 113 114 115 116 116 117 118 118 118 119 120 123 124 124 125 125 126

4 Communiquer ! 4.1 Concepts connatre . . . . . . . 4.1.1 Notion dadresse IP . . . 4.1.2 Notion de DNS . . . . . . 4.1.3 Quelques utilitaires rseau 4.2 Quatre grands classiques . . . . . 4.2.1 ftp . . . . . . . . . . . . . 4.2.2 telnet et rlogin . . . . . . 4.2.3 Secure shell (ssh) . . . . . 4.3 Outils de communication dUnix 4.3.1 who . . . . . . . . . . . . 4.3.2 Changer didentit . . . . 4.3.3 write . . . . . . . . . . . . 4.3.4 nger . . . . . . . . . . . 4.3.5 talk . . . . . . . . . . . . 4.3.6 remote commandes . . 4.4 Courrier lectronique . . . . . . . 4.4.1 Format des adresses . . . 4.4.2 Mail user agents . . . . . 4.4.3 Faire suivre son courrier . 4.5 Le oube . . . . . . . . . . . . . . 4.5.1 Format des adresses . . . 4.5.2 Wget laspirateur . . . . . 4.5.3 Lynx lextraterrestre . . . 5 Dvelopper ! 5.1 diter un chier . . . . 5.1.1 Sans diteur . . . 5.1.2 Avec un diteur . 5.2 Faire des scripts en shell 5.2.1 Commentaires . . . . . . . . . . . . . . . . . . . . . . . . . .

242

Table des matires

5.3

5.4

5.2.2 Choisir linterprteur . . . . . . . . . . . . . 5.2.3 Variables . . . . . . . . . . . . . . . . . . . 5.2.4 Structure de contrle et tests . . . . . . . . 5.2.5 Fonctions . . . . . . . . . . . . . . . . . . . 5.2.6 Input eld separator . . . . . . . . . . . . . 5.2.7 Fiabilit des scripts . . . . . . . . . . . . . Makele . . . . . . . . . . . . . . . . . . . . . . . . 5.3.1 Principes de base . . . . . . . . . . . . . . . 5.3.2 Variables . . . . . . . . . . . . . . . . . . . 5.3.3 Rgles implicites et variables prdnies . . 5.3.4 Outils sur les variables . . . . . . . . . . . . 5.3.5 Options et fonctionnalits diverses . . . . . Faire des projets en langage C . . . . . . . . . . . . 5.4.1 Remarques prliminaires . . . . . . . . . . . 5.4.2 tude du cas simple : un seul chier source 5.4.3 Compilation spare . . . . . . . . . . . . . 5.4.4 Bibliothques . . . . . . . . . . . . . . . . . 5.4.5 Se simplier la vie avec make . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

126 127 134 140 141 142 143 144 146 146 147 148 150 150 150 155 157 161 165 166 166 167 168 170 170 171 173 176 178 178 181 181 183 185 188 191 194 194 195 196 198 199

6 Se mettre laise ! 6.1 Avec le shell . . . . . . . . . . . . . . . . . 6.1.1 Le prompt . . . . . . . . . . . . . . 6.1.2 Historique des commandes . . . . . 6.1.3 Alias et fonctions . . . . . . . . . . 6.1.4 Environnement de dveloppement 6.1.5 Interaction avec les logiciels . . . . 6.1.6 Fichiers de dmarrage . . . . . . . 6.1.7 tude(s) de cas . . . . . . . . . . . 6.2 Avec vi . . . . . . . . . . . . . . . . . . . . 6.3 Avec Emacs . . . . . . . . . . . . . . . . . 6.3.1 Concepts de base . . . . . . . . . . 6.3.2 Notations utilises . . . . . . . . . 6.3.3 Appeler une commande . . . . . . 6.3.4 Manipuler les objets dEmacs . . . 6.3.5 Les tches basiques . . . . . . . . . 6.3.6 Emacs et les Makeles . . . . . . . 6.3.7 Personnaliser . . . . . . . . . . . . 6.3.8 laide . . . . . . . . . . . . . . . 6.4 Avec Xwindow . . . . . . . . . . . . . . . 6.4.1 Principe gnral . . . . . . . . . . 6.4.2 Les direntes couches . . . . . . . 6.4.3 Comprendre le dmarrage . . . . . 6.4.4 X et le rseau . . . . . . . . . . . .

Table des matires

243

6.5

6.4.5 tude de cas : fond dcran Installer des logiciels . . . . . . . . 6.5.1 Installer des binaires . . . . 6.5.2 Installer des sources . . . . 6.5.3 Installer des paquet Debian

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

202 204 204 205 206 209 210 210 211 212 212 213 214 215 215 215 216 217 217 217 218 219 219 220 221 223 227

7 laide ! 7.1 Quoi fait quoi ? . . . . . . . . . . . . . . . . . 7.1.1 propos . . . . . . . . . . . . . . . . 7.1.2 Mais cest quoi donc ? . . . . . . . . . 7.2 Les pages de manuel . . . . . . . . . . . . . . 7.2.1 Une page de manuel . . . . . . . . . . 7.2.2 Hirarchie des pages de manuel . . . . 7.2.3 La variable denvironnement MANPATH 7.2.4 Recherche exhaustive . . . . . . . . . . 7.2.5 La commande ultime . . . . . . . . . . 7.3 Le format info . . . . . . . . . . . . . . . . . . 7.4 Le logiciel . . . . . . . . . . . . . . . . . . . . 7.5 Les HOWTO . . . . . . . . . . . . . . . . . . 7.6 La documentation en ligne . . . . . . . . . . . 7.6.1 Les newsgroups . . . . . . . . . . . . . 7.6.2 Les mailing lists . . . . . . . . . . . . 7.6.3 Le oube . . . . . . . . . . . . . . . . 7.6.4 Les foires aux questions . . . . . . . . 7.6.5 Les Request for comments . . . . . . . Bibliographie Glossaire Index

Pour aller plus loin avec la ligne de commande 1.03 N ISBN : 978-2-35922-023-0 Achev dimprimer en France pour le compte dInLibroVeritas.net en 2010

You might also like