Você está na página 1de 224

Voir en page viii comment on peut imprimer ce manuel...

TOUT CE QUE VOUS AVEZ TOUJOURS VOULU SAVOIR SUR

Unix
SANS JAMAIS OS ER LE DEMANDER

Ou comment utiliser la ligne de commande quand on ny connat goutte


Vincent Lozano lozano@enise.fr
Version du 24 dcembre 2010 Dernire mise jour sur : http://lozzone.free.fr

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 Sainttienne, 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 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
1. Crateur du logiciel Perl. 2. Et donc de permettre de joyeux ptr=(char*)malloc(4194304); que certes seuls les habitus du langage C comprendront...

vi de sciences Saint-tienne, jentrepris dinstaller une version de gcc (compilateur A C 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... 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 diuser 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...
3. Le rseau Renater regroupe prs dun millier dtablissements de recherche et denseignement. 4. Peut-on dailleurs crer un guide de rfrence sur lutilisation dunix ?

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

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

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 exclusivement les chiers proposs sur http: //lozzone.free.fr. Ce manuel est conu pour tre imprim en deux pages logiques
7. Arf arf (comme disait Frank Zappa).

ix par page physique (2up printing comme disent nos amis anglosaxons). En dautres termes, chaque page de ce document doit apparatre sur une page au format A5. Quatre solutions et quatre chiers associs sont possibles : 1. une version destine tre relie du long cot de la feuille A4, cest la solution pour ceux qui ne disposent pas de massicot ; le chier portant le nom guide-unix-0.pdf est en outre gnr pour prsenter la page impaire (dite belle page) droite (cf. gure 1a page x) ; 2. une version pour ceux qui disposent dun massicot : dans ce cas, il faudra plier le document et le relier au niveau de cette pliure (voir gure 1b page x). Le chier correspondant se nomme guide-unix-1.pdf ; 3. une version contenant 2 exemplaires (chier guide-unix-2.pdf). On reliera ces deux exemplaires comme indiqu la gure 1c page x ; 4. une version au format PostScript guide-unix.ps.gz pour ceux qui voudraient faire leur sauce ...

Attention, les deux derniers chiers au format Pdf, sont prvus pour tre imprims en recto verso en demandant limprimante de retourner la feuille du ct court. Il faudra donc veiller ce que le pilote dimprimante utilise cette option.

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 : 24 dcembre 2010 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.

(a) Reliure longue

(b) Reliure courte 1 exemplaire

(c) Reliure courte 2 exemplaires

Figure 1: Les versions imprimables

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

xi 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. 47

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 A du package french 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 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
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...

xii 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. 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 1 5 9 11 13 15 21 21 28 30 47 55 61 61 62 67 73 77 79 81 83 87 87 91 98 101 103

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 . . . . . . . . . . . . . . . . . . . . . 3.7 sed . . . . . . . . . . . . . . . . . . . . . 3.8 tudes de cas . . . . . . . . . . . . . . . 4 Communiquer ! 4.1 Concepts connatre . . 4.2 Quatre grands classiques 4.3 Outils de communication 4.4 Courrier lectronique . . 4.5 Le oube . . . . . . . . . . . . . . . . . dUnix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

107 . 107 . 109 . 124 . 130 . . . . 143 143 152 154 168

xiii

xiv 6.5 Installer des logiciels . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 181 183 186 187 187 188 191 193 197

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 ligne Bibliographie Glossaire Index

1
Sommaire 1.1 1.2 1.3 1.4 1.5 1.6

Unix et les logiciels libres


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 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. Grgoire (1837) 1 .

vant daborder ltude du systme unix, nous allons, dans ce chapitre, dnir quelques termes de manire clairer le lecteur novice. Les claircissements portent la fois sur la famille de systmes dexploitation quest unix, et le type 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.

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. Labb Grgoire est le fondateur du centre national des Arts et Mtiers.

2 1. lanalyse du problme rsoudre ;

Unix et les logiciels libres

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

1.1 Avant-propos : la naissance dun logiciel 2. de compilation dun programme source ; 3. dinterprtation dun programme source.

Tout dabord notons que Tanebaum (2001) a introduit un modle de reprsentation dun ordinateur qui est un modle en couches (cf. gure 1.1 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.
couche langage dapplication

couche assembleur

couche systme dexploitation

Couche machine

Figure 1.1: Larchitecture en couches dun ordinateur.

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. 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
2. La couche machine physique est en ralit compose de trois couches : machine physique, couche micro-programme, couche machine traditionnelle. 3. Il arrive que ces fainants dinformaticiens disent le source qui est une contraction de le chier source ...

4
Source

Unix et les logiciels libres

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

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

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

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

(a) Utilisation dun programme interprt sur dirents ordinateurs.

1
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

Source

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 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, 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. Pour pouvoir utiliser le logiciel produit sur un autre ordinateur, il faudra disposer de linterprteur sur cet ordinateur, et ceci, que la machine 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

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 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 trentenaire, 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 Institut 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 ;
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.

Unix et les logiciels libres

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. 3. Write programs that handle textstreams because thats the universal interface. 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 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
9. Comme lindique Ritchie lui-mme sur sa page http://cm.bell-labs.com/who/dmr. 10. ACM Symposium on Operating Systems Principles. 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

(a) Thompson et Ritchie

(b) Ritchie et Joy

Figure 1.4: Les papas dunix 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 : 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.

Unix et les logiciels libres

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

1
Vido

Drivers Priphriques

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

1.3 Les logiciels libres

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 :

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 leacer 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 ;

10

Unix et les logiciels libres

1
1.3.2

Figure 1.6: Richard Stallman

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 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
12. On trouvera une description quivalente des dirents types de logiciels dans un document rdig par Leclerq (1999). 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). 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

11

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

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
LINUX

1.4.1

12

Unix et les logiciels libres

1
Figure 1.7: Linus Torvalds 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.

1.4.2

Historique 16

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

13

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

14

Unix et les logiciels libres

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, 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
17. Oui, oui certains ont traduit le mot hacker en bitouilleurs , bidouilleur de bit...

1.6 Actualit et avenir des logiciels libres

15

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.

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
18. 24 dcembre 2010. 19. Qui orait du matriel plus able et gnralement accompagn dun contrat de maintenance, pour tre tout fait honnte dans la comparaison...

16

Unix et les logiciels libres

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

1.6 Actualit et avenir des logiciels libres


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

17

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), 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 erayant 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 ;
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.

18

Unix et les logiciels libres

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

1.6 Actualit et avenir des logiciels libres

19

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 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 page HTML, et plein dautres choses ; Perl fait partie de ces logiciels qui, linstar A 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.

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

Petit guide de survie

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

a convivialit dun systme unix rside dans la souplesse et la puissance des outils dont on dispose pour dialoguer avec le systme. Il sagit certes dune convivialit laquelle peu dutilisateurs sont habitus ; essentiellement parce quelle demande 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, ...).

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 page suivante. On parle galement de terminal (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) ; 21

22

Petit guide de survie

2
Figure 2.1: Un shell dans une fentre 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 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
1. Bash signie Bourne Again Shell : un jeu de mot avec la construction anglaise born again qui signie renaissance. 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...

2.1 Le shell

23

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

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

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 :
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 commenc par le caractre -.

24
Pour toujours Faire

Petit guide de survie

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

2.1 Le shell la commande nest pas utilise avec les bonnes options :

25

$ 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 && 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 120).

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

26 trs vite 5 .

Petit guide de survie

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 ; la compltion des commandes : la touche (tabulation) permet de com plter les noms de commandes, les noms de chiers et de rpertoires partir des premiers caractres de leur nom. utiliser intensivement !

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 $
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. 6. Voir ce sujet les paragraphes 6.1 page 143 et 5.4.2 page 132 qui traitent de la variable PATH.

2.1 Le shell

27

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.

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 75) ; ~ 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 61).

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

28

Petit guide de survie

