Vous êtes sur la page 1sur 260

Pour aller plus loin

avec
la ligne de commande
1.01
Tout ce que vous avez toujours voulu savoir sur Unix
sans jamais os er le demander

Vincent Lozano

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

Cest simple... Souviens-toi...


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

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

Pourquoi ce manuel ?
En 1992, un collgue du DEA Image de luniversit Jean Monnet de Saint-tienne,
fait dmarrer son PC en me disant : tu vois a cest unix , il sagissait bien sr
dune des premires versions de LINUX . Javais alors t plutt sceptique sur cet imbroglio de messages au dmarrage et sur laspect plutt spartiate de lenvironnement
graphique. Paralllement, nous travaillions sur des mini-projets (sorte de projet de
fin 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 difficile le chargement dimages numriques en mmoire. Cest finalement grce ce problme
que nous sommes tombs sur un compilateur (djgpp) en ligne de commande capable
1. Crateur du logiciel Perl.

iii

iv

dexploiter le mode protg des processeurs des PCs 2 et ainsi de lever cette limitation. Ce compilateur a t une rvlation dans le sens o je me suis aperu que des
gens distribuaient gratuitement des outils qui allaient enfin 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 fin de ligne, des utilisateurs la limite du fanatisme, devenant mme
hargneux et sectaires lorsque je mentionnais mon exprience de dveloppeur dbutant en C avec Turbo C... Cependant il manait de ce laboratoire qui utilisait les
ressources de ce rseau unix, une certaine libert daction qui ma demble sduit :
il tait apparemment possible dutiliser les processeurs de plusieurs machines, chaque
utilisateur semblait avoir cr son propre environnement de travail, personne ne parlait de rebooter ou de plantage , certains sattelaient des projets de logiciels
ambitieux, dautres rdigeaient des documents dallure professionnelle, il ntait pas
question de pirater un logiciel du commerce puisque tous les outils semblaient tre
porte de main pour travailler.
En 1993, dbutant une thse au laboratoire Ingnierie de la Vision de la facult
de sciences Saint-tienne, jentrepris dinstaller une version de gcc (compilateur C
de chez gnu) et de comprendre comment fonctionne ce fameux LATEX (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 dinfini, effrayant 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 infini...
2. Et donc de permettre de joyeux ptr=(char*)malloc(4194304); que certes seuls les habitus
du langage C comprendront...
3. Le rseau Renater regroupe prs dun millier dtablissements de recherche et denseignement.

La rencontre virtuelle via les forums de discussion, avec la communaut de bricoleurs de chez gnu et LINUX a t pratiquement une prise de conscience quasi
politique, une autre vision de la dmarche scientifique. Je trouvais enfin des tres humains dsirant faire avancer le schmilblick sans arrire pense de capitalisation de
linformation. Malgr tout, si les logiciels libres peuvent sintgrer et sintgrent
dans lconomie de march, je reste aujourdhui admiratif vis vis de cette ide de diffuser les connaissances et de sassurer quelles puissent toujours tre diffuses. 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 effectu sur le Yi Qing, si unix tait un livre, ce document serait lquivalent de passer son doigt sur la couverture pour y enlever la
poussire...
Les informations prsentes ici font partie des connaissances que jai acquises ces
dernires annes et dont je fais usage rgulirement, il sagit donc mon humble
avis dinformations utiles et directement exploitables et non pas de fonctionnalits
obscures. Jai tent de les prsenter avec lide de madresser un novice, dans le but
de le convaincre de lintrt quil y a apprendre unix. En outre, si la plupart des
informations de ce manuel sont adaptes nimporte quel unix, il est vident que
LINUX est notre unix de rfrence de mme que les outils prsents le sont dans
leur version du projet gnu. Il ne sagit pas dun choix sectaire mais simplement de
lexploitation de la grande disponibilit de ces outils.

Ce quil ny a pas dans ce manuel


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

vi

partitionner son disque dur ou en acheter un autre, pour connatre la distribution 5


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

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

vii

Comment lire ce manuel ?


Les pages se lisent de gauche droite et de haut en bas et pour donner limpression
dune cohrence globale, ce manuel est divis en chapitres dont les titres sont :
unix et les logiciels libres : une prsentation de la naissance dunix, du lien avec
les logiciels libres. Un chapitre non technique, assorti de considrations philosophico-politico-conomico-thiques douteuses ;
Petit guide de survie : chapitre prsentant les concepts de base dunix (notions
dutilisateurs, de fichiers, 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 fichiers, 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 configurer son environnement de travail : personnaliser son shell, comprendre le fonctionnement des
diteurs de texte vi et emacs, configurer 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 diffrents concepts introduits. On pourra revenir
dans un deuxime temps sur des informations plus spcifiques contenues dans certains
chapitres. La complexit et limmensit du sujet font que vous trouverez beaucoup
dinterconnexions entre les sujets traits.

Comment imprimer ce manuel ?


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

viii

Que pouvez-vous faire de ce manuel ?


Nom de lauteur : Vincent Lozano ;
Titre : Tout ce que vous avez toujours voulu savoir sur unix sans jamais avoir os
le demander ;
Date : 10 novembre 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 diffuser condition :
dindiquer quil est sous la LAL ;
dindiquer le nom de lauteur de loriginal : Vincent Lozano et de ceux qui
auraient apport des modifications ;
dindiquer que les fichiers sources peuvent tre tlchargs sur http://cours.
enise.fr/unix ;
Enfin vous pouvez le modifier condition :
de respecter les conditions de diffusion nonces ci-dessus ;
dindiquer quil sagit dune version modifie et si possible la nature de la modification ;
de diffuser vos modifications sous la mme licence ou sous une licence compatible.

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

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

Si la lecture est indispensable, on aura recours au pictogramme ci-contre pour


attirer lattention du lecteur distrait...

ix

Les logiciels sont typographis comme indiqus ci-avant. Les mots en anglais sont
produits like this. Pour mettre en vidence les parties gnriques dune commande on
utilisera cette notation. Par exemple, on pourra trouver une phrase comme :
...pour obtenir des informations sur les attributs dun fichier dont le nom
est nomfic
$ ls -l nomfic
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 Iprocessus sous unix.

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

2.4 p. 53 J

constructives que ce manuel sest enrichi de nombreuses nota et surtout que beaucoup dimprcisions et derreurs de fond ont t corriges...
Je tiens enfin exprimer ma gratitude et mon grand respect pour le travail et
la motivation dAlexis Kaufman et Didier Roche qui mont fait confiance pour la
publication de ce livre. Merci galement tous les membres du groupe de relecture des
Framaboooks pour leffort quils ont fourni pour parfaire ce document : en particulier
Barbara Garburst que lon peut qualifier d il de lynx , Laurent lolonene ,
kinouchou.
Enfin, 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 insufflent...

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 rflexions sur les logiciels libres .
1.6 Actualit et avenir des logiciels libres . . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

1
2
5
10
13
15
17

2 Petit guide de survie


2.1 Le shell . . . . . . . .
2.2 Utilisateurs . . . . . .
2.3 Le systme de fichiers
2.4 Processus . . . . . . .
2.5 Quelques services . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

23
24
31
33
53
62

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

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

69
70
70
76
84
88
90

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

xi

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

xii

3.7
3.8

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

92
94

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

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

99
100
104
112
116
118

5 Dvelopper !
5.1 diter un fichier . . . . . . . .
5.2 Faire des scripts en shell . . . .
5.3 Makefile . . . . . . . . . . . . .
5.4 Faire des projets en langage C .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

123
124
125
143
150

6 Se mettre laise !
6.1 Avec le shell . . . . .
6.2 Avec vi . . . . . . . .
6.3 Avec Emacs . . . . .
6.4 Avec Xwindow . . .
6.5 Installer des logiciels

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

165
166
176
178
194
204

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

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

209
210
212
215
216
217
217

.
.
.
.
.

Bibliographie

221

Glossaire

223

Index

227

Chapitre

Sommaire
1.1
1.2
1.3
1.4
1.5
1.6

Avant-propos : la naissance dun logiciel


Unix
Les logiciels libres
Le cas de Gnu/Linux
Quelques rflexions sur les logiciels libres
Actualit et avenir des logiciels libres

Unix et les logiciels libres


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

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

A nir quelques termes de manire clairer le lecteur novice. Les claircissements


portent la fois sur la famille de systmes dexploitation quest unix, et le type

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

Unix et les logiciels libres

1.1

Avant-propos : la naissance dun logiciel

Pour se sensibiliser la notion de logiciel libre et pour comprendre ce quest un


systme dexploitation multi-plate-forme, il est impratif de saisir les diffrents 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 diffrentes phases que lon peut prsenter de
manire plus ou moins dtaille ; toujours est-il que ces phases sarticulent autour des
tapes importantes suivantes :
1. lanalyse du problme rsoudre ;
2. la conception dun algorithme correspondant cette analyse ;

3. la traduction de lanalyse dans un langage de programmation plus ou moins


volu ;
4. la compilation du programme en langage volu, cest--dire la traduction du
langage volu vers un langage moins expressif quest celui de la machine et plus
prcisment du processeur et du systme dexploitation ;
5. la phase de test qui permet de sassurer que le programme rpond aux besoins
initiaux.
Le programme en langage volu est appel le langage source, le langage moins expressif le langage cible, et dans le cadre de la programmation avec un langage compil,
on nomme le programme cible : binaire ou excutable. Le programme binaire est une
suite dinstructions destines tre interprtes par un processeur particulier. Un binaire est donc ddi un processeur et un systme dexploitation dun certain type,
ce couple processeur/systme est appel plate-forme.
Le programme source est le programme qui reflte 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 effet 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 difficile

1.1 Avant-propos : la naissance dun logiciel

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

1.1.2

De la portablilit

Pour comprendre ce quimplique la manipulation des programmes sources, nous


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

Unix et les logiciels libres

couche langage dapplication

couche assembleur

couche systme dexploitation

Couche machine

Figure 1.1 Larchitecture en couches dun ordinateur.

Compilation dun source 3


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

1.2 Unix

Source

Interprteur A/X

Interprteur A/X

Interprteur B/Y

Interprteur B/Y

Machine Virtuelle A/X

Machine Virtuelle A/X

Machine Virtuelle B/Y

Machine Virtuelle B/Y

SE A

SE A

SE B

SE B

Arch X

Arch X

Arch Y

Arch Y

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

Compilateur A/X

Compilateur B/X

Compilateur B/Y

Excutable A/X

Excutable B/X

Excutable B/Y

Machine Virtuelle A/X

Machine Virtuelle A/X

Machine Virtuelle B/X

Machine Virtuelle B/Y

SE A

SE A

SE B

SE B

Arch X

Arch X

Arch X

Arch Y

Ordinateur 2

Ordinateur 3

Ordinateur 4

Ordinateur 1

(b) Sources compiles sur diffrents ordinateurs.

Figure 1.2 Portabilit de programmes crits en langage compil et interprt.


virtuelle de lordinateur cible soit diffrente ou non. En dautres termes, pour interprter un source en langage Perl (langage interprt), on devra disposer dun interprteur
Perl pour Windows, LINUX , etc. en fonction du systme install sur lordinateur.

1.2

Unix

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

Unix et les logiciels libres

mme temps, grce au concept de temps partag ;


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

1.2.1

Historique 5

unix est un systme trentenaire, multi-tches, multi-utilisateurs et disponible sur


plusieurs plate-formes. Il a pour origine un projet initi au dbut des annes soixante,
cofinanc 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 scientifique de chez Bell, Ken Thompson dcide de continuer travailler sur
la partie systme dexploitation dans le but essentiel de faire tourner des programmes
sur les machines dont il dispose. Pour plaisanter, ce systme est baptis Unics (pour
Uniplexed Information ...) et devient rapidement unix. Thompson est peu aprs
rejoint par Dennis Ritchie qui cre le langage C en sinspirant du langage B (langage
interprt quavait cr Thompson aprs avoir tent de porter le langage Fortran sur
la machine PDP-7). Lintrt est alors de pouvoir porter le systme sur dautres
machines sans avoir tout rcrire 6 . En 1972, les bases fondamentales dunix sont
prtes et les principes de la bote outils dunix sont noncs par Doug MacIlroy,
linventeur des tubes 7 :
1. Write programs that do one thing and do it well ;
2. Write programs that work together ;
3. Write programs that handle textstreams because thats the universal interface.
4. Terme anglais (to develop pour mettre au point) pass dans le jargon des informaticiens :
dvelopper cest exercer une activit autour de la programmation, de la cration dun logiciel.
5. Cette section est inspire des informations disponibles dans louvrage de Garfinkel et Spafford
(1996) faisant lui-mme rfrence celui de Salus (1994)
6. Il faut imaginer qu lpoque chaque machine possde son propre langage, une nouvelle machine ncessite donc un nouveau programme.
7. Pour les non anglophones : crire des programmes qui font une seule chose et qui le font bien,
crire des programmes qui peuvent communiquer entre eux, crire des programmes qui manipulent
du texte car cest linterface universelle.

1.2 Unix

Figure 1.3 Ken Thompson (assis) et Dennis Ritchie dans leurs versions with
luxuriant and darker hair than [they] have now 9 devant le Pdp11.
Simson Garfinkel et Gene Spafford notent dans leur ouvrage quunix devient
alors un rve de programmeur . Puisque chacun pouvait alors crer ses propres outils
dune complexit croissante avec les outils lmentaires du systme ; ces nouveaux
outils devenant alors eux-mmes partie intgrante du systme.
En 1973 unix est install sur 16 sites et la suite dune confrence 10 ainsi que
dune publication (courant 1974) sur les systmes dexploitation, des utilisateurs
mettent un avis intress. Les demandes affluent. 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 modifications importantes au systme et distribue ce systme modifi, 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 modifications et outils
9. Comme lindique Ritchie lui-mme sur sa page http://cm.bell-labs.com/who/dmr.
10. ACM Symposium on Operating Systems Principles.

Unix et les logiciels libres

(a) Thompson et Ritchie

(b) Ritchie et Joy

Figure 1.4 Les papas dunix

font alors le tour de la terre puisque dautres utilisateurs amricains et europens


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

1.2 Unix

Des unix propritaires


Nom
Solaris
HPUX
AIX
Digital Unix
Irix

Propritaire
Sun
HP
IBM
Digital
SGI

Processeur
Sparc & Intel
PA
Risc & PowerPC
Alpha

Des Unix libres


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

1.2.2

Architecture et caractristiques

On peut dcomposer un systme unix en trois grandes entits :


Le noyau : il assure la gestion de la mmoire et des entres sorties de bas niveau et
lenchanement des tches (voir figure 1.5) ;
Applications
CPU
Noyau
RAM

Drivers
Priphriques

Vido

Clavier

Souris

Disques

...

Figure 1.5 Modules logiciels autour dun noyau Unix


Un ensemble dutilitaires : ddis des tches diverses :
des interprteurs de commande appels shells permettant de soumettre des
tches au systme, tches pouvant tre concurrentes et/ou communicantes ;
des commandes de manipulation de fichiers (copie, dplacement, effacement,
etc.) ;

Unix et les logiciels libres

10

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


des informations sur la configuration des diffrents services ;
des scripts de changement dtat du systme (dmarrage, arrt, ...).

Sur chaque systme est ensuite install un ensemble de programmes pour les besoins
spcifiques de lorganisation (traitements de texte, logiciels de calculs, etc.)
Jean-Marc Rifflet dans La programmation sous unix (Rifflet, 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 offerts 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 fichier hirarchis (fichiers, rpertoires, liens physiques et symboliques) ;
utilisation du concept de filtrage et de redirections. Cest une des ides fondamentales dunix qui en fait toute la souplesse et la puissance. Les filtrages
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 diffrents types de protection de logiciels que lon
peut rencontrer ; puis dans un deuxime temps, travers un historique du projet gnu,
on dcouvrira le principe fondamental dune licence de type logiciel libre.

1.3.1

Les diffrents types de logiciels

On rencontre plusieurs types de logiciels 12 :


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

1.3 Les logiciels libres

11

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

1.3.2

Historique du projet Gnu 13

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

12

Unix et les logiciels libres

Figure 1.6 Richard Stallman

1
se trouvent alors dans la situation paradoxale, o bien quayant toutes les comptences
pour modifier le pilote, ils nont pas le droit de le faire.
Les vnements lire ce sujet le livre de Stallman et al. (2010) qui vont
faire natre le projet gnu reposent tous sur le fait qu un instant donn, laccs
au code source des programmes devient impossible. Ceci va lencontre de ltat
desprit de communaut des dveloppeurs du laboratoire. Richard Stallman dcide
alors dcrire lui-mme un systme dexploitation ! Il nomme ce systme gnu, pour
gnu is Not Unix 15 . La premire pierre de ce projet est lditeur de texte Emacs, qui
peu peu fait lobjet de demandes de la part dutilisateurs intresss. Un serveur
est mis en place sur Internet, et Stallman envoie galement des bandes magntiques
contenant Emacs, aux utilisateurs ne disposant pas daccs Internet, moyennant une
contribution.
Cest en 1983 que Stallman annonce officiellement 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 finis : compilateur, diteur de
texte, et tous les outils de la bote outils dunix ; ces outils ont aujourdhui une
15. Notez lhumour informaticien sur une dfinition rcursive sans critre darrt ; une dfinition
qui fait inexorablement dborder la pile.

1.4 Le cas de Gnu/Linux

13

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

1.3.3

Principe de la gpl

Le projet gnu donne naissance une licence particulire appele General Public
Licence (GPL) qui spcifie 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 modifier ;

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

1.4.1

Quest-ce que Linux ?


Cest un noyau unix.

est un programme dont les sources constituent un ensemble de fichiers crits


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

Unix et les logiciels libres

14

Figure 1.7 Linus Torvalds

1
1.4.2

Historique 16

LINUX est n en 1991, autour dun projet de fin dtudes dun tudiant finlandais
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 diffuse au mois daot 1991, portant le numro de version
0.0.1. Fin octobre 91, une version officielle 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, (chiffre de version pair) dans lequel aucune nouvelle
fonctionnalit nest insre ;
en version de dveloppement 2. 5 .30 (chiffre 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 rflexions sur les logiciels libres

1.5

15

Quelques rflexions sur les logiciels libres

Les implications de ce que lon peut qualifier de mouvement pour les logiciels
libres sont multiples. Le fait mme de le qualifier 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 bnficiant 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 modifier une chelle relative
cette socit, de la crer ou dy participer. Cest peut-tre sur le plan de la politique
quon peut trouver la plupart des composants dune rvolution. Gardons bien sr
lesprit que ce bouleversement de socit sopre dans un milieu trs ferm quest
celui de la production de logiciel.
Ouverture et diffusion de savoir...
Dans un secteur certes prcis de la science, la transparence qualifie galement
douverture est de mise, et le scientifique dispose grce ces logiciels dune source
de savoir qui nest ni retenue, ni capitalise des fins de profits. Mme si tout systme
finit par tre perverti, ce qui se dgage de ce mouvement est la notion de diffusion 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 scientifiques et
techniques, sous forme de manuels et de forums de discussions.
Des logiciels alternatifs
Dans un cadre plus politique, on peut galement affirmer que lensemble de ces logiciels
constitue galement une alternative aux gants de ldition de logiciels dont la socit
Microsoft fait incontournablement partie. Cette alternative vient probablement de
questions que lon peut tre amen se poser, en tant quutilisateur de logiciels :

16

Unix et les logiciels libres

dois-je accepter que certains logiciels plantent ?


dois-je accepter de ne pas pouvoir importer des donnes dun logiciel dun fabricant vers un autre dun fabricant diffrent ?
dois-je accepter que certaines versions de mon traitement de texte prfr ne
soient pas compatibles entre elles ?
dois-je accepter de changer de version de mon systme dexploitation, chaque
nouvelle version de mon traitement de texte prfr ?
dois-je accepter de changer dordinateur chaque version de mon systme dexploitation prfr ?
On pourra ainsi se positionner contre les formats propritaires de stockage de fichiers
qui emprisonnent les utilisateurs dans un certain type de logiciels, et plus prcisment
dans lutilisation de logiciels dune marque particulire. Lalternative se justifie 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 effectivement, 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...
lpoque o Bernard Gaulle distribuait librement lextension french de LATEX, il
finissait la documentation de son logiciel en crivant : En esprant avoir t utile
tous . Mme si on peut sinterroger sur les vritables motivations de ces milliers
de bitouilleurs 17 , cette motivation provient dun profond humanisme et sans doute
de lternelle interrogation de lexistentialiste. Si lart est la capacit propre ltre
humain de crer en dehors de toute contingence de survie, alors on peut voir ce
mouvement des logiciels libres comme un mouvement artistique. Le nom de la licence
qui rgit le logiciel Perl la licence artistique en est sans doute lillustration.
Un peu de politique...
Un groupe dingnieurs, de chercheurs, denthousiastes, se regroupent et mettent en
commun leur passion pour linformatique et la programmation pour mener bien
un projet ambitieux. Ce projet, ou lensemble de ces projets, (le projet gnu, LINUX,
17. Oui, oui certains ont traduit le mot hacker en bitouilleurs , bidouilleur de bit...

1.6 Actualit et avenir des logiciels libres

17

LATEX 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 diffuser un produit phare de la rvolution
informatique sans avoir recours aux mcanismes du capitalisme. Utiliser les logiciels
libres peut donc aussi constituer un choix politique.
En finir avec les hackers...
Contrairement une ide rpandue par les mdias, le terme de hacker dsigne initialement un utilisateur enthousiaste de linformatique et dont le but est damliorer
les systmes existants. Il ny a donc pas au dpart de connotation malsaine dans ce
terme. Il ne faudra pas le confondre avec le terme de cracker que lon peut traduire par pirate individu dont lactivit (illgale) est de tenter de pntrer sur
des systmes. Stallman se qualifie lui-mme de system hacker, pour expliciter ses
activits de modification 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 effervescence 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 fiabilit. 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 effet le choix de coupler un processeur de son choix, avec un systme
dexploitation particulier. On peut titre indicatif, installer sur une machine munie
dun processeur Intel, le systme gnu/LINUX , FreeBSD, BeOS, Solaris pour ne citer
queux. Un PC nest donc pas condamn supporter Windows.
18. 10 novembre 2010.
19. Qui offrait du matriel plus fiable et gnralement accompagn dun contrat de maintenance,
pour tre tout fait honnte dans la comparaison...

Unix et les logiciels libres

18

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 figurait
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 spcifications 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 spcifications de leur matriel. Il est alors impossible dutiliser le matriel en question, moins de procder
lingnierie inverse (reverse engineering) qui nest pas toujours lgale dans certains
pays. Il est en tous cas intressant de noter que plusieurs fabricants ont cd sous
la pression de la communaut ; parmi ceux-l, les socits Matrox et Adaptec avaient
fait grand bruit lorsquelles avaient enfin accept la divulgation des spcifications de
leurs matriels.

1.6.2

Le problme des virus

Les virus informatiques se transmettent par lintermdiaire de fichiers 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 authentifi 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 vrifier que larchive contenant le logiciel
na pas t modifie ;
dans la situation o lon ne dispose pas de signature, il faudra se poser les
questions suivantes :

1.6 Actualit et avenir des logiciels libres

19

1. le programme que je viens de tlcharger mane-t-il dun site ayant un


caractre officiel ?
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 diffrents 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 officielle les vulnrabilits des logiciels communment
utiliss pour la communication.

1.6.3

De lutopie la loi du march : du Free Software lOpen


source

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

Stallman fait partie des partisans des logiciels libres les plus radicaux. Cest pourquoi
la GPL est trs contraignante pour assurer quun logiciel libre le reste quoi quil arrive.
Parmi les contraintes fortes de la GPL, lune delles interdit de distribuer un logiciel
propritaire utilisant une bibliothque libre. En dautres termes, une socit dsirant
vendre un logiciel non libre, ne peut utiliser une bibliothque libre pour dvelopper
son logiciel. Cette contrainte a t leve avec une version moins restrictive : la LGPL
(lesser general public license).
Aujourdhui pour ne pas effrayer lentrepreneur avec la notion de gratuit ou lide
de communaut libre but non lucratif, le terme Open Source a t cr. Ce terme
dont le porte parole est sans doute Eric Raymond (cf. http://www.opensource.org),
20. Traduction : Mon travail autour des logiciels libres est motiv par un but idaliste : diffuser
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.

Unix et les logiciels libres

20

dsigne tout logiciel rgi par une licence compatible avec lide des logiciels libres. La
dfinition de lopen source permet un dveloppeur de dfinir 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 modifications sous les termes de cette licence. Ce point est trs diffrent de ce que
stipule la GPL, qui impose que les travaux drivs soient sous GPL.
Les licences compatibles avec cette dfinition sont, parmi une petite vingtaine que
recense le site http://www.opensource.org : la licence BSD, la licence X, la licence
artistique (de Perl), la licence de Netscape, la GPL et la LGPL.
Lintrt quont vu les porte-paroles de lopen source rside dans le fait quon peut
prsenter les logiciels libres comme une solution conomiquement viable et non comme
le projet dune communaut dinformaticiens libertaires ou communistes (termes effrayant les hommes portant des cravates (DiBona et al., 1999, chapitre 14)). Il existe
en fait beaucoup de socits qui ont adopt le modle open source (ou logiciel libre
ce qui est encore une fois identique malgr les dissensions qui peuvent exister
entre Stallman et Raymond) ; citons parmi celles-l :
Cygnus Solution qui propose un kit de dveloppement bas sur le compilateur
et le debugger de gnu ;
RedHat Software qui vend une distribution LINUX bien connue ;
Netscape Communication qui a adopt en 1998, le modle des logiciels libres
pour dvelopper son navigateur ;
Corel a cr sa propre distribution LINUX qui a pour but de porter ses clbres
outils de dessins, retouche dimage, etc.
la socit Sun (qui vient dtre rachete par Oracle) sest investie dans deux
logiciels phares : MySql et OpenOffice ;
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 profit, car elles vendent un service aux
clients. Elles bnficient du modle open source, dans la mesure o le client peut
ventuellement modifier le produit, lequel produit est maintenu activement par une
communaut de dveloppeurs.

1.6.4

Des brevets sur les logiciels

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

1.6 Actualit et avenir des logiciels libres

21

dposer des brevets sur les logiciels aux tats Unix 21 , mais que cela est interdit en
Europe. La directive europenne visant autoriser le dpt de brevets sur des logiciels
a t rejete le 6 juillet 2005 par le parlement europen.
La cration des brevets avait pour but initial de diffuser linformation scientifique
et technique tout en assurant pendant un certain temps des royalties au dtenteur du
brevet. Lide tait donc dinciter les crateurs diffuser 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.
TEX et LATEX : ce systme de composition de document 24 , est mon avis (partial
et subjectif) un des plus beaux projets informatiques et scientifiques. TEX et
LATEX permettent de rdiger des documents avec une trs grande souplesse et
une qualit professionnelle (lire lexcellent ouvrage de Lozano (2008) pour sen
persuader) ;
: 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 efficace ;

LINUX

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 offrent la plupart du temps beaucoup plus doptions que les versions des unix propritaires.
Le compilateur C et son compre lditeur Emacs, sont galement des outils qui
gagnent tre connus ;
Perl : Larry Wall le crateur de Perl note dans la prface du livre de Schwartz
(1995) : Perl a t cr pour des gens comme vous, par quelquun comme
vous, en collaboration avec de nombreuses personnes comme vous. La magie
de Perl sest tisse collectivement, point par point, pice par pice, dans le
21.
22.
23.
24.

Une coquille dtecte par un lecteur que je laisse en ltat...


Brevet US patent no 6727830.
Brevet no 6700564.
Qui a permis de composer le texte que vous avez sous les yeux.

22

Unix et les logiciels libres

cadre trs particulier de votre mentalit. Si vous trouvez que Perl est un peu
bizarre, cela en est peut-tre la raison. . Ce langage trs puissant est un langage
interprt utilis pour ladministration systme, la cration de page HTML, et
plein dautres choses ; Perl fait partie de ces logiciels qui, linstar de LATEX,
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.

Chapitre

Sommaire
2.1
2.2
2.3
2.4
2.5

Le shell
Utilisateurs
Le systme de fichiers
Processus
Quelques services

2
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


L
outils dont on dispose pour dialoguer avec le systme. Il sagit certes dune convivialit laquelle peu dutilisateurs sont habitus ; essentiellement parce quelle de-

mande un investissement sur le plan de la documentation et de lapprentissage. Ce


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

23

Petit guide de survie

24

2.1

Le shell

Le shell est une interface avec le systme unix. Il offre 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 figure 2.1. On parle galement de terminal

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

2.1 Le shell

25

et des fonctionnalits de compltions avances 2 ;


...
Le shell est utilis le plus souvent de manire interactive, pour passer des commandes au systme. Pour signifier que le shell est prt recevoir ces commandes, il
affiche un prompt. Ce prompt peut contenir un nombre variable dinformations selon
la configuration, 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 enfin que si nous prsentons ici le shell dans son utilisation interactive, il est
galement utilis sous forme de scripts, dans ce cas les commandes passes au systme
peuvent tre enregistres dans des fichiers qui peuvent ensuite tre excuts. En cela
le langage de commande peut tre utilis comme un langage interprt.

2.1.1

Quest-ce quune commande ?

Excuter ou lancer une commande, consiste de manire synoptique en ceci :


nom-commande options arg1 arg2 ... argn
...
rsultat de la commande sur le terminal
...

Entre

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

7 13:28 guide-unix.tex

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

Petit guide de survie

26

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 effectue
en sparant dans un premier temps les lments (commande, options et arguments) par
des espaces. Au cas o un nom de fichier contiendrait un espace, il faudra indiquer au
shell que le nom est considrer comme un seul lment en procdant comme indiqu
la section 2.1.5 page 30.

Commandes internes et commandes externes


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

Afficher le prompt et attendre une commande


Vrifier sa syntaxe
Si la syntaxe est correcte Alors
Si cest une commande interne Alors
lexcuter
Sinon

chercher le fichier excutable correspondant


lexcuter
Sinon

afficher un message derreur


La recherche de lexcutable correspondant une commande externe consiste en lexamen dun ensemble de rpertoires susceptibles de contenir lexcutable en question.
Cette liste de rpertoires dfinie lors de la configuration du systme est stocke dans
une variable denvironnement nomme PATH. Dans le shell utilis par votre serviteur :
$ type cat
cat is /bin/cat
$ type echo
echo is a shell builtin
$
3. quivalent du dir de MSDOS, pour afficher les proprits dun fichier 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 -.

2.1 Le shell

27

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

Petit guide de survie

28

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 diffrente de 0
(voir aussi 5.2.4 page 138).

2.1.2

Convivialit et ergonomie

la fin 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 finalement 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 effectuer la machine ? Le shell est un programme ergonomique et lutilisateur
qui a fait leffort de lapprentissage du langage de commande le constate trs vite 5 .
Ah oui : lutilisation du langage de commande dunix repose sur lutilisation intensive du clavier. Il est donc important de se familiariser avec ce priphrique voire
dapprendre via des mthodes adquates lutiliser de manire optimale.

Dans la mesure o le pressage de touches de clavier est lactivit premire de


lutilisateur unix, quelques amnagements ont t mis en place :
lhistorique des commandes : les touches et permettent de rappeler
les commandes prcdemment tapes pour ventuellement les modifier et les
relancer ;

(tabulation) permet de com la compltion des commandes : la touche

plter les noms de commandes, les noms de fichiers et de rpertoires partir des
premiers caractres de leur nom. utiliser intensivement !
5. On prfre rapidement presser quelques touches de clavier plutt que de se lancer dans une
vingtaine de clic-clic sur des demi-douzaines de fentres empiles les unes sur les autres.

2.1 Le shell

29

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

2.1.3

Rudiments sur les variables denvironnement

Lorsquun shell est excut par le systme, un certain nombre de variables dites
denvironnement sont instancies. Ces variables permettent lutilisateur et aux programmes lancs par le shell dobtenir plusieurs informations sur le systme, la machine
et lutilisateur, entre autres. La commande env affiche 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 dfinissent respectivement,
le fichier 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 prfixant le nom dune variable par un dollar ($), on accde la valeur de
cette variable. Ainsi :
$ echo $SHELL
/bin/bash
$
est un moyen de connatre le shell qui est associ votre utilisateur dans la base de
donnes du systme.
En ralit toutes les variables dun shell ne sont pas des variables denvironnement, dans le sens o toutes les commandes ny ont pas ncessairement accs. Par
contre nimporte quelle variable peut devenir une variable denvironnement laide de la
commande interne export.
6. Voir ce sujet les paragraphes 6.1 page 166 et 5.4.2 page 151 qui traitent de la variable PATH.

Petit guide de survie

30

2.1.4

Caractres spciaux

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

2.1.5

Espaces dans les noms de fichiers

Le caractre espace nest pas un caractre spcial pour le shell, cependant son utilisation dans les noms de fichiers modifie lgrement la manipulation des commandes.
Imaginons par exemple que lon veuille effacer un fichier 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 deffacer deux fichiers au lieu dun seul puisquil dlimite les mots
laide du caractre espace. Pour expliquer au mssieur que zeuhl wortz.txt dsigne
un seul fichier, il est ncessaire dchapper le caractre espace :
$ rm zeuhl\ wortz.txt
ou dindiquer explicitement que le nom est compos dun seul mot en lentourant
de guillemets (") ou dapostrophes () :
7. Le caractre / nest en ralit spcial que dans le traitement des rfrences sur les fichiers ou
rpertoires, et non pour le shell lui-mme.

2.2 Utilisateurs

31

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

2.1.6

Caractres gnriques

Il existe au moins deux moyens dutiliser les caractres gnriques (parfois dits
wildcards ou jokers en anglais). Voici deux exemples en reprenant la commande ls :
$ ls guide-unix*
guide-unix.aux guide-unix.dvi
$

guide-unix.log

guide-unix.tex

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


$ ls guide-unix.??x
guide-unix.aux guide-unix.tex
$
liste les fichiers 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 88, ne doivent pas tre confondues avec
icelles...

2.2

Utilisateurs

unix a t conu comme un systme multi-utilisateur, ce qui signifie que chaque


utilisateur est identifi 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 identificateur : luid (pour user identifier) ;
une chane de caractre se rapprochant gnralement de ltat civil, appele login
name ;

32

Petit guide de survie

le groupe auquel lutilisateur appartient, et ventuellement dautres groupes


dutilisateurs supplmentaires ;
un rpertoire priv (home directory) ;
un shell qui sera utilis par dfaut aprs la connexion.
On peut savoir sous quel utilisateur logique on est connect grce la commande
whoami :
$ whoami
djobi
$
En plus de son nom, un utilisateur est identifi en interne par son uid ou user identifier.
Dautre part un utilisateur appartient un ou plusieurs groupes dutilisateurs. Chacun
de ces groupes est galement identifi par son nom et un numro appel gid ou group
identifier. 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 refltent 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 fichiers dans une zone particulire appele home directory ou rpertoire
priv ou tout simplement home. En fonction de la configuration du systme les
utilisateurs pourront bien sr crire dans dautres zones. Le rpertoire priv est
dsign dans le shell par :
$ echo ~
/home/utilisateurs/djobi
$
influer sur le cours des programmes quil a lui-mme lanc ;
autoriser ou interdire la lecture ou lcriture des fichiers quil a crs.
Il ne peut pas :
effacer les fichiers dun autre utilisateur sauf si ce dernier ly autorise (en positionnant les droits corrects sur le rpertoire contenant le fichier en question) ;
interrompre des programmes lancs par un autre utilisateur (l aussi, sauf si il
y est autoris par lutilisateur en question) ;
crer des fichiers 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 fichiers soient modifis, il existe au

2.3 Le systme de fichiers

33

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

2.3

Le systme de fichiers

Le systme de fichiers dunix est une vaste arborescence dont les nuds sont des
rpertoires et les feuilles des fichiers. Le terme de fichier sentend ici dans un sens
trs large, puisque sous unix, un fichier peut contenir des donnes, mais peut aussi
tre un lien sur un autre fichier, 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 fichiers. Nous nous intresserons
ici aux fichiers 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 fichiers et des rpertoires

Pour manipuler un fichier ou un rpertoire dun systme de fichiers, lutilisateur


a besoin de les nommer, en dautres termes il a besoin de pouvoir dsigner un fichier
particulier de larborescence des fichiers 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 fichier et on descend jusquau fichier ou rpertoire.
De cette manire on dsignera les fichiers bidule.dat et truc.txt de larborescence
donne en exemple la figure 2.2 page suivante par :
/users/bidule.dat
/home/eleves/truc.txt
Le caractre / joue deux rles :
dune part il dsigne le rpertoire racine (root directory en anglais) ;
dautre part il fait usage de sparateur de rpertoires dans lcriture des rfrences de fichiers et rpertoires.
Pour dsigner un rpertoire on utilisera le mme principe, ainsi les rpertoires eleves
et users ont comme rfrence absolue :

Petit guide de survie

34

home

eleves

users

bidule.dat

truc.txt

Figure 2.2 Une arborescence de fichiers pour lexemple

/home/eleves
/users
Rfrence relative

Il est souvent utile de dsigner les fichiers et rpertoires grce une rfrence
relative. Dans ce cas on rfrencera un fichier ou un rpertoire relativement un
rpertoire de base. Par exemple :
si /users est le rpertoire de base, alors il est possible de rfrencer les fichiers 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. Enfin, 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 fichiers ou des rpertoires,
lutilisateur est libre de dsigner ces fichiers ou rpertoires par le truchement des

2.3 Le systme de fichiers

/usr

Partition 1

/etc
/mnt

/local
/bin

35

Partition1

Partition 1

/home1 /home2

/images

/home3 /home4

/data

/export

Partition 2

/home
/transfert

Disque dur 1

Disque dur 2

Disque amovible

(a) Partionnement des disques

/
/export

/usr

/etc

/mnt

Disque dur 1 / partition 1

/home /transfert

/local

/bin

Disque dur 1 / partition 2

/image

/data

Disque amovible / partition 1

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

(b) Montages

Figure 2.3 Exemple de partitionnements et montages correspondant.


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

2.3.2

Arborescence

Pour comprendre le fonctionnement de larborescence dun systme de fichiers


unix, supposons que la machine que nous utilisons soit compose des deux disques
durs et du disque amovible de la figure 2.3b. Sous unix, une telle configuration de
disques peut se prsenter sous la forme de la figure 2.3a. En jargon unix, on dit que
chaque partition est monte sur (de la commande mount) ou greffe 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 ;

Petit guide de survie

36

la partition 1 du disque amovible est monte sur /mnt.


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

Chaque nud de larborescence est identifi 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 fichier possde un numro qui est unique sur la partition
o il rside. On peut visualiser linode dun fichier grce loption i de la commande
ls :

$ ls -i *.tex
65444 guide-unix.tex
$
ici, 65444 est linode du fichier guide-unix.tex. Sur le systme o est tap ce document, les fichiers 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 diffrente monte sur le rpertoire /usr. Pour
examiner les partitions de notre systme, on peut utiliser la commande df avec loption
-h (pour human readable) :
$ df -h
Filesystem
/dev/hda1
/dev/hda7

Size
194M
1.1G

Used Avail Use% Mounted on


42M 142M 23% /
566M 508M 53% /home

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

2.3 Le systme de fichiers

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

791M
96M
643M

37

606M
95M
643M

144M 81% /usr


584k 99% /mnt/zip
0 100% /mnt/cdrom

Cette commande affiche donc pour chaque partition le fichier 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 fichier nomm /etc/fstab.
Loption -h est une option de la version gnu de la commande df. Votre sarcastique
serviteur vous invitera donc mditer sur ces programmes censs produire des rsultats lisibles par un tre humain . Mais ne vous mprenez pas, les systmes unix dont
la commande df ne dispose pas de loption -h sont quand mme destins aux humains...

2.3.3

Privilges

Il faut savoir que sous unix, on associe chaque fichier 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 fin que
les trois entits ci-dessus. Cette extension est prsente au paragraphe 2.3.10 page 50.

Chaque fichier possde un certain nombre dattributs. Un sous-ensemble de ces attributs a trait aux privilges ou droits quont les utilisateurs lors de laccs un fichier
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 fichier ; ensemble que lon peut examiner grce la
commande ls :

Petit guide de survie

38

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

users

6836

Nov 7 14:34

guide-unix.tex

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

rw-

r--

r-droits des autres utilisateurs (read seulement).


droits du groupe (read seulement).
droits du propritaire (read, write, not executable).
le fichier est un fichier normal.

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

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

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

Un dernier exemple :
$ ls -l ~/
drwxr-xr-x

3 vincent

users

4096 Nov

7 12:48 LaTeX

2.3 Le systme de fichiers

drwxr-xr-x
$

2 vincent

39

users

4096 Nov

7 14:40 bin

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

2.3.4

Parcourir larborescence

Pour connatre le rpertoire courant (i.e. celui o on se trouve au moment o on


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

Petit guide de survie

40

Et, pour illustrer lutilisation dune rfrence relative :


$ cd /usr
$ ls -l
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
$ cd local
$

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

Enfin pour donner un exemple dutilisation du rpertoire .. dsignant le rpertoire


pre :
$ pwd
/usr/local
$ cd ..
$ pwd
/usr
$

2.3.5

Manipuler les fichiers

Les oprations courantes sur les fichiers sont la copie, le dplacement ou renommage et leffacement. 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 fichier donn en premier argument vers le fichier
donn en deuxime argument. Cette commande accepte galement la copie de un ou
plusieurs fichiers vers un rpertoire :
$ cp /usr/local/bin/* .
$
cette commande copie tous les fichiers (sauf les sous-rpertoires) contenus dans le
rpertoire /usr/local/bin dans le rpertoire courant.
Pour dplacer un fichier, 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 fichier :
$ ls *.tex

2.3 Le systme de fichiers

41

guide-unix.tex test.tex
$ mv test.tex essai.tex
$ ls *.tex
guide-unix.tex essai.tex
$
Lautre forme a pour but de dplacer un ou plusieurs fichiers dans un rpertoire :
$ mv essai.tex /tmp
$
dplace le fichier essai.tex dans le rpertoire /tmp.
La commande rm (remove) efface un fichier. Sous unix leffacement dun fichier
est dfinitif, cest pourquoi, pour des raisons de scurit, leffacement dun fichier est
gnralement configur par ladministrateur en mode interactif, cest--dire que le
shell demande lutilisateur une confirmation :
$ 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 effacer un
rpertoire non vide grce la commande rm et son option -r. Cette option permet
deffacer rcursivement le contenu dun rpertoire :
$ rm -rf tmp
$
efface 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...

Petit guide de survie

42

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 greffer
(monter) le systme de fichiers 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 fichier /etc/fstab une ligne ressemblant :
/dev/cdrom

/cdrom

iso9660 ro,user,noauto

indiquant que lutilisateur lambda a le droit de monter un systme de fichiers au


format Iso9660 contenu dans un cdrom, dans le rpertoire /cdrom. Lutilisateur
pourra donc se fendre dun :
$ mount /cdrom
$
pour avoir accs aux fichiers du dit cdrom partir du rpertoire /cdrom. Une fois
la (ou les) oprations de lecture effectue(s) lutilisateur devra lancer un :

$ umount /cdrom
$
pour dtacher le systme de fichiers 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 fichiers 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 fichier. Seul ladministrateur (utilisateur root) a la possibilit de changer le
propritaire dun fichier (commande chown). Enfin le groupe propritaire peut tre
chang par le propritaire (chgrp).
La commande chmod permet au propritaire dun fichier 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 modifier les
privilges des trois entits propritaires dun fichier (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 modifier les droits dun fichier. Mais avant tout, posonsnous la question suivante :

2.3 Le systme de fichiers

43

Quels sont les droits par dfaut ?


Les droits par dfaut sont dfinis par lintermdiaire dun masque de cration de
fichier. En jargon unix, ce masque est appel umask pour user file creation mask. Ce
masque est associ un utilisateur et prcise quels droits aura par dfaut un fichier
lors de sa cration. Pour connatre son umask :
$ umask -S
u=rwx,g=rx,o=rx
$
Ce qui signifie quun fichier est cr avec par dfaut :
pour le propritaire : tous les droits ;
pour le groupe :
droits en lecture ;
droits en lecture et excution pour les rpertoires ;
idem pour les autres.
Nous prendrons comme hypothse pour nos tudes de cas que lumask du systme est
celui donn par la commande umask -S ci-dessus. Crons un rpertoire et un fichier
dans ce rpertoire :
$ mkdir echange
$ touch echange/donnees.txt
$

La commande touch change les attributs de date dun fichier en le crant sil nexiste
pas. On peut alors examiner les droits sur ces fichiers :
$ ls -ld echange
drwxr-xr-x 2 vincent
$ ls -l echange
-rw-r--r-- 1 vincent
$

users 4096 Nov 18 23:06 echange


users

6 Nov 15 21:22 donnees.txt

Attributs dun rpertoire


En considrant le rpertoire comme un catalogue contenant une liste de fichiers,
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 : modifier le catalogue, donc effacer les fichiers, les renommer, les dplacer.
Excution : cet attribut permet un utilisateur de pntrer dans ce rpertoire et
daccder aux fichiers qui sy trouvent.
Voyons plus prcisment grce un exemple :
$ chmod g-r echange

Petit guide de survie

44

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

users

4096 Nov 20 18:03 echange

la commande chmod ci-dessus retire aux membres du groupe users le droit de lire le
rpertoire echange. Cest pourquoi lorsquun utilisateur autre que vincent (appelonsle rene), mais du groupe users, lance la commande :
$ ls ~vincent/echange
ls: /home/vincent/echange/: Permission denied
$
elle choue, faute de privilges suffisants. 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 fichiers quil contient. Cest pourquoi, si lon
supprime aussi le droit dexcution sur le rpertoire echange pour le groupe users,
comme ceci :
$ chmod g-x echange
$ ls -ld echange
drwx---r-x
2 vincent
$

users

4096 Nov 20 18:03 echange

la commande suivante, lance par rene choue faute de droits suffisants :


$ 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
effacer tous les fichiers quil contient quels que soient les droits et propritaires de
ces fichiers.

Autoriser un membre du groupe lire un fichier


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

2.3 Le systme de fichiers

45

Autoriser un membre du groupe modifier un fichier


Pour autoriser un membre du groupe propritaire du fichier donnees.txt du rpertoire echange modifier un fichier il suffit 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 fichier


Pour des raisons diverses on peut vouloir interdire la lecture dun fichier aux
utilisateurs nappartenant pas au groupe du fichier. 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 fichier
Lorsquun fichier est supprim du systme de fichier, le rpertoire qui le contient
est galement modifi, car ce dernier contient la liste des fichiers quil hberge. Par
consquent, il nest pas ncessaire dactiver lattribut w sur un fichier pour pouvoir
leffacer, il faut par contre sassurer que cet attribut est actif pour le rpertoire qui le
contient. Dans le cas qui nous proccupe, la commande :
$ ls -ld echange
drwx---r-x
2 vincent
$ chmod g+rwx echange
$ ls -ld echange
drwxrwxr-x
2 vincent
$

users

4096 Nov 20 18:03 echange

users

4096 Nov 20 18:03 echange

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

Petit guide de survie

46

chmod hpi h%i hai , ... hfichieri


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 daffecter
le mode spcifi de manire rcursive aux fichiers contenus dans les sous-rpertoires.
Mais venons-en au fait : certains puristes utilisent ce quon appelle la notation
octale pour positionner les droits dun fichier. 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 afficher le umask
en notation octale :
$ umask
022
$
Cette valeur est le complment par rapport 777. Avec un tel masque les fichiers sont
crs avec les permissions 755.

2.3 Le systme de fichiers

2.3.9

47

Liens

Une des notions un peu troublantes du systme de fichiers dunix est la notion
de lien. Comme on la vu prcdemment, en interne, le systme identifie les fichiers
par un numro : linode.
Liens physiques
Lopration qui consiste relier un fichier (un ensemble doctets sur un disque)
un nom sur larborescence est prcisment la cration dun lien physique. Soit le
fichier ~/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 fichier (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 fichier ventuellement dans un rpertoire
diffrent si ce rpertoire est sur la mme partition que le fichier 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 (figure 2.4 page suivante) que le fichier 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 confirm 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 modifier le fichier 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 fichier en question est strictement
suprieur 1, la commande rm aura pour effet la suppression du lien et non des
donnes.
2. lorsque le nombre de liens physiques est gal 1, rm efface effectivement les
donnes, puisquil ny a plus quun lien unique sur celles-ci.

Petit guide de survie

48

Donnes disque
~
38564

doc

unix

tmp

unix.tex

guide.tex

Figure 2.4 Exemple de liens physiques


Pour tre trs prcis, si le fichier 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 fichier se terminera.

Liens symboliques
Lorsque que lon veut lier un fichier par lintermdiaire dun lien ne se trouvant pas
sur la mme partition que le fichier lui-mme, il est ncessaire de passer par lutilisation
dun lien dit symbolique. Nous allons par exemple crer un lien symbolique sur notre
fichier 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 figure 2.5 page suivante.
On remarquera les particularits dun lien symbolique :
cest un fichier diffrent de celui sur lequel il pointe ; il possde son propre inode :
$ ls -i test.tex
23902 test.tex
$
le fichier contient une rfrence sur un autre fichier, 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 fichier auquel il se rfre ;

2.3 Le systme de fichiers

49

Donnes disque
/
home
vincent

tmp

38564

test.tex

doc
unix
guide.tex

Liens
Physique
Symbolique

Figure 2.5 Exemple de lien symbolique.


un lien symbolique est un fichier 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 effectue sur le fichier sur
lequel il pointe. Par contre la suppression de ce lien obit aux rgles suivantes :
1. la commande rm supprime le lien symbolique lui-mme qui est un fichier
part entire et na pas dinfluence sur le fichier auquel il se rfre ;
2. par consquent, si on supprime le fichier, le lien symbolique existe toujours et
pointe sur un fichier qui nexiste pas.
Enfin 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
fichier ou rpertoire le cas chant.

Petit guide de survie

50

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

2.3.10

Access control list (ACL)

Limites de la gestion des privilges


Nous avons vu partir de la section 2.3.3 page 37 consacre aux privilges sur les
fichiers et rpertoires que par dfaut un systme unix attache trois privilges un
fichier :
1. les privilges de lutilisateur propritaire.
2. ceux du groupe propritaire.
3. ceux des autres.

Par consquent la finesse du rglage des accs ne peut se faire quau niveau du groupe.
En dautres termes pour rendre un fichier 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 fichier 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 fichier 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 modifier le contenu du fichier
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 greffer au projet, il faudrait nouveau lui faire une
demande pour ajouter le nouveau venu au groupe. On voit donc clairement que la gestion
des privilges propose par dfaut dans unix a linconvnient dtre trop statique pour
lexemple prsent ci-dessus.

2.3 Le systme de fichiers

51

Introduction aux ACL


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

/home

ext3

acl,defaults

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 fichier poodle.dat :
$ ls -l poodle.dat
-rw-r--r-- 1 andy users
$

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

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

Examiner les autorisations associes un fichier


Loption -l de la commande ls propose un affichage lgrement modifi lorsque des autorisations ACLs
sont associes un fichier :
$ ls -l poodle.dat
-rw-rw-r--+ 1 andy users
$

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

Petit guide de survie

52

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 fichiers
crs dans le rpertoire courant. En dautres termes, tous les fichiers crs par la suite
seront lisibles et modifiables par lutilisateur muffin.
Attention, la commande de lexemple ci-dessus naccorde pas lutilisateur muffin
de crer des fichiers dans le rpertoire courant.

Enfin, 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 fichier poodle.dat lutilisateur debrah.
Masque ACL
Lorsquau moins un privilge de type ACL a t accord un
fichier, un masque est cr contenant lunion de toutes les autorisations. Ce masque
est construit automatiquement, ainsi :
$ setfacl -m u:dinah:r righthereonthe.floora
$ setfacl -m u:moe:r
righthereonthe.floora

2.4 Processus

$ setfacl -m u:hum:rw
$

53

righthereonthe.floora

Le masque cr et affich 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 modifi pour appliquer une
politique pour tous les utilisateurs. Par exemple pour ne conserver que le droit en
lecture pour tous les utilisateurs ACL, on peut excuter la commande suivante :
$ setfacl -m m::r righthereonthe.floora
$

2.4

Processus

Le systme unix est multi-tche et multi-utilisateur. Le noyau gre lensemble des


processus grce un programme appel lordonnanceur (scheduler). Ce dernier a pour
but daccorder aux processus du temps-cpu, et ceci chacun tour de rle, en fonction
de priorits le cas chant. Ainsi, un processus peut se trouver dans quatre tats :
actif : le processus utilise le cpu
prt : le processus attend que lordonnanceur lui fasse signe
mais galement :
endormi : le processus attend un vnement particulier (il ne consomme pas de cpu
dans cet tat) ;
suspendu : le processus a t interrompu par un signal.
Chaque processus possde un numro qui lidentifie 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 fichier spcial dans le rpertoire /dev (par exemple /dev/tty1 est la

Petit guide de survie

54

premire console en mode texte, sous linux) est associ au terminal, et les communications se font par le biais dappels systme sur ce fichier. 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 diffrentes selon les systmes, il nest donc pas question ici de les passer
toutes en revue (pour a il suffit 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 Specification (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.
On pourra noter que puisque la commande ps est lance pour obtenir la liste des
processus, son pid apparat galement dans la liste (ici pid 1338).
Ceux des autres terminaux
Loption x de la commande ps permet de lister les processus de lutilisateur qui
ne sont par rattachs au terminal courant 9 :
9. Liste non exhaustive par souci de clart.

2.4 Processus

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

55

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 !
Enfin on veut parfois tre en mesure de visualiser la liste de tous les processus
sans critre restrictif de terminal ou dutilisateur. Il y a encore une fois plusieurs voies
pour atteindre ce but. La version de la commande ps de LINUX supporte plusieurs
styles de syntaxes ; nous en donnons ci-dessous deux exemples :
$ ps aux
USER
PID %CPU %MEM
root
1 0.1 0.1
root
2 0.0 0.0
root
3 0.0 0.0
root
4 0.0 0.0
root
5 0.0 0.0
root
210 0.0 0.3
root
221 0.0 0.3
daemon 237 0.0 0.0
root
253 0.0 0.3
root
284 0.0 0.3
$

TTY
?
?
?
?
?
?
?
?
?
ttyS0

STAT
S
SW
SW
SW
SW
S
S
SW
S
S

START
14:11
14:11
14:11
14:11
14:11
14:12
14:12
14:12
14:12
14:12

TIME
0:03
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00

COMMAND
init [5]
[kflushd]
[kupdate]
[kpiod]
[kswapd]
syslogd -m 0
klogd
[atd]
crond
gpm -t ms

Petit guide de survie

56

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 laffichage est quelque peu diffrent. STIME est lquivalent du START, et on a accs
au ppid qui identifie le processus pre dun processus particulier. On remarquera
dans cette liste que tous les processus sont des fils dinit cest--dire lancs par
celui-ci. Ceci lexception dinit lui-mme qui est le premier processus cr.
Personnaliser laffichage
On peut se limiter certaines informations en utilisant loption o de la commande
ps ; cette option permet de spcifier les champs que lon dsire voir safficher, 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
$
naffiche que le pid et la commande dun processus. On a combin ici, loption o avec
loption x vu prcdemment.

2.4 Processus

57

Lien de parent
Loption --forest associe avec la commande prcdente illustre larborescence
des processus. On a isol ici les processus associs une session X ; on voit clairement
grce au dessin sur la partie droite, et la correspondance entre pid et ppid, quelles
sont les filiations 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

Modifier le droulement dun processus

Il existe au moins trois manires de modifier 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 modifier 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.

Petit guide de survie

58

Notons lexistence de la commande renice permettant de baisser la priorit dun


processus une fois quil est lanc. Par exemple, avec la commande :
$ renice -10 -p 4358
4358: old priority 0, new priority 10
$
on change la priorit du processus de pid 4358 en lui affectant 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 dfinir 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 effet darrter
(respectivement dinterrompre) le processus.
La commande kill
Nous passerons ici en revue quelques utilisations de la commande kill. Dans un
cadre trs pratique, il y a trois situations vitales o il est ncessaire de connatre cette
commande :
1. un programme semballe , cest--dire accapare les ressources mmoire ou cpu
du systme, il est alors ncessaire den stopper lexcution ;
2. un programme utilise trop de ressources pour le confort des autres utilisateurs,
il est ncessaire de linterrompre momentanment ;

2.4 Processus

59

3. un programme ne rpond plus aux sollicitations de lutilisateur, il ny a pas


dautres moyen que de linterrompre en lui envoyant un signal de fin dexcution.
Passons en revue ces trois situations en supposant que sur notre terminal la commande ps nous renvoie :
$ ps -o pid,pcpu,pmem,state,cmd
PID %CPU %MEM S CMD
2177 0.0 2.1 S -bash
2243 99.9 99.9 R winword-2005
2244 0.0 1.7 R ps -o pid,pcpu,pmem,state,cmd
$
Anti-emballement
On dcide que le programme winword-2005 prend beaucoup trop de ressources probablement cause dun bug on intervient en dcidant
dliminer purement et simplement ce processus du systme :
$ kill 2243
$
ce qui a pour effet denvoyer le signal TERM au processus de pid 2243. Il se peut
que lenvoi de ce signal soit sans effet 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
effectue 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 effectivement 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
$

Petit guide de survie

60

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 fin
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 afficher des informations par exemple)
mais ne peuvent lire les donnes que leur fournirait lutilisateur.

Ce qui est crit ci-dessus est le comportement quon rencontre gnralement sur un terminal avec la plupart des applications. Il nest par contre
pas inutile de noter que selon quune application intercepte ou ignore les deux signaux particuliers TTOU et TTIN (respectivement criture ou lecture dun processus
en arrire-plan), le comportement pourra tre diffrent.

Les shells supportant le contrle de tches 10 offrent 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 fin de lexcution dEmacs :
$ emacs
qdqsqmlskdjf
fin du progamme emacs
$ qdqsqmlskdjf
10. Ce qui est le cas de la plupart des shells modernes.
11. Sauf si Emacs est lanc en mode texte dans le terminal...

2.4 Processus

61

bash: qdqsqmlskdjf: command not found


$
Arrter le programme
Pour arrter un programme en avant-plan, on peut utiliser la clbre combinaison
de touche Ctrl c (Ctrl-c) :
$ emacs
$

Control + c

Ctrl-C envoie le signal INT au processus en avant-plan dans le terminal.


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

Petit guide de survie

62

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
$

xclock &
xlogo &
xbiff &

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.

2.5

Quelques services

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

2.5 Quelques services

2.5.1

63

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 fichier
au format PostScript sur une imprimante. En fonction du format du fichier initial, il
faudra procder une conversion avec les logiciels suivants :
a2ps convertit un fichier texte en fichier 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 fichier compatible avec limprimante en question (voir figure 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

Dvi

dvips

2
PS

PS

ghostscript

Non PS

Figure 2.6 Impression sous Unix.


lpr : pour soumettre un fichier 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 files dimpression
en fonction des imprimantes disponibles. Seront galement accessibles des options
dpendantes des caractristiques de limprimante (alimentation manuelle, bac A3,
recto/verso, etc.). Renseignez-vous auprs du mssieur qui vous sert dadministrateur
systme.

Petit guide de survie

64

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 spcifier 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 identificateur (le numro indiqu dans la premire colonne des informations
renvoyes par atq) :
$ atrm 1
$

2.5 Quelques services

65

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

2.5.3

Le service cron

cron est un service quivalent ce que le systme dexploitation dit par la socit Microsoft appelle les tches planifies . Linterface utilisateur est la commande
crontab. Pour savoir quelles sont vos tches planifies (dans le jargon unix, on dit
inspecter sa crontab ), on lancera la commande :
$ crontab -l
no crontab for djobi
$
Pour effacer toutes vos tches planifies, la commande suivante suffira :
$ crontab -r
$
Pour dfinir une ou plusieurs tches planifies, 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

: prend des valeurs de 0 59 ;

heures

: de 0 23 ;

jour du mois

: de 1 31 ;

mois

: de 1 12 ;

jour de la semaine

: de 0 7 o 0 et 7 reprsentent le dimanche.

Par exemple la ligne :


10 0 * * 0 rm -rf ~/.wastebasket/*
efface 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.

Petit guide de survie

66

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 enfin que le service cron vous informe
par mail du rsultat de lexcution de votre tche. Voir la page de manuel de crontab
pour de plus amples informations, ainsi que lexemple du chapitre 6 paragraphe 6.4.5
page 202 illustrant une utilisation du service cron pour mettre des images tires au
hasard en fond dcran.

2.5.4

Lutilitaire nohup

nohup permet de lancer une commande qui ne sera pas arrte lorsque lutilisateur
se dconnectera du systme 14 . Lors de la dconnexion, tous les programmes reoivent
en effet le signal HUP, qui a par dfaut leffet 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 fichier 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 fichier nohup.out dans un autre terminal avec la commande tail -f nohup.out et
rpondre aux questions dans le terminal o est lanc la commande en nohup. Par exemple
si on ne dispose pas de wget mais uniquement de lutilitaire ftp, il faudra procder, avant
de lancer le transfert proprement dit, un srie dinteraction avec le programme.
14. Il ne sagit donc par rellement dun service de planification, mais dune commande utile dans
le cadre de la gestion des tches.
15. Notons cependant que certains logiciels sont programms pour dtourner ce signal.

2.5 Quelques services

67

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

16. Le suspense est tout bonnement insoutenable...

Chapitre

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

L des outils lmentaires destins une tche bien spcifique ; 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 effectuer une tche simple
et la connaissance de quelques pices permet de construire ses propres outils. Ce chapitre a pour objet de prsenter les mcanismes qui permettent de faire communiquer
ces programmes entre eux, puis de prsenter les pices de la bote outils les plus
communment utilises sous unix.

69

La bote outils

70

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 signification particulire
pour le shell. Lorsquon veut utiliser ces caractres autrement que pour leur signification spciale, il faut gnralement utiliser le caractre backslash (\) :
$ echo \*
*
$
Sans le backslash, le caractre * aurait t remplac par tous les fichiers du rpertoire courant. Un moyen couramment utilis avec le shell pour protger les caractres
spciaux est dutiliser les caractres quote et double quote ". Le premier vite lexpansion de tout caractre :
$ echo $USER #
$USER #
$
Le deuxime permet au caractre $ de conserver sa signification :
$ echo "$USER #"
lozano #
$

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

3.2

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

Sortie

Processus

Erreur

Figure 3.1 Les trois flux associs un processus


1. le flux de sortie (standard output) par dfaut dirig vers le terminal courant ;
2. le flux derreur (standard error) galement dirig par dfaut vers le terminal
courant ;
3. le flux dentre (standard input) sur lequel transitent par dfaut les donnes
provenant du clavier.

3.2 Redirections et tubes

71

Ainsi, la commande :
$ echo bonjour
bonjour
$
affiche bonjour sur le flux standard. La commande :
$ ls amlkjg
ls: amlkj: No such file or directory
$
affiche le message sur le flux derreur. Et la commande (du shell bash) :
$ read A
hop l`
a saisie par lutilisateur
$
attend la saisie dune ligne sur le flux 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 flux standard, quon pourrait dfinir
de la manire suivante :
tout affichage est envoy par dfaut sur le flux de sortie ;
tout message derreur est envoy sur le flux derreur ;
toute donne peut tre lue depuis le flux dentre.
titre dexemple, la commande grep suit ce modle. Cette commande est destine
ne rcuprer que les lignes dun fichier contenant une chane de caractres :
1. grep affiche le rsultat sur le flux de sortie ;
2. les messages derreurs ventuels sont affichs sur le flux derreur ;
3. grep peut attendre les donnes filtrer sur son flux dentre :
$ grep bof
on recherche la chane bof
saisie par lutilisateur
xxxbofyyy Entre
xxxbofyyy
correspondance : grep affiche la ligne
xxxbifyyy Entre
saisie par lutilisateur
pas de correspondance
On peut indiquer une commande qui attend des donnes sur son flux dentre, la fin
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 flux, 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.

La bote outils

72

3.2.1

Redirections

Il est possible de rediriger les trois flux prsents au paragraphe prcdent, grce
une syntaxe particulire qui varie trs lgrement selon le shell utilis.
Redirection du flux de sortie
On peut rediriger le flux de sortie vers un fichier :
$ 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 fichier test.txt. On peut noter que le
choix du caractre voque la direction du flux vers le fichier. Puis :
$ more test.txt
bonjour
$
La commande more qui a pour but dafficher le contenu dun fichier lcran, permet
ici de comprendre que echo a ralis son affichage dans le fichier test.txt et non
lcran.

Redirection du flux derreur


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

3.2 Redirections et tubes

73

Redirection en mode ajout


Loprateur > cre ou crase le fichier destinataire de la redirection. On peut
cependant utiliser le mode ajout (append) pour ne pas craser un fichier dj
existant :
$ echo bonjour > donnees.txt
$ echo salut >> donnees.txt
$ cat donnees.txt
bonjour
salut
$
Redirection du flux dentre
Lorsquun programme attend des donnes depuis le clavier, on peut lui fournir
directement ces donnes en utilisant le contenu dun fichier. On dit alors quon redirige
le flux 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 fichier, on peut indiquer bc que
les donnes proviennent de ce fichier :
$ cat calcul.dat
2+3*5
$ bc < calcul.dat
17
$
On dit quon a redirig le flux dentre de bc depuis le fichier 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
$

La bote outils

74

loption -s permet de spcifier 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 finir 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 configurs diffremment.

Ce quil faut comprendre ici, cest que mail attend le texte du message sur le flux
dentre. On peut alors rediriger cette entre depuis un fichier 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 fichier msg.txt, la dernire
commande mail peut se traduire par envoyer un mail en lisant les donnes depuis
le fichier msg.txt. On dit alors quon a redirig le flux dentre.
Le trou noir

On trouve gnralement sur les systmes unix un fichier particulier dont le nom
est /dev/null : cest un trou noir qui absorbe toute redirection sans broncher ; ce
fichier est un fichier 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 fichier test les numros identifiant lutilisateur user.
Si lutilisateur nexiste pas le message derreur nest pas affich puisquenvoy dans
/dev/null.

3.2.2

Les tubes (pipes)

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

3.2 Redirections et tubes

Entre 1

75

Entre 2

P1

Entre n

P2
Sortie 1

Pn
Sortie 2

Sortie n

Figure 3.2 Principe des tubes

et :
$ more data-II.txt
bidule
chouette
$
On veut envoyer ces deux fichiers 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 fichiers
data-I.txt et data-II.txt est utilise comme entre de la commande mail (corps
du message). On peut composer l infini 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 flux
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 flux dentre. Notez enfin quon aurait pu crire :
$ sort data-I.txt data-II.txt | mail -s "some data" monpote
$
car sort est capable de trier les fichiers 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

La bote outils

76

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

Toute utilisation srieuse du shell dunix passe par une utilisation frquente des
tubes et redirections. Les utilitaires prsents dans la suite de ce chapitre peuvent se
voir comme des filtres, cest--dire que lon peut considrer quils filtrent le flux de
sortie des programmes auxquels ils sappliquent. En dautres termes, un filtre peut
tre utilis avec un tube puisquil attend systmatiquement des donnes sur son flux
dentre et envoie le rsultat du filtrage sur son flux 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 fichier suivant :
$ cat fichier.dat
Jimi Hendrix 1970
Jim Morrison 1971
Janis Joplin 1969
$

3.3.1

Afficher

Le rle de la commande cat est de concatner (concatenate) plusieurs fichiers. Le


rsultat de cette concatnation tant envoy sur le flux de sortie. Ainsi :
cat fichier1 fichier2 ... fichiern
concatne les fichiers de 1 n et les affiche sur le flux standard. Le filtre more peut
tre utilis lorsque laffichage est trop long pour le terminal. Les fichiers sont alors
affichs page par page :
cat fichier1 fichier2 | more
Selon les systmes on peut utiliser la commande less 1 (plus ergonomique) la place
de more.
1. Encore un jeu de mots dinformaticien : le remplaant de lanctre more est less, ah-a ah-a,
assez ri... Japprends linstant que la nouvelle volution de more sappelle most, arf, arf, arf... hum,
un peu de srieux.

3.3 Les outils de base

3.3.2

77

Trier

Cest la commande sort :


$ sort fichier.dat
Janis Joplin 1969
Jimi Hendrix 1970
Jim Morrison 1971
$
Par dfaut les lignes sont classes selon la premire colonne. On peut classer selon les
noms :
$ sort -k2 fichier.dat
Jimi Hendrix 1970
Janis Joplin 1969
Jim Morrison 1971
$
Loption -k pour key en anglais spcifie 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 dafficher une ou plusieurs colonnes dun flux 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 spcifier un autre
avec loption -d (pour dlimiteur). Ici on a utilis le caractre espace comme dlimiteur. On a ensuite spcifi les champs (option -f pour field) 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

La bote outils

78

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


$ cat groups.dat
The Experience
The Doors
Kosmik Band
$
On peut alors fusionner ce fichier avec notre fichier dtoiles filantes :
$ 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 fichiers 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 flux de donnes :
$ wc fichier.dat
3
9
$

54

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

3.3 Les outils de base

79

Attention, mme si aujourdhui un caractre est encore cod sur un octet, on devrait
trouver lavenir de plus en plus de fichiers 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 dafficher la
tte ou la queue dun fichier ou du flux dentre. Par exemple :
$ head -n 2 fichier.dat
Jimi Hendrix 1970
Jim Morrison 1971
$
affiche les deux premires lignes de notre fichier. Loption -c permet dafficher les n
premiers octets :
$ head -c 7 fichier.dat
Jimi He$
De manire analogue tail affiche la fin dun flux :
$ tail -n 1 fichier.dat
Janis Joplin 1969
$
Loption -c est galement disponible. La nuance avec la commande tail est quen
utilisant un nombre de lignes n (ou doctets) commenant par +, tail affiche les
donnes partir de la ne ligne (ou ne caractre). Ainsi :
$ tail -n +2 fichier.dat
Jim Morrison 1971
Janis Joplin 1969
$
affiche le fichier fichier.dat partir de la deuxime ligne. Une autre utilisation de
la commande tail est la surveillance dun fichier qui grossit. En considrant quun
fichier 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 laffichage avec Ctrl

La bote outils

80

3.3.7

Utilitaires disques et fichiers

Chercher
Pour chercher un fichier ou un rpertoire on peut utiliser la commande find. Cette
commande est trs puissante et permet de chercher des fichiers avec de trs nombreux
critres (type de fichier, nom, taille, permission, propritaires, date de modifications,
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 fichiers dont le nom est core partir du rpertoire priv.
$ find . -name "*.tex"
./guide-unix.tex
$

Celle-ci trouve les fichiers dont lextension est .tex partir du rpertoire courant.
Et :
$ find ~/cours -type d -a -name "po*"
/home/equipe/lozano/cours/pov
/home/equipe/lozano/cours/pov.bak
/home/equipe/lozano/cours/images/pov-hof
$
trouve tous les rpertoires dont le nom commence par po. Loption -a couple les
critres par un et . Cette option est implicite et peut donc tre omise.
La commande find peut-tre particulirement coteuse lorsquon doit scanner
toute larborescence. Cest pour cette raison que certains unix proposent la commande locate qui utilise un fichier de donnes contenant lemplacement de tous les fichiers
sur le systme. Ce fichier 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 fichier de donnes nest pas jour
en temps rel et ne contient pas dautres informations que les noms des fichiers (et pas
leur contenu).

Obtenir des informations


La commande du donne la taille quoccupe un rpertoire ou un fichier.

3.3 Les outils de base

81

$ du -b guide-unix.tex
71680
guide-unix.tex
$
Loption -b affiche en octets (byte). Si largument de cette commande est un rpertoire le calcul doccupation disque est fait rcursivement sur tous les fichiers 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 afficher 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

Archivage
Avertissement : cette section fera sans doute faire des bonds aux puristes qui diront juste titre que les seules commandes standardises par Posix sont pax et
compress. Jai choisi ici de prsenter tar et gzip (et mme bzip2) car il sagit de commandes trs rpandues et galement parce que jai lhabitude de les utiliser !

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

La bote outils

82

1. larchivage proprement dit qui consiste rassembler plusieurs fichiers dans un


seul, qui constitue larchive ;
2. la compression de larchive pour en optimiser la taille. Cette opration doit tre
effectue sauf dans de rares cas o les fichiers archivs sont dj compresss (tas
de fichiers 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 fichiers 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 fichier (file) (et non un enregistrement sur une bande magntique) ;
loption v (verbose) permet dafficher les fichiers (et leur chemin) en cours darchivage ;
le nom de larchive suit (unix.tar) puis le nom du rpertoire contenant les
fichiers archiver ;
la commande gzip compresse larchive en la renommant avec le suffixe .gz.
Lopration de dsarchivage se droule en utilisant les commandes gzip et
tar dans lordre inverse. Par exemple, pour dcompacter larchive prcdente dans le
rpertoire ~/tmp :
2. gzip est devenu le standard de facto de compression sous unix ; malgr tout, on ne trouve sous
certains systmes que la commande compress qui suit peu ou prou la mme syntaxe que gzip. Notons
galement que gzip sera moyen terme probablement supplant par bzip2 qui permet dobtenir un
meilleur taux de compression.

3.3 Les outils de base

83

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

disques.fig
ecoute.sh
fichier.dat

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

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

Notez loption -d de gzip pour dcompresser, et loption x de tar pour extraire


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

La bote outils

84

3.4

Le shell en tant que langage

Jusqu maintenant nous avons vu le shell comme un interprteur de commandes


qui se contente dexcuter les commandes quon lui passe. En ralit le shell est un
langage de programmation assez volu permettant dautomatiser un grand nombre
de tches quotidiennes. Le shell (et nous parlerons ici essentiellement du shell bash)
dispose donc de variables, de tableaux, de structures de contrle (if, while, for), et
galement de la notion de fonctions. Toutes ces fonctionnalits sont dtailles au
chapitre 5.
Nous vous prsenterons ici par le biais dune tude de cas deux fonctionnalits
intressantes du shell : la substitution de commande et la boucle pour . Le problme
est le suivant : suite une erreur lors dun transfert de fichier, on a dans un rpertoire
une liste de fichiers 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

Afficher 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 affichage 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 laffichage, suivie dun nombre variable darguments. Par exemple :
$ printf "%d est un nombre pseudo-al
eatoire\n" $RANDOM
14234 est un nombre pseudo-al
eatoire
$
Ce premier exemple peut tre traduit en franais par : je souhaite afficher un entier
(%d) en base 10, suivi de la phrase est un nombre , suivie dun saut de ligne (\n).
Dans lexemple suivant le 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 afficher un entier en base dcimale (on peut galement utiliser %o pour
la base octale et %x pour la base hxadcimale) ;

3.4 Le shell en tant que langage

85

%f pour afficher un nombre virgule flottante ;


%s pour afficher une chane ;
Par ailleurs, chacun de ces types de donnes accepte un certain nombre de modificateurs. En voici quelques-un :
$ printf "==[%010d]==\n" $RANDOM
==[0000007052]==
$
pour afficher un entier sur 10 caractres combls avec des zros si ncessaire.
$ printf "==[%-20s]==\n" $USER
==[lozano
]==
$
pour une chane produite sur 20 caractres aligne gauche (signe - ). Dautres
exemples devraient vous venir lesprit aprs avoir lu le fantastique manuel .

3.4.2

Substitution de commande

La substitution de commande est un mcanisme permettant dexploiter la sortie dune commande dans lappel dune autre commande. La syntaxe permettant de
raliser la substitution est $(...). Pour comprendre comment cela se passe, soit la
commande suivante, affichant le nombre de ligne du fichier fichier.dat :
$ wc -l fichier.dat
3 fichier.dat
$
On se dbarrasse pour lexemple du nom de fichier :
$ 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 quaffiche la commande wc -l ..., cest--dire 3, puis la commande echo ralise
laffichage. Avec printf on crira :
$ printf Il y a %d musiciens "$(wc -l < fichier.dat)"
$

La bote outils

86

Un autre exemple : sachant que la commande date affiche la date sous un format que
lon peut dfinir :
$ date +%h%d
Dec15
$
Il est possible de sauvegarder un fichier comme suit :
$ cp source.cc source.cc.$(date +%h%d)
$
La commande cp ci-dessus copie le fichier source.cc en un fichier dont le nom est
source.cc. concatn avec ce que renvoie la commande date.
$ ls source.cc*
source.cc
source.cc.Dec15
$
Il existe une autre syntaxe pour la substitution de commande. En lieu et place de la
forme $(commande), certains vieux shells ne disposent que de la syntaxe utilisant
le backquote () :
commande
Quon se le dise...

3.4.3

La structure for de bash

Le shell bash propose une structure de contrle nomme for que lon peut traduire
par pour chaque , la syntaxe en est la suivante :
for variable in liste ; do

com1 ; com2 ; ... ;

done

On peut donc crire quelque chose de la forme :


$ for F in *.fig ; do echo "$F.tmp" ; done
arborescence.fig.tmp
disques.fig.tmp
flux.fig.tmp
pipes.fig.tmp
$
On affiche 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 fichier dont le nom contient
un espace.

3.4 Le shell en tant que langage

87

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 fichier 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
fichiers 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 fichiers 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 fichiers on peut imaginer la commande suivante, qui rassemble les concepts vus dans ce paragraphe :
$ for F in $(find . -name *JPG) ; do
Entre
et?> mv "$F" "$(echo $F | tr A-Z a-z)"; done
$
Ce qui peut se traduire en franais par : tous les fichiers finissant par JPG doivent
tre renommer en utilisant le rsultat de laffichage du nom original filtr 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
fichier contenant un espace ou un saut de ligne). Par ailleurs, il est bon de savoir que ce
genre de tches (copie/dplacement de fichiers en salve) peuvent tre ralises de manire
sre (en limitant les risques dcrasement de fichiers) 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 affiche alors un autre prompt qui se
distingue du prompt habituel, pour informer lutilisateur que la commande est incomplte.
La manire dafficher ce prompt est dfinie par la variable PS2. Dans la suite de ce document
nous nindiquerons plus la pression sur la touche Entre dans les exemples.

La bote outils

88

3.5 grep et la notion dexpressions rgulires


La commande grep est une commande clbre dunix et permet dafficher les
lignes dun flux correspondant un motif donn. Par exemple :
$ grep Hendrix fichier.dat
Jimi Hendrix 1970
$
ou :
$ grep Jim fichier.dat
Jimi Hendrix 1970
Jim Morrison 1971
$
Les motifs en question (Hendrix et Jim) dans les deux exemples prcdents se nomment en jargon unix 3 une expression rgulire (ou une expression rationnelle 4 ) (regular expression parfois abrg en regexp). Ltude de la thorie des expressions rgulires
pourrait faire lobjet dun document de la taille de ce guide de survie. Voici cependant sous forme dun tableau quoi correspondent quelques-uns des motifs dune
expression rgulire.

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

dsigne nimporte quel caractre


zro ou plusieurs fois llment prcdent
zro ou une fois llment prcdent
une ou plusieurs fois llment prcdent
correspond au dbut de la ligne
correspond la fin 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
3. Et plus gnralement dans le domaine de ltude des langages informatiques.
4. Jutilise pour ma part la premire forme, ne pas taper svp...
5. Dans cette expression, n ou m peuvent tre omis.

3.5 grep et la notion dexpressions rgulires

89

Jim Morrison 1971


$
rcupre les lignes finissant 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 :
$ 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 dfini comme
un ensemble de caractres parmi les lettres, les chiffres et le caractre soulign _ (underscore).

La bote outils

90

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 naffiche 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 fichier comme argument,
mais elle peut bien videmment faire la correspondance sur son flux 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

filtre 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 enfin que la commande ps -fu lozano aurait donn un rsultat
identique...

3.6 awk
On peut voir awk 6 comme un filtre permettant deffectuer des modifications sur
les lignes dun flux ; 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 modifier les lignes slectionnes
comme un ensemble de champs ( linstar de cut). La syntaxe gnrale dun programme awk est une suite de rgles dfinies comme un couple de motifs et dactions :
les motifs permettent de slectionner des lignes dans le flux et sont :
soit des expressions rgulires et doivent tre dlimits par des / (par exemple
/abc/) ;
soit des expressions simples (galit, ingalit,...) ;
6. Du nom de ses auteurs initiaux en 1977, Alfred V. Aho, Peter J. Weinberger, and Brian W.
Kernighan

3.6 awk

91

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 signification 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 spcifi) et on affiche
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 spcifie 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 effectuer un appariement de motif uniquement sur un
champ particulier, grce loprateur ~ de awk :
$ awk $2 ~ /lin$/ {print "Cette ch`
ere "$1"..."} fichier.dat
Cette ch`
ere Janis...
$
Loprateur ~ permet en effet de filtrer le flux avec une correspondance sur un champ
(ici le 2e doit finir 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.

La bote outils

92

on a ajout pour chaque ligne la valeur du 3e champ la variable s. Et dans la


clause END (qui nest excute qu la fin), on divise par NR le nombre denregistrements (lignes) du flux (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 flux. 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 fichier. La
syntaxe est alors :
sed s/recherche/remplace/ fichier
ou
sed s/recherche/remplace/ < fichier
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.
Enfin notons que, comme awk, sed renvoie son rsultat sur le flux de sortie.
En imaginant que lon veuille faire la mme opration sur plusieurs fichiers, 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 spcifis. Considrons
lexemple suivant : partir de notre clbre fichier fichier.dat contenant :
fichier.dat
Jimi Hendrix 1970
Jim Morrison 1971
Janis Joplin 1969

3.7 sed

93

on veut construire la liste :


Hen1970
Mor1971
Jop1969
Soit lexpression rgulire suivante :
^[A-Za-z]* [A-Z][a-z]{2}[a-z]* [0-9]{4}
cette expression est capable de reconnatre :
un dbut de ligne suivi dune suite de caractres en minuscules ou en majuscules
([A-Za-z]*) ;
suivie dun espace ;
suivi dune majuscule (([A-Z]), suivie de deux minuscules ([a-z]{2}), suivies
dun nombre quelconque de lettres en minuscules ([a-z]*) ;
suivi dun espace ;
suivi dexactement quatre chiffres ([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 :

La bote outils

94

^[A-Za-z]* \([A-Z][a-z]\{2\}\)[a-z]* \([0-9]\{4\}\)


pour la partie gauche de la commande s...

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

3.8

tudes de cas

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

3.8.1

Manipuler la liste des utilisateurs

Sur un systme unix, on peut obtenir la liste des utilisateurs potentiels du systme
grce la commande getent passwd 8 . Cette commande renvoie le fichier 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 flux 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 identifier) de lutilisateur ;
le numro (gid pour group identifier) de lutilisateur ;
son nom en clair ;
son rpertoire racine ;
8. Sur votre systme il peut sagir dune autre commande...

3.8 tudes de cas

95

son shell de connexion.


On peut noter que ces champs sont spars par des : . Le nombre dutilisateurs
potentiels est donc le nombre de lignes renvoyes par la commande getent :
$ getent passwd | wc -l
277
$
Pour obtenir la liste des utilisateurs dont le groupe principal est un groupe particulier, par exemple le groupe numro 1300, on peut agir comme suit :
$ getent passwd | grep -w 1300 | cut -d: -f5
MERLE Geraldine
ESCOFFIER Carole
GACON-LOCATELLI Anne
BOYAUD Xavier
SIGUIER Vincent
LASNIER Christophe
PEROCHE Jerome
... etc ...
$
on fait une recherche de toutes les lignes contenant la chane 1300 (ce qui nest pas
exactement ce que lon cherche, je vous laccorde, mais lisez la suite), et pour ces
lignes, on affiche le 5e champ (en prcisant que le sparateur est : ). Pour classer
par ordre alphabtique, il suffit de rajouter un tube avec sort :
$ getent passwd | grep -w 1300 | cut -d: -f5 | sort
ALBERT-GONDRAND Johanne
BARNEOUD Julien
BAROQUE Philippe
ARTOS Romain
...
$
Enfin si on voulait afficher 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
...
$

La bote outils

96

Les lecteurs attentifs auront sans doute not que le filtre 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 field separator )...

3.8.2

Envoyer des mails

Pour faire ce quon appelle du mailing (envoyer le mme message plusieurs


utilisateurs), on peut crer deux fichiers :
destinataires contenant les adresses lectroniques des destinataires, et :
message contenant le message envoyer.
On peut crer destinataires manuellement ; on peut galement le crer automatiquement, par exemple les destinataires groupe 1300 pourraient tre construits
comme suit :
$ getent passwd | awk -F: $4 == 1300 { print $1 } > destinataires
$
Lenvoi des messages est ralis grce une boucle for :

$ for U in $(cat destinataires); do\


et?> mail -s "salut" $U < messages
et?> done
$
Si la commande mail de votre systme est capable denvoyer des messages plusieurs
utilisateurs la fois, vous pourriez galement crire :
$ mail -s "salut" $(getent passwd | awk -F: $4 == 1300{print $1})
$

3.8.3

Estimer loccupation de certains fichiers

Pour estimer la taille dun certain type de fichier (comme les images, les fichiers
PostScript, ...) on peut procder comme suit : tout dabord rechercher ces fichiers
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
...
$

3.8 tudes de cas

97

qui donne la liste de tous les fichiers PostScript (extension ps) dans la zone de lutilisateur. La version gnu de find permet galement dafficher les caractristiques des
fichiers 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 fichier, et %k pour sa taille
arrondie en kilo-octets (voir laide de la commande find). Grce un tube avec awk
on peut afficher les fichiers 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 fichiers :
$ find ~/ -name "*.ps" -printf "%k\n" |
et?> awk {taille+=$1}END{print taille}
52202
$
Pour finir si on voulait effacer tous ces fichiers, ou seulement ceux dont la taille est
suprieure un seuil donn, il suffirait de procder comme suit :
$ find ~/ -name "*.ps" | xargs rm -f
$
Sans argument particulier, find affiche la liste des fichiers rpondant au critre. La
commande xargs passe en argument de la commande qui la suit (ici rm -f) le flux
quelle reoit en entre. Donc ici on va excuter rm -f avec comme argument tous les
fichiers renvoys par la commande find.
Voici un autre exemple dutilisation de la commande xargs : supposons quon
veuille chercher dans quel fichier include (les fichiers entte du langage C) est dfini
lappel systme gethostbyname 9 . Pour ce faire on va chercher tous les fichiers dont
lextension est .h du rpertoire /usr/include et de ses sous-rpertoires :
9. Encore un exemple farfelu lorsquon sait que man gethostbyname donne linformation recherche.

98

La bote outils

$ 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 fichiers 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 fichiers.
Un autre forme juste pour confirmer lpigraphe de la prface :
$ grep --include=*.h -rw gethostbyname /usr/include
$
demande grep de faire une recherche rcursive (-r) dans le rpertoire spcifi en
dernier argument (/usr/include/) en nexaminant que les fichiers dont le nom finit
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
configuration 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 diffrents outils et
logiciels que vous serez susceptible de rencontrer.

Chapitre

Sommaire
4.1
4.2
4.3
4.4
4.5

Concepts connatre
Quatre grands classiques
Outils de communication dUnix
Courrier lectronique
Le oube

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

e protocole rseau TCP/IP a t intgr au dbut des annes 80, dans la


L
branche BSD dunix. On trouve donc parmi les utilitaires standard des outils axs
sur la communication entre utilisateurs, le transfert de fichiers, laccs des machines

distantes, etc. Ce chapitre propose tout dabord un aperu du concept dadresse IP


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

99

Communiquer !

100

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


identifier 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
256256256256 = 2564 = 4294967296 soit plus de quatre milliards de machines 1 .
Aujourdhui les rseaux utilisent IP version 4 pour laquelle les adresses sont codes sur 4 octets comme expliqu ci-dessus. Cependant, bien que quatre milliards
dadresses peuvent paratre suffisants pour identifier 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 trafic rseau.
Le domaine racine est not . ; le point sert galement de sparateur de sousdomaine ( linstar du / pour les rpertoires). Sous le domaine racine existe un certain
nombre de sous-domaines :
un domaine pour chaque pays, par exemple fr pour la France, de pour lAllemagne, es pour lEspagne, etc.
1. En ralit une partie des ces adresses sont dites prives cest--dire quelles sont rserves
un usage interne et ne sont donc pas visibles de lextrieur.

4.1 Concepts connatre

101

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

gnu
www

ftp

mekanik

fr
freejazz

dolphy

ayler

lip6
ftp

Figure 4.1 Arborescence de domaine DNS.


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

4.1.3

Quelques utilitaires rseau

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

102

Communiquer !

ping
La commande ping permet, laide dun protocole particulier 4 , dobtenir un cho
dune machine distante, et ainsi de savoir si elle est susceptible de pouvoir changer
des informations avec la vtre. Sa syntaxe est la suivante :
ping machine_distante
Par exemple
$ ping ftp.lip6.fr
ftp.lip6.fr is alive
$
host
host permet dobtenir ladresse IP dune machine daprs son nom et inversement.
La syntaxe est :
host nom_machine ou adr_IP_machine
Par exemple pour la rsolution directe :
$ host ayler.freejazz.fr
ayler.freejazz.fr has address 145.23.6.5
$
Et pour la rsolution inverse :

$ host 145.23.6.5
5.6.23.145. IN-ADDR.ARPA domain name pointer ayler.freejazz.fr
$
On trouvera dans les commandes nslookup et dig des fonctionnalits plus volues.
La dernire est plus simple dutilisation que la premire et permet une meilleure
intgration dans les scripts shell.

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

4.1 Concepts connatre

103

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

Communiquer !

104

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
effet 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 confiance) en
utilisant expressment le serveur de nom du domaine zeuhl.org dont ladresse est
indique.
Le mme type de requtes peut tre effectu 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]
$

195.83.118.1

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


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

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 deffectuer 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 (file transfert protocol ) permet dchanger des fichiers entre deux machines
du rseau. Lapplication cliente permet de se connecter sur la machine distante et

4.2 Quatre grands classiques

105

dy dposer (upload ) ou dy rcuprer (download ) des fichiers. Il existe des clients


graphiques pour effectuer les transferts, nanmoins il est bon de connatre linterface
basique qui est une interface texte. Sa syntaxe est la suivante :
ftp machine_distante
Supposons quon dispose dun compte ftp dont le login est albert avec un mot de
passe donn :
$ ftp ayler.freejazz.fr
Connected to ayler.freejazz.fr
220- Salut gar
con !
Name (albert.freejazz.fr:stundher): albert
saisie du login
331 Password required for ayler.
Password: saisie du mot de passe
230 User albert logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
$
Dans lchange entre le client et le serveur on notera qu chaque requte le serveur
rpond avec un code dfini 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 fichier peut se faire dans deux modes :
ascii utilis pour transfrer des fichiers 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 fichier, dans le doute on utilisera
ce mode.
5. Faire help pour avoir la liste des commandes disponibles.

Communiquer !

106

Les deux modes de transfert (binaire ou Ascii) permettent de transfrer correctement un fichier texte unix vers un systme Windows ou MacOs, et inversement.
En effet, sur ces trois familles de systme (unix, MacOs et Windows) le caractre de saut
de ligne est cod diffremment : 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 diffrences, tandis
que le mode binaire rcupre chacun des octets sans traitement particulier.

On peut donc transfrer un fichier en mode ascii comme suit :


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

ftp> bye
221 Goodbye.
$
Les clients ftp disposent gnralement des commandes suivantes :
mget

: pour rcuprer plusieurs fichiers en mme temps ;

prompt : dsactive les confirmations demandes lutilisateur lors dun mget ;


hash

: affiche un # tous les kilo-octets pour indiquer lavancement du transfert ;

!cmd : excute cmd sur la machine locale ;


...
Notez enfin que toutes ces commandes peuvent tre abrges (e.g. prom la place de
prompt).
6. Certains serveurs peuvent dailleurs vous reprocher votre manque de politesse, si vous utilisez
une autre commande...

4.2 Quatre grands classiques

107

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

4.2.2

telnet et rlogin

telnet et rlogin sont galement des protocoles client/serveur et proposent un service


de connexion pour utiliser les ressources (processeurs, mmoire, disque, etc.) dune
machine distante. Cette dernire doit excuter un serveur telnet ou rlogin pour
pouvoir proposer le service. Une session se prsente alors sous cette forme :
$ telnet mekanik.zeuhl.org
nom de la machine distante
Trying 123.45.67.89...
Connected to mekanik.zeuhl.org (123.45.67.89).
Escape character is ^].
Green Hat Linux release 16.0 (Klimt)
Kernel 5.2.5-15smp on an i986
login: stundehr
passwd:
saisie du mot de passe
mekanik:~>
prompt de la machine distante
Notez quil faut bien sr avoir un compte utilisateur sur la machine distante. Une fois
connect on dispose dun terminal excutant un shell particulier ; on peut donc passer
des commandes au systme distant. Pour effectuer des connexions en mode graphique
on se reportera au paragraphe 6.4.4.
rlogin fonctionne de manire identique telnet la diffrence 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 confiance 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 fichier .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:~>

Communiquer !

108

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

4.2 Quatre grands classiques

109

Pour mettre en application le chiffrement par cl publique dans le cadre de ssh, on


procde comme suit :
1. cration du couple de cls prive et publique ;
2. diffusion 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 laffirmative
il gnre un nombre alatoire A quil chiffre 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 dchiffrer 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 dchiffr (qui doit correspondre au nombre A) au
serveur ;
4. le serveur compare la rponse du client 9 au nombre quil a lui-mme gnr. Si
et seulement si les deux informations sont identiques laccs est autoris.
Cration du couple de cls
On cre la cl prive et la cl publique grce la commande suivante :
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/lozano/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/lozano/.ssh/id_rsa.
Your public key has been saved in /home/lozano/.ssh/id_rsa.pub.
The key fingerprint is:
e2:bb:3b:82:56:da:34:02:d4:85:f3:b3:4b:b9:7b:1e stundehr@mekanik
[...]
$
Dans la squence ci-dessus, on doit saisir une pass phrase qui vous sera demande ltape 3 pour que le client accde la cl prive. Il est possible ici de
laisser cette phrase vide ; le client ssh aura alors accs votre cl prive sans quon vous
demande de mot de passe. Si une phrase secrte est saisie, il sera ncessaire de passer
par un agent ssh (cf. 4.2.3 page 111) qui vous vitera de saisir cette phrase chaque
connexion.
8. Rappelez-vous quon a dpos la cl publique sur ledit serveur...
9. En ralit ce sont les signatures MD5 qui sont compares.

Communiquer !

110

Votre rpertoire contient dsormais deux fichiers (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 fichier au


moment de lexcution de la commande ssh-keygen.
Diffusion de la cl publique
La diffusion de la cl publique consiste dposer le contenu du fichier correspondant dans le fichier ~/.ssh/authorized_keys du serveur sur lequel on veut se
connecter. Il existe plusieurs mthodes pour faire cette opration. En supposant la
configuration suivante :
machine locale
utilisateur

free.jazz.org
ayler

machine distante
utilisateur

cool.jazz.org
miles

voici une mthode 10 qui fonctionne si le fichier 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 fichier authorized_keys 11 :
$ mkdir .ssh
$ chmod go-rwx .ssh
$ mv clef.pub .ssh/authorized_keys
$
Si le fichier existe dj, on remplacera la dernire commande par :
$ cat clef.pub >> .ssh/authorized_keys
$ rm clef.pub
$
qui ajoute au fichier authorized_keys le contenu de la cl publique copie sur le
serveur. Pour les r3b3lz , on peut aussi excuter la commande depuis le client :
$ ssh miles@... < ~/.ssh/id_rsa.pub "cat - >> ~/.ssh/autorized_keys"
$
10. La commande scp est prsente plus loin la section 4.3.6 page 115.
11. On suppose ici, par souci de clart, que / est le rpertoire de travail.

4.2 Quatre grands classiques

111

Cette commande (dans laquelle jai remplac le nom de la machine distante par [...] )
excute sur le serveur distant la commande :
cat - >> ~/.ssh/authorized_keys
qui elle, attend sur son entre des donnes qui seront ajoutes au fichier 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 simplifier 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
fichier ~/.ssh/id_rsa.
partir de maintenant et jusqu la fin de la session,
vous devriez pouvoir vous connecter sur votre serveur
sans saisir de mot de passe (ouf...)

Communiquer !

112

Quelques petites choses que vous aimeriez faire :


lister les cls gres par lagent : ssh-add -l ;
effacer toutes les cls mmorises par lagent : ssh-add -D ;
changer la phrase secrte associe une cl :
ssh-keygen -p -Phanciennei -Nhnouvellei -f hfichieri
remplace lhanciennei phrase par une hnouvellei pour la cl prive stocke dans
le hfichieri.
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 modifier le dmarrage de votre session pour automatiser ce
dverrouillage.

4.3

Outils de communication dUnix

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

4.3.1

who

who permet dobtenir la liste des utilisateurs connects sur le systme. Il sagit des
utilisateurs connects sur la console (lcran situ physiquement cot de la machine),
ou par telnet, ou par rlogin, etc.
$ who
albert
albert
stundehr
$

console
pts/0
ttyp1

Mar 20 17:04
Mar 20 17:04
Mar 20 17:28

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

4.3 Outils de communication dUnix

4.3.2

113

Changer didentit

La commande su permet de devenir un autre utilisateur. Il faut bien sr connatre


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

4.3.3

write

write envoie un message particulier sur le terminal dun utilisateur :


$ write stundehr
bonjour mon gars
Ctrl-d pour finir le message
$
Un utilisateur peut tre spcifi 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

finger

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 :

Communiquer !

114

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

4.3.5

talk

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

4.3 Outils de communication dUnix

Utilisateur
Machine

: albert
: ayler.freejazz.fr

115

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 fin la session, et la combinaison Ctrl-l


rafrachit lcran, ce qui est parfois utile.

4.3.6

remote commandes

Nous avons dj vu une commande de la famille r (r pour remote cest--dire


distance ) : rlogin. Il existe deux autres commandes de ce type : rcp permettant
de copier un fichier 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 fichier dune machine une autre :


scp utilisateur@machine:fichier fichier_dest
Par exemple :
$ rcp ayler@mekanik.zeuhl.org:/home/ayler/ghost.mp3 .
$

Communiquer !

116

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 spcifier un autre utilisateur pour la connexion.

Le courrier lectronique 13

4.4

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 identifie par une adresse de la forme :
nom@domaine
La partie domaine peut dsigner une machine existante, mais la plupart du temps
dsigne un domaine gnrique, comme par exemple dans :

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

4.4 Courrier lectronique

4.4.2

117

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

Communiquer !

118

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 fichier 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
fichier :
/.forward
\stundehr
albert@ayler.freejazz.fr
Notez lutilisation du \ pour viter une rcursion sans fin.
Tout ce qui est racont ici au sujet de lacheminement du courrier laide du fichier
.forward ne sera effectif que si la machine unix du rseau local sur laquelle on
cre le .forward est effectivement 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/fichier
Par exemple dans lurl :
http://www.freejazz.fr/dolphy/horns/bassclarinet.jpg

4.5 Le oube

119

le protocole est http (hypertext transfert protocol, le protocole de transfert hypertexte


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

4.5.2

Wget laspirateur

wget est un utilitaire du projet gnu permettant le tlchargement de fichiers en


utilisant le protocole ftp ou http. wget effectue 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 fichier bassclarinet.jpg. Mais cet utilitaire est particulirement utile
pour tlcharger plusieurs fichiers. 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 fichier index.html du rpertoire machin/chose ;
2. tous les liens apparaissant dans ce fichier index.html ; cest la signification 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
fichier 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 finir 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

Communiquer !

120

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 fichiers lexception de tous les autres liens de la page
nomme chose.html.
Notons que pour les commandes transfrant plusieurs fichiers, wget crera de luimme sur la machine locale, un rpertoire pour la machine hte contenant le cas
chant, dautres rpertoires apparaissant dans lurl. Pour viter cela, on pourra faire
appel aux options :
-nH ou --no-host pour ne pas crer de rpertoire correspondant la machine
hte ;
-nd ou --no-directories pour ne pas crer de rpertoire du tout ;
--cut-dirs=nombre pour viter de crer nombre niveaux dans larborescence
de rpertoires.
Par exemple :
$ wget -nH --cut-dirs=1 -r -l1
http://www.freejazz.fr/dolphy/horns/
crera le rpertoire horns dans le rpertoire courant pour y sauver les fichiers 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 fins
quelle que soit lexigence de la requte.

Dautres utilitaires effectuant 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 :
flche bas : lien suivant dans la page ;
flche haut : lien prcdent ;
flche droit : suivi du lien ;
flche gauche : dernier lien dans lhistorique ;
En outre les touches :
d : permet de tlcharger (download ) un fichier dsign par le lien courant ;
z : permet dinterrompre le tlchargement ;

4.5 Le oube

121

g : permet daller (go) vers une autre url ;


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

Conclusion
Ce (court) chapitre a eu pour but de prsenter les utilitaires ayant trait la
communication sous unix. Il est intressant de noter que tous les outils autour du
transfert de donnes, de messagerie instantane ou diffre, 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.

Chapitre

Sommaire
5.1
5.2
5.3
5.4

diter un fichier
Faire des scripts en shell
Makefile
Faire des projets en langage C

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

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


vit quil est idal de raliser sous un systme unix. Il dispose en effet dune
palette impressionnante doutils ddis une tche spcifique 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 fichier, ce pr-requis fait lobjet de la premire section de ce chapitre.

123

Dvelopper !

124

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

5.1

diter un fichier

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

5.1.1

Sans diteur

Mme si cela reste rare, il peut arriver davoir crer un fichier 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 fichier 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 fins 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
a Entre

attente de donnes destines bonjour.txt

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

5.2 Faire des scripts en shell

Entre
Ctrl
d

125

caractre de fin de fichier

Ces mthodes ne permettent videmment pas de modifier le contenu du fichier cr,


autrement quen lcrasant avec de nouvelles donnes.

5.1.2

Avec un diteur

Deux diteurs sont trs rpandus sur les systmes unix, il sagit de vi (prononcer
vi ae ) et Emacs (prononcer et max ou i max ). Les paragraphes 6.2 page 176
et 6.3 page 178 prsentent respectivement ces deux diteurs. Dans limmdiat voici ce
quil faut savoir pour diter un fichier 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).
s
Les menus
Pour charger un fichier existant, utilisez la commande Ctrl x
Files/Save Buffer et Files/Open File... vous permettront deffectuer galement
ces oprations.

5.2

Faire des scripts en shell

Cette section a pour but dexposer les rudiments de la programmation en shell.


Le shell utilis est bash. Cest le shell dvelopp par le projet gnu. Il incorpore les
fonctionnalits du shell sh ainsi que certaines tires des shells csh et ksh. La modeste
exprience de lauteur a montr quil est ncessaire dexprimenter pour parvenir
ses fins 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.

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

Dvelopper !

126

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 fin 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 fichier texte contenant une liste de commandes. Par
exemple, un fichier bidule contenant la commande :
bidule
echo bonjour
est un script shell ! Pour excuter ce script on lance linterprteur de commande avec
le fichier comme argument :

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

5.2 Faire des scripts en shell

127

Ces deux oprations permettent dutiliser le script en lappelant directement comme


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

5.2.3

Variables

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

Dvelopper !

128

#!/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 affect de valeur. Cette variable est considre comme
tant vide lexpansion :
varvide.sh
#!/bin/bash
BOF=loz
echo mon nom est $BOFano
donne lexcution :
$ ./varvide.sh
mon nom est
$
ceci rend le dbuggage de scripts parfois dlicat. Pour pallier ce problme on peut
utiliser la commande :
$ set -u
$
pour demander au shell de gnrer une erreur lorsquon veut faire rfrence une
variable non intialise :

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

5.2 Faire des scripts en shell

129

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

Pour le traitement des paramtres de la ligne de commande, on dispose galement de


quelques variables prdfinies :
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 signification diffrente 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.
Modifications
Il existe plusieurs mcanismes permettant dagir sur les variables :

130

Dvelopper !

1. laide linstanciation de variables ;


2. le traitement du contenu.
Chacun de ces mcanismes suit une syntaxe particulire (la plupart du temps assez
difficilement mmorisable !). Voici donc titre dexemple quelques-uns des outils 3
correspondant :
${N:-4} renvoie la valeur de N si on lui en a affect 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 fin du contenu de la
variable N ;
${N#motif} et ${N##motif} suppriment respectivement la plus petite et la plus
longue chane rpondant lexpression rgulire motif, au dbut du contenu de
la variable N.
et voici un exemple trs instructif inspir par Newham et Rosenblatt (1998) :
$ P=/home/local/etc/crashrc.conf.old
$ echo ${P%%.*}
supprime la plus grande chane commenant par .
/home/local/etc/crashrc
3. Se reporter au man de bash pour des informations prcises.

5.2 Faire des scripts en shell

131

$ echo ${P%.*}
supprime la plus petite chane commenant par .
/home/local/etc/crashrc.conf
$ echo ${P##/*/}
supprime la plus grande chane entoure de /
crashrc.conf.old
$ echo ${P#/*/}
supprime la plus petite chane entoure de /
local/etc/crashrc.conf.old
$
Une application de ce type doutils serait, par exemple, la conversion en salve, de
plusieurs fichiers JPEG en TIFF. En supposant que :
les fichiers portent lextension .jpg ;
sont dans le rpertoire courant ;
on dispose dun utilitaire que lon nommera convert qui est capable deffectuer
cette conversion ;
on peut alors crire le script (voir 3.4.3 page 86 pour lutilisation de la boucle for) :
#!/bin/sh
for F in *.jpg ; do
convert "$F" "${F%.jpg}.tif"
done
Dans ce script, si la variable F vaut une itration bidule.1.jpg alors :
${F%.jpg} vaut bidule.1, cest--dire le nom du fichier auquel on a supprim
la chane .jpg la fin ;
{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
fichiers. Par exemple le trs classique cas o lon veut renommer un ensemble de
fichiers :
$ 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 fichiers sous la forme suivante :
crescent_x.wav
On peut alors crire :

Dvelopper !

132

#!/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 fin de chane. Le nombre de caractres # ou % rappelle si on supprime la
plus petite (1 caractre) ou la plus longue (2 caractres) chane correspondant au motif.
Tain cest p convivial ce bazar !

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

$
$
4
$
$
7
$

N=3
echo $((N+1))
N=$[N+4]
echo $N

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

5.2 Faire des scripts en shell

133

cest--dire :
anne sur 4 chiffres-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 fichiers :
2002-ertyf.dat
alors on peut extraire lanne (2002) comme suit :
annee=${F%-*}
maintenant la variable annee contient le nom du fichier sans ce qui se trouve aprs le
caractre -. On peut alors dcrmenter cette variable :
annee=$((annee-1))
le nouveau nom du fichier sera compos de cette variable annee concatne avec ce
qui se trouve aprs le caractre -, soit :
$annee-${F#*-}
Do le script de conversion utilisant une boucle for
arithmetique.sh
#!/bin/sh
for F in ????-*.dat ; do
annee=${F%-*}
annee=$((annee-1))
mv "$F" $annee-${F#*-}
done
On aurait galement pu extraire les deux parties du nom de fichier (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

Dvelopper !

134

Pour information lexpression rgulire :


[0-9]{4}-.*
reconnatra une chane de caractres commenant par 4 chiffres, 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 effectuer 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 fichiers
(existence, excutabilit, etc.) et la comparaison de chane de caractres, ou dexpressions arithmtiques. Parmi celles-ci :

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

renvoie vrai si...


fichier existe 4
fichier est excutable 5
fichier est un rpertoire 6
chane1 et chane2 sont identiques
chane1 et chane2 sont diffrentes
chane est vide

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

5.2 Faire des scripts en shell

135

expr1 oprateur expr2


o oprateur peut prendre les valeurs du tableau ci-dessous :
-eq
-ne
-lt
-gt
-le
-ge

gal (equal )
diffrent (not equal )
infrieur (less than)
suprieur (greater than)
infrieur ou gal (less than or equal )
suprieur ou gal (greater than or equal )

On peut galement combiner les expressions boolennes :


test
! expr
expr1 -a expr2
expr1 -o expr2

renvoie vrai si...


expr renvoie faux
expr1 et (and) expr2 renvoient vrai
expr1 ou (or) expr2 renvoient vrai

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

136

Dvelopper !

On peut noter lutilisation du test [...] et du mot-clef fi qui termine la clause


if then else. Il ne faut pas omettre le point-virgule qui clt lexpression test.
lexcution :
$ ./testif.sh 4 6
largument 1 est plus petit que largument 2
$ ./testif.sh 45 6
largument 1 est plus grand que largument 2
$
Pour illustrer lutilisation du while crivons une petite boucle qui compte de 1
n (un nombre donn par lutilisateur) :
testwhile.sh
#!/bin/sh
LAST=$1
n=1
while [ "$n" -le "$LAST" ]; do
echo -n "$n"
n=$((n+1))
done
echo et voilou
qui donne par exemple :
$ ./testwhile.sh 10
1 2 3 4 5 6 7 8 9 10 et voilou
$

Notez le mot-clef done qui clt la clause while. Ici loption -n de la commande echo
ne cre pas de saut de ligne la fin de laffichage. Histoire de confirmer lassertion
de Larry Wall 7 , on peut utiliser une boucle pour pour gnrer et afficher 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 dafficher les entiers de 1 5. Si vous tes curieux,
la page de manuel vous indiquera que lon peut galement changer lincrment et deux
ou trois autres choses. On peut donc crire le script suivant :
7. Theres more than one way to do it.

5.2 Faire des scripts en shell

137

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

Pour ce qui est du case, on peut imaginer que lon veuille crire un script permettant didentifier lorigine des fichiers 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 modificateur de variable ## pour supprimer la plus grande chane
finissant par le caractre . et ainsi obtenir lextension. Le mot-clef esac (case
lenvers) clt la clause case. Le choix par dfaut est indiqu par * (nimporte
quelle chane de caractres). chaque choix correspond une srie de commandes
excuter (ici une seule) ; srie qui doit tre termine par deux points-virgules ;; .
On teste :
$ ./testcase-I.sh ~/LaTeX/guide/guide-unix.tex
on dirait un fichier TeX
$ ./testcase-I.sh /etc/lpd.conf
chai p^
o
$
La chane de caractres prcdant la parenthse dans chaque clause de case peut
tre un joker (wildcard), comme le montre la dernire clause qui utilise le caractre *
pour indiquer toute (autre) chane de caractre .
8. Notez que lutilitaire file fait ce travail beaucoup mieux...

138

Dvelopper !

Une limitation du script prcdent est que les fichiers :


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

5.2 Faire des scripts en shell

139

On peut alors utiliser cette valeur directement dans une structure de type if comme
suit :
testtest.sh
#!/bin/bash
if id $1 2> /dev/null 1>&2; then
echo c\est un utilisateur
else
echo ce n\est pas un utilisateur
fi
Il est important de noter que dans la construction :
if commande test ; then
commandes
fi
commandes seront excutes si et seulement si commande test renvoie la valeur 0
(indpendamment de ce quelle peut afficher). 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 flux derreur (2) et
1>&2 pour rediriger le flux standard (1) sur le flux 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 finir ce paragraphe et boucler la boucle des expressions boolennes , supposons quil existe dans le rpertoire courant un fichier guide-unix.tex et tapons :
$ [ -f guide-unix.tex ]
$ echo $?
0
le fichier existe
$
Puis :
$ [ -f guide-unix.texitoi ]
$ echo $?
1
le fichier nexiste de pas
$

Dvelopper !

140

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

5.2.5

Fonctions

Une des caractristiques des shells de la famille sh est la possibilit de crer des
fonctions. Voici un exemple succinct qui illustre les syntaxes de dclaration et dappel,
ainsi que la visibilit des variables :
testfunc.sh
#!/bin/sh
N=4
function mafunc()
{
I=7
echo $1 $2 $N
}
mafunc a b # appel la fonction avec 2 arguments
echo et : $I
qui donne lexcution :
$ ./testfunc.sh
a b 4
et : 7
$

on notera donc qu lintrieur du corps de la fonction, les arguments de celle-ci sont


nots $1, $2, etc. En outre :
les variables instancies dans la fonction sont visibles en dehors (cest le cas
de $I dans notre exemple) ;
les variables instancies avant la dfinition de la fonction sont visibles dans
celle-ci (cest le cas de $N dans notre exemple).
Enfin, linstar dun script, on peut faire renvoyer une valeur une fonction avec
la commande return suivie dune valeur. Voici un exemple dutilisation de fonction :
on reprend le script arithmetique.sh du paragraphe 5.2.3 page 132 et on utilise une
fonction pour faire le changement de nom :
arithmetique-3.sh
#!/bin/sh
function changernom()
{
annee=${1%-*}
annee=$[annee-1]

5.2 Faire des scripts en shell

141

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

5.2.6

Input field separator

Un jour ou lautre le dveloppeur de script shell est confront au problme suivant.


Avec notre fichier :
Jimi Hendrix 1970
Jim Morrison 1971
Janis Joplin 1969
on crit navement le script ayant pour but deffectuer un traitement par ligne des
fichiers passs en paramtre :
naif.sh
#!/bin/sh
for ligne in $(cat "$@") ; do
echo "Une ligne : $ligne"
done
On aura une certaine dception lexcution :
$ ./naif.sh
Une ligne :
Une ligne :
Une ligne :
Une ligne :
Une ligne :
Une ligne :
Une ligne :
Une ligne :
Une ligne :
$

fichier.dat
Jimi
Hendrix
1970
Jim
Morrison
1971
Janis
Joplin
1969

Ceci vient du fait que les lments constituant la liste ` de :


for ligne in ` ; do ...
sont dlimits par les caractres contenus dans la variable IFS. Cette variable contient
par dfaut :

Dvelopper !

142

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 suffit pour cela de modififier 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 :
$

5.2.7

fichier.dat
Jimi Hendrix 1970
Jim Morrison 1971
Janis Joplin 1969

Fiabilit des scripts

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

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

5.3 Makefile

143

Celui-ci affichera, au moment de traiter le fichier 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 deffacer deux fichiers :
le fichier le
et le fichier machin.dat
Pour faire comprendre la commande rm que le nom du fichier 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 fichier 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

Makefile

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

Dvelopper !

144

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 fichier 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 fichier makefile, qui peut porter nimporte quel nom, et qui contient un
ensemble de rgles pour dfinir :
(a) partir de quels fichiers on construit le projet ;
(b) quels sont les fichiers refaire en fonction des modifications apportes
au projet.
Ce fichier 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
fichier au format PostScript encapsul 12 . Une fois le fichier 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 fichiers.
Le fichier que lon veut construire sappelle en jargon make, la cible. Supposons que
le fichier exporter sappelle test.fig, le fichier fabriquer se nommera test.eps.
On cre alors un fichier que lon nomme Makefile contenant :

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

5.3 Makefile

145

Par dfaut, make cherche excuter la premire cible quil rencontre. Par convention,
on dfinit une cible all pour tout faire :
all : test.eps
test.eps :
7 fig2dev -L eps test.fig > test.eps
Pour construire le fichier test.eps on peut alors au choix lancer :
$ make
fig2dev -L eps
$

test.fig > test.eps

ou :
$ make test.eps
fig2dev -L eps test.fig > test.eps
$
On peut dores et dj remarquer que la commande excuter est pralablement
affiche lcran ; ceci peut tre dsactiv (voir 5.3.5 page 148).
Notion de dpendance
chaque modification du fichier test.fig, il est ncessaire dexporter nouveau
en eps. Cest typiquement le genre de tche que lon peut confier make. On insre
donc dans le fichier Makefile une dpendance qui spcifie que la construction du
fichier test.eps dpend de la date du fichier test.fig :
test.eps : test.fig
7 fig2dev -L eps test.fig > test.eps
La signification de cette dpendance est la suivante :
1. si le fichier test.fig est plus rcent que le fichier 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 fichiers ;
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 fichiers
soit synchrone avec lheure du systme excutant lutilitaire lui-mme.

Dvelopper !

146

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

5.3.2

Variables

Dans un fichier Makefile on peut utiliser des variables, par exemple :


FICHIER = test
FIGOPTS=-Leps
all : $(FICHIER).eps
$(FICHIER).eps : $(FICHIER).fig
7 fig2dev $(FIGOPTS) $(FICHIER).fig > $(FICHIER).eps
La syntaxe sapparente donc celle du shell :
affectation avec loprateur = ;
accs avec loprateur $ et les parenthses.

5.3.3

Rgles implicites et variables prdfinies

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

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

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


la ligne 3 contient :

5.3 Makefile

147

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

5.3.4

Outils sur les variables

On peut galement, grce certaines des fonctionnalits du gnu make, automatiser


linstanciation des variables. Dans lexemple qui nous concerne, on peut dans un
premier temps mettre dans une variable FIGFILE tous les fichiers 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 fins. 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 signifie ici pattern substitution. Notre Makefile permettant
de grer lexportation de nos dessins est maintenant capable de gnrer les .eps
partir de tous les fichiers .fig du rpertoire courant. On peut galement y rajouter
une cible de nettoyage permettant deffacer les fichiers .eps lorsquils ne sont plus
ncessaires :
FIGFILE=$(wildcard *.fig)
EPSFILE=$(patsubst %.fig, %eps,$(FIGFILE))

Dvelopper !

148

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

5.3.5

Options et fonctionnalits diverses

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

5.3 Makefile

149

si le fichier 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 fichiers dont les
noms sont prdfinis (Makefile, makefile, etc.), loption -f permet dutiliser
un autre nom pour le fichier :
$ make -f bidule.mak
...
$
loption -n demande make dafficher les commandes prvues pour la cible en
question, sans les excuter ; ce qui peut tre utile pour dbuguer les Makefile ;
notez enfin que si la commande dune rgle est prfixe par le caractre @, cette
commande nest pas affiche avant dtre excute comme elle lest par dfaut :
cible1 :
7 echo six bleus 1
cible2 :
7 @echo six bleus 2
$ make cible1 cible2
echo six bleus 1
echo de la commande
six bleus 1
six bleus 2
pas decho pour cible2
$
Rgles prdfinies
Comme nous aurons loccasion de le voir au paragraphe 5.4 les utilitaires make,
et notamment le gnu make, dfinissent certaines rgles dite implicites pour fabriquer
des fichiers 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 fichiers dvi partir des sources TEX ;
...
Nous exploiterons ces rgles prdfinies dans la section suivante ddie la compilation
dun programme en langage C.

Dvelopper !

150

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 diffrentes 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 clarifier notre vocabulaire. Les diffrents
types de fichiers que nous rencontrerons seront :
Source : cest le fichier texte qui contient le programme en langage C ;
Excutable : cest le fichier binaire qui contient des instructions destines au processeur (code machine) et qui peut tre charg en mmoire par le systme dexploitation ;
Objet : cest un fichier binaire rsultant de la compilation. Ce fichier contient le
code machine de certaines fonctions dfinies par le programmeur et des appels
des fonctions dfinies autre part (dans un autre fichier objet ou dans une
bibliothque) ;
Bibliothque : cest un fichier binaire sapparentant un fichier 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 effectuer pour la gestion de notre projet seront :

Compilation : cest la phase permettant de faire une analyse syntaxique, grammaticale et smantique du fichier source et de crer, si cette premire phase se droule
sans heurt, un fichier objet ; elle se dcompose en preprocessing, compilation et
assemblage ;
dition de liens : cest la phase qui regroupe les fichiers objets et les bibliothques,
et qui aprs avoir vrifi que toutes les fonctions appeles dans les fichiers objets
pointent bien vers un code objet, cre un excutable. Ldition de liens en anglais
se dit to link, et lutilitaire permettant de leffectuer est le linker.

5.4.2

tude du cas simple : un seul fichier source

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

5.4 Faire des projets en langage C

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

151

simple.o

Compilation

source

Code de f

dition
de liens

simple

Code de f

Code de main

Code de main

appel f

appel f

objet

excutable

Figure 5.1 Cration dun excutable partir dun seul fichier source
simple.c
int f()
{
return 4;
}
int main()
{
int i=f();
printf("Bonjour tout le monde.\n");
return 0;
}
Cration de lexcutable
On peut dans le cas simple dun projet se rduisant un seul fichier 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 fichier 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 fichier simple.c compil.

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

Dvelopper !

152

$ ./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 prfixer lexcutable par le chemin pour pouvoir
lexcuter : cest ici la signification 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 Garfinkel et Spafford (1996)). Il est donc bon de prendre dores et
dj lhabitude dutiliser le fameux ./ . On pourra galement lire le paragraphe 6.1.4
page 170 qui propose une autre solution.

Prprocesseur

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

5.4 Faire des projets en langage C

153

int main(int argc, char** argv)


{
int i=N,j,k;
j=2*N;
k=carre(i+j);
return 0;
}
puis :
$ gcc -E testcpp.c
int main(int argc, char** argv)
{
int i= 4 ,j,k;
j=2* 4 ;
k= (( i+j )*( i+j ));
return 0;
}
$
On peut galement noter que le prprocesseur de gcc dfinit plusieurs symboles qui
identifient 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

Dvelopper !

154

Rpertoires de recherche
Lorsque cpp se met en branle, et quil rencontre une directive #include, il va chercher dans une liste de rpertoires le fichier spcifi. On peut voir la liste de recherche
par dfaut en utilisant nouveau loption -v de gcc :
$ gcc -v -E fantome.c
...
gcc version 3.3.5 (Debian 1:3.3.5-13)
/usr/lib/gcc-lib/i486-linux/3.3.5/cc1 -E -quiet -v src/testcpp.c
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/i386-redhat-linux/include
/usr/lib/gcc-lib/i486-linux/3.3.5/include
/usr/include
End of search list.
$
On notera que :
les fichiers inclus par une directive du type #include "fichier" sont recherchs
partir du rpertoire courant ;
on peut influer sur la liste des rpertoires dans lesquels une directive #include
recherche les fichiers, grce loption -I de gcc. Si par exemple, on dsire inclure
le fichier bidule.h se trouvant dans ~/mes_includes, on spcifiera 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 fichier objet. Par simple curiosit on peut voir le code assembleur
produit pour le fichier suivant :
testas.c
int mafonction(double d)
{
return 2.3*d-7.4;
}

5.4 Faire des projets en langage C

155

On peut demander gcc de sarrter la phase dassemblage (cest--dire ne pas


produire le fichier objet) avec la commande suivante :
$ gcc -S testas.c
$ ls -l testas.*
-rw-r--r-- 1 lozano lozano 57 Nov 11 18:30 testas.c
-rw-r--r-- 1 lozano lozano 640 Nov 11 18:31 testas.s
$
On peut alors toujours dans le cadre dune curiosit malsaine examiner le
contenant du code assembleur gnr, avec la commande cat :
$ cat testas.s
...
mafonction:
pushl
%ebp
movl
%esp, %ebp
subl
$16, %esp
...
$
On peut ensuite traduire ce code en appelant explicitement loutil assembleur :
$ as testas.s -o testas.o
$
Autres options intressantes
gcc dispose de moult options que nous ne dtaillerons bien videmment pas ici.
Voici cependant quelques options utiles connatre pour mener bien vos projets :
loption -Onombre 16 est met en route diffrentes 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 affiche 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 (figure 5.2 page suivante) dans
16. Ici il sagit dun O majuscule, pour optimisation.

Dvelopper !

156

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

main.o

Compilation

appel f
appel g

source

dition
de liens

objet

mod.c
float g()
{
...

code de f
code de main

mod.o

Compilation
code de g

main

code de f
code de main
appel f
appel g

code de g

excutable
source

objet

Figure 5.2 Compilation spare


laquelle un fichier contient le main :

main.c

#include <stdio.h>
#include "mod.h"
int f() { return 4; }
int main(int argc, char** argv)
{
int i=g(f());
return 0;
}

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

5.4 Faire des projets en langage C

157

1. On doit compiler sparment main.c et mod.c ;


2. Faire ldition de liens partir des fichiers objets crs.
Compilation en ligne de commande
Pour crer un fichier 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 neffectue que la compilation et loption -o (output) prcise que les fichiers objet doivent tre stocks dans
les fichiers 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 effectuer ldition de liens, on prcise donc le nom de lexcutable avec loption
-o, et on spcifie quels sont les fichiers objet lier.

5.4.4

Bibliothques

Lier un excutable avec une bibliothque


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

Dvelopper !

158

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

source

bonjour.o

Compilation

Code de main
appel printf

dition
de liens

bonjour

objet
libc.so

Code de main
appel printf

Code de
printf

librairie
dynamique

excutable

Figure 5.3 dition de liens dynamique.


On peut examiner lexcutable cr avec la commande ldd pour obtenir les bibliothques dont il dpend :
$ ldd bonjour
libc.so.6 => /lib/libc.so.6 (0x4001a000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
$

On voit donc ici que lexcutable bonjour est li dynamiquement avec la bibliothque
standard, dite libC (voir figure 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 dfinies dans une bibliothque spcifique. Par exemple pour compiler le
fichier en langage C suivant faisant appel une routine de la bibliothque mathmatique :
testmath.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char** argv)

5.4 Faire des projets en langage C

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

159

bonjour.o

Compilation

Code de main
appel printf
appel sqrt
appel atof

atof(...);
}

source

dition
de liens

objet
libm.a

libc.a

Code de
sqrt

Code de printf
Code de atof

bonjour

Code de main
appel printf
appel sqrt
appel atof

Code de sqrt
Code de printf
Code de atof

librairies statiques

excutable

Figure 5.4 dition de liens statique.


{
if (argc==2)
/* renvoie la racine de largument 1 */
printf("%f\n",sqrt(atof(argv[1])));
return 0;
}
on procdera comme suit :
$ gcc -c testmath.c -o testmath.o
$ gcc -o testmath testmath.o -lm
$
Loption -l prcise que lon veut ajouter la bibliothque mathmatique du C ldition de liens. On a alors :
$ ldd testmath
libm.so.6 => /lib/libm.so.6 (0x40021000)
libc.so.6 => /lib/libc.so.6 (0x40043000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
$
on constate donc que lexcutable testmath est li dynamiquement avec la bibliothque mathmatique stocke dans le fichier /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 :

Dvelopper !

160

$ gcc -static -o testmath.stat testmath.o -lm


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

testmath
testmath.c
testmath.o
testmath.stat

On pourra noter la diffrence de taille des excutables crs. Ceci confirme que dans le
cas statique le code des fonctions issu des bibliothques est insr dans lexcutable
(voir figure 5.4 page prcdente).
O sont les bibliothques ?
Lorsquon prcise, lors de ldition de liens, loption -l suivie de m, le linker cherche
dans une srie de rpertoires prdtermine, un fichier 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 fichier
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 fichiers objets dans un seul fichier. On supposera, titre dexemple,
que lon dispose de trois fichiers : mod1.o mod2.o et mod3.o rsultant de la compilation
de trois fichiers crits en langage C.

5.4 Faire des projets en langage C

Statique

161

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

$ ar ruv libbidule.a mod1.o mod2.o mod3.o


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

Dynamique
vante :

Pour crer une bibliothque dynamique on utilisera la syntaxe sui-

$ gcc -shared -o libbidule.so mod1.o mod2.o mod3.o


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

5.4.5

Se simplifier la vie avec make

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

Dvelopper !

162

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

-c test.c -o test.o

Le gnu make positionne par dfaut la variable $(CC) la valeur cc. En outre, il dfinit
un ensemble de rgles pour ldition de liens :
sil ny a quun seul fichier objet, la rgle est la suivante :
% : %.o
7$(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 fichiers main.c, fichier1.c et fichier2.c, puis
ldition de liens avec les trois fichiers objets gnrs pour crer lexcutable
main. Dans le cas de la compilation spare, il est ncessaire quun des fichiers
source porte le nom de la cible (ici cest main.c).
Voyons deux exemples, le premier pour le cas dun seul fichier objet :
makefile.test.2
CFLAGS=-Wall
CPPFLAGS=-I/usr/local/machin-chose
LDFLAGS=-L/usr/local/bidule-truc
LOADLIBES=-lbidule
test : test.o
qui donne :
$ make -f makefile.test.2 test
17. En C++, CFLAGS devient CXXFLAGS.

5.4 Faire des projets en langage C

163

cc -Wall -I/usr/local/machin-chose -c test.c -o test.o


cc -L/usr/local/bidule-truc test.o -lbidule -o test
$
Dans le cas de la compilation spare, on pourra crire le makefile suivant qui permet
de crer lexcutable de lexemple du paragraphe 5.4.3 page 155 :
makefile.test.3
CFLAGS=-Wall
CPPFLAGS=-I/usr/local/machin-chose
LDFLAGS=-L/usr/local/bidule-truc
LOADLIBES=-lbidule
main : main.o mod.o
qui donne :
$ make -f makefile.test.3
cc -Wall -I/usr/local/machin-chose -c main.c -o main.o
cc -Wall -I/usr/local/machin-chose -c mod.c -o mod.o
cc -L/usr/local/bidule-truc main.o mod.o -lbidule -o main
$
Pour finir 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 modifi ;
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 modifi il faut reconstruire
main.o.
Cette liste peut tre gnre automatiquement par gcc grce loption -MM qui
affiche les dpendances lies aux fichiers inclus avec la directive du prprocesseur
#include"fichier". 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

Dvelopper !

164

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

Conclusion
La digestion des informations fournies dans ce chapitre devrait vous donner
les bases ncessaires pour crer des scripts divers et varis, lesquels, linstar de
ceux de lauteur, iront en se complexifiant 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.

Chapitre

Sommaire
6.1
6.2
6.3
6.4
6.5

Avec le shell
Avec vi
Avec Emacs
Avec Xwindow
Installer des logiciels

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

velopper un projet cest aussi tre dans un environnement agrable et corresD


pondant ses propres besoins. Ce chapitre a pour but de prsenter la configuration 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 configurer sous
unix, mais consiste en une prsentation des mcanismes de configuration proprement
dits. Nous prsentons donc ici, la configuration du shell, lutilisation demacs et vi,
le principe de la configuration dun environnement graphique, ainsi que linstallation
de logiciels pour un utilisateur sans privilge. Cette dernire section est termine par
une prsentation de la gestion des paquets Debian.

165

Se mettre laise !

166

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 configur le mieux possible
par rapport au besoin de lutilisateur. La plupart des configurations effectues 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 configuration prsentes dans cette section ne prennent leur
intrt que couples avec les fichiers de dmarrage : la configuration dun environnement utilisateur passe par le positionnement de variables dans ces fichiers de dmarrage
de manire rendre actif lenvironnement personnalis chaque connexion.

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

on constate ici que le script testexport.sh connat la valeur de la variable Y mais


X, elle, est inconnue car uniquement dfinie pour le shell.

6.1.1

Le prompt

On peut changer lallure du prompt en modifiant le contenu de la variable PS1.


Par exemple :
$ PS1="vasyfaitpter# "
vasyfaitpter# date
Wed Jun 7 11:55:21 CEST 2000
vasyfaitpter#

6.1 Avec le shell

167

On peut avoir un prompt un peu plus volu dans lequel il est possible dajouter entre
autres (ce qui suit est spcifique 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
saffiche sous bash en fonction de la valeur de la variable PS2. Par dfaut cette variable
contient la chane > , on peut y mettre par exemple :
$ PS2="et?> "
$
pour attirer lattention. Ainsi :
$ for x in 1 2 3 ; do
et?> echo $[x+1]
et?> done
2
3
4
$
Les autres shells disposent galement de variables permettant de spcifier lallure
du prompt ; la syntaxe est lgrement diffrente 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 &

Se mettre laise !

168

511
512
513
514
$

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

Par dfaut le shell bash stocke cet historique, chaque fois quon quitte un shell,
dans un fichier 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 effets prcdents.
Pour info, sur mon systme :
$ echo $HISTFILESIZE $HISTCONTROL
500 ignoreboth
$

6.1.3

Alias et fonctions

Il est souvent intressant dutiliser les alias pour crer ce quon pourrait appeler
des raccourcis de commandes. Par exemple, au lieu dcrire :

$ telnet -l lozano coltrane.freejazz.org


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

6.1 Avec le shell

169

Contrairement aux alias de tcsh, ceux de bash se contentent deffectuer le


remplacement de lalias par sa dfinition. Mais cette dfinition 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 diffrents. 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 fichier de dmarrage, on pourra simplement
taper :
sshayler vincent
$
pour se connecter en tant quutilisateur vincent sur ayler.freejazz.org, quelle
joie... Notons enfin 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 dfinit un alias :
$ alias xdvi=xdvi -keep
$
Alors la commande :
$ xdvi bidule.dvi &
$
fera dabord appel lalias qui lui, fera appel la commande externe. Loption -a de
la commande type peut donner des informations ce sujet :
$ type -a xdvi
xdvi is aliased to xdvi -keep
alias
xdvi is /usr/bin/xdvi
commande externe
$

Se mettre laise !

170

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

6.1.5

Interaction avec les logiciels

Certains logiciels font appel des variables denvironnement pour fonctionner. On


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

6.1 Avec le shell

171

fera laffaire ;
la variable TERM indique au systme le type de terminal utilis. La valeur passepartout est le vt100 compatible avec la plupart des terminaux et qui suffit
la plupart des applications. On pourra donc crire :
$ export TERM=vt100
$ reset
...
$
en cas de liaison difficile avec une machine distante possdant un systme nidentifiant pas votre type de terminal.
la variable PAGER dfinit le programme charg dafficher 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 influence sur le programme
en question.

6.1.6

Sauvegarder ses configurations grce aux fichiers de dmarrage

Lorsque le systme lance un processus de shell, ce dernier va lire suivant sa


famille sh ou csh dans un ordre dfini, un certain nombre de fichiers pouvant
contenir des commandes ou des initialisations de variables denvironnement. Ces fichiers sont appels fichiers de dmarrage et portent gnralement le doux nom, de
login, profile, et autre monshellrc... Pour comprendre le fonctionnement des fichiers 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 fichier de commande ;
Dans le cas du shell bash, les fichiers lus sont les suivants :
login shell : ~/.bash_profile ;
non login shell : ~/.bashrc ;
non interactif : le fichier dont le nom est dans la variable ENV.
Voici un exemple de configuration classique des fichiers 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 fichiers
~/bash_profile et ~/.bashrc comme suit :

Se mettre laise !

172

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

/.bashrc
# dfinition dalias et fonctions
...

Ainsi, les variables utiles la configuration de lenvironnement sont initialises une


fois pour toute la connexion. Ce qui suit est un extrait des fichiers de configuration
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 :

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

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

6.1 Avec le shell

173

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


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

6.1.7

tude(s) de cas

Un autre LATEX
Lorsquon utilise ce merveilleux et monstrueux logiciel quest LATEX pour produire
des documents, on fait appel deux programmes distincts :
on lance le visualiseur de document xdvi avec la commande :
xdvi madoc.dvi &
puis, intervalles rguliers, on lance la compilation du source :
latex madoc.tex
Une fois la compilation termine, il faut rendre active la fentre de logiciel xdvi pour
visualiser les changements dans le document. Or, en lisant la documentation de xdvi
on peut tomber sur :
SIGNALS
When xdvi receives a USR1 signal, it rereads the dvi file.
Lide qui germe donc dans lesprit du lecteur desprit vif est la suivante : il serait
intressant de pouvoir envoyer automatiquement ce signal au programme xdvi chaque
compilation avec LATEX, 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

Se mettre laise !

174

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 fichier particulier, nous offre une autre solution au problme.
En effet si on tape :
$ fuser guide-unix.dvi
guide-unix.dvi:
2587
$
alors le systme nous indique que le processus de pid 2587 a ouvert le fichier 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 fichier
quil a effac. La solution adopte par les systmes dexploitation consiste proposer
lutilisateur une corbeille dans laquelle on dplace les fichiers plutt que de
les effacer rellement 1 . Lorsque la corbeille est vide, les fichiers sont effectivement
1. Ceci sans parler des sauvegardes journalires des donnes que tout bon administrateur systme
doit assurer...

6.1 Avec le shell

175

effacs. Il est tout fait possible denvisager de configurer 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 fichiers
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 fichiers
et rpertoires effacs sont dplacs dans le mme rpertoire (celui faisant office de
corbeille). Par consquent :
il ny aucune trace dans la corbeille du rpertoire dans lequel tait initialement
stock le fichier ou rpertoire effac ;
si on efface deux fichiers portant le mme nom, seul le dernier sera sauvegard
dans la poubelle ;
si on efface un rpertoire portant le nom dun fichier dj effac le shell nous
enverra sur les roses avec le message :
mv: cannot overwrite non-directory /.corbeille/dir with
directory dir/
Enfin, cette fonction ne traite pas le cas des options ventuellement passes en ligne
de commande. Pour viter dcraser un fichier dj dans la corbeille, on peut utiliser
loption backup de la commande mv du projet gnu :

Se mettre laise !

176

mv -f --backup=numbered $* $CORBEILLE
Cette option permettera de numroter les fichiers dupliqus en faisant appel la
syntaxe :
nom du fichier.~numro~
Par exemple, toutes les sauvegardes du fichier 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 (effacement 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 modifier un fichier ;
parce que cest puissant , en effet 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 enfin parce que a fait snob ;-) 5
Aprs cette introduction, voici quelques commandes de vi connatre, ces commandes
suffisent survivre dans la majorit des cas :

passe en mode insertion (on peut alors taper du texte) ;

ESC

revient en mode commande (quitte le mode insertion) ;

:w

sauve le fichier ;

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

6.2 Avec vi

177

:q

quitte vi. Cette commande et la prcdente peuvent tre utilises en


mme temps (:wq) et dans le cas o lon doit forcer la sauvegarde
ou la sortie il est ncessaire dajouter un !, par exemple (:q!), pour
quitter vi sans sauver mme si le fichier a t modifi ;

dd ou n dd

efface une ou n lignes ;

passe en mode insertion aprs le curseur ;

ou $

va en dbut ou fin de ligne (ces deux commandes rappellent la syntaxe


des expressions rgulires) ;

/ motif

cherche la chane motif dans le texte ;

cherche loccurrence suivante ;

rpte la dernire action ;

cw texte ESC

remplace par texte la portion comprise entre le curseur et la fin du


mot courant (change word ) ;

w ou b

avance ou recule dun mot ;

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 :
1. /machin
2. cw chose
3. n
4. .

Entre
Esc

cherche la premire occurrence

cherche la suivante

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
6. Accrochez-vous...

la remplace

Se mettre laise !

178

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

Avec Emacs 8

6.3

Prsenter Emacs en quelques pages est une tche difficile. 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
un modle de logiciel ouvert. linstar de LATEX, 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 fichier source au sens large du terme ; lauteur qui en a une exprience
somme toute assez maigre a pu diter les fichiers suivants : scripts shell, langage
C, C++, Lisp, Pascal, Perl, PostScript, script Matlab, fichiers LATEX et HTML, des
Makefiles, script de Persistence of Vision, et tout ceci en bnficiant 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
fichiers 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 fichiers 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 fichiers 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 fin de ce
paragraphe quelques ides pour chercher de laide pour les explorations futures.

6.3.1

Concepts de base

Pour commencer, il est important de noter quEmacs a la particularit de pouvoir


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

Mini buffer

179

Window

Frame

6.3 Avec Emacs

Buffers

Figure 6.1 Emacs dans un environnement graphique

180

Se mettre laise !

Les objets graphiques qui composent lditeur Emacs sont les suivants :
Frame : Emacs est multi-fentre, et nomme chacune delles frame 9 . La figure 6.1
montre une session avec deux frames ;
Window : les frames contiennent une ou plusieurs windows. La figure 6.1 montre
trois windows : une dans la frame de gauche et deux dans la frame de droite ;
Buffer : les donnes qui sont affiches dans les windows sont des zones mmoires
appeles buffers. Ces zones contiennent du texte diter. Un buffer peut tre
sauvegard sur disque, cr partir dun fichier, etc. En fait sous Emacs, tout
est buffer ;
Minibuffer : buffer 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 diffrentes
informations ; ici : le nom du fichier, 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 buffer 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 diffremment selon quEmacs est en mode LATEX,
ou en mode C pour ne citer que ceux-l.
9. Nous conserverons ici dessein le jargon anglais dEmacs en utilisant une fonte particulire.
10. Le Lisp dont le nom vient de langlais list processing est le language utilis pour concevoir
les diffrentes extensions dEmacs. La configuration de celui-ci demande dailleurs de connatre les
rudiments de ce langage.

6.3 Avec Emacs

6.3.2

181

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 signifie Alt et x ou Esc puis x ;
C-x C-c signifie 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 fichier, nous allons passer


en revue quelques-unes des notions importantes dEmacs concernant lappel des commandes. On peut appeler la commande douverture de fichier (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 dfini 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 minibuffer,
et lutilisateur doit entrer le nom du fichier quil veut ouvrir ou un nom quelconque
pour crer un nouveau buffer.
M-x find-file Entre monfichier.txt Entre

) permet
Dans le minibuffer la touche Espace (
) ou Tab (

de complter automatiquement un nom de commande ou un nom de fichier. En cas


dquivoque une pression sur ces touches cre une nouvelle window avec un buffer
contenant les diffrentes alternatives possibles la compltion. Par exemple si on
tape :

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

Se mettre laise !

182

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 fichier


que lon veut charger. On notera que la compltion automatique fonctionne aussi sur
les noms de fichiers. Enfin, la fentre dinformation vous indique galement que vous
pouvez utiliser le bouton du milieu de votre souris 11 pour choisir le fichier parmi la
slection.
Stop !
Pour interrompre une action entreprise dans le minibuffer, 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 minibuffer ; ce qui peut entraner un comportement trange de lditeur qui vous
narguera par des :
Command attempted to use minibuffer while in minibuffer
dans ce cas une ou deux pressions sur C-g remet Emacs dans le droit chemin.
11. Si votre souris na quun bouton, cest que vous avez un Machinetoque, changer alors dordinateur ; si votre souris na que deux boutons, vous vous tes fait avoir par le protocole micro logiciel ,
changez de souris.

6.3 Avec Emacs

183

Historique
La combinaison C-x ESC ESC rappelle la dernire commande excute. Les touches
et dans le minibuffer permettent alors de choisir et ventuellement modifier
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 prfixant 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 buffer courant.

6.3.4

Manipuler les objets dEmacs

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

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

Se mettre laise !

184

Figure 6.2 The Emacs quad tree

ces combinaisons de touches correspondent respectivement aux fonctions :


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

6.3 Avec Emacs

185

Buffer
on peut tuer un buffer, lorsquon a fini dditer un fichier, ou simplement parce que le buffer 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 buffer a t modifi depuis la dernire sauvegarde, vous devrez
rpondre quelques questions qui vous seront gentiment poses par le truchement du
minibuffer. Il est galement possible davoir la liste de tous les buffers ouverts depuis
le dbut de la session avec :
C-x C-b ou M-x list-buffers, ou :
par le menu Buffers/List All Buffers
Une partie de cette liste est visible dans les premires entres du menu Buffers.

6.3.5

Les tches basiques

Se dplacer / effacer
Malgr ce que dit le tutorial dEmacs, qui prconise lusage des combinaisons (C-f,
C-b, C-n et C-b) pour dplacer le curseur, il semble raisonnable de penser quen ce
dbut de sicle, on peut utiliser les flches 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 fin/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 fin du buffer, ces fonctions sont
galement disponibles avec les touches Home et Fin si votre clavier en dispose ;
Pour effacer du texte, les touches delete et backspace ont leffet escompt.
On peut en outre effacer partir du curseur jusqu la fin de la ligne avec C-k.
Cette opration sapparente un couper puisque le texte effac est stock pour
ventuellement tre coll. Notez galement que M- 7 efface le mot avant le curseur.
Slectionner
Pour slectionner une zone, il suffit de se placer au dbut de la zone que lon
veut traiter et appuyer sur C-SPC. En fonction de la configuration dEmacs, lorsquon
dplace le curseur, on voit apparatre la zone slectionne en inverse vido . La
souris permet galement de slectionner une zone, bien entendu.

Se mettre laise !

186

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 modifications apportes lors du dmarrage de la session. Le undo sobtient grce la
combinaison C-_ ou C-x u 12 .
Une proprit intressante du undo dEmacs est quil peut aisment se transformer en redo . Pour cela il suffit 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-_

abcdef
abcde
abcd
abcd
abcde

undo
undo
glurps !
redo

Manipulation de fichiers
Les trois oprations qui sont indubitablement utiles sont :
La sauvegarde : qui sauve le contenu du buffer dans un fichier est obtenue grce
:
C-x C-s ou M-x save-buffer, ou :
menu File/Save Buffer.

Le chargement : permet dinsrer le contenu dun fichier dans un buffer tout neuf.
Si le fichier nexiste pas, un buffer est cr portant le nom spcifi et la sauvegarde suivante crera le fichier 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 fichier dont on a un buffer dans Emacs soit modifi
par une source extrieure (un autre programme). Dans ce cas la copie dont
12. le premier est plus simple sur un clavier franais.

6.3 Avec Emacs

187

on dispose dans le buffer nest plus jour par rapport au contenu du fichier, il
faut donc utiliser la commande :
M-x revert-buffer ou :
menu File/Revert Buffer
qui recharge le contenu du fichier dans le buffer courant. Dans cette situation,
Emacs avertit lutilisateur par plusieurs messages dans le minibuffer.
Dautres oprations peuvent tre utiles connatre comme le clbre sauver sous
(C-x C-w ou M-x write-file) qui sauve le buffer dans un fichier 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 fichier.
Rechercher / Remplacer
Voici les deux fonctions connatre pour rechercher des chanes de caractres dans
un buffer et ventuellement les remplacer.
Juste chercher...
La premire est la fonction M-x isearch-forward dont un
raccourci pratique est C-s. Ds que la combinaison C-s est presse, Emacs attend par
lintermdiaire du minibuffer 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 effectue 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 minibuffer vous demandera donc deux chanes pour effectuer 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 configur

Se mettre laise !

188

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 spcifies 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$ signifie : une ligne qui commence par b suivi dune
srie de caractres et finissant par e .
Indenter / Commenter
Un des plaisirs que lon peut tirer de lutilisation de ce gros patapouf dEmacs 13
est lindentation automatique des sources et linsertion de commentaires 14 . Il ny a
rien de difficile apprendre dans ce paragraphe puisque tout est fait automatiquement
en fonction du mode utilis. Prenons lexemple dun fichier C++. chaque pression

le curseur se mettra la bonne place , cest--dire en fonction


sur la touche

de limbrication des diverses boucles et autres blocs. Si le curseur ne se met pas


une position correcte cest que le source comporte une erreur de syntaxe. Il y a trois
commandes connatre :
M-x indent-region qui indente la zone slectionne en fonction du mode utilis ;
M-x comment-region qui commente la rgion slectionne en fonction de la
syntaxe du langage correspondant au mode dEmacs pour le buffer ;
C-u M-x comment-region qui retire les commentaires de la zone slectionne.

LorsquEmacs est en mode langage C, on peut commenter une rgion pralablement


slectionne avec le raccourci C-c C-c. Pour dcommenter on pourra utiliser le
raccourci C-u C-c C-c.

6.3.6

Emacs et les Makefiles

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

6.3 Avec Emacs

189

(a)

(b)

Figure 6.3 Commentaires et indentation automatique : pour passer de la figure (a)


la figure (b), on a appel la fonction M-x indent-region aprs avoir slectionn le
buffer 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.

Se mettre laise !

190

(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 affich dans un buffer 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 effet, en ditant un fichier
C (par exemple), on peut lancer la compilation dans Emacs. Lditeur devient alors un
environnement de dveloppement qui se suffit lui mme. Le buffer *compilation*
peut en effet tre utilis pour cerner les erreurs de compilation. La figure 6.4b montre
le contenu de ce buffer lorsque le source contient une erreur. Un clic de souris, avec

6.3 Avec Emacs

191

le bouton du milieu sur la ligne contenant lerreur positionne le curseur la ligne du


programme source correspondant.

6.3.7

Personnaliser

Macros
Si on reprend ltymologie du mot Emacs on pense macro . Les macros sont
des squences de touches que lutilisateur peut enregistrer et rutiliser plus tard. Le
principe denregistrement dune macro est le suivant :
1. commencer lenregistrement ;
2. tapoter sur le clavier la squence de touches quon veut mmoriser ;
3. finir lenregistrement ;
4. donner un nom la macro dfinie ;
5. stocker ventuellement le code de la macro.
Le commencement et la fin 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 fin de lenregistrement est stocke
dans la macro courante. On peut ensuite donner un nom la macro dfinie avec M-x
name-last-kbd-macro, et enfin insrer le code Lisp de cette macro dans le fichier
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 fichiers include
la directive de compilation suivante :
#ifndef __BIDULE_H
#define __BIDULE_H
(...contenu du fichier include...)
#endif
Pour viter dinsrer systmatiquement ces directives, chaque cration dun fichier
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 buffer
#ifndef ___H Entre
#define ___H Entre
M-x > aller la fin du buffer
Entre #endif
3. C-x ) : fin denregistrement.

Se mettre laise !

192

4. donner un nom la macro avec M-x name-last-kbd-macro : dans le minibuffer


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

Le fichier .emacs
On peut stocker des configurations personnelles telles que des raccourcis clavier
par exemple dans un fichier qui est charg chaque lancement dEmacs. Ce fichier
doit porter le nom .emacs et doit rsider dans le rpertoire priv de lutilisateur. La
petite difficult rside dans le fait que le contenu de ce fichier doit tre en Lisp. La
composition dun fichier .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 fichier .emacs
peut consister :
1. excuter la commande que lon veut sauvegarder dans le .emacs, par exemple
M-x standard-display-european pour afficher les caractres accentus ;
2. faire apparatre le code Lisp dappel dans le minibuffer avec lhistorique C-x
ESC ESC ;
15. On peut utiliser la combinaison C-h k pour vrifier si la combinaison choisie nest pas dj
utilise par Emacs.
16. Et surtout les comptences de lauteur...

6.3 Avec Emacs

193

3. copier ce code dans son .emacs : (standard-display-european nil) en utilisant le mcanisme de copier/coller dEmacs ;
4. recharger le .emacs avec la commande M-x load-file
Cette mthode est bien entendu limite lajout de fonctionnalits simples.
Francisation
Pour forcer Emacs afficher les caractres accentus, il peut tre ncessaire de
lancer la commande M-x standard-display-european. Ainsi la phrase qui par dfaut
saffichait comme ceci :
cet apr\350s midi d\351t\351 \340 la campagne...
saffichera comme cela :
cet aprs midi dt la campagne...
Modes
Comme on la entraperu un peu plus haut, chaque buffer 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 fichier, Emacs se place dans un mode ddition particulier
en fonction de lextension du fichier. Cette reconnaissance peut chouer dans certains
cas. On peut alors basculer manuellement dans le mode dsir avec les commandes
M-x c++-mode, sh-mode, latex-mode, etc.
On peut galement charger le mode dsir de manire automatique. Un exemple :
lors du chargement dun fichier 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 fichiers LATEX offrant la possibilit de masquer certaines sections (paragraphes,
sous paragraphes, etc.) ;
M-x auto-fill-mode qui permet de passer la ligne automatiquement dans les
buffers en fonction dun nombre de caractres dfini 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 :

Se mettre laise !

194

(add-hook LaTeX-mode-hook
(function ( lambda() (auto-fill-mode))))
(add-hook LaTeX-mode-hook
(function ( lambda() (outline-minor-mode))))
chargent automatiquement les modes outline et auto-fill lorsque un fichier LATEX
est charg avec le LaTeX-mode.
Le bureau
Lors dune session Emacs, on ouvre une quantit de buffers plus ou moins importante. Il est agrable de pouvoir recharger ces buffers 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 suffit). Prcisez que
vous voulez sauver votre bureau dans votre rpertoire racine, et le tour est jou.
chaque lancement dEmacs, vos buffers seront chargs. Si vous tes curieux vous
pouvez jeter un il dans le fichier .emacs.desktop qui contient une description des
fichiers charger. Notez que la sauvegarde du bureau ne tient pas compte des frames.

6.3.8

laide

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

6.4

Avec Xwindow

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

6.4 Avec Xwindow

6.4.1

195

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 afficher, 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
effectuer entre autres les affichages. Par exemple, si vous utilisez un navigateur
pdf ou un visualiseur ps pour consulter ce document, les affichages 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 file dattente dvnements.

Client X
Serveur X

Figure 6.5 Principe de fonctionnement du protocole X : les requtes sont issues


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

Se mettre laise !

196

2. une fois connect, le client va demander au serveur dafficher un certain nombre


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

6.4.2

Les diffrentes couches

Lorsquon est face un environnement graphique sous unix, il faut distinguer


plusieurs couches diffrentes :
X : cest la couche de base, cest in fine toujours X qui dessine lcran ; comme on
peut le constater la figure 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, iconifier, etc. Chacun de ces programmes
(appels en anglais window managers) apporte un look and feel particulier
lenvironnement : laffichage (le look) et la manire de manipuler les fentres
(le feel) dpendent du gestionnaire de fentres. Les plus connus sont fvwm (figure 6.6b), windowmaker (figure 6.6d), afterstep (figure 6.6c), mwm ;
Les widgets : ce sont les diffrents 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 difficult quil y
a configurer lenvironnement graphique, plusieurs vendeurs dunix (Sun, HP,
IBM) ont dcid de crer le Common Desktop Environnement (dit CDE) destin homogniser linterface graphique des systmes unix. Dans le monde des
logiciels libres, lide a galement sduit et deux environnements intgrs sont
ns : Gnome et Kde. Ces environnements ne seront pas traits dans ce manuel,
ceci dans un souci douverture. Nous prfrons en effet prsenter les couches
infrieures pour une meilleure comprhension globale 17 .
17. Aussi parce qu mon humble avis, bien que ces environnements permettent au novice de
sinitier unix, ils tendent reproduire ce quon reproche Windows : savoir la dissimulation des
informations...

6.4 Avec Xwindow

197

(a) Xlogo tout nu

(b) Avec fvwm

(c) Avec afterstep

(d) Avec windowmaker

Figure 6.6 Diffrents gestionnaires de fentres

Se mettre laise !

198

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 fichier /.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 fichier /.xinitrc
de lutilisateur qui est excut.
Il est souvent suffisant de faire en sorte que le fichier /.xsession soit un lien symbolique sur le fichier /.xinitrc. Attention, ce dernier doit tre excutable. Voici un
exemple de fichier de dmarrage :
/.xinitrc
#!/bin/sh
# .xinitrc
# pas de beep
xset b off
# fond
xsetroot -solid lightseagreen
# un terminal pour commencer
xterm +ls &
# gestionnaire de fentres
exec fvwm2
On comprend quau lancement de X, on va successivement, imposer un bip silencieux,
donner une couleur la fentre racine 18 , lancer un terminal X, et finalement lancer
le gestionnaire de fentre.
Dans un tel fichier, le dernier programme ici fvwm2 ne doit pas tre lanc
en tche de fond, et la terminaison de celui-ci implique la fin 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 fichier
/etc/X11/xdm/Xsession dont voici la fin :
/etc/X11/xdm/Xsession
if [ -x "$HOME/.xsession" ]; then
exec "$HOME/.xsession"
elif [ -x "$HOME/.Xclients" ]; then
exec "$HOME/.Xclients"
elif [ -x /etc/X11/xinit/Xclients ]; then
18. La fentre appele racine est la fentre constituant le bureau de lenvironnement, elle ne
peut tre dplace ou iconifie, et contient toutes les autres.

6.4 Avec Xwindow

199

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

Nous donnons ici nouveau et titre dinformation, larborescence des processus


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

6.4.4

X et le rseau

Un des aspects particulirement souple de X est sa capacit faire communiquer


le client et le serveur travers un rseau. En dautres termes, il est possible pour
une machine distante excutant une application graphique (client X), denvoyer les
affichages sur la machine que vous avez devant les yeux cest--dire utiliser le
serveur X local. Cette ide est illustre la figure 6.7 page suivante.
La variable denvironnement DISPLAY
Lorsquune application X dmarre, elle cherche se connecter au serveur spcifi
par la variable DISPLAY sauf si lapplication a t programme pour se connecter
un serveur spcifique. 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.

Se mettre laise !

200

Machine distante
Client X
CPU

RSEAU
Machine locale
Serveur X

Figure 6.7 X en tant que protocole rseau

Le nombre numro_display correspond au numro du canal initialis par le serveur,


le premier porte le numro 0. Dans la plupart des cas les machines nont quun seul
display, cest--dire quil ny a quun seul ensemble clavier/souris qui communique
avec le serveur. Ce nombre ne doit pas tre omis. numro_cran, quant lui, est le
numro associ aux crans attachs un canal donn. Ainsi si une machine possde
deux crans, le premier portera le numro 0, le suivant 1, etc. La plupart des applications dispose dune option -display, -d ou --display pour passer outre leffet de
la variable DISPLAY, en crivant par exemple :
$ xclock -display machine.domain.org:0 &
[1] 3452
$
qui lance une magnifique 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 effectue 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 affichant sur lcran de
mekanik, voici les tapes effectuer :
1. autoriser la machine distante ayler utiliser le serveur X de la machine locale
mekanik ;
2. se connecter sur ayler ;

6.4 Avec Xwindow

201

3. spcifier que le serveur X utiliser est sur la machine mekanik ; cest--dire


quon veut afficher 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
affichage 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 afficher sur une machine A, il faut :
rcuprer un cookie de la machine A ;
le faire connatre la machine B
Pour rcuprer un cookie sur la machine locale A, on fait :
$ xauth nlist A:0
0000 0004 a1031e2f 0001 30 0012 4d49542d4d414749432d434f4f4b4
9452d310010 002e46651c4158584654595d61125506
$
qui affiche le cookie correspondant au display A:0 sur la sortie standard. Dans une
autre fentre, on se connecte sur la machine distante, et on lance la commande :
$ xauth nmerge qui attend un cookie sur son entre standard. Par un habile copier/coller on peut
fournir le cookie de la machine A. Une solution lgante, si les deux machines le
permettent, est de lancer sur la machine locale A :
$ xauth nlist A:0 | rsh B /usr/X11R6/bin/xauth nmerge $
en utilisant la commande rsh qui lance le xauth sur la machine A depuis la machine
B.
19. Pour lutilisation de rlogin, se rfrer 4.2.2 page 107

Se mettre laise !

202

Compter sur ssh pour lautorisation


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

6.4.5

tude de cas : fond dcran

Dans lenvironnement X, on peut imposer une couleur la fentre racine avec la


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

fond-04.png
fond-05.png

fond-06.png
fond-07.png

Pour choisir une image au hasard, on va dabord compter le nombre dimages du


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

6.4 Avec Xwindow

203

$ echo $f
3
$
la variable RANDOM contient une valeur tire alatoirement entre 0 et 32 767 20 . Loprateur % renvoie le reste de la division entire. Par consquent lexpression arithmtique
$[RANDOM%nbf] renvoie un nombre tir alatoirement entre 0 et nbf-1. Il ne reste plus
qu construire le nom du fichier 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 enfin 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 fichier de dmarrage de la session X (le
fichier .xsession), et dans la crontab de lutilisateur sduit par ce merveilleux fond
dcran dynamique. Ainsi par exemple :
$ crontab -l
20. Le valeur 32 767 correspond au plus grand nombre entier positif que lon peut gnrer laide
de 16 bits, soit 216 1. Vous pouvez placer cela lors dune soire entre ami, cela fait toujours beaucoup
deffet.

Se mettre laise !

204

0-59/15 * * * * ~/bin/fond.sh
$
changera de fond dcran tous les quarts dheure. Notez bien que ce cron naura de
sens que si le systme sur lequel vous vous connectez vous propose un serveur X...
Loption -display de la commande xloadimage dans le script est ncessaire car
au moment o le script est lanc par le daemon cron, la variable DISPLAY est vide.
Vous aurez galement not quon redirige dans le fichier 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 finirons ce chapitre par une prsentation succincte de la manire dinstaller


des logiciels sur son propre compte. Cette activit peut en effet tre vue comme la
configuration 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 fichiers 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 fichier dcrivant linstallation. Certaines archives contiennent des scripts permettant de copier les fichiers dans des rpertoires spcifiques 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 fichiers excutables dans un endroit spcifique ;
des bibliothques.
des pages de manuels et autres fichiers info.
En supposant que le logiciel sinstalle dans le rpertoire ~/monsoft, il faudra sassurer
que le systme puisse accder ces diffrents fichiers de la manire suivante :
mettre jour la variable PATH :

6.5 Installer des logiciels

205

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

6.5.2

Installer des sources

Linstallation de programmes sous forme de sources peut tre plus dlicate cause
des problmes de portabilit entres les diffrentes 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 fichier 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 fichiers ; ce qui est gnralement
effectu grce la commande :
$ make install
...
$
encore une fois les Makefile peuvent tre prpars de manire diffrentes 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 fichiers.

Se mettre laise !

206

Pour simplifier 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 refltant
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 spcifier
la racine de linstallation, avec :
$ ./configure --prefix=$HOME/monsoft
...
$
qui configurera 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 diffrentes 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 officielles des paquets
constituant la distribution. Il en existe des miroirs dans diffrents pays acclrant ainsi laccs aux ressources. Vous devriez trouver sur votre systme un fichier
/etc/apt/sources.list dont voici ce que pourrait tre un extrait :
$ cat /etc/apt/sources.list
21. Les paquets Debian peuvent galement contenir les sources des logiciels.
22. De tels scripts existent galement pour lopration de suppression du paquet.

6.5 Installer des logiciels

207

[...]
deb http://ftp.fr.debian.org/debian/ lenny main
deb http://security.debian.org/ lenny/updates main contrib non-free
deb http://www.debian-multimedia.org lenny main
[...]
$
Dans la mesure o les fichiers 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 fichier :
/var/cache/apt/pgkcache.bin
Mme sil est fort probable que votre distribution mette jour automatiquement par
cron ce fichier, il nest pas inutile de savoir quon peut explicitement rafrachir ce
fichier 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 hnom_du_paqueti
effacement dun paquet (y compris ses fichiers de configuration)
apt-get purge remove hnom_du_paqueti
mettre jour toutes les paquets pour lesquels existe une nouvelle version :
apt-get upgrade
chercher parmi les paquets (installs ou non) ceux qui correspondent un motif
particulier :
apt-cache names-only search hmotifi
Le motif doit tre saisi comme une expression rgulire. Par exemple tous les
paquets commenant par lib et finissant 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 finir 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 finalement
appele par la commande apt-get par exemple. Elle permet donc dinstaller ou de
denlever un paquet, mais aussi dextraire toutes les informations dun fichier au
format des paquets Debian.

208

Se mettre laise !

Pour conclure
Vous tes donc arm pour naviguer dans un systme unix puisque vous avez
maintenant les connaissances de base pour manipuler un diteur de texte, configurer
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.

Chapitre

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

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

austrit dun terminal laisse pantois nombre dutilisateurs affrontant pour la


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

209

laide !

210

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 signifie par l quil nous donne la possibilit de choisir
parmi 2727 commandes diffrentes et ayant a priori toutes une action diffrente.
Dans cette section, nous ne donnerons pas la signification et laction de chacune de
ces 2727 commandes mais plutt le moyen de vous permettre daccder linformation
concernant chacune dentre elle. En effet, lun des principaux avantages dunix est de
permettre laccs ce genre dinformations.

7.1.1

propos

La premire question est probablement de savoir ce que vous dsirez faire. Supposons que vous cherchiez visualiser le contenu de votre rpertoire de travail. Malheureusement, vous ne connaissez pas la commande qui permet de le faire. Un outil
permet de faire une recherche parmi les commandes disponibles : apropos.
Son utilisation est des plus simples. Tapez simplement apropos suivi dun mot-cl
(en anglais) dfinissant 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 suffisamment significatif. Essayons autre chose :
1. Nous vous faisons grce de 71 lignes.
2. Voir ce sujet Wall et al. (1996) et sa dfinition de la paresse.

7.1 Quoi fait quoi ?

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

211

Change working directory


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

Nous obtenons moins dinformations mais malheureusement pas celle qui nous intresse 3 . Essayons encore :
$ apropos content
dir (1)
gl_copyscreen (3)
ls (1)
perltoc (1)
pick (1)
pair_content (3x)
stat (1)
vdir (1)
vga_dumpregs (3)
xev (1x)
$

list directory contents


copy the screen contents of contexts
list directory contents
perl documentation table of contents
search for messages by content
curses color manipulation routines
print inode contents
list directory contents
dump the contents of the SVGA registers
print contents of X events

Il semble que la commande recherche soit dir ou ls ou vdir. Essayons lune dentre
elles :
$ ls
2Hypergraphes
Admin
Archives
Arkeia
ConfigNT
$

Impression
LaTeX
Logo
Mac
Mail

Microsoft
Mygale
NT
Netscape
Oueb

Sarah
Transfert
Web
archive
bin

games
local
nsmail
test
tmp

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

7.1.2

Mais cest quoi donc ?

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

laide !

212

$ 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 fichiers dans une arborescence. Supposons que vous vouliez rechercher
un fichier 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 fixe. Dtaillons
quelques-unes de ses principales entres :
Name qui dfinit en une ligne ce que fait la commande. Cest dailleurs cette ligne
qui est affiche par whatis. Il sagit de la seule partie requise pour faire dune
page de documentation quelconque une manpage ;
Synopsis qui prcise la forme dappel de la commande. Le synopsis prcise de plus
toutes les options quil est possible de passer la commande et ses arguments
ventuels ;
Description qui dcrit effectivement 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 fin de page, des exemples et les bugs connus du programme document.

7.2 Les pages de manuel

7.2.2

213

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 fichiers de /dev) ;
5 descriptions de formats de fichier de configuration ;
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 diffrentes
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.

laide !

214

Si vous vous contentez dun man printf, votre grand dsarroi, vous ne pourrez
visualiser que la page de documentation correspondant la section 1. Comment spcifier 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 signifie
poliment. Il suffit de rajouter un nouveau rpertoire de recherche (/usr/X11R6/man
sous Linux) la variable MANPATH pour voir apparatre la page de documentation.

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

7.3 Le format info

215

Cette variable devrait tre a priori correctement configure 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 fichiers de dmarrage :
export MANPATH=$HOME/man:$MANPATH
de manire ajouter vos pages de manuels aux pages traites par la commande man.

7.2.4

Recherche exhaustive

Il peut arriver quen dsespoir de cause, vous dsiriez effectuer 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 finalement quune seule commande connatre : man man. La boucle est donc boucle.

7.3

Le format info

Il existe un systme de documentation rpandu sur les systmes unix bas sur
les outils gnu : le systme Texinfo. Lide de ce systme est de pouvoir produire
partir dun source, la fois une information de type hypertexte et un document
imprimable. Dun point de vue technique, ce mme source est pass la moulinette
de TEX pour produire la version papier, et par lutilitaire makeinfo pour produire
la version hypertexte. On manipule la version imprimable comme un document au
format dvi traditionnel 6 , et la version hypertexte avec la commande info :
$ info whoami
$
vous permet de vous esbaudir avec quelque chose devant ressembler
File: sh-utils.info, Node: whoami invocation, Next: groups
invocation, Prev: logname invocation, Up: User information
5. Par exemple, la toute fin 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).

laide !

216

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 dfiler vers la page suivante/prcdente ;


u : pour le lien pre (up) ;
n/p pour le lien suivant/prcdent (next/previous) dans la hirarchie
l pour le lien prcdent dans lhistorique (last) ;
RET pour pntrer dans un lien
q pour quitter info.

Si vous disposez dEmacs, il existe une interface cliquable permettant dviter de


sencombrer lesprit avec les commandes prcdentes tout en vous donnant la possibilit de manipuler joyeusement le bouton du milieu de votre souris prfre.
Notez enfin que sil ny a pas de page info associe une commande, lexcution
de info <nom_de_commande> vous affichera simplement la page de manuel de la commande en question. Si la page de manuel nexiste pas non plus, info vous affichera
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 suffisant.

7.5 Les HOWTO

7.5

217

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 configuration
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
significatifs qui peuvent tre utiliss comme argument aux moteurs de recherche :
Printing-Howto, Serial-Programming-Howto, etc. Lisez donc le Howto-Howto !

7.6

La documentation en ligne

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

7.6.1

Les newsgroups

La premire source dinformations du point de vue de sa richesse mais aussi de son


bruit est sans doute les groupes ou forums de discussion (newsgroups). Apprenez
en effet 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 daffichage que tout le monde peut consulter, sur lequel on peut poser des messages certaines conditions ; ce vaste panneau
est spar en thmes (group) hirarchiss. Parmi les milliers de thmatiques abordes, on trouve quelques groupes autour dunix. Ces groupes font partie de la hirarchie comp.os pour les groupes traitant de linformatique (computer ) et plus prcis7. Pour les allergiques Shakespeare (et les autres), certaines documentations ont t traduites
dans notre belle langue.
8. Le rpertoire /usr/share/doc/HOWTO sur la distribution Debian.

laide !

218

ment des systmes dexploitation (operating ssystem), ou de son pendant francophone


fr.comp.os. On trouvera parmi ces groupes :
fr.comp.os.unix : discussion autour dunix;
fr.comp.os.linux.annonces : les annonces concernant les nouvelles versions
ou les rencontres entre utilisateurs ;
fr.comp.os.linux.moderated : groupe modr sur lutilisation de LINUX ;
...
On pourra galement lire les groupes comp.os.linux.* de la hirarchie anglophone.
Il est important de comprendre que ces groupes suivent quelques rgles dusage dont
lignorance peut vous faire envoyer plus ou moins poliment sur les roses :
on veillera respecter la ntiquette 9 dans le cadre de la communication de un
plusieurs ;
on testera son logiciel de news sur un groupe comme fr.test et non sur le
groupe sur lequel on a lintention de poster ;
on veillera lire attentivement toutes les documentations disponibles (notamment les faqs) avant de poser une question dont la rponse se trouve dans
une dizaine de manuels, au risque dobtenir une rponse du genre : man softquejarrivepasfairemarcher ou RTFM (qui signifie 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 filtre
votre message avant de le poster sur le groupe. Le filtrage a pour but de vrifier
ladquation du contenu avec le thme du groupe. Par consquent votre message
napparatra pas immdiatement sur le groupe, inutile donc de le reposter !
Le mieux est sans doute de se renseigner prcisment sur lusage des news en consultant des documents destins aux nouveaux utilisateurs, comme par exemple http:
//UsenetFR.free.fr/BU.htm.

7.6.2

Les mailing lists

Les listes de diffusion (ou mailing lists) ont un caractre plus confidentiel 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 diffrent du fonctionnement des news.
On pourra trouver des listes de discussions traitant de points particuliers de LINUX
comme par exemple :
linux-8086 - for the 8086 systems
9. voir par exemple une traduction en franais http://www.sri.ucl.ac.be/SRI/rfc1855.fr.
html

7.6 La documentation en ligne

219

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

7.6.3

Le oube

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

7.6.4

Les foires aux questions

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

laide !

220

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 !

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

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

http: // www.

Vincent Lozano : Tout ce que vous avez toujours voulu savoir sur LATEX sans
jamais oser le demander. Framabook/In Libro Veritas, 2008. http://www.enise.
fr/cours/info/latex et http://www.framabook.org/latex.html.
D. Newham et B. Rosenblatt : Learning the bash shell. OReilly, 1998. Louvrage
indispensable pour apprendre le shell de chez gnu.
Eric Raymond : How to become a hacker. http: // www. catb. org/ ~esr/ faqs/
hacker-howto. html , 2000.
221

222

Bibliographie

J.-M. Rifflet : La programmation sous UNIX. Ediscience international, 3e dition,


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

Glossaire
C
Nom donn au langage avec lequel le systme unix initial a t conu. On
peut mme dire que le langage C a t cr pour btir ce systme dexploitation.
Deux des fondateurs dunix y ont consacr un livre Kernighan et Ritchie (2004).
Commande
Une commande est un ordre quon passe au systme dexploitation via un interprteur de commande (appel galement shell). Chaque commande fait appel
soit un excutable stock dans le systme de fichiers, 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 diffusion dun paquet sont grs par
une personne qui nest la plupart du temps pas celle qui a conu le logiciel
empaquet.
223

224

Glossaire

Emacs
diteur de texte et galement religion ou glise. Tous les dogmes de cette
religion sont prsents la section 6.3 page 178.
Gnu
Acronyme de gnu is not unix. Cest le nom que Richard Stallman a donn
au projet quil a lanc en 1983 pour concevoir un unix entirement libre. Dans le
monde unix, le projet gnu est connu pour son diteur Emacs, son compilateur C,
son interprteur de commande Bash et pour tous les utilitaires qui gravitent
autour de la ligne de commande (manipulation de fichiers, 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 configuration de gnu/LINUX.
Lien
Dans le systme de fichiers dunix un lien physique correspond lassociation
entre un nom et les donnes effectives du fichier. Ce qui peut surprendre au
premier abord, cest quon peut crer plusieurs liens vers les mmes donnes
physiques. En dautres termes un fichier peut avoir plusieurs noms. Les liens
symboliques quant eux, font correspondre un nom un autre nom. Tout ceci
est expliqu la section 2.3.9 page 47
Linux
Cest un noyau unix n dun projet initi par Linus Torvalds. Il sagit
donc dun ensemble de modules logiciels offrant aux programmes les abstractions
communes aux systmes dexploitation modernes : la notion de fichiers, 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.
Makefile
Lutilitaire make est un outil dont le propos est dautomatiser la cration
de fichiers partir dautres fichiers selon des rgles que dfinit lutilisateur. Ces
rgles sont crites selon une syntaxe particulire dans un fichier quon nomme
gnralement le makefile. Vous pouvez dcouvrir quelques fonctionnalits de
make la page 143.

Glossaire

225

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

226

Glossaire

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

Index
|| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30, 75

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

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

228

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

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

Index

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

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

Index

commentaire en shell . . . . . . . . . . . . 126


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

229

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

E
echo . . . . . . . . . 27, 72, 84, 85, 124, 136
diter un fichier . . . . . . . . . . . . . . . . . . 124
dition de liens . . . . . . . . . . . . . . . . . . 150

230

avec bibliothques . . . . . . . . . . . 157


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

Index

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

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

Index

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

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

231

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

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

J
H
hash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

job . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
12. http://www.ietf.org

232

job control . . . . . . . . . . . . . . . . . . . . 57, 60


join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
joker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

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

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

Index

Emacs 12, 54, 125, 176, 178, 180,


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

Index

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

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

233

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

N
Netscape . . . . . . . . . . . . . . . . . . . . . . . . . 118
newsgroups . . . . . . . . . . . . . . . . . . . . . . 217
NFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
nice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
nohup . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
nom
de fichier . . . . . . . . . . . . . . . . . . . . . 30
nom de machine . . . . . . . . . . . . . . . . . 100
non authoritative . . . . . . . . . . . . . . . . 104

234

nslookup . . . . . . . . . . . . . . . . . . . 102104
number of record . . . . . . . . . . . . . . . . . 92

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

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

Index

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

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

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

Index

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

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

235

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

236

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

Index

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

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

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

Index

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

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

237

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

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 diffrents 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 rflexions sur les logiciels libres .
1.6 Actualit et avenir des logiciels libres . . .
1.6.1 Le problme des drivers . . . .
1.6.2 Le problme des virus . . . . .
1.6.3 De lutopie la loi du march . . .
1.6.4 Des brevets sur les logiciels . . . .
1.6.5 Quelques beaux exemples . . . . .
239

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1
2
2
3
5
6
9
10
10
11
13
13
13
14
15
17
18
18
19
20
21

240

Table des matires

2 Petit guide de survie


2.1 Le shell . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Quest-ce quune commande ? . . . . . . . . .
2.1.2 Convivialit et ergonomie . . . . . . . . . .
2.1.3 Rudiments sur les variables denvironnement
2.1.4 Caractres spciaux . . . . . . . . . . . . . .
2.1.5 Espaces dans les noms de fichiers . . . . . . .
2.1.6 Caractres gnriques . . . . . . . . . . . . .
2.2 Utilisateurs . . . . . . . . . . . . . . . . . . . . . . .
2.3 Le systme de fichiers . . . . . . . . . . . . . . . . .
2.3.1 Rfrencement des fichiers et des rpertoires .
2.3.2 Arborescence . . . . . . . . . . . . . . . . . .
2.3.3 Privilges . . . . . . . . . . . . . . . . . . . .
2.3.4 Parcourir larborescence . . . . . . . . . . . .
2.3.5 Manipuler les fichiers . . . . . . . . . . . . . .
2.3.6 Et les rpertoires dans tout a ? . . . . . . . .
2.3.7 Gestion des supports amovibles . . . . . . . .
2.3.8 Changer les droits . . . . . . . . . . . . . . .
2.3.9 Liens . . . . . . . . . . . . . . . . . . . . . . .
2.3.10 Access control list (ACL) . . . . . . . . . . .
2.4 Processus . . . . . . . . . . . . . . . . . . . . . . . .
2.4.1 Examiner les processus . . . . . . . . . . . . .
2.4.2 Modifier le droulement dun processus . . .
2.5 Quelques services . . . . . . . . . . . . . . . . . . . .
2.5.1 Impression . . . . . . . . . . . . . . . . . . .
2.5.2 Le service at . . . . . . . . . . . . . . . . . .
2.5.3 Le service cron . . . . . . . . . . . . . . . . .
2.5.4 Lutilitaire nohup . . . . . . . . . . . . . . . .

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

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

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

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

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

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

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

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

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

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

23
24
25
28
29
30
30
31
31
33
33
35
37
39
40
41
42
42
47
50
53
54
57
62
63
64
65
66

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 Afficher . . . . . . . . . . .
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 fichiers
3.4 Le shell en tant que langage . . . .

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

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

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

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

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

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

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

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

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

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

69
70
70
72
74
76
76
77
77
78
78
79
80
84

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

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

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

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

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

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

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

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

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

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

Table des matires

3.5
3.6
3.7
3.8

241

3.4.1 Afficher des informations avec printf .


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

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

84
85
86
87
88
90
92
94
94
96
96

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 finger . . . . . . . . . . .
4.3.5 talk . . . . . . . . . . . .
4.3.6 remote commandes . .
4.4 Courrier lectronique . . . . . . .
4.4.1 Format des adresses . . .
4.4.2 Mail user agents . . . . .
4.4.3 Faire suivre son courrier .
4.5 Le oube . . . . . . . . . . . . . .
4.5.1 Format des adresses . . .
4.5.2 Wget laspirateur . . . . .
4.5.3 Lynx lextraterrestre . . .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

99
100
100
100
101
104
104
107
108
112
112
113
113
113
114
115
116
116
117
118
118
118
119
120

5 Dvelopper !
5.1 diter un fichier . . . .
5.1.1 Sans diteur . . .
5.1.2 Avec un diteur .
5.2 Faire des scripts en shell
5.2.1 Commentaires .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

123
124
124
125
125
126

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

242

5.3

5.4

Table des matires

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 field separator . . . . . . . . . . . . .
5.2.7 Fiabilit des scripts . . . . . . . . . . . . .
Makefile . . . . . . . . . . . . . . . . . . . . . . . .
5.3.1 Principes de base . . . . . . . . . . . . . . .
5.3.2 Variables . . . . . . . . . . . . . . . . . . .
5.3.3 Rgles implicites et variables prdfinies . .
5.3.4 Outils sur les variables . . . . . . . . . . . .
5.3.5 Options et fonctionnalits diverses . . . . .
Faire des projets en langage C . . . . . . . . . . . .
5.4.1 Remarques prliminaires . . . . . . . . . . .
5.4.2 tude du cas simple : un seul fichier source
5.4.3 Compilation spare . . . . . . . . . . . . .
5.4.4 Bibliothques . . . . . . . . . . . . . . . . .
5.4.5 Se simplifier 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 . . . . . . . . .
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 Makefiles . . . . . . .
6.3.7 Personnaliser . . . . . . . . . . . .
6.3.8 laide . . . . . . . . . . . . . . .
6.4 Avec Xwindow . . . . . . . . . . . . . . .
6.4.1 Principe gnral . . . . . . . . . .
6.4.2 Les diffrentes couches . . . . . . .
6.4.3 Comprendre le dmarrage . . . . .
6.4.4 X et le rseau . . . . . . . . . . . .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

126
127
134
140
141
142
143
144
146
146
147
148
150
150
150
155
157
161

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

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

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

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

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

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

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

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

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

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

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

165
166
166
167
168
170
170
171
173
176
178
178
181
181
183
185
188
191
194
194
195
196
198
199

Table des matires

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

202
204
204
205
206

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

209
210
210
211
212
212
213
214
215
215
215
216
217
217
217
218
219
219
220

6.5

6.4.5 tude de cas : fond dcran


Installer des logiciels . . . . . . . .
6.5.1 Installer des binaires . . . .
6.5.2 Installer des sources . . . .
6.5.3 Installer des paquet Debian

243

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

Bibliographie

221

Glossaire

223

Index

227

Pour aller plus loin


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