ou dindiquer explicitement que le nom est compos dun seul mot en lentourant de guillemets (") ou dapostrophes () : $ 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 $

guide-unix.log

guide-unix.tex

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

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 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 77, 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 caractre se rapprochant gnralement de ltat civil, appele login name ; 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.

2.2 Utilisateurs

29

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

30

Petit guide de survie

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

home

users

eleves

bidule.dat

truc.txt

Figure 2.2: Une arborescence de chiers pour lexemple Pour dsigner un rpertoire on utilisera le mme principe, ainsi les rpertoires eleves et users ont comme rfrence absolue : /home/eleves /users

2.3 Le systme de chiers Rfrence relative

31

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 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 ; la partition 1 du disque amovible est monte sur /mnt. Ce quil faut retenir, cest que quelle que soit la conguration des disques sousjacente 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 .
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

32

Petit guide de survie

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

/home1 /home2 /home3 /home4


Disque dur 2 / partition 1

(b) Montages

Figure 2.3: Exemple de partitionnements et montages correspondant.

2.3 Le systme de chiers


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.

33

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 /dev/hda5 /dev/sda4 /dev/hdb $ Size 194M 1.1G 791M 96M 643M Used Avail Use% 42M 142M 23% 566M 508M 53% 606M 144M 81% 95M 584k 99% 643M 0 100% Mounted on / /home /usr /mnt/zip /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...
propre associe chacune de ces lettres. Rappelons en outre que ces lettres sont une squelle du tristement clbre Disk Operating System.

34

Petit guide de survie

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

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 : $ ls -l guide-unix.tex -rw-r--r-- 1 vincent 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 42 la signication du terme lien sur un chier. Examinons dun peu plus prs le bloc des droits : rwr-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. 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 :

2.3 Le systme de chiers 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.

35

Un dernier exemple : $ ls -l ~/ drwxr-xr-x drwxr-xr-x $ 3 vincent 2 vincent users users 4096 Nov 4096 Nov 7 12:48 LaTeX 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

36 $

Petit guide de survie

On peut tout moment changer de rpertoire avec la commande cd (change directory) qui prend en argument un rpertoire, par exemple : $ cd /usr/local $ Et, pour illustrer lutilisation dune rfrence relative : $ cd /usr $ ls -l drwxr-xr-x 8 root root 4096 Sep 25 00:21 drwxr-xr-x 2 root root 20480 Nov 5 19:16 drwxr-xr-x 11 root root 4096 Nov 5 18:56 $ cd local utilisation dune $

X11R6 bin local 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 guide-unix.tex test.tex

2.3 Le systme de chiers $ mv test.tex essai.tex $ ls *.tex guide-unix.tex essai.tex $

37

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.

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

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

38

Petit guide de survie

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, posons-nous la question suivante : 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.

2.3 Le systme de chiers

39

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 $ ls -ld echange drwx--xr-x 2 vincent $ users 4096 Nov 18 23:06 echange users 6 Nov 15 21:22 donnees.txt

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 (appelons-le 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

40

Petit guide de survie

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. 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 users 4096 Nov 20 18:03 echange

2.3 Le systme de chiers drwxrwxr-x $ 2 vincent users 4096 Nov 20 18:03 echange

41

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 : 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 on 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 sousrpertoires. 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

42 022 $

Petit guide de survie

Cette valeur est le complment par rapport 777. Avec un tel masque les chiers sont crs avec les permissions 755.

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.

2.3 Le systme de chiers


Donnes disque ~
38564

43

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

44

Petit guide de survie


Donnes disque / home vincent doc unix guide.tex Liens
Physique Symbolique

tmp test.tex

38564

Figure 2.5: Exemple de lien symbolique. 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.
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 34 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.3 Le systme de chiers 2. ceux du groupe propritaire. 3. ceux des autres.

45

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.

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

46 -rw-r--r-- 1 andy users $

Petit guide de survie 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 34.

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

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.

2.4 Processus

47

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

48 mais galement :

Petit guide de survie

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

2.4 Processus

49

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 : $ 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 TTY ? ? ? ? ? ? ? STAT S SW SW SW SW S S START 14:11 14:11 14:11 14:11 14:11 14:12 14:12 TIME 0:03 0:00 0:00 0:00 0:00 0:00 0:00 COMMAND init [5] [kflushd] [kupdate] [kpiod] [kswapd] syslogd -m 0 klogd

9. Liste non exhaustive par souci de clart.

50 daemon root root $ 237 253 284 0.0 0.0 0.0 0.0 0.3 0.3 ? ? ttyS0 SW S S 14:12 14:12 14:12

Petit guide de survie 0:00 [atd] 0:00 crond 0:00 gpm -t ms

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 vu prcdemment.

2.4 Processus Lien de parent

51

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

52

Petit guide de survie

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 ; 3. un programme ne rpond plus aux sollicitations de lutilisateur, il ny a pas dautres moyen 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 $

2.4 Processus

53

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

54

Petit guide de survie


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 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 $
10. Ce qui est le cas de la plupart des shells modernes. 11. Sauf si Emacs est lanc en mode texte dans le terminal... 12. Cette combinaison est gnralement celle que lon trouve sur un systme unix, mais notez que cela peut tre dirent sur certains systmes.

2.5 Quelques services

55

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). 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 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. xclock & xlogo & xbiff &

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

56

Petit guide de survie

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

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

Image

convert

PS

PS

Dvi

dvips ghostscript

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
13. Seront tudis plus loin dans ce manuel les services lis la communication entres utilisateurs, et le tlchargement de chiers.

2.5 Quelques services

57

dpendantes des caractristiques de limprimante (alimentation manuelle, bac A3, recto/verso, etc.). Renseignez-vous auprs du mssieur qui vous sert dadministrateur systme.
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 $ On peut galement prparer les commandes dans un chier texte et utiliser ce chier notons-le commandes.at comme argument de la commande at :

58 $ at -f commandes.at 15:00 tomorrow $

Petit guide de survie

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

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. 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 174 illustrant une utilisation du service cron pour mettre des images tires au hasard en fond dcran.

2.5 Quelques services

59

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.

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 .

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. 16. Le suspense est tout bonnement insoutenable...

3
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

La bote outils

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.

ide conductrice des dveloppeurs dunix de la premire heure tait de concevoir des outils lmentaires destins une tche bien spcique ; chacun de ces outils devait tre conu de telle manire ce quil puisse communiquer avec les autres. 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.

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

62 $ echo $USER # $USER # $ Le deuxime permet au caractre $ de conserver sa signication : $ echo "$USER #" lozano # $

La bote outils

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. Ainsi, la commande : $ echo bonjour bonjour $ ache bonjour sur le ux standard. 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` saisie par lutilisateur a $ 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 ;

3.2 Redirections et tubes

63

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 xxxbofyyy Entre saisie par lutilisateur 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 suivent 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.

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

64 $ cat erreur.txt ls: qsmlkjf: No such file or directory $

La bote outils

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

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 $

3.2 Redirections et tubes

65

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 $ 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 lorsque quon 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).

66
Entre 1 Entre 2 Entre n

La bote outils

P1
Sortie 1

P2
Sortie 2

Pn
Sortie n

Figure 3.2: Principe des tubes

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

3.3 Les outils de base


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

67

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

3.3.2

Trier
Cest la commande sort :

$ sort fichier.dat Janis Joplin 1969 Jimi Hendrix 1970 Jim Morrison 1971 $
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.

68

La bote outils

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

3.3 Les outils de base

69

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

70

La bote outils

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

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.

3.3 Les outils de base


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

71

Obtenir des informations La commande du donne la taille quoccupe un rpertoire ou un chier. $ 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 $ 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

72 Archivage

La bote outils

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 !

Larchivage est une tche trs frquente lorsquon manipule des chiers. unix distingue deux oprations dans larchivage : 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.
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.4 Le shell en tant que langage

73

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 : $ 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 disques.fig groups.dat guide-unix.tex~ Makefile~ ecoute.sh guide-unix.aux guide-unix.toc patati.eps fichier.dat guide-unix.dvi missfont.log ... etc ... $ 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 -

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

74

La bote outils

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-alatoire\n" $RANDOM e 14234 est un nombre pseudo-alatoire e $ 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 : %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.

3.4 Le shell en tant que langage $ printf "==[%-20s]==\n" $USER ==[lozano ]== $

75

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

76

La bote outils

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

3.5 grep et la notion dexpressions rgulires et?> mv "$F" "$(echo $F | tr A-Z a-z)"; done $

77

Ce qui peut se traduire en franais par : tous les chiers nissant par JPG doivent tre renommer 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. 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.
3. Et plus gnralement dans le domaine de ltude des langages informatiques. 4. Jutilise pour ma part la premire forme, ne pas taper svp...

78 . * ? + ^ $ [abc] [^abc] {n} {n,m}

La bote outils 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.

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 suivi 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 :
5. Dans cette expression, n ou m peuvent tre omis.

3.6 awk $ grep Jim fichier.dat Jimi Hendrix 1970 Jim Morrison 1971 $ mais : $ grep -w Jim fichier.dat Jim Morrison 1971 $
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).

79

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
6. Du nom de ses auteurs initiaux en 1977, Alfred V. Aho, Peter J. Weinberger, and Brian W. Kernighan

80

La bote outils

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 : 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`re "$1"..."} fichier.dat e Cette ch`re Janis... e $ 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 (affectation, 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 moyenne : 1970 $
7. Comportement qui peut tre chang par loption -F.

3.7 sed

81

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 : fichier.dat Jimi Hendrix 1970 Jim Morrison 1971 Janis Joplin 1969 on veut construire la liste : Hen1970 Mor1971 Jop1969

82 Soit lexpression rgulire suivante : ^[A-Za-z]* [A-Z][a-z]{2}[a-z]* [0-9]{4}

La bote outils

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

83

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 ; un x pour le champ mot de passe ; le numro (uid pour user identier) de lutilisateur ; le numro (gid pour group identier) 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
8. Sur votre systme il peut sagir dune autre commande...

84

La bote outils

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

3.8 tudes de cas

85

$ 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 : $ 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 "%f %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

86

La bote outils

quelle reoit en entre. Donc ici on va excuter rm -f avec comme argument tous les chiers renvoys par la commande find. 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 caractre 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.

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

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

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

87

88

Communiquer !

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

4.1 Concepts connatre


. org gnu www ftp zeuhl mekanik freejazz fr lip6 ftp

89

dolphy

ayler

Figure 4.1: Arborescence de domaine DNS.

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. ping La commande ping permet, laide dun protocole particulier , 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 :
4

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.
4. Le protocole ICMP pour Internet Control Message Protocol.

90 traceroute

Communiquer !

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

4.2 Quatre grands classiques

91

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

92

Communiquer !

$ ftp ayler.freejazz.fr Connected to ayler.freejazz.fr 220- Salut garon ! c 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.
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 :
5. Faire help pour avoir la liste des commandes disponibles.

4.2 Quatre grands classiques

93

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 : pour rcuprer plusieurs chiers en mme temps ; prompt dsactive les conrmations demandes lutilisateur lors dun mget ; : hash : ache un # tous les kilo-octets pour indiquer lavancement du transfert ; !cmd : excute cmd sur la machine locale ; ... Notez enn que toutes ces commandes peuvent tre abrges (e.g. prom la place de prompt).
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
6. Certains serveurs peuvent dailleurs vous reprocher votre manque de politesse, si vous utilisez une autre commande...

94

Communiquer !

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:~> 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 98). 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.
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


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.

95

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 [...] $
8. Rappelez-vous quon a dpos la cl publique sur ledit serveur... 9. En ralit ce sont les signatures MD5 qui sont compares.

96

Communiquer !

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 ci-contre) qui vous vitera de saisir cette phrase chaque connexion.

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 100. 11. On suppose ici, par souci de clart, que / est le rpertoire de travail.

4.2 Quatre grands classiques

97

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

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 .

98

Communiquer !
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.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

4.3 Outils de communication dUnix Password: $ le shell lanc est alors un shell de connexion (login shell ).

99

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

100

Communiquer !

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. :
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
12. Plus prcisment, la vitesse autorise par le dbit du rseau.

4.4 Courrier lectronique

101

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

102 On peut trouver galement la forme : Frank Zappa <franck@uncleme.at>

Communiquer !

forme permettant de rajouter des fantaisies autour dune adresse existante, tant que les fantaisies en question se limitent lextrieur des < et >.

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.

4.5 Le oube

103

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

104

Communiquer !

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 contiennent 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 lui-mme 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.

4.5 Le oube Par exemple : $ wget -nH --cut-dirs=1 -r -l1 http://www.freejazz.fr/dolphy/horns/

105

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

106

Communiquer !

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.

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

Dvelopper !

% 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+\\/#|@& \recursion.

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

D quil est idal de raliser sous un systme unix. Il dispose en eet dune palette

velopper de to develop, mettre au point en anglais, est peut tre lactivit

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.
1. Si vous ne lavez jamais entendu, tentez de la placer lors dune soire entre amis, cela fait toujours de leet.

107

108

Dvelopper !

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

Une autre manire de faire est dutiliser la commande cat avec une redirection : $ cat > bonjour.txt attente de donnes destines bonjour.txt a Entre 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 152 et 6.3 page 154 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 c (cest--dire x puis c tout en maintenant Ctrl enfonce). Pour charger un chier existant, utilisez la commande Ctrl x s Les menus Files/Save Buffer et Files/Open File... vous permettront deectuer galement ces oprations.

5.2 Faire des scripts en shell

109

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 $ 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
2. Passe-t-elle un jour ?

110

Dvelopper !

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 $ 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 79 : $ ./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 26) : testvar.sh #!/bin/bash N=4 NOM=trucmuche echo "le nom est $NOM et la variable N vaut $N"

5.2 Faire des scripts en shell qui donne lexcution : $ ./testvar.sh le nom est trucmuche et la variable N vaut 4 $

111

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}. #!/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]"

112

Dvelopper !

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 : 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
3. Se reporter au man de bash pour des informations prcises.

5.2 Faire des scripts en shell

113

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 $ 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 ;

114

Dvelopper !

on peut alors crire le script (voir 3.4.3 page 76 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 : #!/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 :

5.2 Faire des scripts en shell $[expression_arithmtique] ou $((expression_arithmtique)) ( prfrer) Par exemple : $ $ 4 $ $ 7 $ N=3 echo $((N+1)) N=$[N+4] echo $N

115

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 ... $ 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 aprs le 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

116

Dvelopper !

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

5.2 Faire des scripts en shell

117

Les expressions boolennes eectuant des tests arithmtiques peuvent quant elles, tre ralises sous la forme : 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 76 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
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.

118

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 : 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.
7. Theres more than one way to do it.

5.2 Faire des scripts en shell

119

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 .

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 :
8. Notez que lutilitaire file fait ce travail beaucoup mieux...

120 testcase-II.sh

Dvelopper !

#!/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. $ 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

5.2 Faire des scripts en shell

121

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 standard (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 $ 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

122 a b 4 et : 7 $

Dvelopper !

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 114 et on utilise une fonction pour faire le changement de nom : arithmetique-3.sh #!/bin/sh function changernom() { annee=${1%-*} annee=$[annee-1] 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 fichier.dat Une ligne : Jimi Une ligne : Hendrix

5.2 Faire des scripts en shell Une Une Une Une Une Une Une $ ligne ligne ligne ligne ligne ligne ligne : : : : : : : 1970 Jim Morrison 1971 Janis Joplin 1969 de :

123

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

sont dlimits par les caractres contenus dans la variable IFS. Cette variable contient par dfaut : 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 :
9. Qui na comme seul intrt lexemple, puisque rm *.dat fera aussi bien laaire.

124

Dvelopper !

for f in *.dat ; do echo "je vais effacer $f..." rm $f done 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 connue 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
10. Une autre solution consiste prxer le nom du chier par ./

5.3 Makele

125

dun projet 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.

Par dfaut, make cherche excuter la premire cible quil rencontre. Par convention, on dnit une cible all pour tout faire :
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.

126

Dvelopper !

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 129). test.fig > test.eps

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.

Notion de rgle Lensemble form par une cible, une ou des dpendances, et les commandes sappelle une rgle. La syntaxe gnrale est la suivante :

5.3 Makele cible : dpendances commande1 commande2 ... commanden

127

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 : la cible %.eps : c.--d. nimporte quel chier dont lextension est eps ; la dpendance %.fig : un chier dont lextension est .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 (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 ;

128 3. il existe un chier test.fig dans le rpertoire ; 4. on peut donc faire test.eps.

Dvelopper !

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

5.3 Makele

129

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

130

Dvelopper ! $ 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 dite 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.

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

5.4 Faire des projets en langage C


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

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

132 Excution

Dvelopper !

On excute le chier rsultant de ldition de liens en lappelant par son nom : $ ./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 147 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)) int main(int argc, char** argv) { int i=N,j,k; j=2*N;
15. Si vous navez pas lintention dobjecter, continuez donc lire tranquillement en sautant ce qui suit...

5.4 Faire des projets en langage C 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; } $

133

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

134

Dvelopper !

/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; } 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 ... $

5.4 Faire des projets en langage C


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

135
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 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 est 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) dans laquelle un chier contient le main : main.c #include <stdio.h> #include "mod.h" int f() { return 4; } int main(int argc, char** argv) {
16. Ici il sagit dun O majuscule, pour optimisation.

136 int i=g(f()); return 0; }

Dvelopper !

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

5.4 Faire des projets en langage C


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

137
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. 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 $ 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>

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

Dvelopper !
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. #include <math.h>

int main(int argc, char** argv) { 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 : $ gcc -static -o testmath.stat testmath.o -lm $ ls -lh testmath* -rwxr-xr-x 1 lozano lozano 12K Nov 11 17:54 testmath -rw-r--r-- 1 lozano lozano 223 Nov 11 17:54 testmath.c -rw-r--r-- 1 lozano lozano 948 Nov 11 17:54 testmath.o

5.4 Faire des projets en langage C -rwxr-xr-x $ 1 lozano lozano 471K Nov 11 17:58 testmath.stat

139

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 ci-contre). 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. Statique Pour crer une bibliothque statique, on pourra utiliser la commande : $ ar ruv libbidule.a mod1.o mod2.o mod3.o ar: cration de libbidule.a e a - mod1.o a - mod2.o a - mod3.o $

140

Dvelopper !

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 Pour crer une bibliothque dynamique on utilisera la syntaxe suivante :

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

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 : %.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
17. En C++, CFLAGS devient CXXFLAGS.

5.4 Faire des projets en langage C ce qui donnera : $ make -f makefile.test.1 cc -Wall -I/usr/local/machin-chose $ -c test.c -o test.o

141

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

142

Dvelopper !

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

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.

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

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

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

144

Se mettre laise !

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# 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?> " $

6.1 Avec le shell pour attirer lattention. Ainsi : $ for x in 1 2 3 ; do et?> echo $[x+1] et?> done 2 3 4 $

145

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 & 511 pdflatex guide-unix 512 acroread guide-unix.pdf & 513 xfig figs/lien_symbolique.fig& 514 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 :

146 $ telnet -l lozano coltrane.freejazz.org Trying xx.xx.xx.xx... Connected to coltrane.freejazz.org Escape character is ^]. ... $ On peut dnir un alias :

Se mettre laise !

$ alias trane=telnet -l lozano coltrane.freejazz.org $ trane Trying xx.xx.xx.xx... Connected to coltrane.freejazz.org. Escape character is ^]. $
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 & $

6.1 Avec le shell

147

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 $

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

148

Se mettre laise !

$ export EDITOR=mon_diteur $ fera laaire ; la variable TERM indique au systme le type de terminal utilis. La valeur passe-partout 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 : /.bash_profile if [ -f ~/.bashrc ]; then . ~/.bashrc fi # exportation de variables : ...

6.1 Avec le shell et : /.bashrc # dfinition dalias et fonctions ...

149

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\ $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 LTEX A Lorsquon utilise ce merveilleux et monstrueux logiciel quest L TEX pour produire des documents, on fait appel deux programmes distincts :

150

Se mettre laise !

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 A chaque 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

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 :

6.1 Avec le shell

151

$ 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 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 :
1. Ceci sans parler des sauvegardes journalires des donnes que tout bon administrateur systme doit assurer...

152

Se mettre laise !

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

153

Aprs cette introduction, voici quelques commandes de vi connatre, ces commandes susent survivre dans la majorit des cas : i passe en mode insertion (on peut alors taper du texte) ; ESC revient en mode commande (quitte le mode insertion) ; :w sauve le chier ; :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 ; dd ou n dd eace une ou n lignes ; passe en mode insertion aprs le curseur ; a ou $ va en dbut ou n de ligne (ces deux commandes rappellent la syntaxe des expressions rgulires) ;

cherche la chane motif dans le texte ; / motif n cherche loccurrence suivante ; . rpte la dernire action ; cw texte ESC remplace par texte la portion comprise entre le curseur et la n du mot courant (change word ) ; avance ou recule dun mot ; w ou b o ou O insre une ligne vierge et commence linsertion en dessous ou au dessus du curseur ; Y ou n Y copie une ou n lignes (yank ) p ou P 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 ; 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 : cherche la premire occurrence 1. /machin Entre 2. cw chose Esc la remplace 3. n cherche la suivante 4. . la remplace nouveau 5. rpter partir de 3 tant que cest ncessaire. Le mme remplacment peut se faire en mode commande en tapant : :%s/machin/chose/g
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. Accrochez-vous... 7. cf. note 5.

154

Se mettre laise !

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 A shell, langage 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.

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 ;
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... 9. Nous conserverons ici dessein le jargon anglais dEmacs en utilisant une fonte particulire.

6.3 Avec Emacs

155

Frame

6
Window

Mini buffer

Buffers

Figure 6.1: Emacs dans un environnement graphique

156

Se mettre laise !

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 commentaire, sont interprtes diremment selon quEmacs est en mode A L TEX, ou en mode C pour ne citer que ceux-l.

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
10. Le Lisp dont le nom vient de langlais list processing est le language 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

157

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
Dans le minibuer la touche Espace ( ) ou Tab ( ) permet 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 :


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

158 Stop !

Se mettre laise !

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.

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

6.3 Avec Emacs

159

Figure 6.2: The Emacs quad tree

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

160

Se mettre laise !

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

6.3 Avec Emacs

161

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. 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 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
12. le premier est plus simple sur un clavier franais.

abcdef abcde abcd abcd abcde

undo undo glurps ! redo

162

Se mettre laise !

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

163

rien de dicile apprendre dans ce paragraphe puisque tout est fait automatiquement en fonction du mode utilis. Prenons lexemple dun chier C++. chaque pression sur la touche le curseur se mettra la bonne place , cest--dire en fonction 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.

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

164

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

6.3 Avec Emacs

165

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 ( partir dici tout ce quon tape est enregistr 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. 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
Entre

F5 Entre comment-region Entre

15. On peut utiliser la combinaison C-h k pour vrier si la combinaison choisie nest pas dj utilise par Emacs.

166 Le chier .emacs

Se mettre laise !

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) 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 ; 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
16. Et surtout les comptences de lauteur...

6.3 Avec Emacs

167

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

168

Se mettre laise !

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.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. En sappuyant sur la gure 6.5 page suivante 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 ; 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 ;

6.4 Avec Xwindow

169

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.

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, lequelles 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)

170

Se mettre laise ! 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 .

(a) Xlogo tout nu

(b) Avec fvwm

(c) Avec afterstep

(d) Avec windowmaker

Figure 6.6: Dirents gestionnaires de fentres

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

171

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

172 576 577 360 360

Se mettre laise ! \_ /usr/X11R6/lib/X11/fvwm2/FvwmAuto \_ /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.
Machine distante Client X CPU

RSEAU Machine locale Serveur X

Figure 6.7: X en tant que protocole rseau

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

6.4 Avec Xwindow

173

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 ; 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 $
19. Pour lutilisation de rlogin, se rfrer 4.2.2 page 93

174

Se mettre laise !

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

6.4 Avec Xwindow 8 $

175

On peut ensuite choisir un nombre au hasard en exploitant la variable RANDOM et loprateur modulo du shell : $ f=$[RANDOM%nbf] $ 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 0-59/15 * * * * ~/bin/fond.sh $
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.

176

Se mettre laise !

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

6.5 Installer des logiciels ~/lib pour les bibliothques dynamiques.

177

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

178 $

Se mettre laise !

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 [...] 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 :
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

179

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 de denlever un paquet, mais aussi dextraire toutes les informations dun chier au format des paquets Debian.

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.

7
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

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

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

182

laide !

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 : $ 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 :
1. Nous vous faisons grce de 71 lignes. 2. Voir ce sujet Wall et al. (1996) et sa dnition de la paresse. 3. Il nempche que vous savez maintenant changer de rpertoire...

7.2 Les pages de manuel $ ls 2Hypergraphes Admin Archives Arkeia ConfigNT $

183

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. $ 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 ;

184

laide !

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

7.2 Les pages de manuel

185

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

186 export MANPATH=$HOME/man:$MANPATH

laide !

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

7.4 Le logiciel

187

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

188

laide !

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 prcisment 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
9. voir par exemple une traduction en franais http://www.sri.ucl.ac.be/SRI/rfc1855. fr.html

7.6 La documentation en ligne

189

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 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
10. Traduction qui a le lger inconvnient de faire perdre la notion de questions frquemment poses.

190

laide !

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.

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 aprs 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 !

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 LTEX 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. 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 Tanebaum : Architecture de lordinateur. Sciences Sup. Dunod, 4e dition, 2001. L. Wall, T. Christiansen et R. L. Schwartz : Programming Perl. OReilly, 2e dition, 1996.

191

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. Emacs diteur de texte et galement religion ou glise. Tous les dogmes de cette religion sont prsents la section 6.3 page 154. 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. 193

194 Lien

Glossaire

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 42 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 124. 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 47. 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

Glossaire

195

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 109 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 5). Les tubes sont prsents la section 3.2 page 62. 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 168. 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 152.

Index
Symboles
; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27, 61 / . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 1>&2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 2> . . . . . . . . . . . . . . . . . . . . . . . . . . . 63, 121 ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 < . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27, 63 >> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 # . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27, 109 $* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 $? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 $@ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 $# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 $ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27, 62 && . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 & . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 \ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27, 29 || . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27, 66 info . . . . . . . . . . . . . . . . . . . . . . . . .186 mailing lists . . . . . . . . . . . . . . . . . 189 man . . . . . . . . . . . . . . . . . . . . . . . . . . 183 newgroups . . . . . . . . . . . . . . . . . . . 188 Rfc . . . . . . . . . . . . . . . . . . . . . . . . . . 190 sur le oube . . . . . . . . . . . . . . . . . 189 whatis . . . . . . . . . . . . . . . . . . . . . . 183 alias de commande . . . . . . . . . . . . . . 145 and . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117 annuler dans emacs . . . . . . . . . . . . . . 161 apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 append . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 apropos . . . . . . . . . . . . . . . . . . . . 182, 183 apt-get . . . . . . . . . . . . . . . . . . . . . . . . . 179 ar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 arborescence . . . . . . . . . . . . . . . . . . . . . . 31 DNS . . . . . . . . . . . . . . . . . . . . . . . . . . 88 racine . . . . . . . . . . . . . . . . . . . . . . . . .31 serveur ftp . . . . . . . . . . . . . . . . . . . . 92 archivage . . . . . . . . . . . . . . . . . . . . . . . . . 72 arguments dans emacs . . . . . . . . . . . . . . . . . . 158 de fonction en shell . . . . . . . . . . 122 de la ligne de commande . . . . . 111 arrire plan . . . . . . . . . . . . . . . . . . . . . . . 53 ascii (transfert ftp) . . . . . . . . . . . . . . . 92 aspirer un site web . . . . . . . . . . . . . . 104 at . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 atq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 atrm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57 autorisation avec X . . . . . . . . . 173174 avant-plan . . . . . . . . . . . . . . . . . . . . . . . . 53 awk . . . . . . . . . . 61, 7982, 84, 142, 150

A
a2ps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 acces control list . . . . . . . . . . . . . . . . . . 34 actif (processus) . . . . . . . . . . . . . . . . . . 48 adresse web (url) . . . . . . . . . . . . . . . . . . . . 103 lectronique . . . . . . . . . . . . . . . . . 101 adresse IP . . . . . . . . . . . . . . . . . . . . . . . . 87 acher . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 afterstep . . . . . . . . . . . . . . . . . . . . 170, 171 aide apropos . . . . . . . . . . . . . . . . . . . . . 181 dans emacs . . . . . . . . . . . . . . . . . . 168 en ligne . . . . . . . . . . . . . . . . . 188190 FAQs . . . . . . . . . . . . . . . . . . . . . . . . 189 HOWTOS . . . . . . . . . . . . . . . . . . . 187 197

B
background . . . . . . . . . . . . . . . . . . . . . . . 55 backquote . . . . . . . . . . . . . . . . . . . . . . . . 76 backslash . . . . . . . . . . . . . . . . . . . . . . . . . 61 backward . . . . . . . . . . . . . . . . . . . . . . . . 160 bash viii, 109, 144, 145, 149, 175, 181 bash . . . . . . . . . . 76, 109, 117, 146, 148 bc . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64, 65

198 bg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 bibliothque . . . . . . . . . . . . . . . . . . . . . 130 emplacement . . . . . . . . . . . . . . . . 139 bibliothque dynamique . . . . . . . . . 130 bibliothque et dition de liens . . . 136 binaire (transfert ftp) . . . . . . . . . . . . . 92 bind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 boucle for . . . . . . . . . . . . . . . . . . . 76, 114 bounding box . . . . . . . . . . . . . . . . . . . .125 buer demacs . . . . . . . . . . . . . . . . . . . 160 bureau demacs . . . . . . . . . . . . . . . . . . 168 byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 bzip2 . . . . . . . . . . . . . . . . . . . . . . . . . 72, 73

Index optimisation . . . . . . . . . . . . . . . . . 135 options . . . . . . . . . . . . . . . . . . . . . . 135 prprocesseur . . . . . . . . . . . . . . . . 132 rpertoires de recherche . . . . . . 133 spare . . . . . . . . . . . . . . . . . . . . . . 135 warnings . . . . . . . . . . . . . . . . . . . . 135 compltion emacs . . . . . . . . . . . . . . . . . . . . . . . 158 compress . . . . . . . . . . . . . . . . . . . . . . . . . 72 compression de chiers . . . . . . . . . . . . 72 compter . . . . . . . . . . . . . . . . . . . . . . . 69, 83 concatenate . . . . . . . . . . . . . . . . . . . . . . . 67 concatner . . . . . . . . . . . . . . . . . . . . . . . . 67 connexion ftp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 rlogin . . . . . . . . . . . . . . . . . . . . . . . . . 93 ssh . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 telnet . . . . . . . . . . . . . . . . . . . . . . . . . 93 control-c . . . . . . . . . . . . . . . . . . . . . . . . . . 54 control-z . . . . . . . . . . . . . . . . . . . . . . . . . . 54 convert . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 convivialit . . . . . . . . . . . . . . . . . . . . . . . 21 copier/coller dans emacs . . . . . . . . . 161 coreutils . . . . . . . . . . . . . . . . . . . . . . . . . 119 courrier lectronique . . . . . . . voir mail cp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36, 75 cpp . . . . . . . . . . . . . . . . . . . . . . . . . 132, 133 create . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 cron . . . . . . . . . . . . . . . . . . . . . 58, 176, 179 cron . . . . . . . . . . . . . . . . . . . . . 58, 71, 176 crontab . . . . . . . . . . . . . . . . . . . . . . . . . . 58 csh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 csh . . . . . . . . . . . . . . . . . . . . 109, 144, 148 Ctrl-d (n de chier) . . . . . . . . . . . . . 63 curl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 cut . . . . . . . . . . . . . . . . . . . . . . . . . . . 68, 80

C
cancel . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 caractres de n de chier . . . . . . . . . . . . . . . 63 espace . . . . . . . . . . . . . . . . . . . . . . . . 27 gnriques . . . . . . . . . . . . . . . . . . . . 28 spciaux . . . . . . . . . . . . . . . . . . . . . . 27 case . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 cat . . . . . . . . . . . . . . 24, 66, 67, 108, 134 cc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 cd . . . . . . . . . . . . . . . . . . . . . 35, 36, 44, 92 change directory . . . . . . . . . . . . . . . . . . 36 charger dans emacs . . . . . . . . . . . . . . 161 chercher . . . . . . . . . . . . . . . . . . . . . . . . . . 70 chgrp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 chmod . . . . . . . . . . . . . . . . . . . . . 3841, 46 chown . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 cible make . . . . . . . . . . . . . . . . . . . . . . . 125 client Xwindow . . . . . . . . . . . . . . . . . . 169 commande . . . . . . . . . . . . . . . . . . . . . . . . 23 composition . . . . . . . . . . . . . . . . . . .25 emacs . . . . . . . . . . . . . . . . . . . . . . . 156 expansion . . . . . . . . . . . . . . . . . . . . . 61 externe . . . . . . . . . . . . . . . . . . . . . . . 23 historique . . . . . . . . . . . . . . . . . . . .145 interne . . . . . . . . . . . . . . . . . . . . . . . . 23 substitution . . . . . . . . . . . . . . . . . . . 75 distance . . . . . . . . . . . . . . . . 94, 100 commentaire en shell . . . . . . . . . . . . 109 commenter dans emacs . . . . . . . . . . 163 compilation . . . . . . . . . . . . . . . . . . . . . . 130 avec make . . . . . . . . . . . . . . . . . . . .140 en ligne de commande . . 135, 136 gnrer les dpendances . . . . . . 142

D
daemon . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75 se dplacer dans emacs . . . . . . . . . . 160 /dev/null . . . . . . . . . . . . . . . . . . . . . . . . 65 df . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33, 71 dig . . . . . . . . . . . . . . . . . . . . . . . . . . . 89, 91 dir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 discussion en rseau . . . . . . . . . . . . . 100 DISPLAY . . . . . . . . . . . . . . . 172, 173, 176 display Xwindow . . . . . . . . . . . . . . . . 169

Index disques informations . . . . . . . . . . . . . . . . . . 71 logiques . . . . . . . . . . . . . . . . . . . . . . .31 physiques . . . . . . . . . . . . . . . . . . . . . 31 djgpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v dns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 domain name system . . . . . . . . . . . . . 88 done . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 dpkg . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 draft . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 droits bloc . . . . . . . . . . . . . . . . . . . . . . . . . . 34 changer . . . . . . . . . . . . . . . . . . . 3839 chier . . . . . . . . . . . . . . . . . . . . . . . . .34 par dfaut . . . . . . . . . . . . . . . . . . . . 38 utilisateur . . . . . . . . . . . . . . . . . . . . 29 du . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 dvips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56 dbut et n . . . . . . . . . . . . . . . . . . . . . . . 69 dcouper . . . . . . . . . . . . . . . . . . . . . . . . . 68 dmarrage (chiers de) . . . . . . . . . . 148 dmarrage de Xwindow . . . . . . . . . . 170 dpendance make . . . . . . . . . . . . . . . . 126

199 et les Makeles . . . . . . . . . . . . . . 163 frame . . . . . . . . . . . . . . . . . . . . . . . . 159 francisation . . . . . . . . . . . . . . . . . . 167 historique . . . . . . . . . . . . . . . . . . . .158 macros . . . . . . . . . . . . . . . . . . . . . . 165 minibuer . . . . . . . . . . . . . . . . . . . 157 mode . . . . . . . . . . . . . . . . . . . . . . . . 156 modes . . . . . . . . . . . . . . . . . . . . . . . 167 personnaliser . . . . . . . . . . . . 165168 raccourcis . . . . . . . . . . . . . . . . . . . .166 rechercher/remplacer . . . . . . . . 162 sauver . . . . . . . . . . . . . . . . . . . . . . . 161 se dplacer . . . . . . . . . . . . . . . . . . 160 slectionner . . . . . . . . . . . . . . . . . . 160 undo/redo . . . . . . . . . . . . . . . . . . . 161 window . . . . . . . . . . . . . . . . . . . . . . 159 emacs . . . . . . . . . . . . . . . . . . . . . . viii, 156 .emacs . . . . . . . . . . . . . . . . . . . . . . . . . . 166 emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 endormi (processus) . . . . . . . . . . . . . . 48 entre standard . . . . . . . . . . . . . . . . . . . 62 ENV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 env . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 environnement de dveloppement . . . . . . . . . . . .147 des logiciels . . . . . . . . . . . . . . . . . . 147 variable d . . . . . . . . . . . . . . . . . . . . 26 EOF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63 erreur standard . . . . . . . . . . . . . . . . . . . 62 espace (nom de chier) . . . . . . . . . . . 27 exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 expansion . . . . . . . . . . . . . . . . . . . . . 28, 61 export . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 expression rgulire . . . . 28, 77, 80, 82 extended regexp . . . . . . . . . . . . . . .78, 82 extract . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 excutable . . . . . . . . . . . . . . . . . . . . . . . 130 li dynamiquement . . . . . . . . . . 136 li statiquement . . . . . . . . . . . . . 138 localisation . . . . . . . . . . . . . . . . . . 147 excution . . . . . . . . . . . . . . . . . . . . . . . . 132

E
echo . . . . . 24, 25, 63, 74, 75, 108, 118 diter un chier . . . . . . . . . . . . . . . . . .107 dition de liens . . . . . . . . . . . . . . . . . . 130 avec bibliothques . . . . . . . . . . . 136 en ligne de commande . . . . . . . 136 rpertoires de recherches . . . . . 139 EDITOR . . . . . . . . . . . . . . . . . . . . . . . . . . 147 eacer dans emacs . . . . . . . . . . . . . . . 160 elinks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Emacs . 10, 48, 108, 152, 154, 156, 163 emacs aide . . . . . . . . . . . . . . . . . . . . . . . . . 168 arguments . . . . . . . . . . . . . . . . . . . 158 buer . . . . . . . . . . . . . . . . . . . . . . . . 160 bureau . . . . . . . . . . . . . . . . . . . . . . .168 charger . . . . . . . . . . . . . . . . . . . . . . 161 commande . . . . . . . . . . . . . . . . . . . 156 commenter . . . . . . . . . . . . . . . . . . 163 compltion . . . . . . . . . . . . . . . . . . .158 copier/coller . . . . . . . . . . . . . . . . . 161 eacer . . . . . . . . . . . . . . . . . . . . . . . 160 .emacs . . . . . . . . . . . . . . . . . . . . . . 166

F
FAQs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 fg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 chier archivage . . . . . . . . . . . . . . . . . . . . . 72 attributs . . . . . . . . . . . . . . . . . . . . . . 34

200 avec espace . . . . . . . . . . . . . . . . . . . 27 compression . . . . . . . . . . . . . . . . . . 72 copie . . . . . . . . . . . . . . . . . . . . . . . . . 36 droits . . . . . . . . . . . . . . . . . . . . . . . . . 34 dplacement . . . . . . . . . . . . . . . . . . 36 diter . . . . . . . . . . . . . . . . . . . . . . . . 107 excutable . . . . . . . . . . . . . . 130132 informations . . . . . . . . . . . . . . . . . . 71 nom . . . . . . . . . . . . . . . . . . . . . . . . . . 27 objet . . . . . . . . . . . . . . . . . . . 130, 136 occupation . . . . . . . . . . . . . . . . . . . . 85 propritaire . . . . . . . . . . . . . . . . . . . 38 rennommer . . . . . . . . . . . . . . . . . . . 37 source . . . . . . . . . . . . . . . . . . . . . . . 130 systme de . . . . . . . . . . . . . . . . . . . . 30 taille . . . . . . . . . . . . . . . . . . . . . . . . . .71 transfert . . . . . . . . . . . . . . . . . . . . . . 91 eld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 le . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 file . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 find . . . . . 70, 71, 77, 85, 86, 183, 184 finger . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 fonction du shell . . . . . . . . . . . . . . . . . 121 for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 foreground . . . . . . . . . . . . . . . . . . . . . . . . 55 forward . . . . . . . . . . . . . . . . . . . . . . . . . . 160 .forward . . . . . . . . . . . . . . . . . . . . . . . . 103 frame demacs . . . . . . . . . . . . . . . . . . . 159 francisation demacs . . . . . . . . . . . . . 167 ftp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 ftp . . . . . . . . . . . . . . . . . . . . . . . . . . . 59, 87 fuser . . . . . . . . . . . . . . . . . . . . . . 150, 151 fvwm . . . . . . . . . . . . . . . . . . . . . . . 170, 171 fvwm2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

Index group identier . . . . . . . . . . . . . . . 29, 83 groupe . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 utilisateur . . . . . . . . . . . . . . . . . . . . 28 Gtk . . . . . . . . . . . . . . . . . . . . . . . . . . 19, 170 gzip . . . . . . . . . . . . . . . . . . . . . 72, 73, 176

H
hash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93 head . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69 help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92 HISTCONTROL . . . . . . . . . . . . . . . . . . . . 145 HISTFILE . . . . . . . . . . . . . . . . . . . . . . . . 145 HISTFILESIZE . . . . . . . . . . . . . . . . . . . 145 historique . . . . . . . . . . . . . . . . . . . . . . . 145 emacs . . . . . . . . . . . . . . . . . . . . . . . 158 history . . . . . . . . . . . . . . . . . . . . . . . . . 145 home . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 home directory . . . . . . . . . . . . . . . . 28, 35 host . . . . . . . . . . . . . . . . . . . . . . . . . . 89, 90 HOWTOS . . . . . . . . . . . . . . . . . . . . . . . 187 human readable . . . . . . . . . . . . . . . . . . .71

I
ICMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 id . . . . . . . . . . . . . . . . . . . . . . . . . . . 29, 120 identicateur dutilisateur . . . . . . . . . . . . . . . . . . 28 de groupe . . . . . . . . . . . . . . . . . . . . . 29 de processus . . . . . . . . . . . . . . . . . . 48 if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 IFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 ignore case . . . . . . . . . . . . . . . . . . . . . . . 79 impression . . . . . . . . . . . . . . . . . . . . . . . . 56 improved . . . . . . . . . . . . . . . . . . . . . . . . 154 index node . . . . . . . . . . . . . . . . . . . . . . . .33 info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 info . . . . . . . . . . . . . . . . . . . . . . . . 186, 187 inode . . . . . . . . . . . . . . . . . . . . . . . . . 33, 42 installer des logiciels . . . . . . . . 176178 Internet Engineering Task Force 12 190 interprteur . . . . . . . . . . . . . . . . . . . . . 109 invite . . . . . . . . . . . . . . . . . . . voir prompt IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
12. http://www.ietf.org

G
gcc . . . . . . . . . . . . . . . . . . . . . . vi, 134, 142 gcc . . . . . . . . . . . . . . . . . . . . 132135, 142 gestionnaire de fentres . . . . . . . . . . 170 getent . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 getfacl . . . . . . . . . . . . . . . . . . . . . . . 4547 Gimp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 global . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 globbing . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Gnome . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 gnome-keyring-daemon . . . . . . . . . . . . .97 grep . . . . . . . . . . 61, 63, 7779, 86, 150 gro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

Index

201 fvwm2 . . . . . . . . . . . . . . . . . . . . . . . 171 gcc . . . . . . . . . . . . . . . . . . vi, 134, 142 Gimp . . . . . . . . . . . . . . . . . . . . . . . . . 19 Gnome . . . . . . . . . . . . . . . . . . . . . . . 170 gnome-keyring-daemon . . . . . . . . . 97 gro . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Gtk . . . . . . . . . . . . . . . . . . . . . . 19, 170 info . . . . . . . . . . . . . . . . . . . . . . . . . . 187 Kde . . . . . . . . . . . . . . . . . . . . . . . . . . 170 ksh . . . . . . . . . . . . . . . . . . . . . 109, 175 lftp . . . . . . . . . . . . . . . . . . . . . . . . . . 105 links2 . . . . . . . . . . . . . . . . . . . . . . . . 105 lynx . . . . . . . . . . . . . . . . . . . . . . . . . .105 make . . . . . . . . . . 107, 129, 142, 163 Motif . . . . . . . . . . . . . . . . . . . . . . . . 170 Mozilla . . . . . . . . . . . . . . . . . . . . . . .103 mutt . . . . . . . . . . . . . . . . . . . . . . . . . 102 mwm . . . . . . . . . . . . . . . . . . . . . . . . 170 MySql . . . . . . . . . . . . . . . . . . . . . . . . .17 Netscape . . . . . . . . . . . . . . . . . . . . . 103 OpenOce . . . . . . . . . . . . . . . . . . . . 17 Opera . . . . . . . . . . . . . . . . . . . . . . . .103 Perl . . . . . . . . . . . . . . . . . . . 14, 17, 19 Qt . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 rlogin . . . . . . . . . . . . . . 91, 93, 94, 98 sed . . . . . . . . . . . . . . . . . . . . . . . xi, 116 sendmail . . . . . . . . . . . . . . . . . . . . . . 19 sh . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 ssh . . . . . . . . . . . . . . . . . . . . . . . . 91, 97 telnet . . . . . . . . . . . . . . 91, 93, 94, 98 vi . . . . . . . . . . . . . viii, 108, 152154 vim . . . . . . . . . . . . . . . . . . . . . 154, 163 w3m . . . . . . . . . . . . . . . . . . . . . . . . . 105 wget . . . . . . . . . . . . . . . . . . . . . 59, 104 windowmaker . . . . . . . . . . . . 170, 171 X . . . . . . . . . . . . . . . 17, 154, 168176 X window . . . . . . . . . . . . . . . . . . . . 168 Xaw . . . . . . . . . . . . . . . . . . . . . . . . . 170 xdvi . . . . . . . . . . . . . . . . . . . . . . . . . .150 Xlib . . . . . . . . . . . . . . . . . . . . . . . . . . 168 xloadimage . . . . . . . . . . . . . . 175, 176 Xt . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 lp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 lpq . . . . . . . . . . . . . . . . . . . . . . . . . . . 56, 57 lpr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 lprm . . . . . . . . . . . . . . . . . . . . . . . . . . 56, 57 lpstat . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 ls 23, 28, 3335, 39, 46, 92, 124, 182, 187

J
job . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 job control . . . . . . . . . . . . . . . . . . . . 51, 53 join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69 joker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

K
Kde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 kill . . . . . . . . . . . . . . . . . . . . . . 51, 52, 55 ksh . . . . . . . . . . . . . . . . . . . . . . . . . 109, 175

L
LD_LIBRARY_PATH . 139, 140, 147, 177 ldd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 less . . . . . . . . . . . . . . . . . . . . . . . . . 67, 187 lftp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 lien . . . . . . . . . . . . . . . . . . . . . . . . 34, 4244 physique . . . . . . . . . . . . . . . . . . . . . . 42 symbolique . . . . . . . . . . . . . . . . . . . 43 like this . . . . . . . . . . . . . . . . . . . . . . . . . . . xi link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 link . . . . . . . . . . . . . . . . . . . . . voir edition links2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 list processing . . . . . . . . . . . . . . . . . . . 156 ln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 locate . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 logiciels connexes a2ps . . . . . . . . . . . . . . . . . . . . . . . . . . 56 afterstep . . . . . . . . . . . . . . . . 170, 171 apache . . . . . . . . . . . . . . . . . . . . . . . . 19 bash viii, 109, 144, 145, 149, 175, 181 bind . . . . . . . . . . . . . . . . . . . . . . . . . . 19 convert . . . . . . . . . . . . . . . . . . . . . . . .56 coreutils . . . . . . . . . . . . . . . . . . . . . .119 cron . . . . . . . . . . . . . . . . . 58, 176, 179 csh . . . . . . . . . . . . . . . . . . . . . . . . . . 109 curl . . . . . . . . . . . . . . . . . . . . . . . . . . 105 djgpp . . . . . . . . . . . . . . . . . . . . . . . . . . v dvips . . . . . . . . . . . . . . . . . . . . . . . . . . 56 elinks . . . . . . . . . . . . . . . . . . . . . . . . 105 Emacs . 10, 48, 108, 152, 154, 156, 163 emacs . . . . . . . . . . . . . . . . . . .viii, 156 ftp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 fvwm . . . . . . . . . . . . . . . . . . . 170, 171

202 lynx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

Index most . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67 Motif . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 mount . . . . . . . . . . . . . . . . . . . . . . . . . 31, 37 Mozilla . . . . . . . . . . . . . . . . . . . . . . . . . . 103 MTA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 MUA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 multibyte . . . . . . . . . . . . . . . . . . . . . . . . . 69 mutt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 mv . . . . . . . . . . . . . . . . . . . . . . . . . . . 36, 152 mwm . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 MySql . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

M
machine adresse . . . . . . . . . . . . . . . . . . . . . . . 88 nom . . . . . . . . . . . . . . . . . . . . . . . . . . 88 macros demacs . . . . . . . . . . . . . . . . . . 165 Mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 mail . . . . . . . . . . . . . . . . . . . . . . . . 101103 adresses lectroniques . . . . . . . . 101 envoyer . . . . . . . . . . . . . . . . . . . . . . . 84 faire suivre . . . . . . . . . . . . . . . . . . 103 logiciel de . . . . . . . . . . . . . . . . . . . .102 machine relais (MX) . . . . . . . . . . 91 mail transport agent . . . . . . . . . 102 mail user agent . . . . . . . . . . . . . . 102 MTA . . . . . . . . . . . . . . . . . . . . . . . . 102 MUA . . . . . . . . . . . . . . . . . . . . . . . . 102 mail . . . . . . . . . . . . . . . . . 65, 66, 84, 102 mailing . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 mailing lists . . . . . . . . . . . . . . . . . . . . . 189 mailx . . . . . . . . . . . . . . . . . . . . . . . . 65, 102 make . . . . . . . . . . . . . . 107, 129, 142, 163 make . . . . . 124130, 140142, 176, 177 cible . . . . . . . . . . . . . . . . . . . . . . . . . 125 compiler avec . . . . . . . . . . . . . . . . 140 dans emacs . . . . . . . . . . . . . . . . . . 163 dpendance . . . . . . . . . . . . . . . . . . 126 gnrer les dpendances . . . . . . 142 rgle . . . . . . . . . . . . . . . . . . . . . . . . . 126 rgle implicite . . . . . . . . . . . . . . . 127 variable . . . . . . . . . . . . . . . . . . . . . . 128 variables . . . . . . . . . . . . . . . . . . . . . 127 make directory . . . . . . . . . . . . . . . . . . . .37 makeinfo . . . . . . . . . . . . . . . . . . . . . . . . 186 man . . . . . . . . . . . . . . . .148, 183, 185188 MANPATH . . . . . . . . . . . . . . . . . . . . 177, 185 messages derreur . . . . . . . . . . . . . . . . . . . . . . . 24 messages console . . . . . . . . . . . . . . . . . . 99 mget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93 minibuer emacs . . . . . . . . . . . . . . . . . . . . . . . 157 mkdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 mode emacs . . . . . . . . . . . . . . . . . . . 156, 167 montage de partition . . . . . . . . . . . . . 31 more . . . . . . . . . . . . . . . . . . . . . 63, 67, 187

N
Netscape . . . . . . . . . . . . . . . . . . . . . . . . . 103 newsgroups . . . . . . . . . . . . . . . . . . . . . . 188 NFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 nice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51 nohup . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 nom de chier . . . . . . . . . . . . . . . . . . . . . 27 nom de machine . . . . . . . . . . . . . . . . . . 88 non authoritative . . . . . . . . . . . . . . . . . 91 nslookup . . . . . . . . . . . . . . . . . . . . . 8991 number of record . . . . . . . . . . . . . . . . . 81

O
objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 OpenOce . . . . . . . . . . . . . . . . . . . . . . . . 17 Opera . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 optimisation la compilation . . . . 135 or . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 ordonnanceur . . . . . . . . . . . . . . . . . . . . . 47

P
PAGER . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 partition . . . . . . . . . . . . . . . . . . . . . . . . . . 31 montage . . . . . . . . . . . . . . . . . . . . . . 31 taux doccupation . . . . . . . . . 33, 71 PATH . . . . . . . . 24, 26, 31, 132, 147, 177 pathname expansion . . . . . . . . . . . . . . 28 pax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Perl . . . . . . . . . . . . . . . . . . . . . . . 14, 17, 19 personnaliser emacs . . . . . . . . . 165168 pid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 ping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89 pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

Index PostScript . . . . . . . . . . . . . . . . . . . . . . . . 56 preprocessing . . . . . . . . . . . . . . . . . . . . 131 print working directory . . . . . . . . . . . 35 printf . . . . . . . . . 74, 75, 108, 175, 184 priorit dun processus . . . . . . . . . . . . 48, 51 privilges . . . . . . . . . . . . . . . . . voir droits processus . . . . . . . . . . . . . . . . . . . . . . 4755 des utilisateurs . . . . . . . . . . . . . . . .49 en arrire-plan . . . . . . . . . . . . . . . . 53 en avant-plan . . . . . . . . . . . . . 53, 55 en tche de fond . . . . . . . . . . . . . . 53 et signaux . . . . . . . . . . . . . . . . . . . . 52 interrompre . . . . . . . . . . . . . . . . . . . 53 lister . . . . . . . . . . . . . . . . . . . . . . . . . .48 parents . . . . . . . . . . . . . . . . . . . . . . . 51 priorit . . . . . . . . . . . . . . . . . . . . . . . 51 rependre . . . . . . . . . . . . . . . . . . . . . . 53 tat . . . . . . . . . . . . . . . . . . . . . . . . . . .48 prompt . . . . . . . . . . . . . . . . . . .22, 77, 144 prompt . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 propritaire . . . . . . . . . . . . . . . . . . . . . . . 38 prprocesseur du C . . . . . . . . . . . . . . 132 ps . . . . . . . . . . . . . . . . 4850, 52, 79, 150 PS1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 PS2 . . . . . . . . . . . . . . . . . . . . . . . . . . 77, 144 pwd . . . . . . . . . . . . . . . . . . . . . . . 35, 44, 92

203 regular expression 77, voir expression rgulire regular le . . . . . . . . . . . . . . . . . . . . . . . 117 remove directory . . . . . . . . . . . . . . . . . . 37 renice . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 request for comments . . . . . . . . . . . . 190 return . . . . . . . . . . . . . . . . . . . . . . . . . . 122 reverse engineering . . . . . . . . . . . . . . . .15 revert match . . . . . . . . . . . . . . . . . . . . . . 79 Rfc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 .rhosts . . . . . . . . . . . . . . . . . . . . . . . . . . 94 rlogin . . . . . . . . . . . . . . . . . . 91, 93, 94, 98 rlogin . . . . . . . . . 87, 94, 100, 101, 174 rm . . . . . . . . . . . . . . . . . . . . 37, 4244, 124 rmdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 root utilisateur . . . . . . . . . . . . . . . . . . . . 29 rsh . . . . . . . . . . . . . . . . . . . . . . . . . 101, 174 runnable . . . . . . . . . . . . . . . . . . . . . . . . . . 49 rwho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .98 rgle make . . . . . . . . . . . . . . . . . . . . . . . 126 rgle implicite make . . . . . . . . . . . . . . 127 rpertoire . . . . . . . . . . . . . . . . . . . . . . . . . 35 attributs . . . . . . . . . . . . . . . . . . . . . . 39 cration . . . . . . . . . . . . . . . . . . . . . . .37 eacement . . . . . . . . . . . . . . . . . . . . 37 et lien . . . . . . . . . . . . . . . . . . . . . . . . 44 home . . . . . . . . . . . . . . . . . . . . . .29, 35 taille . . . . . . . . . . . . . . . . . . . . . . . . . .71 utilisateur . . . . . . . . . . . . . . . . . . . . 28 rseau utilitaires . . . . . . . . . . . . . . . . . . . . . 89

Q
Qt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170

R
raccourci . . . . . . . . . . . . . . . . . . . . . . . . . 44 raccourcis demacs . . . . . . . . . . . . . . . 166 racine de larborescence . . . . . . . . . . . . . . 31 RANDOM . . . . . . . . . . . . . . . . . . . . . . . . . . 175 ranlib . . . . . . . . . . . . . . . . . . . . . . . . . . 140 rcp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 rechercher remplacer dans emacs . 162 recoller . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 redirection du ux de sortie . . . . . . . . . . . . . . 63 redirections . . . . . . . . . . . . . . . . . . . 6267 du ux dentre . . . . . . . . . . . . . . . 64 du ux derreur . . . . . . . . . . . . . . . 63 tubes . . . . . . . . . . . . . . . . . . . . . . 6567

S
sauver dans emacs . . . . . . . . . . . . . . . 161 scheduler . . . . . . . . . . . . . . . . . . . . . . . . . 47 scheduler . . . . . . . . . . . . . . . . . . . . . . . . . 47 scp . . . . . . . . . . . . . . . . . . . . . . . . . . 96, 101 scripts shell . . . . . . . . . . . . . . . . . 109122 search permission . . . . . . . . . . . . . . . . . 35 sed . . . . . . . . . . . . . . . . . . . . . . . . . . . xi, 116 sed . . . . . . . . . . . . . . 61, 81, 82, 116, 142 sendmail . . . . . . . . . . . . . . . . . . . . . . . . . . 19 seq . . . . . . . . . . . . . . . . . . . . . . . . . 118, 119 serveur X . . . . . . . . . . . . . . . . . . . . . . . . 169 service cron . . . . . . . . . . . . . . . . . . . . . . . . . . 58 daemon . . . . . . . . . . . . . . . . . . . . . . . 56

204 impression . . . . . . . . . . . . . . . . . . . . 56 services at . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 setfacl . . . . . . . . . . . . . . . . . . . . . . . 4547 sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 sh . . . . . . . . . . . . . . . . . . . . . 109, 143, 148 shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 alias . . . . . . . . . . . . . . . . . . . . . . . . . 145 arguments (ligne de commande) 111 boucle for . . . . . . . . . . . . . . . 76, 114 commentaire . . . . . . . . . . . . . . . . . 109 conguration . . . . . . . . . . . . 143149 dmarrage . . . . . . . . . . . . . . . . . . . 148 fonction . . . . . . . . . . . . . . . . . . . . . 121 historique . . . . . . . . . . . . . . . . . . . .145 interactif . . . . . . . . . . . . . . . . . . . . . .22 langage . . . . . . . . . . . . . . . . . . . . . . . 73 prompt . . . . . . . . . . . . . . . . . . 22, 144 scripts . . . . . . . . . . . . . . . . . . 109122 structures de contrle . . . . . . . . 117 test . . . . . . . . . . . . . . . . . . . . . . . . . . 116 utilisateur . . . . . . . . . . . . . . . . . . . . 28 variable arithmtique, 114 modication, 112 variables . . . . . . . . . . . . . . . . . . . . . 110 SHLIB_PATH . . . . . . . . . . . . . . . . . . . . . 139 signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 CONT . . . . . . . . . . . . . . . . . . . . . . . . . . 53 KILL . . . . . . . . . . . . . . . . . . . . . . . . . . 53 STOP . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Single Unix Specication . . . . . . . . . .48 sleeping . . . . . . . . . . . . . . . . . . . . . . . . . . .49 sort . . . . . . . . . . . . . . . . . . . . . . . . . . 66, 67 sortie standard . . . . . . . . . . . . . . . . . . . 62 source . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 ssh . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91, 97 ssh . . . . . . . . . . . . . . 87, 9498, 101, 174 ssh-agent . . . . . . . . . . . . . . . . . . . . . . . . 97 ssh-copy-id . . . . . . . . . . . . . . . . . . . . . 97 ssh-keygen . . . . . . . . . . . . . . . . . . . . . . 96 standard error . . . . . . . . . . . . . . . . . . . . . . . . . . 62 input . . . . . . . . . . . . . . . . . . . . . . . . . 62 output . . . . . . . . . . . . . . . . . . . . . . . . 62 standard error . . . . . . . . . . . . . . . . . . . . 62 standard input . . . . . . . . . . . . . . . . . . . .62 standard output . . . . . . . . . . . . . . . . . . 62 status . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

Index stream editor . . . . . . . . . . . . . . . . . . . . . 81 structures de contrle . . . . . . . . . . . . 117 if . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 su . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 substitute . . . . . . . . . . . . . . . . . . . . . . . . 81 substitution de commande . . . . . . . . 75 summarize . . . . . . . . . . . . . . . . . . . . . . . . 71 suspendu (processus) . . . . . . . . . . . . . 48 systme de chier . . . . . . . . . . . . . . . . . 30 slectionner dans emacs . . . . . . . . . .160

T
tabulation avec make . . . . . . . . . . . . 125 tail . . . . . . . . . . . . . . . . . . . . . . . . . . 69, 70 talk . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 tape archiver . . . . . . . . . . . . . . . . . . . . . 72 tar . . . . . . . . . . . . . . . . . . . . . . . . . . . 72, 73 tcsh . . . . . . . . . . . . . . . . . . . . . . . . 109, 146 telnet . . . . . . . . . . . . . . . . . . 91, 93, 94, 98 telnet . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 TERM . . . . . . . . . . . . . . . . . . . . . . . . . 48, 148 terminal . . . . . . . . . . . . . . . . . . . . . . . . . . 48 et processus . . . . . . . . . . . . . . . 48, 49 test -d . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 -eq . . . . . . . . . . . . . . . . . . . . . . . . . . 117 -f . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 -ge . . . . . . . . . . . . . . . . . . . . . . . . . . 117 -gt . . . . . . . . . . . . . . . . . . . . . . . . . . 117 -le . . . . . . . . . . . . . . . . . . . . . . . . . . 117 -lt . . . . . . . . . . . . . . . . . . . . . . . . . . 117 -ne . . . . . . . . . . . . . . . . . . . . . . . . . . 117 -x . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 test en shell . . . . . . . . . . . . . . . . . . . . . 116 tiret . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 toto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 touch . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 tr . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76, 77 traceroute . . . . . . . . . . . . . . . . . . . . . . 90 transfert ascii . . . . . . . . . . . . . . . . . . . . . . . . . . 92 binaire . . . . . . . . . . . . . . . . . . . . . . . . 92 transfert de chier . . . . . . . . . . . . . . . . 91 translate . . . . . . . . . . . . . . . . . . . . . . . . . . 76 trier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 trou noir . . . . . . . . . . . . . . . . . . . . . . . . . .65 tubes . . . . . . . . . . . . . . . . . . . . . . . . . .6567 type . . . . . . . . . . . . . . . . . . . . . . . . . 24, 147

Index tche de fond . . . . . . . . . . . . . . . . . . . . . . . 53 en arrire-plan . . . . . . . . . . . . . . . . 55

205 which . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 while . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 who . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 whoami . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 wildcard . . . . . . . . . . . . . . . . . . . . . . . . . 119 wildcard . . . . . . . . . . . . . . . . . . . . . . . . . . 28 window demacs . . . . . . . . . . . . . . . . . 159 window manager . . . . . . . . . . . . . . . . .170 windowmaker . . . . . . . . . . . . . . . . 170, 171 word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78 word count . . . . . . . . . . . . . . . . . . . . . . . 69 World wide web . . . . . . . . . . . voir www write . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 www . . . . . . . . . . . . . . . . . . . . . . . . 103105 adresse (url) . . . . . . . . . . . . . . . . . 103 aspirer un site . . . . . . . . . . . . . . . 104 naviguer en mode texte . . . . . . 105

U
uid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 umask . . . . . . . . . . . . . . . . . . . . . . . . 38, 41 umask . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 underscore . . . . . . . . . . . . . . . . . . . . . . . . 79 undo/redo dans emacs . . . . . . . . . . . 161 uniform resource locator . . . . . . . . . 103 url . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 US patent . . . . . . . . . . . . . . . . . . . . . . . . 18 user identier . . . . . . . . . . . . . 28, 29, 83 utilisateur changer d . . . . . . . . . . . . . . . . . . . . 98 identicateur . . . . . . . . . . . . . . . . . 28 informations . . . . . . . . . . . . . . . . . . 99 liste des . . . . . . . . . . . . . . . . . . . 83, 98 logique . . . . . . . . . . . . . . . . . . . . . . . 28 processus des . . . . . . . . . . . . . . . . . 49 root . . . . . . . . . . . . . . . . . . . . . . . . . . 29 rpertoire . . . . . . . . . . . . . . . . . . . . . 28 utilitaires disques et chiers . . . 7073 utilitaires rseau . . . . . . . . . . . . . . . . . . 89

X
X . . . . . . . . . . . . . . . . . . . 17, 154, 168176 X window . . . . . . . . . . . . . . . . . . . . . . . . 168 xargs . . . . . . . . . . . . . . . . . . . . . . . . . 85, 86 xauth . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Xaw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 xdvi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 xdvi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 xfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 xhost . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Xlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 xloadimage . . . . . . . . . . . . . . . . . . 175, 176 xloadimage . . . . . . . . . . . . . . . . . . . . . 176 .xinitrc . . . . . . . . . . . . . . . . . . . . . . . . 171 .xsession . . . . . . . . . . . . . . . . . . . . . . 170 xsetroot . . . . . . . . . . . . . . . . . . . . . . . . 175 Xt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 xterm . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 xv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Xwindow autorisation . . . . . . . . . . . . . 173174 client . . . . . . . . . . . . . . . . . . . . . . . . 169 display . . . . . . . . . . . . . . . . . . . . . . 169 DISPLAY . . . . . . . . . . . . . . . . . . . . . 172 dmarrage . . . . . . . . . . . . . . . . . . . 170 principe gnral . . . . . . . . . . . . . .169 serveur . . . . . . . . . . . . . . . . . . . . . . 169 window manager . . . . . . . . . . . . . 170 .xinitrc . . . . . . . . . . . . . . . . . . . . 171 .xsession . . . . . . . . . . . . . . . . . . . 170

V
variable denvironnement . . . . . . . . . . . . . . 26 du shell . . . . . . . . . . . . . . . . . . . . . . 110 make . . . . . . . . . . . . . . . . . . . . 127, 128 shell arithmtique, 114 modication, 112 vdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 verbose . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 vi . . . . . . . . . . . . . . . . . viii, 108, 152154 vi . . . . . . . . . . 6, 58, 143, 147, 152, 153 vim . . . . . . . . . . . . . . . . . . . . . . . . . 154, 163

W
w3m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 warning la compilation . . . . . . . . 135 wc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 wget . . . . . . . . . . . . . . . . . . . . . . . . . 59, 104 whatis . . . . . . . . . . . . . . . . . . . . . . . . . . 183

206 xzgv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76

Index

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1 1 1 2 5 5 8 9 9 10 11 11 11 12 13 15 15 16 16 18 18 21 21 23 25 26 27 27 28 28 30 30 31 34 35 36 37 37 38 42 44

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

208 2.4 2.5 Processus . . . . . . . . . . . . . . . . . . . . 2.4.1 Examiner les processus . . . . . . . . . 2.4.2 Modier le droulement dun processus Quelques services . . . . . . . . . . . . . . . . 2.5.1 Impression . . . . . . . . . . . . . . . . 2.5.2 Le service at . . . . . . . . . . . . . . 2.5.3 Le service cron . . . . . . . . . . . . . 2.5.4 Lutilitaire nohup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Table des matires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 48 51 55 56 57 58 59 61 61 62 63 65 67 67 67 68 68 69 69 70 73 74 75 76 76 77 79 81 83 83 84 85 87 87 87 88 89 91 91 93 94 98 98 98 99 99

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 . . . . . . . . . . . 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 . . . . . . . . . 3.5 grep et la notion dexpressions rgulires . . . . 3.6 awk . . . . . . . . . . . . . . . . . . . . . . . . . 3.7 sed . . . . . . . . . . . . . . . . . . . . . . . . . 3.8 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 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Table des matires 4.3.5 talk . . . . . . . . . . . 4.3.6 remote commandes . . Courrier lectronique . . . . . . 4.4.1 Format des adresses . . . 4.4.2 Mail user agents . . . . . 4.4.3 Faire suivre son courrier Le oube . . . . . . . . . . . . . 4.5.1 Format des adresses . . . 4.5.2 Wget laspirateur . . . . 4.5.3 Lynx lextraterrestre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

209 100 100 101 101 102 103 103 103 104 105 107 107 108 108 109 109 109 110 116 121 122 123 124 125 127 127 128 129 130 130 131 135 136 140

4.4

4.5

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 . . . . . . . . . . . . . . . . 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 . . . . . . . . . . . . . 5.3 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 . . . . . 5.4 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 . . . . . . . . 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

143 . 143 . 144 . 145 . 145 . 147 . 147 . 148 . 149 . 152 . 154 . 154 . 156

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

Table des matires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 158 160 163 164 168 168 168 169 170 172 174 176 176 177 178

6.4

6.5

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

181 . 181 . 181 . 183 . 183 . 183 . 184 . 185 . 186 . 186 . 186 . 187 . 187 . 188 . 188 . 189 . 189 . 189 . 190 191 193 197

Você também pode gostar