Vous êtes sur la page 1sur 137

Universit Pierre et Marie Curie

Paris VI

Master de Sciences et Technologie :


Mention Physique et Applications
Mention Sciences de lUnivers,
Environnement, cologie

Mthodes numriques et informatiques


UE 4P009
Unix et programmation

Lenvironnement
Unix

Sylvain.Baumont@lpnhe.in2p3.fr
Christophe.Boitel@lmd.polytechnique.fr
Marine.Bonazzola@lmd.jussieu.fr
Guillaume.Gastineau@locean-ipsl.upmc.fr
Jacquard@lkb.upmc.fr
Thibaut.Karassouloff@spectro.jussieu.fr
Jacques.Lefrere@upmc.fr
Alizee.Pottier@latmos.ipsl.fr
Jorge.Silva@upmc.fr
Melody.Sylvestre@obspm.fr
Sofian.Teber@lpthe.jussieu.fr
avec des contributions de :
Frdric Bernardo
Albert Hertzog
Frdric Meynadier

20142015

UPMC M1 : MNI

Notations
La police machine crire , espacement fixe, est utilise pour indiquer les
lments du langage unix.
Les crochets [. . . ] dlimitent gnralement 1 les lments optionnels de la syntaxe
ou les arguments optionnels des commandes ; ces symboles ne font pas partie de la
syntaxe.
Lors de la description de la syntaxe, lusage de la police italique espacement fixe
indique o lutilisateur doit substituer les identificateurs, expressions, ou valeurs
quil a choisis.
Les combinaisons de touches impliquant la touche de contrle sont parfois notes
plus brivement avec laccent circonflexe : par exemple la combinaison Ctrl C
peut tre note simplement sous la forme ^C.

Exemple
La syntaxe dcrite comme suit :
grep [-option ] motif [fichier ]

syntaxe

peut tre utilise comme dans les exemples suivants :


grep -i septembre /etc/motd
avec loption -i, le motif septembre et le fichier /etc/motd,
grep toto
sans option, avec le motif toto, sans fichier donc en lisant les donnes saisies au clavier.

Indications de lecture

Sous-section facultative
Les sections (ou sous-sections) qui peuvent tre omises en premire lecture sont indiques
par le symbole plac en marge comme ci-dessus.

Conseils pratiques
Les rgles de bon usage du langage, qui, au del de la norme, sont motives par des
objectifs de lisibilit, de portabilit ou de robustesse du code source, sont repres par
le symbole dans la marge extrieure du texte, comme pour ce paragraphe.

Difficults
B Les points prsentant des difficults particulires ou des risques derreur sont indiqus
par le symbole B dans la marge extrieure du texte, comme pour ce paragraphe.

Ce document a t mis en page grce au traitement de texte LATEX.


1. Quand les crochets font partie de la syntaxe, leur signification est dcrite explicitement, par
exemple pour dfinir des ensembles de caractres dans les gnrateurs de noms de fichiers (11.2.1),
ou dans les expressions rationnelles (6.3.2) ou dans les structures de contrle de type case (14.1.2).

ii

v.958

20142015

Table des matires


Notations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Indications de lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Table des matires

ii
ii
iii

1 Introduction
1.1 Bref historique dunix et linux . . . . . . . . .
1.2 Principales caractristiques du systme UNIX
1.3 Prsentation du document . . . . . . . . . . .
1.3.1 Unix interprteur de commandes . . .
1.3.2 Unix langage de programmation . . .
1.3.3 Rsums aide-mmoire . . . . . . . . .
1.4 Les diffrents shells : avertissement . . . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

1
1
1
2
2
2
2
2

2 Session Unix, rseau


2.1 Session utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Compte utilisateur . . . . . . . . . . . . . . . . . . . . . . . .
2.1.2 Session texte et session graphique . . . . . . . . . . . . . . . .
2.2 Les commandes unix . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Syntaxe lmentaire des commandes unix . . . . . . . . . . .
2.2.2 Aides linteractivit . . . . . . . . . . . . . . . . . . . . . .
2.2.3 La documentation en ligne avec man . . . . . . . . . . . . . .
2.2.4 Exemples de commandes . . . . . . . . . . . . . . . . . . . . .
2.3 Commandes de gestion de fichiers et de rpertoires . . . . . . . . . .
2.3.1 Lister les fichiers avec ls . . . . . . . . . . . . . . . . . . . .
2.3.2 Afficher le contenu dun fichier texte avec cat, more ou less
2.3.3 Afficher le dbut (head) ou la fin (tail) dun fichier texte . .
2.3.4 Dtruire un fichier avec rm . . . . . . . . . . . . . . . . . . . .
2.3.5 Copier un fichier avec cp . . . . . . . . . . . . . . . . . . . .
2.3.6 Comparer le contenu de deux fichiers texte avec diff . . . .
2.3.7 Renommer ou dplacer un fichier avec mv . . . . . . . . . . .
2.3.8 Compresser/dcompresser un fichier . . . . . . . . . . . . . .
2.3.9 Compter les lignes, mots ou caractres avec wc . . . . . . . .
2.3.10 Afficher le rpertoire courant et en changer . . . . . . . . . .
2.3.11 Manipuler des rpertoires . . . . . . . . . . . . . . . . . . . .
2.4 Environnement rseau . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4.1 Courrier lectronique . . . . . . . . . . . . . . . . . . . . . . .
2.4.2 Connexion distance via slogin . . . . . . . . . . . . . . . .
2.4.3 Transfert de fichiers distance . . . . . . . . . . . . . . . . .
2.4.4 Navigateur . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

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

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

4
4
4
4
6
6
6
7
8
8
9
9
10
10
10
10
10
10
11
11
11
12
12
13
13
14

3 Hirarchie de fichiers
3.1 Arborescence des fichiers . . . . . . . . . . . . . . . . .
3.1.1 Chemins daccs des fichiers et rpertoires . .
3.1.2 Visualisation dune branche avec tree . . . . .
3.1.3 Changement de rpertoire de travail : exemples

.
.
.
.

.
.
.
.

.
.
.
.

15
15
16
16
17

iii

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.
.

TABLE DES MATIRES

3.2

3.1.4
Autres
3.2.1
3.2.2
3.2.3
3.2.4
3.2.5

UPMC M1 : MNI

Attributs des fichiersdroits daccs . . . . . . . .


commandes de gestion des fichiers . . . . . . . . .
Rechercher rcursivement des fichiers avec find . .
Archiver des arborescences de fichiers avec tar . .
Copier des fichiers avec la commande rsync . . . .
Manipuler des chemins avec dirname et basename
Dcouper des fichiers avec split et csplit . . . .

4 dition, visualisation, impression


4.1 Les fichiers texte et leurs codes . . . . . . . . . . . .
4.1.1 Fichiers texte et fichiers binaires . . . . . . .
4.1.2 Codage des fichiers texte . . . . . . . . . . . .
4.1.3 Le codage unicode . . . . . . . . . . . . . . .
4.1.4 Outils de transcodage des fichiers texte . . .
4.2 dition de fichiers texte . . . . . . . . . . . . . . . .
4.2.1 Les modes des diteurs . . . . . . . . . . . . .
4.3 Lditeur vi . . . . . . . . . . . . . . . . . . . . . . .
4.3.1 Principales requtes de lditeur vi . . . . . .
4.3.2 Requtes ex . . . . . . . . . . . . . . . . . . .
4.3.3 Configuration de vi . . . . . . . . . . . . . .
4.4 Les diteurs emacs et xemacs . . . . . . . . . . . . .
4.4.1 Fonctions de base . . . . . . . . . . . . . . . .
4.4.2 Principe des raccourcis clavier . . . . . . . .
4.4.3 Fonctions ddition de texte . . . . . . . . . .
4.4.4 Aides ldition . . . . . . . . . . . . . . . .
4.4.5 Ouverture de plusieurs fichiers simultanment
4.4.6 Fonctions avances . . . . . . . . . . . . . . .
4.4.7 Internationalisation . . . . . . . . . . . . . .
4.4.8 URLs . . . . . . . . . . . . . . . . . . . . . .
4.5 Impression . . . . . . . . . . . . . . . . . . . . . . . .
4.5.1 Gestion des impressions . . . . . . . . . . . .
4.5.2 Impression de fichiers non postscript . . . . .

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

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

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

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

20
22
22
25
28
29
29

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

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

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

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

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

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

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

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

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

31
31
31
31
32
32
33
33
34
34
35
37
37
38
38
39
39
40
40
41
41
41
41
42

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

43
43
43
43
44
45
45
45
46
46
46
47
48
48
48
49
49

5 Introduction aux filtres


5.1 Notion de filtre . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 Classement avec sort . . . . . . . . . . . . . . . . . . . . . . . .
5.2.1 Principales options de sort . . . . . . . . . . . . . . . . .
5.2.2 Exemples . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3 Remplacement de caractres avec tr . . . . . . . . . . . . . . . .
5.3.1 Dfinition des jeux de caractres . . . . . . . . . . . . . .
5.3.2 Options de tr . . . . . . . . . . . . . . . . . . . . . . . . .
5.4 Autres filtres lmentaires . . . . . . . . . . . . . . . . . . . . . .
5.4.1 Aperu dun fichier avec head et tail . . . . . . . . . . .
5.4.2 Conversion des tabulations avec expand et unexpand . . .
5.4.3 Repliement de lignes avec fold . . . . . . . . . . . . . . .
5.4.4 Slection de colonnes avec cut . . . . . . . . . . . . . . .
5.5 Fusion de fichiers texte . . . . . . . . . . . . . . . . . . . . . . . .
5.5.1 Concatnation de lignes avec paste . . . . . . . . . . . .
5.5.2 Fusion de lignes selon un champ commun avec join . . .
5.5.3 Mise en garde concernant les caractres non imprimables
iv

v.958

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

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

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

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

20142015

UPMC M1 : MNI

TABLE DES MATIRES

6 Introduction aux expressions rationnelles


6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Signification des trois caractres spciaux de base . . .
6.3 Caractres devenant spciaux dans certaines positions
6.3.1 Ancres . . . . . . . . . . . . . . . . . . . . . . .
6.3.2 Ensembles de caractres . . . . . . . . . . . . .
6.3.3 Classes de caractres . . . . . . . . . . . . . . .
6.3.4 Rfrence dans les substitutions . . . . . . . . .
6.4 Groupement en sous-expressions et rfrence . . . . .
6.5 Rgle en cas dambigut dinterprtation . . . . . . .
6.6 Cas des expressions rationnelles tendues . . . . . . .

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

51
51
51
52
52
53
53
54
54
54
55

7 Le filtre grep
7.1 Prsentation de la commande grep . . . . . . . . . . . . . . . . .
7.2 Principales options de grep . . . . . . . . . . . . . . . . . . . . .
7.3 Exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4 Autres options . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4.1 Recherche de plusieurs motifs avec loption -e . . . . . . .
7.4.2 Variantes de grep : options -F et -E . . . . . . . . . . . .
7.4.3 Affichage des chanes correspondant au motif : option -o .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

56
56
56
57
57
57
57
58

8 Le filtre sed
8.1 Prsentation de sed . . . . . . . . . . . . . .
8.1.1 Principes de fonctionnement et intrt
8.1.2 Les deux syntaxes possibles . . . . . .
8.1.3 Autres options de sed . . . . . . . . .
8.2 Requtes principales . . . . . . . . . . . . . .
8.2.1 Substituer . . . . . . . . . . . . . . . .
8.2.2 Transcrire caractre par caractre . .
8.2.3 Supprimer des lignes . . . . . . . . . .
8.2.4 Imprimer des lignes . . . . . . . . . .
8.2.5 Quitter . . . . . . . . . . . . . . . . .
8.3 Remarques importantes . . . . . . . . . . . .
8.4 Fichier dinstructions . . . . . . . . . . . . . .
8.5 Complment : notion despace de travail . . .

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

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

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

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

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

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

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

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

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

59
59
59
59
59
59
59
60
60
60
61
61
61
62

9 Le filtre awk
9.1 Syntaxe gnrale . . . . . . . . . . . . . . . . . . . . . . . . .
9.2 Programmation . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2.1 Structure des donnes : enregistrement, champ . . . .
9.2.2 Principes de base . . . . . . . . . . . . . . . . . . . . .
9.2.3 Variables spcifiques . . . . . . . . . . . . . . . . . . .
9.2.4 Fonctions incorpores . . . . . . . . . . . . . . . . . .
9.2.5 Internationalisation . . . . . . . . . . . . . . . . . . .
9.3 Exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.3.1 Exemples lmentaires de programmes awk . . . . . .
9.3.2 Exemples appliqus un fichier de donnes particulier
9.4 Les tableaux sous awk . . . . . . . . . . . . . . . . . . . . . .
9.5 Complments . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.5.1 Transmission dinformations du shell awk . . . . . .
9.5.2 La fonction getline . . . . . . . . . . . . . . . . . . .
9.5.3 Instructions de saut . . . . . . . . . . . . . . . . . . .
9.5.4 Format des sorties . . . . . . . . . . . . . . . . . . . .
9.5.5 Redirections de sortie . . . . . . . . . . . . . . . . . .

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

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

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

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

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

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

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

63
63
63
63
64
65
65
66
66
66
66
67
70
70
70
71
71
71

20142015

v.958

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

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

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

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

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

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

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

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

TABLE DES MATIRES

UPMC M1 : MNI

10 Processus, redirections et tubes


10.1 Flux standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.2 Redirections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.2.1 Redirection de sortie vers un fichier (> et >>) . . . . . . . . . .
10.2.2 Redirection de lentre depuis un fichier (<) . . . . . . . . . . .
10.2.3 Redirection de la sortie derreurs vers un fichier (2> et 2>>) . .
10.2.4 Redirection de lerreur standard vers la sortie standard (2>&1)
10.3 Tubes ou pipes (|) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.4 Gestion des processus . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.4.1 Gnralits : la commande ps . . . . . . . . . . . . . . . . . . .
10.4.2 Caractres de contrle et signaux . . . . . . . . . . . . . . . . .
10.4.3 Processus en arrire plan . . . . . . . . . . . . . . . . . . . . .
10.5 Complments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.5.1 Les fichiers spciaux : exemple /dev/null . . . . . . . . . . . .
10.5.2 Duplication de flux : tee . . . . . . . . . . . . . . . . . . . . .
10.5.3 Notion de document joint (<<) . . . . . . . . . . . . . . . . . .
10.5.4 Groupement de commandes . . . . . . . . . . . . . . . . . . . .
10.5.5 Processus dtach . . . . . . . . . . . . . . . . . . . . . . . . .

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

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

72
72
72
72
73
73
73
73
74
74
75
75
76
76
77
77
77
78

11 Variables et mtacaractres
11.1 Variables . . . . . . . . . . . . . . . . . . . . .
11.1.1 Affectation et substitution . . . . . . . .
11.1.2 La commande read . . . . . . . . . . .
11.1.3 Porte des variables . . . . . . . . . . .
11.1.4 Variables denvironnement . . . . . . . .
11.1.5 Complment : valeur par dfaut . . . . .
11.1.6 dition du contenu des variables . . . .
11.2 Caractres spciaux . . . . . . . . . . . . . . .
11.2.1 Caractres gnrant des noms de fichiers
11.2.2 Liste des mtacaractres . . . . . . . . .
11.2.3 Substitution de commande . . . . . . .
11.2.4 Protections des mtacaractres . . . . .
11.2.5 Exemples . . . . . . . . . . . . . . . . .
11.3 Code de retour . . . . . . . . . . . . . . . . . .
11.4 Complments . . . . . . . . . . . . . . . . . . .
11.4.1 Inversion du statut de retour . . . . . .
11.4.2 Combinaison de commandes && . . . . .
11.4.3 Combinaison de commandes || . . . . .
11.4.4 La commande nulle : . . . . . . . .
11.4.5 Invite pour la commande read . . . . .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

79
79
79
79
80
80
81
81
81
81
82
82
83
83
84
84
84
85
85
85
85

12 Procdures de commande
12.1 Fichiers de commande . . . . . . . . . . . . . .
12.1.1 Exemple de procdure sans paramtre .
12.1.2 Les paramtres des procdures . . . . .
12.1.3 Exemple de procdure avec paramtres
12.1.4 Utilisation de set . . . . . . . . . . . .
12.1.5 La commande shift . . . . . . . . . . .
12.2 Complments . . . . . . . . . . . . . . . . . . .
12.2.1 Distinction entre $* et $@ . . . . . . . .
12.2.2 Complments sur la commande set . .

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

86
86
86
86
87
87
87
88
88
88

vi

v.958

20142015

UPMC M1 : MNI

TABLE DES MATIRES

13 Les commandes test et expr


13.1 La commande test . . . . . . . . . . . . . . . . . . .
13.1.1 Comparaisons arithmtiques . . . . . . . . . .
13.1.2 Comparaisons de chanes de caractres . . . .
13.1.3 Tests sur les fichiers . . . . . . . . . . . . . .
13.1.4 Combinaisons de conditions . . . . . . . . . .
13.2 La commande expr . . . . . . . . . . . . . . . . . . .
13.2.1 Oprateurs arithmtiques . . . . . . . . . . .
13.2.2 Autres oprateurs . . . . . . . . . . . . . . .
13.3 Autres outils pour les calculs . . . . . . . . . . . . .
13.3.1 Oprateurs intgrs au shell . . . . . . . . . .
13.3.2 Les commandes de calcul non entier dc et bc

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

89
89
89
90
90
90
91
91
91
91
91
92

14 Structures de contrle du shell


14.1 Les conditions . . . . . . . . . . . . . . . . . .
14.1.1 La construction if ... fi . . . . . .
14.1.2 La construction case ... esac . . .
14.2 Les structures itratives . . . . . . . . . . . .
14.2.1 La structure for ... do ... done .
14.2.2 La structure until ... do ... done
14.2.3 La structure while ... do ... done
14.3 Complments : branchements . . . . . . . . .
14.3.1 La commande exit . . . . . . . . . .
14.3.2 La commande break . . . . . . . . . .
14.3.3 La commande continue . . . . . . . .
14.3.4 La commande trap . . . . . . . . . .
14.3.5 Structures itratives et redirections . .

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

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

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

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

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

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

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

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

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

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

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

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

93
93
93
94
95
95
96
96
97
97
97
98
98
99

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

100
. 100
. 100
. 100
. 100
. 101
. 101
. 102
. 102
. 102
. 102
. 102
. 103
. 103
. 103
. 103
. 104
. 104
. 105
. 105
. 105
. 106

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

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

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

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

15 Retour sur le shell


15.1 Le shell : approfondissement . . . . . . . . . . . . . . . . . . .
15.1.1 Notion de commande interne . . . . . . . . . . . . . .
15.1.2 Les alias du shell . . . . . . . . . . . . . . . . . . . . .
15.1.3 Les fonctions du shell . . . . . . . . . . . . . . . . . .
15.1.4 Interprtation dun nom de commande avec type . . .
15.1.5 Algorithme dinterprtation de la ligne de commande .
15.1.6 Fichiers dinitialisation du shell . . . . . . . . . . . .
15.1.7 Options du shell . . . . . . . . . . . . . . . . . . . .
15.2 Excutions spciales de commandes . . . . . . . . . . . . . . .
15.2.1 Excution dans le shell courant . . . . . . . . . . . . .
15.2.2 Excution en remplacement du shell courant . . . . .
15.2.3 Double valuation par le shell : eval . . . . . . . . . .
15.2.4 Priorit dexcution avec nice . . . . . . . . . . . . .
15.2.5 Mesure du temps dexcution avec time . . . . . . . .
15.2.6 Rcursivit . . . . . . . . . . . . . . . . . . . . . . . .
15.3 Autres commandes internes . . . . . . . . . . . . . . . . . . .
15.3.1 Analyse syntaxique avec getopts . . . . . . . . . . . .
15.4 Internationalisation . . . . . . . . . . . . . . . . . . . . . . . .
15.4.1 Les variables de contrle local . . . . . . . . . . . . . .
15.4.2 Les valeurs des variables de contrle local . . . . . . .
15.4.3 Outils associs au codage UTF-8 . . . . . . . . . . . .
20142015

v.958

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

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

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

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

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

vii

TABLE DES MATIRES

UPMC M1 : MNI

16 Conclusion
16.1 Du bon usage dunix . . . . . . . . . . . . . . .
16.1.1 Analyser avant de coder... . . . . . . . .
16.1.2 Choisir les outils dans la panoplie unix
16.1.3 Mettre au point et corriger . . . . . . .
16.1.4 Documenter . . . . . . . . . . . . . . . .
16.2 Conclusion . . . . . . . . . . . . . . . . . . . .
Bref guide dinstallation de Cygwin
1
Introduction . . . . . . . . . . . . . . .
2
Installation des composants de base .
3
Installation dun serveur X . . . . . .
4
Connexion une machine distante . .
5
Transfert de fichiers . . . . . . . . . .
6
Installation de programmes ne figurant

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

108
108
108
108
108
108
109

. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
pas dans la liste

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

110
110
110
111
111
112
112

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

Types de fichiers, extensions et outils associs

113

Structures de contrle dans diffrents langages

114

Bibliographie

115

Index

119

Mmento vi

125

Mmento emacs

127

viii

v.958

20142015

Chapitre 1

Introduction
1.1

Bref historique dunix et linux

Le systme dexploitation (operating system) unix date des annes 1970. Lessentiel du
systme est crit en langage C 1 , ce qui lui a assur une large diffusion dans laquelle les
milieux universitaires ont jou un rle essentiel. Plusieurs branches parallles dunix se
sont trs rapidement dveloppes (notamment BSD et System V), conduisant quelques
diffrences dans les commandes et leur syntaxe.
Des efforts ont ensuite t entrepris en vue dune synthse des meilleurs aspects des
diffrents unix avec la dfinition de la norme POSIX (Portable Operating System Interface). Limplmentation de cette norme est encore incomplte et quelques diffrences
subsistent pour certaines commandes 2 selon les versions de systme unix. Mais ces diffrences concernent beaucoup moins lutilisateur que ladministrateur du systme.
Noter enfin que les systmes unix sappuient largement sur les programmes du projet
GNU dont lambition est de dvelopper un systme complet (Gnu is Not Unix). Ces
programmes dune grande qualit sont distribus sous la licence dite GPL (General Public
License) de la Free Software Fondation.

1.2

Principales caractristiques du systme UNIX

Unix est un systme interactif, multi-tches et multi-utilisateurs capable de partager des


ressources (fichiers, authentification, ...) selon une hirarchie de droits daccs. Il comporte une documentation en ligne (man) des commandes. Ce systme sintgre facilement
dans le rseau pour changer des informations et dvelopper des applications rparties
entre plusieurs calculateurs. Unix comporte un mcanisme trs puissant de chanage
des processus par les tubes (pipes) qui permet daccomplir des tches complexes par
simple assemblage doutils lmentaires. Enfin, linterprteur (shell) intgre un langage
de programmation permettant dautomatiser les tches rptitives.
Le systme unix est un systme ouvert, implment sur diverses architectures, du portable au super-calculateur :
propritaires (aix dibm, hp-ux de hp, solaris de sun, OS-X dapple, ...) ;
libres (linux, net-bsd, free-bsd, ...).
Le systme unix est aujourdhui install sur la plupart des gros calculateurs scientifiques.
Mais cest le systme linux, une des versions dunix du domaine public, qui a permis de
rendre unix de plus en plus populaire dans le domaine des ordinateurs personnels et des
petits serveurs. Linux est aujourdhui dominant dans le calcul intensif avec plus de 95 %
des calculateurs du TOP 500 (cf. http://www.top500.org/statistics).
Linux est disponible dans de nombreuses distributions issues de quelques grandes branches
qui diffrent notamment par les outils de maintenance du systme et des packages
logiciels et des orientations serveur ou grand public : Slackware, Redhat et ses drives (mandrake puis mandriva et aujourdhui mageia, centOS, Scientific Linux, Fedora),
qui utilisent le systme de gestion de paquets RPM (Redhat Package Manager), debian
dont drivent knopix et ubuntu, ... (pour avoir une ide du foisonnement, consulter par
1. Moins de 10 % du noyau unix est crit en assembleur.
2. Par exemple : affichage des processus avec ps, impression avec lpr/lp, ...

Chapitre 1. Introduction

UPMC M1 : MNI

exemple larbre gnalogique dunix http://www.levenez.com/unix/ ou celui de linux


http://fr.wikipedia.org/wiki/Distribution_Linux).

1.3

Prsentation du document

Le systme unix est un systme dexploitation que lutilisateur dcouvre tout dabord
au travers de linterprteur de commandes que constitue le shell. Lutilisation dunix
en interface ligne de commande ncessite un certain effort dapprentissage. Mais cet
investissement permet daccder des outils trs efficaces de manipulation de donnes
(transformation de fichiers textes, gestion de la hirarchie de fichiers, ...) et de contrle
des procdures (unix ou issues dautres langages), dautant plus puissants que le shell
est aussi un langage de programmation.
Lorganisation du document respecte cette progression en prsentant dabord les outils
de base avant daborder la programmation en shell.

1.3.1

Unix interprteur de commandes

La premire partie de ce document dcrit les principales commandes qui permettent


dditer des fichiers texte, de modifier leur contenu (par lintermdiaire de filtres notamment) et de les manipuler. Aprs une brve prsentation des premiers contacts avec unix
(chapitre 2), le systme de fichiers est dcrit (chapitre 3), puis les commandes ddition
(chapitre 4). La notion de filtre est ensuite aborde avec des commandes lmentaires
(chapitre 5), puis la notion de motif gnrique est introduite avec les expressions rgulires (chapitre 6), afin de dcrire trois filtres paramtrables trs puissants :
grep qui permet de rechercher des motifs (chapitre 7),
sed qui est un diteur de flux (chapitre 8),
et enfin awk qui permet de programmer dans une syntaxe proche de celle du langage C et possde des fonctions de tableur (chapitre 9).
Cette partie sachve sur les processus et le mcanisme des redirections et tubes, permettant lassemblage des outils de base, au cur du systme unix (chapitre 10).

1.3.2

Unix langage de programmation

La deuxime partie de ce document aborde le shell en tant que langage de programmation. Sont prsents ici les variables du shell (chapitre 11), qui permettent de paramtrer
les procdures shell (chapitre 12), ainsi que les tests (chapitre 13), utiliss dans les structures de contrle (chapitre 14). Les notions avances du shell sont voques rapidement
au chapitre 15. Quelques conseils de bonne programmation sont fournis en guise de
conclusion. Il est conseill de les lire avant dentreprendre lcriture de shell-scripts.

1.3.3

Rsums aide-mmoire

Enfin, des fiches aide-mmoire ont t regroupes la fin du document, pour faciliter la
consultation rapide. Ces rsums concernent notamment :
Les structures de contrle du shell compares celles dautres langages tels que C,
fortran et scilab (p. 114) ;
Les diteurs de texte vi (p. 125) et emacs (p. 127), aprs lindex et la bibliographie.

1.4

Les diffrents shells : avertissement

Il existe de nombreuses versions de linterprteur de commandes unix ou shell, qui prsentent des diffrences la fois en termes de syntaxe et de possibilits offertes (fonctions
internes, interactivit, fichiers de configuration, ...). Suivant la syntaxe des structures de
contrle, on peut les regrouper essentiellement en deux familles :
2

v.958

20142015

UPMC M1 : MNI

Chapitre 1. Introduction

les shells de type Bourne, drivs du shell historique sh : ksh 3 , pdksh 4 , mksh 5 ,
bash, zsh, ...
les shells du type C-shell, dont les structures de contrle sont plus proches de celles
du langage C : csh, tcsh, ...
Ce document naborde que les shells de type Bourne, dans leurs versions modernes :
ksh (Korn-shell) et bash (Bourne again shell), shell par dfaut sur les postes de travail
sous linux.
Pour plus de dtails sur les diffrents shells, on se reportera Newham et Rosenblatt
(2006) ou Ramey et Fox (2006) sur bash, Rosenblatt et Robbins (2002) sur ksh,
Kiddle et al. (2004) sur zsh et DuBois (1995) sur csh et tcsh.
Par ailleurs, lessentiel des commandes traites sont communes aux diffrents systmes
unix, dont linux fait partie. Mais compte tenu de la popularit des systmes linux,
certaines commandes spcifiques de linux sont abordes et la majorit des exemples
tests sous linux.

3. ksh, dvelopp par David Korn et initialement logiciel propritaire, est maintenant pass dans le
domaine public.
4. pdksh est une version de ksh du domaine public.
5. mksh, MirBSD Korn Shell est un des successeurs de pdksh.

20142015

v.958

Chapitre 2

Session Unix,
environnement rseau
B N.-B. : le systme unix distingue minuscules et majuscules : on dit quil est sensible

la casse (case sensitive). La plupart des commandes unix scrivent en minuscules.

2.1
2.1.1

Session utilisateur
Compte utilisateur

Pour pouvoir ouvrir une session sur une machine, un utilisateur doit y possder un
compte ; cela signifie que ladministrateur lui a attribu :
un identifiant (ou login) associ un numro unique (uid) (cf. 2.2.4 p. 8) ;
un mot de passe (ou password) qui doit rester confidentiel ;
un groupe (associ son numro unique gid) parmi ceux dfinis sur la machine 1
(cf. 2.2.4 p. 8) ;
un rpertoire daccueil personnel (ou home directory) destin hberger tous les
sous-rpertoires et fichiers qui lui appartiennent (cf. 3.1, p. 16) ;
un interprteur de commandes (ou shell) : sh, ksh, bash, zsh, csh ou tcsh.
Lensemble de ces informations est stock dans un fichier systme (souvent /etc/passwd),
mais le mot de passe est mmoris 2 sous une forme crypte ; cest pourquoi ladministrateur du systme ne peut retrouver un mot de passe oubli par un utilisateur (mais
ladministrateur peut le modifier).
Par exemple, la ligne dfinissant le compte p6m1mni dans le fichier /etc/passwd prend
la forme (le mot de passe crypt nest pas stock ici et est remplac par le caractre !) :
p6m1mni:!:40369:2055:Jacques LEFRERE:/home/p6pfal/p6m1mni:/usr/bin/ksh
login : : uid : gid:identit de lutilisateur: rpertoire daccueil : shell
Les ressources informatiques tant limites, un quota despace disque est bien souvent
spcifi : sil est atteint, lutilisateur ne peut plus crire 3 dans son espace personnel.

2.1.2

Session texte et session graphique

Louverture dune session sur une machine unix peut seffectuer selon deux modes diffrents :
en mode texte sur une console ou par une connexion distance partir dune machine
locale via slogin ou ssh 4 , par exemple
slogin user @sappli1.datacenter.dsi.upmc.fr
1. Les groupes et leurs gid sont stocks dans le fichier systme /etc/group
2. Pour des raisons de scurit, les mots de passe crypts sont souvent stocks en dehors du fichier
/etc/passwd, par exemple dans le fichier /etc/shadow/ aux droits plus ferms.
3. Cette interdiction peut empcher louverture dune session en mode graphique, qui ncessite gnralement lcriture dinformations dans lespace personnel. Il faut alors ouvrir une session en mode
texte (cf. 2.1.2, p. 5) pour librer de lespace disque.
4. ssh assure des communications scurises par cryptage. Lusage de telnet o les informations
circulent en clair sur le rseau et sont donc susceptibles dtre interceptes est aujourdhui abandonn
sur la majorit des serveurs.

UPMC M1 : MNI

Chapitre 2. Session Unix, rseau

en mode graphique dans une fentre daccueil dont la prsentation dpend du gestionnaire de fentres (window manager) : fvwm, kde, gnome, icewm, lxde... Ce gestionnaire, qui constitue souvent un vritable environnement de bureau (Desktop
Environment) dfinit linterface graphique (icnes, menus droulants, boutons divers, ...) qui permet de lancer et de contrler les applications et finalement de
fermer la session.
Mais les deux types de session sinitient de faon similaire par lidentification puis lauthentification de lutilisateur qui doit saisir 5 successivement :
son identifiant linvite login
son mot de passe linvite password 6
Une fois le nom dutilisateur et le mot de passe reconnus, le comportement diffre suivant
le type de session.
En mode texte : Le systme affiche le mot du jour 7 et la date de la dernire connexion.
La configuration personnelle est active par lexcution des fichiers de type .profile
dans les shells de type sh ou .login dans les shells de type csh (cf. 15.1.6, p. 102).
Ces fichiers peuvent positionner certaines options du shell, initialiser des variables
denvironnement (par exemple : chane de caractres dinvite, type de terminal utilis . . .) et lancer des commandes qui seront excutes chaque dbut de session.
Sinscrit ensuite lcran une chane de caractres (invite ou prompt en anglais)
invitant lutilisateur entrer des commandes pour interagir avec le shell. Une fois
le travail termin, la commande exit permet de fermer la session texte.
En mode graphique : Le contrle est pass au gestionnaire de fentres qui permet
de lancer des applications via des menus et des icnes sans identification ni authentification complmentaires : parmi ces applications, des consoles peuvent tre
actives qui permettent de passer des commandes en mode texte. Mais, une fois
toutes les applications termines, il faut signifier au gestionnaire de fentres la fin
de la session graphique pour viter que des applications puissent tre lances sans
authentification par quelquun dautre sur le poste graphique. Une fois la session
termine, on doit retrouver la fentre graphique daccueil initiale.

Commutation entre mode graphique et mode console sous linux


Sous linux, par exemple en cas de problme en mode graphique (quota disque atteint ou
difficult avec la vido), on peut passer du mode graphique au mode texte en frappant
simultanment Ctrl Alt F1 par exemple pour travailler sur la console 1. Six pseudoconsoles sont disponibles de F1 F6 qui permettent douvrir des sessions en mode texte
seul.
Le retour en mode graphique seffectue par la frappe simultane de Ctrl Alt F7 8
Ne pas oublier de fermer toutes les sessions en mode texte ouvertes sur les pseudo-consoles
non affiches en fin de session graphique.
5. Ne pas utiliser le pav numrique lors de la saisie et vrifier que la touche majuscule (CapsLock)
ne soit pas verrouille.
6. Dans certains cas, aucun cho nest affich lors de la saisie du mot de passe, de faon ne pas
dvoiler aux tmoins le nombre de caractres saisis.
7. Appuyer sur la barre despacement pour parcourir le mot du jour page par page ; taper q pour
terminer son affichage (voir les filtres more et less 2.3.2, p. 9).
8. Sur certaines distributions linux, dont Mandriva 2010, il faut utiliser la touche F8 au lieu de la
touche F7 . linverse, sur la distribution mageia, le mode graphique est accessible via Ctrl Alt F1
alors que Ctrl Alt F2 jusqu F5 permettent daccder des pseudo-consoles.

20142015

v.958

Chapitre 2. Session Unix, rseau

2.2
2.2.1

UPMC M1 : MNI

Les commandes unix


Syntaxe lmentaire des commandes unix

Les lignes de commandes unix sont interprtes par un shell selon une syntaxe bien
prcise, qui, dans sa forme lmentaire, peut tre dcrite comme suit :
Une ligne de commande unix est dcoupe par le shell en une suite de mots
spars par des blancs 9 . Le premier mot est le nom de la commande ; les mots
suivants constituent les paramtres de la commande. Chaque mot reprsente
un paramtre, dont le rle est dtermin par sa position dans la phrase.
Certains paramtres facultatifs, commenant gnralement par le caractre - , et
prcdant les oprandes (qui sont trs souvent des noms de fichiers), sur lesquels agit
la commande, permettent de passer des options la commande pour contrler finement
son comportement.
commande [-options ][liste_d_oprandes ]
Exemple : ls-l/tmp
1. ls est la commande (affiche la liste des fichiers)
2. -l est loption (liste longue, avec les attributs des fichiers)
3. /tmp est le nom de rpertoire pass en argument (rpertoire dont on liste les fichiers)
Les commandes de type GNU respectent aussi deux conventions complmentaires :
1. La fin des paramtres optionnels peut tre indique par -- , permettant ainsi
dinterprter correctement des noms de fichiers commenant par - sans les
confondre avec des spcifications doptions.
2. Si le nom du fichier dentre est remplac par - , les donnes dentre sont prises
sur lentre standard (cf. chap. 10, p. 72).
Le shell interprtant les espaces comme des sparateurs, on vitera leur
emploi dans les noms de fichiers.

B Remarque :

2.2.2

Aides linteractivit

Les shells modernes disposent de fonctionnalits facilitant la saisie des commandes :


lhistorique et ldition en ligne des commandes dune part, la compltion automatique
des noms de commandes et de fichiers dautre part.
Historique des commandes et dition en ligne
Le shell mmorise la suite des commandes qui ont t effectues. La primitive (builtin,
cf. 15.1.1, p. 100) history permet dafficher la liste numrote des dernires commandes
saisies. Il est dautre part possible de rappeler les prcdentes commandes et de naviguer
dans cette liste avec les flches verticales : on peut alors diter une ligne pour ladapter
de nouveaux besoins avant de la relancer.
Sous bash, cette dition se fait par dfaut dans le mode emacs 10 (cf. 4.4, p. 37) ; les
dplacements peuvent se faire avec les flches horizontales et les raccourcis demacs
utilisant la touche Ctrl sont utilisables (cf. 4.4.3, p. 39) :
Ctrl E aussi not ^E (end) positionne en fin de ligne ;
9. Les caractres qui sparent les mots pour le shell sont dfinis par la variable IFS Internal Field
Separator qui comporte par dfaut lespace, la tabulation et la fin de ligne. Dautres caractres spciaux
soumis interprtation par le shell peuvent intervenir dans ce dcoupage (cf. la section 15.1.5, p. 101
pour une analyse plus prcise de la ligne de commande), notamment les oprateurs de redirection (cf.
chapitre 10).
10. Le mode vi (cf. 4.3, p. 34) est aussi disponible pour diter la ligne de commande, mais il est moins
intuitif. Le choix du mode se fait par la commande : set -o vi ou set -o emacs (cf. 15.1.7, p. 102).

v.958

20142015

UPMC M1 : MNI

Chapitre 2. Session Unix, rseau

Ctrl A aussi not ^A (begin donnerait ^B, dj utilis pour back) positionne en
dbut de ligne ;
Ctrl W aussi not ^W (word) efface le mot prcdent le curseur ;
Ctrl T aussi not ^T (transpose) change le caractre sous le curseur avec le prcdent.
Compltion automatique des noms de commandes et de fichiers
Le shell comporte un puissant mcanisme de compltion automatique qui permet dal-
lger et surtout de valider la saisie :
des commandes ;
des noms de fichiers et de leurs chemins daccs.
Lutilisateur peut se contenter dcrire les premires lettres de la commande ou du nom
de fichier et demander au shell de complter en frappant la touche Tab de tabulation.
Sil ny a aucune ambigut partir de ces lettres, le shell complte lui-mme, et sinon,
il propose (si les possibilits sont en nombre raisonnable) la liste des possibilits ; il est
alors possible, quitte ritrer le processus, de complter jusqu lever toute ambigut.
Cette possibilit permet de choisir des noms de fichiers longs, la signification explicite,
car ils ne devront tre saisis quune fois, lors de leur cration. Elle permet aussi dviter
les fautes de frappe en demandant au shell de vrifier la validit des chemins.

2.2.3

La documentation en ligne avec man

Prsentation de la commande man


La documentation en ligne de la commande cmd est affiche par man cmd (man tant
labrviation de manual). Elle permet en particulier de connatre la syntaxe dune commande et la liste des options attaches cette commande. Chaque page de manuel
comporte habituellement les rubriques suivantes :
NOM/Name qui indique brivement la fonction de la commande (cest cette dfinition
qui est affiche si on lance whatis suivie du nom de la commande) ;
SYNOPSIS/Synopsis qui rsume la syntaxe de la commande ;
DESCRIPTION/Description qui dcrit la commande de faon plus dtaille, prcisant
en particulier le type de paramtres et doptions (flags) admis ;
EXEMPLES/Examples qui prsente quelques exemples dutilisation de la commande ;
OPTIONS/Flags qui dtaille chacune des options de la commande et prcise leur
syntaxe ;
FICHIERS/Files qui indique les ventuels fichiers en rapport avec la commande ;
VOIR AUSSI/See also qui liste les autres commandes ventuellement en rapport
avec cette fonction.
Les sections des manuels
Les manuels en ligne sont regroups en sections numrotes, parmi lesquelles :
1 pour les commandes usuelles ;
3 pour les fonctions des bibliothques hors appels systme (notamment les fonctions
des bibliothques du langage C) ;
8 pour ladministration et le systme.
Le numro de la section est indiqu entre parenthses en haut de la page. Certaines pages
existent dans plusieurs sections et il est possible de spcifier la section consulter, par
exemple :
man 3 printf permet daccder la fonction printf du langage C
20142015

v.958

Chapitre 2. Session Unix, rseau

UPMC M1 : MNI

alors que man 1 printf ou simplement man printf affiche le manuel de la commande unix printf.
Enfin, loption -a (all) de man permet dafficher successivement les manuels trouvs dans
toutes les sections. De mme, whatis printf affiche une brve dfinition de toutes les
versions disponibles de printf.
Recherche par mot-clef
De manire gnrale, le nom dune commande unix est une abrviation (en anglais) de
son action. Mais comment dterminer le nom des commandes qui peuvent raliser une
action donne ? Une premire indication peut tre fournie en faisant appel la base dindexation (cette base, constitue des dfinitions des commandes affiches par whatis est
stocke dans des fichiers comme /usr/share/man/whatis par exemple 11 ) des mots-clefs
des commandes :
man -k mot-clef
ou encore
apropos mot-clef
permet dafficher la liste des commandes dont la description comporte un mot-clef
(keyword) dtermin.
Sous linux, une partie importante de la documentation est fournie sous un format texte
permettant la navigation grce lutilitaire info.
Par ailleurs, les commandes qui respectent les conventions de syntaxe GNU affichent un
mode demploi rsum si on les invoque avec loption --help.
Enfin, on ne peut aujourdhui ngliger limportante source dinformation que peut fournir
lusage averti dun moteur de recherche sur le web.

2.2.4

Exemples de commandes

se reprer parmi les utilisateurs :


whoami
affiche lidentifiant (souvent le nom) de lutilisateur
id
affiche les noms et numros dutilisateur et de groupe
who
affiche la liste des utilisateurs connects
hostname
affiche le nom du calculateur
uname
affiche le nom du systme dexploitation
changer son mot de passe avec la commande passwd (cf. 3.1.4, p. 20) : une fois la
commande ci-dessus lance, le systme demande de saisir le mot de passe actuel,
puis le nouveau mot de passe qui devra tre confirm (ceux-ci ne seront pas affichs).
affichage de la date : par exemple en franais 12 avec le format par dfaut
date
ven. sept. 14 15:36:45 CEST 2012
ou en imposant le format, par exemple
date "+%A %d %B %Y"
vendredi 14 septembre 2012
De nombreux formats sont disponibles y compris pour afficher des dates diffrentes
de la date courante comme date -d tomorrow (cf. 10.5.5, p. 78).
affichage de texte grce la commande echo
echo Bonjour
echo Comment vas-tu
dconnexion (logout) par la commande exit

2.3

Commandes de gestion de fichiers et de rpertoires

Avant dentrer dans plus de dtail, examinons les principales commandes de manipulation
de fichiers, leurs options et quelques exemples lmentaires. On se reportera au manuel en
11. Il existe autant de fichiers whatis que de composantes dans la variable MANPATH qui contient la
liste des chemins des rpertoires contenant les manuels (cf. 15.1.6, p. 102).
12. Laffichage dpend de la langue de travail (cf. 15.4, p. 105).

v.958

20142015

UPMC M1 : MNI

Chapitre 2. Session Unix, rseau

ligne pour une tude plus exhaustive. Ne pas oublier que les arguments des commandes
sont dabord interprts par le shell.

2.3.1
ls
ls
ls
ls
ls
ls
ls
ls
ls

Lister les noms et attributs des fichiers avec ls

list : affiche la liste des fichiers du rpertoire courant


-a
all : liste aussi les fichiers cachs , dont le nom commence par .
-l long : affiche aussi les attributs (droits, propritaire, taille, date, ...) des fichiers
-lh
human-readable : affiche la taille de faon plus lisible (kilo, Mga, ...)octets
-R
Recursive : liste tous les sous-rpertoires
-F
Flag : marque les fichiers rpertoire (/), excutables (*), les liens (@)
-d
directory : affiche les rpertoires au lieu de leur contenu
-t
time : classe la liste par ordre de date des fichiers
-r
reverse : classe la liste par ordre inverse

Ne pas oublier que, par dfaut, ls rep liste le contenu du rpertoire rep, do la ncessit B
de loption -d pour sintresser au rpertoire lui-mme.
Sauf spcification de classement explicite, les fichiers sont affichs dans lordre lexicographique dtermin par les variables de contrle local (cf. 15.4.1, p. 105 et 15.4.2, p. 105).
Laffichage des attributs dun fichier ncessite le droit x sur le rpertoire o il est situ
(cf. 3.1.4, p. 21).
Le marquage des fichiers produit par loption -F de ls en fonction de leur type et
de leurs droits 13 peut tre renforc par une colorisation de laffichage via loption
--color=auto, par exemple : fichiers excutables en vert (*), liens symboliques en bleu
clair (@), rpertoires en bleu fonc (/), fichiers avec suid bit en rouge.
Format daffichage de la date avec ls -l
Le format par dfaut daffichage de la date des fichiers dpend de la distribution unix :
1. avec deux champs AAAA-MM-JJ et HH:MM spars par un blanc :
-rw-r--r-- 1 jal latmos
5159 2013-09-03 18:36 arbre_unix.fig
2. ou trois champs Mmm, JJ et HH:MM o le mois est en lettres et dpend de la variable
de contrle local :
-rw-r--r-- 1 jal latmos 5159 Sep 3 18:36 arbre_unix.fig
dans ce cas, lanne napparat pas, sauf pour les fichiers anciens (plus de 6 mois)
o elle prend la place des heures et minutes :
-rw-r--r-- 1 jal aero 5159 Sep 24 2010 arbre_unix.fig
Si le second format est plus lisible, le premier, parfaitement hirarchis, se prte mieux au
traitement automatique par les filtres unix 14 . Il est aussi possible de spcifier le format
de la date avec loption longue 15 --time-style= de ls -l : outre la valeur 'long-iso'
(qui correspond au premier format illustr plus haut), cette option admet aussi les mmes
formats que la commande date (cf. 15.4.1, p. 105).

2.3.2

Afficher le contenu dun fichier texte avec cat, more ou less

more f1

affiche le fichier f1 page par page


la touche Espace permet davancer dun cran
la touche Entre permet davancer dune ligne
la touche q (quit) permet de terminer laffichage
la touche / suivie dun motif permet de rechercher ce motif en avanant
la touche n (next) permet de rechercher loccurrence suivante

13. Les proprits ainsi soulignes sont donnes par les attributs affichs en tte de ligne par ls -l.
14. Prendre garde que le nombre de champs de la sortie de ls -l peut donc tre de 8 ou 9 selon le
format de la date, et en particulier que le numro du champ du nom de fichier en dpend.
15. La documentation complte de cette option nest disponible pas sous man, mais sous info.

20142015

v.958

Chapitre 2. Session Unix, rseau

UPMC M1 : MNI

less f1
sous linux, plus puissant 16 que more, permet de remonter dans le texte
B Comme less permet de remonter dans le fichier, au contraire de more, il ne se termine
pas automatiquement en fin de fichier : il affiche END sur la ligne dtat, mais il faut lui
demander explicitement par la requte q de sarrter.
cat f1
concatenate : affichage (avec dfilement) du contenu du fichier de nom f1
cat f1 f2
concatne les deux fichiers f1 et f2 et affiche le rsultat
cat -n f1
affichage du contenu du fichier de nom f1 avec ses lignes numrotes
Remarque : noter que, bien quacceptant une liste de fichiers en paramtres dentre,
cat est aussi un filtre, le filtre identit (cf. chap 10) dont on peut rediriger la sortie dans
un fichier. Cette commande permet donc de concatner plusieurs fichiers texte en seul
fichier, par exemple avec cat f1 f2 f3 > fichier_resultat.

2.3.3

Afficher le dbut (head) ou la fin (tail) dun fichier texte

head f1
head -n L f1
tail
tail
tail
tail

f1
-n L f1
-n +L f1
-f f1

2.3.4

diff -i f1 f2
diff -b f1 f2
diff -y f1 f2

compare les contenus des fichiers f1 et f2


et affiche lcran les lignes qui diffrent
permet dignorer les diffrences portant sur la casse
permet dignorer les diffrences portant sur les espaces
prsente les lignes diffrentes dans 2 colonnes en parallle 18

Renommer ou dplacer un fichier avec mv

mv f1 f2
mv f1 f2 rep/

2.3.8

copy : recopie le fichier f1 sous le nom f2


recopie les fichiers f1, f2, ..., fn dans le rpertoire rep

Comparer le contenu de deux fichiers texte avec diff

diff f1 f2

2.3.7

remove : dtruit le fichier f1


interactive : demande une confirmation avant de dtruire
recursive : dtruit toute la branche sous le rpertoire rep

Copier un fichier avec cp

cp f1 f2
cp f1 f2 ... fn rep

2.3.6

affiche la fin du fichier f1 (par dfaut les 10 dernires lignes)


affiche les L dernires lignes de f1
affiche les lignes de f1 partir de la L-ime
follow : affiche la fin de f1 en suivant ses mises jour 17

Dtruire un fichier avec rm

rm f1
rm -i f1
rm -r rep

2.3.5

affiche le dbut du fichier f1 (par dfaut les 10 premires lignes)


affiche les L premires lignes de f1

move : renomme le fichier f1 en f2


dplace les fichiers f1 et f2 dans le rpertoire rep

Compresser/dcompresser un fichier

gzip fic
gunzip fic.gz

compresse le fichier fic en fic.gz


dcompresse le fichier fic.gz en fic

16. Dans ses versions rcentes, la commande less active un prprocesseur dtermin par la variable
denvironnement LESSOPEN, positionne par dfaut | /usr/bin/lesspipe.sh . Ce filtre permet de
convertir des fichiers que lon ne pourrait pas afficher directement : entre autres, il affiche la liste des
fichiers dun rpertoire, dcompresse les fichiers compresss, extrait les fichiers archivs par tar, extrait
le texte des pdf..., mais aussi analyse les fichiers dimage de type pnm, mme en format ascii. On peut
dsactiver cette interprtation avec loption -L ou --no-lessopen.
17. Cette option permet par exemple de surveiller lavancement de lcriture dun fichier de rsultats.
18. La commande vimdiff permet dditer en parallle deux fichiers sous lditeur vi, cf. 4.3.3, p. 37.

10

v.958

20142015

UPMC M1 : MNI

Chapitre 2. Session Unix, rseau

Autres outils de compression/dcompression


Dautres commandes de compression et de dcompression de fichiers permettent, grce
des algorithmes plus sophistiqus, dobtenir de meilleurs taux de compression 19 : bzip2,
unlzma et xz (qui est une version amliore de unlzma).
bzip2 fic
compresse le fichier fic en fic.bz2
bunzip2 fic.bz2
dcompresse le fichier fic.bz2 en fic
unlzma -z fic
compresse le fichier fic en fic.lzma
unlzma -d fic
dcompresse le fichier fic.lzma en fic
xz -z fic
compresse le fichier fic en fic.lzma
xz -d fic
dcompresse le fichier fic.lzma en fic

2.3.9

Compter le nombre de lignes, mots, caractres et octets


dun fichier avec wc

wc f1
word count : compte le nombre de lignes, de mots et doctets du fichier f1
Les options -l, -w, -m, -c permettent de nafficher respectivement que le nombre de
lignes, de mots, de caractres ou le nombre doctets 20 . On peut combiner ces options
de wc, mais lordre des options est sans influence sur lordre daffichage des nombres
demands, classs de lentit la plus grande la plus petite : nombre de lignes, puis B
nombre de mots, puis nombre de caractres et enfin nombre doctets.

Remarque gnrale
Les commandes ls, cat, head, tail, more, less, wc et rm peuvent sappliquer une
liste de fichiers (par exemple, la commande rm f1 f2 permet deffacer f1 et f2).

2.3.10

Se reprer (pwd) et se dplacer (cd) au sein de la hirarchie


de fichiers

Se reporter 3.1.1, p. 16 pour les notions de rpertoire de travail et daccueil.


pwd
print working directory : affiche le chemin absolu du rpertoire courant
cd rep1
change directory : choisit rep1 comme rpertoire de travail
cd
permet de revenir dans le rpertoire daccueil do que lon parte
cd ..
permet de revenir au rpertoire pre du rpertoire de travail
cd permet de revenir au rpertoire de travail prcdent dans lhistorique

2.3.11

Manipuler des rpertoires avec mkdir et rmdir (cf. chap. 3)

mkdir rep1
make directory : cre le sous-rpertoire de nom rep1
mkdir rep2 rep3
cre les sous-rpertoires rep2 et rep3 dans le rpertoire de travail
rmdir rep1
remove directory : supprime le rpertoire rep1 sil est vide
Les commandes cp et mv admettent aussi des rpertoires comme arguments.
cp f1 f2 rep1
recopie les fichiers f1 et f2 dans le rpertoire rep1
cp -r rep1 rep2
recopie la branche partant de rep1 vers rep2 (cr par la copie)
mv f1 rep1
dplace f1 dans le rpertoire rep1 (existant) sous le nom f1
mv f1 rep1/toto
dplace f1 dans le rpertoire rep1 (existant) sous le nom toto
mv rep1 rep2
renomme le rpertoire rep1 en rep2
mv rep1 chemin/ dplace la branche sous le rpertoire rep1 sous le rpertoire chemin
19. Ils sont gnralement plus lents, mais restent rapides la dcompression notamment lalgorithme
LZMA (Lempel-Ziv-Markov chain-Algorithm) utilis par unlzma et xz, et sont parfois choisis pour distribuer des outils logiciels (par exemple les pages du manuel man).
20. Attention : dans les codages multi-octets, en particulier en unicode, on doit distinguer octet et
caractre, qui peut scrire sur plusieurs octets. Loption -m permet dafficher le nombre de caractres.
Loption -m de la commande wc est sensible lenvironnement de contrle local (cf. 15.4, p. 105) et plus
prcisment au codage des caractres (cf. 4.1.2, p. 31) .

20142015

v.958

11

Chapitre 2. Session Unix, rseau

2.4

UPMC M1 : MNI

Environnement rseau

Le systme unix est conu pour sintgrer dans un environnement de machines relies
en rseau. Ce rseau, quil soit filaire ou sans fil (WIFI), est notamment exploit pour :
changer des messages avec des utilisateurs distants via le courrier lectronique
se connecter distance sur un serveur via slogin
changer des fichiers avec une machine distante
naviguer sur les serveurs web du rseau

2.4.1

Courrier lectronique

Lenvoi et la rception de messages par courrier lectronique seffectuent laide dun


programme de gestion du courrier. Plusieurs clients de courrier en mode texte, ont t
dvelopps, parmi lesquels mail, pine et alpine. Dautres outils permettent de grer
le courrier en mode texte, comme lditeur emacs. Mais les clients en mode graphique
comme par exemple thunderbird sont maintenant plus populaires. Enfin, certains sites
disposent dun service de webmail (par exemple https://webmail.etu.upmc.fr) qui
permet daccder via un simple navigateur sa bote aux lettres personnelle aprs authentification.
La forme complte dune adresse de messagerie lectronique est en gnral 21
prenom.nom @domaine_internet
Exemples dadresses lectroniques :
Sofian.Teber@lpthe.jussieu.fr
Jacques.Lefrere@upmc.fr
Adresse lectronique officielle des tudiants lUPMC : Prenom.Nom @etu.upmc.fr.
Lutilitaire mail
La commande mail fonctionne avec une interface ligne trs sobre 22 et nest pratiquement plus utilise que par des procdures automatiques. Excute seule (sans paramtre),
cette commande affiche la liste des messages prsents dans la bote aux lettres de lutilisateur 23 , suivie dune marque dinvite (& ou ?) pour indiquer que des requtes sont
attendues. Parmi ces requtes, signalons les plus usites :
? donne la liste des requtes disponibles et leur description rapide.
n (next) passe au message suivant
t liste de numros de messages affiche ces messages
h liste de numros de messages affiche les enttes de ces messages
s fichier sauvegarde le message courant dans un fichier
r rpond lexpditeur du message courant (R pour rpondre aussi aux autres
destinataires)
q met jour la bote aux lettres (les messages lus sont dplacs dans le fichier de
type bote aux lettres nomm mbox) et sort de mail
x ferme la bote aux lettres sans la modifier et sort de mail
Pour envoyer un message, il faut passer ladresse des destinataires en paramtre de la
commande :
mail adresses_des_destinataires
o adresses_des_destinataires reprsente la liste des adresses email des destinataires, spares par des virgules, sans espace 24 .
21. Supprimer les signes diacritiques (accents, cdille, ...) ventuels dans les noms et prnoms et utiliser
le tiret - pour les noms ou prnoms composs.
22. Cest dire sans gestion de curseur par les flches.
23. sauf si la bote aux lettres est vide, lancer alors mail -f.
24. Il sagit, encore une fois, que le shell considre la liste des destinataires comme un seul mot.

12

v.958

20142015

UPMC M1 : MNI

Chapitre 2. Session Unix, rseau

Une fois la commande lance, le programme mail demande le sujet du message. Il se place
ensuite en mode entre, en attente de la saisie du corps du message. Pour indiquer la fin
du corps du message, il faut saisir une ligne rduite un point . en premire colonne.
Apparat alors linvite Cc : (Carbon Copy) qui demande les adresses des destinataires
ventuels qui lon peut envoyer une copie du message.
Il est galement possible de saisir grce un diteur de texte le corps du message dans un
fichier message.txt, par exemple puis denvoyer ensuite le fichier par mail laide de
la commande :
mail adresses_des_destinataires < message.txt
Loption -s permet par ailleurs de prciser le sujet 25 du mail :
mail -s "sujet du message" adresses_des_destinataires < message.txt
Loption -f bote permet de spcifier un fichier de bote aux lettres particulier et
mail -f empche la sortie immdiate dans le cas o la bote est vide.
Les utilitaires pine et alpine
Lutilitaire pine (Program for Internet News and Email) possde une interface pleine page
en mode texte permettant une navigation dans la hirarchie des menus. En dehors du
menu, pine affiche une ou deux lignes dcrivant les fonctions accessibles par la frappe
simultane de la combinaison touche contrle et dune lettre-clef 26 . Il prsente une aide
contextuelle en ligne et des fonctions volues, parmi lesquelles le tri des messages suivant de nombreux critres, la gestion dun annuaire, de botes aux lettres multiples, la
possibilit dchanger des fichiers attachs, ... Enfin, pine est configurable la fois au
niveau du serveur mais aussi de chaque utilisateur (menu Setup). Le dveloppement de
pine a t arrt pour laisser place alpine dvelopp sous une autre licence.

2.4.2

Connexion distance via slogin

Si un utilisateur est connect sur une machine localhost qualifie de locale, et sil
possde un compte sur une machine distante dist_host dans le domaine 27 domain dont
laccs est autoris, il peut sy connecter grce la commande scurise par cryptage
slogin. Le mcanisme dauthentification sur la machine distante peut exiger une saisie
du mot de passe ou sappuyer sur un change de clefs.
syntaxe
slogin user @dist_host.domain
Plus gnralement, il est possible de passer des commandes sur la machine distante grce
la commande 28 :
ssh user @dist_host.domain dist_cmd

2.4.3

Transfert de fichiers distance via scp et sftp

Lutilisateur peut changer des fichiers personnels entre deux machines, sans ouvrir de
session sur la machine distante, via la commande scp, selon une syntaxe proche de celle de
cp, en prfixant le chemin daccs des fichiers distants par user @dist_host.domain :
(le rpertoire par dfaut est alors le rpertoire daccueil de lutilisateur distant). Le
mcanisme dauthentification est le mme quavec slogin, et les changes sont aussi
scuriss par cryptage.
25. Le sujet ne doit constituer quun seul mot au sens du shell ; cest pourquoi il doit tre encadr
par des apostrophes simples, quote (') ou doubles, double quote (") sil comporte des blancs (cf. 11.2.4,
p. 83).
26. Attention, certaines actions sont dclenches immdiatement par ces touches, sans attendre de
confirmation.
27. Par exemple dsi.upmc.fr dsigne le sous-sous-domaine de la dsi inclus dans le sous-domaine de
lUniversit Pierre et Marie Curie, lui mme appartenant au domaine gographique fr.
28. Bien noter que le shell local interprtera les caractres spciaux non protgs de la commande ; si on
souhaite que ceux-ci ne soient interprts que par le shell distant, il faut les protger soit individuellement
par un \ , soit par des dlimiteurs de protection faible " ou forte ' (cf. 11.2.4, p. 83).

20142015

v.958

13

Chapitre 2. Session Unix, rseau

UPMC M1 : MNI

syntaxe
scp [[user1 @]host1 :]file1 [[user2 @]host2 :]file2
scp file1
[user2 @]host2 :file2
local vers distant
scp [user1 @]host1 :file1
file2
distant vers local
La commande scp, qui demande le mot de passe chaque invocation, est mal adapte
pour transfrer un nombre important de fichiers. On lui prfre sftp qui permet douvrir
avec une seule authentification une session de transfert de fichiers pendant laquelle il est
possible de lister les fichiers distants, de se dplacer dans la hirarchie et de deffectuer
des transferts dans les deux sens. Un utilisateur connect sur une machine localhost
qualifie de locale, et qui possde un compte sur une machine distante dist_host peut
aussi changer des fichiers personnels entre ces deux machines en ouvrant une session
sftp (secure file tranfer protocol)
syntaxe
sftp user @dist_host.domain
Aprs lauthentification sur le serveur distant, lutilisateur peut importer des fichiers
distants grce la requte get dist_file , ou exporter des fichiers vers la machine
distante par put local_file ; dautres requtes telles que ls, cd, pwd sadressent au
serveur distant alors que lcd (local change directory) concerne la machine locale ; exit
ou quit permet de terminer la session sftp.

2.4.4

Navigateur

Les explorateurs Web (lynx, mozilla-firefox, opera, konqueror, amaya, ...) permettent daccder des ressources dinformations distribues sur le rseau Internet.
Cet accs se fait par lintermdiaire de diffrents protocoles, comme ftp (File Transfer
Protocol), http (Hypertext Transport Protocol), ou sa version https scurise par cryptage.
Les ressources fournies travers le protocole http sont appeles pages Web. Elles sont
localises grce une adresse dite URL (Universal Resource Locator).
Exemples dURL :
file:/home/lefrere/M1/Doc/Unix/
sur la machine locale
http://www.formation.jussieu.fr/ars/2011-2012/UNIX/cours/
http://www.w3.org/TR/xhtml1
Autres outils La commande wget est trs efficace pour tlcharger des fichiers ou
(rcursivement) des hirarchies de fichiers depuis un serveur (ftp ou http) ds que lon
connait leur URL, qui peut tre obtenue via un navigateur en utilisant loption copier
ladresse du lien obtenue avec le clic droit de la souris. En effet wget est outil non
interactif trs robuste qui peut sadapter des liaisons de faible dbit et grer lui-mme
les reprises de transfert en cas dchec.
Exemple 29 de tlchargement de lintroduction linux de Machtelt Garrels :
wget "http://tldp.org/LDP/intro-linux/intro-linux.pdf"
Noter que le systme de gestion de paquets RPM de la distribution Red-Hat utilise un
autre outil de transfert en ligne de commande, curl qui gre de nombreux protocoles
(ftp, http, https, ...).

29. Ne pas oublier de protger par des guillemets doubles les caractres spciaux comme le :
(cf. 11.4.4, p. 85) de linterprtation par le shell (cf. 11.2.4, p. 83).

14

v.958

20142015

Chapitre 3

Hirarchie de fichiers
3.1

Arborescence des fichiers

Sous unix, lensemble des fichiers est structur sous la forme dune hirarchie de rpertoires et de fichiers constituant un arbre unique. Un exemple partiel darborescence est
donn dans la figure 3.1.
/

bin

dev

etc

ls

home

group_a

user_a1

lib

tmp

group_b

user_a2

usr

man

user_b1

man1

cat1

Lgende
rpertoire
dir_1

file1

file2

dir_1
fichier ordinaire

Figure 3.1 Arborescence des fichiers unix


sa racine (root) est le rpertoire qui contient tous les autres fichiers ; on la dsigne
par /
ses nuds sont des sous-rpertoires : /bin pour les excutables, /dev pour les
priphriques, /etc pour le systme, /home pour les utilisateurs, /tmp pour les
fichiers temporaires, /usr pour les outils, ... qui eux-mmes contiennent des fichiers (feuilles de larbre) ou dautres sous-rpertoires (par exemple les groupes
dutilisateurs) qui...
ses feuilles sont les fichiers.
Remarques : Larbre unique dunix est purement logique ; plusieurs priphriques
amovibles (disques, clefs-USB, ...) peuvent y tre monts temporairement : cette
opration de montage peut tre considre comme la greffe de la branche de la
hirarchie de fichiers du priphrique amovible en un point de montage (par exemple
/media/cdrom, /media/removable) de larbre unix.
15

Chapitre 3. Hirarchie de fichiers

UPMC M1 : MNI

Sous windows, le sparateur est la contre-oblique \ (antislash) ; les priphriques sont


dsigns par une lettre prfixe suivie de :, par exemple C:\ ou D:\ qui constituent
chacun un arbre.
Rpertoire daccueil : Au sein de cette hirarchie, chaque utilisateur se voit attribuer
par ladministrateur (cf. 2.1.1, p. 4) un rpertoire daccueil (home directory) personnel,
do part une branche de larbre qui contient les sous-rpertoires et fichiers ordinaires qui
lui appartiennent 1 . La variable denvironnement HOME contient le chemin absolu daccs
au rpertoire daccueil (cf. 11.1.4, p. 80).

3.1.1

Chemins daccs des fichiers et rpertoires

Tout fichier unix peut tre rfrenc par son chemin daccs (path), cest--dire la description du chemin quil faut parcourir dans larborescence partir dun certain rpertoire
pour atteindre le fichier en question. Le chemin est spcifi par les noms des rpertoires
spars par des / et suivis du nom du fichier.
Rpertoire de travail :
Pour simplifier la dsignation des fichiers, on introduit la notion de rpertoire courant ou
de travail (working directory) dans lequel les fichiers peuvent tre nomms sans prciser
de chemin. Le rpertoire courant est dsign par un point . . La commande pwd
permet dafficher le chemin absolu du rpertoire de travail ; le rpertoire de travail peut
voluer en cours de session grce la commande interne cd (cf. 2.3.10, p. 11). Lors
de louverture de la session unix, le rpertoire de travail est par dfaut le rpertoire
daccueil de lutilisateur.
Ainsi, pour dsigner un fichier, on peut indiquer, suivant que lon part de la racine ou
du rpertoire courant :
un chemin absolu : il comporte la liste complte des rpertoires traverss depuis
la racine, et commence toujours par / 2
Exemples : /usr/man/man1/ls.1, /home/group_a/user_a1, (cf. figure 3.1, p. 15)
un chemin relatif : il comporte la liste des rpertoires parcourir depuis le
rpertoire courant jusquau fichier ou rpertoire choisi. Il ne commence jamais par
/ (on peut dire quil commence par . ) et doit passer par un nud commun la
branche de dpart (rpertoire courant) et la branche darrive. La notation ..
permet de remonter dun niveau dans la hirarchie, cest--dire au rpertoire pre.
Exemples, partant de /home/group_a/user_a1 :
dir_1, ../, ../user_a2, ../../group_b/user_b1, (cf. figure 3.1, p. 15)
Raccourcis pour les rpertoires daccueil
Enfin, le symbole ~ permet de rfrencer le rpertoire daccueil dun utilisateur
quelconque 3 sous la forme ~user . Il se comporte donc comme un raccourci dun chemin
absolu. Par exemple, ~user_a2 est quivalent /home/group_a/user_a2/. Enfin ~
sans nom dutilisateur dsigne votre propre rpertoire daccueil 4 .

3.1.2

Visualisation dune branche avec tree

La commande tree permet de reprsenter une branche de la hirarchie de fichiers. Plu1. En gnral, un utilisateur na pas le droit de crer de fichier en dehors de cette branche du systme
de fichiers unix, sauf dans le rpertoire /tmp (cf. 3.1.4, p. 21).
2. Si le chemin commence par ~, cest un raccourci de chemin absolu qui, une fois dvelopp par le
shell, dbutera par /
3. Ce qui suit ~ doit imprativement tre un nom dutilisateur, dont le rpertoire daccueil est
unique, mais surtout pas un nom quelconque de fichier ou de sous-rpertoire dont il peut exister plusieurs
versions dans des rpertoires diffrents.
4. Donc ~ est quivalent ${HOME}, cf. 11.1.4, p. 80

16

v.958

20142015

UPMC M1 : MNI

Chapitre 3. Hirarchie de fichiers

sieurs options y ont le mme sens que dans ls : en particulier, -F ajoute un / la


fin des noms de rpertoires, -a permet dafficher les fichiers cachs. Loption -d permet
de nafficher que les rpertoires.
Par exemple, avec comme rpertoire de
travail le rpertoire /home de larbre
de la figure 3.1, p. 15, la commande
tree -F . affiche :

Loption -f (full) permet dafficher le


chemin complet partir du rpertoire
donn en argument de la commande.
tree -F -f . affiche :

.
|-|
|
|
|
`--

.
|-|
|
|
|
`--

groupe_a/
|-- user_a1/
|
|-- dir_1/
|
`-- file1
`-- user_a2/
groupe_b/
|-- user_b1/
|
|-- dir_1/
|
`-- file1
`-- user_b2/

8 directories, 2 files

3.1.3

./groupe_a/
|-- ./groupe_a/user_a1/
|
|-- ./groupe_a/user_a1/dir_1/
|
`-- ./groupe_a/user_a1/file1
`-- ./groupe_a/user_a2/
./groupe_b/
|-- ./groupe_b/user_b1/
|
|-- ./groupe_b/user_b1/dir_1/
|
`-- ./groupe_b/user_b1/file1
`-- ./groupe_b/user_b2/

8 directories, 2 files

Changement de rpertoire de travail : exemples

La commande interne cd (change directory) permet de changer de rpertoire de travail.


Sans paramtre, cd permet daccder au rpertoire daccueil, alors que cd rep permet
daccder un rpertoire quelconque spcifi par son chemin (absolu ou relatif).
Les exemples illustrs ci-aprs partent du rpertoire courant /home/group_a/user_a1.
La commande cd. ne modifie pas le rpertoire courant car . dsigne le rpertoire
courant.

bin

dev

etc

ls

home

group_a

cd .

user_a1

dir_1

file1

tmp

group_b

user_a2

Figure 3.2 La commande


/home/group_a/user_a1.
20142015

lib

man

user_b1

file2

cd .

v.958

usr

man1

cat1

dir_1

laisse

dans

le

rpertoire

courant

17

Chapitre 3. Hirarchie de fichiers

UPMC M1 : MNI

bin

dev

etc

ls

home

group_a

lib

tmp

group_b

usr

man

cd ..

user_a1

dir_1

user_a2

user_b1

file1

file2

man1

cat1

dir_1

Figure 3.3 Partant de user_a1, la commande cd .. dplace dans le rpertoire pre,


soit group_a.

bin

dev

etc

ls

home

group_a

dir_1

tmp

group_b

usr

man

user_a2

../
user_a1

lib

user_a2

file1

user_b1

file2

man1

cat1

dir_1

Figure 3.4 Partant de user_a1, la commande cd ../user_a2 dplace dans le rpertoire user_a2
18

v.958

20142015

UPMC M1 : MNI

Chapitre 3. Hirarchie de fichiers

bin

dev

etc

home

lib

usr

group_b

../
ls

tmp

group_a

group_b

man

../

user_b1

user_a1

dir_1

user_a2

user_b1

file1

file2

man1

cat1

dir_1

Figure 3.5 Partant de user_a1, la commande cd ../../group_b/user_b1 dplace


dans le rpertoire user_b1.

home

bin

dev

etc

home

lib

tmp

usr

group_b
ls

group_a

group_b

man

user_b1

user_a1

dir_1

user_a2

file1

user_b1

file2

man1

cat1

dir_1

Figure 3.6 La commande cd /home/group_b/user_b1 fait du rpertoire user_b1 le


rpertoire courant quel que soit le rpertoire de dpart car elle utilise un chemin absolu.

20142015

v.958

19

Chapitre 3. Hirarchie de fichiers

3.1.4

UPMC M1 : MNI

Attributs des fichiersdroits daccs

Affichage des droits avec ls -l


La commande ls -l permet dafficher les attributs des fichiers, dans lordre suivant :
type et droits daccs, nombre de liens, nom du propritaire, nom du groupe (cf. 2.2.4,
p. 8), taille et date.
-rwxr-xr-x
1 p6m1mni p6pfal
1346 Oct 08 18:24 MNI.profile
Le type et les droits daccs sont affichs laide de 10 caractres :
1. Le premier caractre reprsente le type du fichier :
- pour un fichier ordinaire,
l pour un lien (link),
d pour un rpertoire (directory),
...
2. Les neuf suivants doivent tre interprts par groupes de trois :
les trois premiers reprsentent les droits du propritaire symbolis par u (user),
les trois suivants reprsentent les droits du groupe auquel il appartient, g
(group),
les trois derniers reprsentent les droits des autres utilisateurs o (others 5 ).
Pour chaque public 6 , trois droits principaux peuvent tre accords, dans lordre :
lecture r (read),
criture w (write),
excution x (execute).
Si un droit nest pas accord, le signe moins - vient remplacer r, w ou x.
type
-/d/l
-

propritaire
user
r w
x

groupe
group
r w x

autres
others
r w x

Droits dendossement
la place de lattribut x sur un fichier excutable 7 , on peut positionner la permission
s : celui qui excute le fichier acquiert alors temporairement les droits du propritaire 8
(set uid bit), ou du groupe (set gid bit) lors de lexcution du fichier.
Exemple : droits sur le fichier /etc/passwd Le fichier /etc/passwd 9 contient les
mots de passe cods de tous les utilisateurs. Son propritaire est ladministrateur du
systme (root). Il ne peut pas accorder de permission permanente en criture sur ce
fichier aux utilisateurs.
-rw-r--r-1 root
root
1199 Sep 6 17:16 /etc/passwd
Mais chaque utilisateur doit pouvoir modifier son mot de passe grce la commande
passwd dont le code est situ dans le fichier excutable /usr/bin/passwd.
Lattribution de la permission s ce fichier, dont le propritaire est ladministrateur,
permet daccorder temporairement les droits du super-utilisateur chaque utilisateur
authentifi lors de lexcution de la commande passwd : en particulier, cela lui permet
dcrire son mot de passe cod dans le fichier /etc/passwd.
-r-s--x--x
1 root
root
16084 Apr 27 23:37 /usr/bin/passwd
5. Ne pas confondre avec owner.
6. Noter que si un droit est refus au titre du groupe par exemple, un utilisateur ne peut pas invoquer
un droit sur une entit plus vaste (les autres ici) pour accder un fichier.
7. Pour des raisons de scurit, certaines implmentations dunix nautorisent pas lattribut s pour
les shell-scripts.
8. On qualifie alors deffective user le propritaire du fichier excut, par rapport au real user qui
lance la commande. La permission s est qualifie de droit dendossement.
9. Dans les systmes scuriss, les mots de passe cods sont en fait stocks dans un fichier
/etc/shadow, qui nest plus accessible qu ladministrateur y compris en lecture.

20

v.958

20142015

UPMC M1 : MNI

Chapitre 3. Hirarchie de fichiers

Restriction au propritaire du droit de destruction


Notons aussi quil est possible de placer sur un rpertoire un droit qui interdit de dtruire
un fichier dont on nest pas propritaire. Cette restriction est en gnral impose sur le
rpertoire /tmp. Elle est reprsente par t la place de x en dernire position :
drwxrwxrwt 25 root root 4096 2013-09-15 22:02 /tmp/
Cas des liens symboliques
Noter que les liens symboliques ont tous leurs droits ouverts : cela implique quils ne
limitent pas les droits qui sont en fait ports par la cible du lien.
Cas des rpertoires
Rappelons que laffichage des attributs dun rpertoire (et non des fichiers quil contient)
se fait avec la commande ls -ld. La signification des droits sur les rpertoires est un B
peu particulire :
w permet dajouter, de renommer, de supprimer des fichiers dans le rpertoire (mais ce
droit nest pas ncessaire pour modifier le contenu dun fichier)
r ncessaire pour afficher la liste des fichiers du rpertoire
x permet dagir sur les fichiers du rpertoire, donc de le traverser, den faire son rpertoire de travail (mme si on ne peut pas afficher la liste de son contenu)
Si on souhaite permettre aux autres dexplorer un rpertoire, il faut donc leur accorder
les droits rx.
Noter que la permission x sur le rpertoire est ncessaire pour afficher les attributs des
fichiers quil contient, notamment avec ls -l (cf. 2.3.1, p. 9), alors que cest le droit r 10
qui permet dafficher la liste sans les attributs.
Modification des droits avec chmod
Seul le propritaire 11 dun fichier peut modifier ses droits daccs par la commande :
chmod mode fichier
o mode reprsente une concatnation de trois lments :
le ou les publics concerns : u, g, o ou toute combinaison ou enfin a (all soit ugo),
suivi de lopration raliser :
= (dfinition, lexclusion de tout autre droit pour un public donn),
+ (ajout),
- (suppression),
suivie des droits considrs r, w, x ou une concatnation des ces droits.
Ainsi, la commande chmod g+x toto donne au groupe, en plus des droits daccs actuels,
celui dexcuter le fichier toto. On peut enfin fournir une liste de modes selon la syntaxe
prcdente, en sparant les lments par des virgules, sans espace.
Pour chacun des trois publics, les droits daccs peuvent aussi tre reprsents de faon
numrique par la valeur exprime en base huit selon les poids des trois droits suivants :
r=4, w=2, x=1. Les droits sont donc reprsents par trois 12 chiffres en octal.
Ainsi les droits dun fichier ouvert toutes
les oprations pour tous sauf celle dcriture
rserve au propritaire seront caractriss
par le mode numrique 755.

public
symbolique
binaire
octal

u
rwx
111
7

g
r-x
101
5

o
r-x
101
5

10. Dans le cas o le rpertoire comporte le droit r, mais pas x, la commande ls -F ou avec colorisation,
qui fait appel aux attributs pour dcorer le listing, va provoquer un message derreur, mais affichera
cependant la liste. Si la commande ls est un alias imposant une de ces options, il faut lancer la commande
native via \ls pour afficher la liste sans provoquer derreur.
11. ainsi que root, ladministrateur de la machine.
12. On doit ajouter gauche un autre chiffre octal (0 zro par dfaut) si on prend en compte le suid
bit s (poids 4), le guid bit (poids 2) et le sticky bit t ou le bit affect aux rpertoires restreignant les
destructions aux fichiers dont on est propritaire (poids 1).

20142015

v.958

21

Chapitre 3. Hirarchie de fichiers

UPMC M1 : MNI

Exemple : aprs chmod 600 f1, seul son propritaire peut lire et crire sur f1. Cette
commande quivaut chmod u=rw,go= f1 en symbolique.
Droits par dfaut : la commande interne umask
Les droits par dfaut attribus lors de la cration dun fichier dpendent de loutil de
cration 13 , mais ils ne peuvent pas tre plus tendus que ceux dfinis par un masque
dont chaque bit 1 bloque lattribution du droit qui se situerait sa position. La valeur
de ce masque peut tre affiche par la commande interne (cf. 15.1.1, p. 100) umask sans
argument. Elle peut tre modifie 14 par umask mode . Loption -S de umask permet dex primer ce masque en termes symboliques. Le masque minimal consiste bloquer le droit
dcriture sauf pour le propritaire des fichiers, cest dire umask -S u=rwx,g=rx,o=rx,
soit umask 022. Mais une valeur couramment adopte est umask 027, qui bloque tous
les droits en dehors du groupe. Cependant, une fois le fichier cr, la commande chmod
(cf. 3.1.4, p. 21) permet de modifier ses droits indpendamment du masque courant.
Pour quun changement de valeur du masque ne soit pas oubli en fin de session, il doit
tre effectu dans les fichiers dinitialisation du shell.
Cas des systmes de fichiers non unix Le systme de droits que nous venons de

B dcrire est propre au systme unix. Si on effectue le montage dun disque externe ou

dune clef USB initialement sous windows, il est probable quils soient vus sous unix
avec tous les droits ouverts, y compris le droit dexcution pour des fichiers o il na
aucun sens.

3.2

Autres commandes de gestion des fichiers

3.2.1

Rechercher rcursivement des fichiers avec find

La commande find est une commande trs puissante qui permet de rechercher dans la
hirarchie des fichiers selon de nombreux critres (nom, date, taille, droits, type, ...) qui
peuvent tre combins entre eux, et dappliquer des commandes aux fichiers slectionns.
Elle rpond la syntaxe suivante :
syntaxe
find rpertoire critre(s) action
La recherche seffectue rcursivement dans toute la branche 15 situe sous le rpertoire
indiqu en premier argument et les chemins affichs pour les fichiers trouvs partiront
tous de rpertoire .
Critres de recherche de find
Les critres de slection les plus courants sont :
-name motif
nom selon un motif (-iname pour ignorer la casse)
-size entier [ckM] taille (+/- entier plus grand/plus petit que lentier spcifi)
unit : octet (c), kilo-octet (k), mga-octet (M)
-newer fichier
plus rcent quun fichier
-type T
de type donn (f=ordinaire, d=rpertoire, l=lien symbolique)
13. Par exemple, un fichier cr par un diteur de texte, nest pas excutable par dfaut : sil sagit
dun fichier de commandes (cf. 12.1, p. 86), il faut le rendre excutable par la commande chmod +x.
En revanche, la compilation et ldition de lien dun fichier source fortran ou C produit un fichier
a.out immdiatement excutable sans avoir utiliser chmod... sauf si le masque courant na pas permis
dattribuer ces droits !
14. Le changement de masque ne modifie en rien les droits des fichiers existants. Il limite seulement
les droits pour les fichiers crs ultrieurement.
15. Il est possible de limiter la profondeur dexploration de find dans les sous-rpertoires par loption
-maxdepth suivie dun nombre de niveaux.

22

v.958

20142015

UPMC M1 : MNI

Chapitre 3. Hirarchie de fichiers

Actions sur les fichiers trouvs


Les actions les plus usites que find peut lancer sont :
-print
affichage de la liste des fichiers (un par ligne avec leur chemin relatif
ou absolu selon le choix fait pour le premier argument de la commande)
-ls
affichage de la liste des fichiers avec leurs attributs
(comme par la commande ls -dils 16 )
-exec cmd excution de la commande unix cmd pour chacun des fichiers slectionns (syntaxe dlicate)
Lusage le plus simple de cette commande est de rechercher dans une partie de larborescence les fichiers portant un nom donn :
find . -name x.c -print
(cf. fig. 3.7, p. 23)
affiche la liste de tous les fichiers nomms x.c dans la branche situe sous le rpertoire
courant.
dir

Lgende
rpertoire
fichier
ordinaire

repA

rep1

rep

x.c

z.c

repB

rep2

toto

rep1

y.c

x.c

rep

x.c

Figure 3.7 Recherche des fichiers nomms x.c partir du rpertoire dir avec la
commande find . -name x.c -print si dir est le rpertoire de travail. Trois fichiers
sont trouvs et leurs chemins affichs partir du rpertoire de travail sous la forme
./repA/x.c par exemple. Si le rpertoire de travail tait repA, pour rechercher aussi
partir de dir, il faudrait lancer la commande find ../ -name x.c -print.
Interactions avec le shell
Pour rechercher des fichiers dont le nom correspond un motif gnrique, il faut protger B
les caractres spciaux du motif comme * de linterprtation par le shell (cf. 11.2.4, p. 83),
qui se ferait sinon dans le rpertoire de travail quel que soit le rpertoire de recherche.
La commande suivante recherche partir du rpertoire courant, tous les fichiers dont le
nom se termine par .c (cf. fig. 3.9, p. 24 et fig. 3.10, p. 25).
find . -name '*.c' -print
Pour rechercher chez tous les utilisateurs partir du rpertoire /home, tous les fichiers
dont le nom se termine par le suffixe .f90, il est prfrable de se dbarasser des messages
derreur qui surviennent cause des permissions daccs restreintes, en redirigeant la
sortie derreur vers un fichier poubelle .
find /home -name '*.f90' -print 2>/dev/null (cf. 10.5.1, p. 76)
16. Loption -d est ici ncessaire pour afficher les attributs des rpertoires et non celles des fichiers
quil contiennent (cf. 2.3.1, p. 9).

20142015

v.958

23

Chapitre 3. Hirarchie de fichiers

UPMC M1 : MNI

dir

Lgende
rpertoire
fichier
ordinaire

repA

rep1

rep

x.c

z.c

repB

rep2

toto

rep1

y.c

x.c

rep

x.c

Figure 3.8 Si dir est le rpertoire de travail, la commande qui permet de rechercher les
fichiers nomms x.c partir du sous-rpertoire repA est find repA -name x.c -print
Seulement deux fichiers sont trouvs ./repA/x.c et ./repA/rep1/x.c

dir

Lgende
rpertoire
fichier
ordinaire

repA

rep1

rep

x.c

z.c

repB

rep2

toto

rep1

y.c

x.c

rep

x.c

Figure 3.9 Dans la commande find . -name *.c -print, le caractre * est interprt (dans le rpertoire courant) par le shell et *.c est remplac par z.c avant dtre
pass find. Seul le fichier z.c est donc trouv dans la branche dir (cf. mthode correcte fig. 3.10, p. 25). Noter que si, sans changer de rpertoire de travail, la recherche se
faisait par find repA -name *.c -print, on rechercherait encore un fichier z.c, mais
sous repA : on ne trouverait alors aucun fichier ce nom.

24

v.958

20142015

UPMC M1 : MNI

Chapitre 3. Hirarchie de fichiers

dir

Lgende
rpertoire
fichier
ordinaire

repA

rep1

rep

x.c

z.c

repB

rep2

toto

rep1

y.c

x.c

rep

x.c

Figure 3.10 Pour viter linterprtation du caractre * par le shell (cf. fig. 3.9, p. 24),
on le protge en lentourant par des . Ainsi find repA -name *.c -print permet
de trouver les 5 fichiers de suffixe .c de la branche dir.
Exemples
find /tmp -size +1000c -size -2000c -print
affiche la liste des fichiers de taille entre 1000 et 2000 octets sous /tmp
find . -name a.out -exec rm {} \;
recherche les fichiers a.out sous le rpertoire courant et les supprime :
{} dsigne le nom de chaque fichier trouv (avec son chemin daccs)
\; indique la fin de la commande 17 appliquer chaque fichier. Bien noter quindiquer la fin de la commande dclenche par exec est indispensable car on peut
par exemple faire suivre la commande find dun tube.
find ~/src -name "*.c" -exec grep -l math {} \; | wc -l
permet de compter le nombre de fichiers de suffixe .c qui contiennent la chane math
dans le rpertoire src (situ dans le rpertoire daccueil de lutilisateur).

3.2.2

Archiver des arborescences de fichiers avec tar

La commande tar 18 est utilise pour archiver des hirarchies de fichiers des fins de
sauvegarde ou de transfert entre deux machines (cf. par exemple Fig. 3.11, 3.12 et 3.13).
17. Il faut protger le caractre ; de linterprtation par le shell o est lance la commande find : cest
le rle de la contre-oblique, qui sera consomme par le shell avant interprtation du find (cf. 11.2.4,
p. 83).
18. Le nom de cette commande signifie tape archive, cest--dire sauvegarde sur bande magntique. Elle
prsente dailleurs des similitudes avec la commande ar de gestion des bibliothques. Avec lvolution
des ressources disque et lusage du rseau, les fichiers darchives peuvent maintenant tre stocks sur
disque et il faut alors les nommer, do loption -f.

20142015

v.958

25

Chapitre 3. Hirarchie de fichiers

UPMC M1 : MNI

home/

cd ~/..

tmp/

f.tar

gp_b/

gp_a/

ua1/

tar cf /tmp/f.tar ua1

dir1/

dir2/

file1

f1_1

d21/

ua0/

transfert de f.tar
entre les 2
machines

home/

user0/

user1/

repA/

repB/

tmp/

cd ~user1/repB/
f.tar

tar xf ~user1/f.tar
ua1/

dir1/

dir2/

f1_1

d21/

file1

Figure 3.11 Recopie dune branche via tar : cration de larchive f.tar de la branche
(cf. Fig. 3.12, p. 26), transfert de larchive et extraction sous repB (cf. Fig. 3.13, p. 27)

home/

cd ~/..

gp_a/

tmp/

f.tar

gp_b/

Figure 3.12 Cration


(sous /tmp) de larchive
f.tar de la branche de
lutilisateur ua1 :

1) cd ~/..
2) tar -cf /tmp/f.tar ua1
ua1/

tar cf /tmp/f.tar ua1

dir1/

dir2/

file1

f1_1

d21/

ua0/

26

v.958

Noter que f est la dernire option et doit tre


suivie du nom du fichier
darchive avec son chemin
et que le dernier argument doit tre un chemin
relatif.

20142015

UPMC M1 : MNI

Chapitre 3. Hirarchie de fichiers

home/

user0/

tmp/

user1/

cd ~user1/repB/
repA/

repB/

f.tar

tar xf ~user1/f.tar
ua1/

dir1/

dir2/

f1_1

d21/

Figure 3.13 Restauration de


branche partir de larchive :
1) cd ~/repB/
2) tar -xf ~/f.tar
Noter que la restauration se
fait partir du rpertoire courant.

file1

Syntaxe de la commande tar


tar options [archive] rpertoire
tar options [archive]

pour crer larchive de la branche rpertoire


pour exploiter larchive (liste ou restauration)

Principales actions possibles 19 (une et une seule par commande) :


-c (create) cration de larchive partir de larborescence (cf. fig. 3.12) ;
-t (list) liste des fichiers tels quils seront extraits ;
-x (extract) extraction des fichiers pour restaurer larborescence (cf. fig. 3.13).
Autres options combinables :
-f archive (file) option argument pratiquement obligatoire qui permet de prciser
le nom du fichier darchive utilis 20
-v
(verbose) affiche des informations complmentaires
-z
(gzip) compression ( la cration) ou dcompression (lors de la lecture)
la vole 21 du fichier darchive
Exemple de duplication dun compte
cration : On se place gnralement juste au-dessus de la branche archiver lors de la
cration pour que la restauration puisse se faire dans un seul rpertoire, facile
dplacer en cas derreur.
cd ~user1/../ ; tar -cvf /tmp/archive.tar user1
19. Noter que tar admet aussi une syntaxe plus ancienne o les actions ne sont pas prcdes par le
caractre -, introducteur doptions : tar cvf archive.tar rep.
20. Sans loption f, larchive est stocke sur une bande magntique. Si larchive est crite sur la sortie
standard, ou lue sur lentre standard, on spcifie -f - ; un exemple classique est la duplication dune
branche de larbre unix avec une commande tar c et une commande tar x relies par un tube (cf. 10.3,
p. 73) dans lequel est redirige larchive, qui napparat donc plus en tant que fichier :
cd rep_source; tar -cf - . | (cd rep_cible; tar -xf - )
Noter que la seconde partie de la commande est lance dans un sous-shell (cf. 10.5.4, p. 77) dans lequel
seffectue le changement temporaire de rpertoire de travail.
21. Il existe aussi une option j pour compresser/dcompresser avec bzip2/bunzip2, ainsi que des
options Y et J pour effectuer ces oprations avec respectivement unlzma ou xz.

20142015

v.958

27

Chapitre 3. Hirarchie de fichiers

UPMC M1 : MNI

archive dans le fichier archive.tar (du rpertoire /tmp/), toute larborescence de


lutilisateur user1 en partant du rpertoire pre de son rpertoire daccueil
liste : tar -tf /tmp/archive.tar
affiche la liste des fichiers archivs dans archive.tar
extraction : tar -xvf /tmp/archive.tar
restaure larchive dans le rpertoire courant (en crant donc un rpertoire user1
sous le rpertoire courant).
Autres options de tar :
-X motif ou --exclude=motif permet dexclure de lopration les fichiers dont les
noms correspondent au motif spcifi ; si ce motif comporte des caractres spciaux, il
est ncessaire de les protger dune interprtation par le shell.
-d compare les fichiers archivs avec ceux du systme de fichiers et signale les diffrences.
-w demande une confirmation pour les oprations potentiellement destructives comme
le remplacement dun fichier.
Sauf si on est administrateur de la machine, il faut viter de
sauvegarder une hirarchie dfinie par son chemin absolu 22 , sinon elle ne pourra pas tre
restaure dans un autre rpertoire. Dailleurs, seul ladministrateur pourra la restaurer.

B Remarque importante :

3.2.3

Copier des fichiers avec la commande rsync

La commande rsync constitue un outil trs puissant de copie de fichiers et de hirarchies


travers le rseau : trs efficace, en particulier pour les mises jour pour lesquelles seules
les diffrences sont transfres, ventuellement compresses, elle permet notamment la
synchronisation de rpertoires distants et la mise jour de miroirs. Les nombreuses
options disponibles concernant notamment les droits, les dates et les rgles de slection
des fichiers en font un outil prcieux pour les administrateurs.
Elle permet de faire des copies sur la machine locale, de la machine locale vers une
machine distante ou en sens inverse.
rsync [options] source [user@host:]dest
rsync [options] [user@host:]source dest
Parmi les options les plus usites :
-v (verbose) prolixe
-n affiche les transferts qui seraient effectus sans les dclencher
-r (recursive) rcursif : recopie de toute la branche de larborescence
-t (time) prserve les dates
-p (permissions) prserve les droits
-z (zip) compression pour le transfert
-l (links) copie les liens symboliques en tant que liens symboliques
-u (update) mise jour : ne copie pas les fichiers qui sont plus rcents ct destinataire
--exclude=motif permet dexclure les fichiers dont le nom correspond au motif indiqu
--cvs-exclude (ou -C) permet dexclure les fichiers dadministration des systmes de
gestion de sources (comme subversion).
Exemple
rsync -rvtpu --exclude='*~' user@sappli1.dsi.upmc.fr:mni/unix/ ~/unix-mni
met jour (-u) rcursivement (-r) le rpertoire ~/unix-mni de la machine locale partir
du rpertoire ~user/mni/unix/ du serveur sappli1, en prservant aussi les droits (-p)
22. Certaines versions de tar avertissent lutilisateur qui tente darchiver une branche dfinie par son
chemin absolu et enlvent le / initial, ce qui permet une ventuelle restauration de la branche sans droit
administrateur ; mais lutilisation dun chemin absolu reste dconseille, car la restauration va alors crer
toute une hirarchie de rpertoires inutiles.

28

v.958

20142015

UPMC M1 : MNI

Chapitre 3. Hirarchie de fichiers

et les dates (-t), mais sans transfrer (--exclude) les fichiers de suffixe ~ (sauvegardes
de la version prcdente faites par lditeur vi) et affiche (-v) les oprations effectues.

3.2.4

Manipuler des chemins avec dirname et basename

Les commandes dirname et basename analysent des noms de fichiers 23 avec leur chemin
daccs et en extraient les composantes, en coupant au niveau du dernier sparateur /
dirname affiche la partie correspondant au nom du rpertoire dattachement donc
jusquau dernier /
basename affiche la partie correspondant au nom du fichier seul 24 donc aprs le
dernier /
Ces commandes sont employes en particulier dans des procdures automatiques de
manipulation de fichiers crites en shell (cf. chap. 12).
Exemples :
dirname /home/p6pfal/p6m1mni/toto
dirname toto
basename /home/p6pfal/p6m1mni/toto
basename toto

affichera
affichera
affichera
affichera

/home/p6pfal/p6m1mni
. (rpertoire courant)
toto
aussi toto

La commande basename accepte en deuxime argument une chane de caractres dont


le nom sera amput du ct droit avant affichage. Cette chane est trs souvent (mais
pas ncessairement) le suffixe du nom du fichier.
Exemples :
basename /home/p6pfal/p6m1mni/toto.c .c affichera toto
basename toto.f90 .f90
affichera aussi toto
basename data ta
affichera da

3.2.5

Dcouper des fichiers avec split et csplit

Un fichier texte peut tre dcoup (sur des lignes entires) en plusieurs fichiers, en
fonction soit du nombre de lignes avec split, soit du contexte avec csplit.
split dcoupage nombre de lignes fixes (1000 par dfaut), sauf ventuellement le
dernier fichier plus petit :
split [-l nb_de_lignes ] fichier
csplit coupure lors de loccurrence dun motif dfini par une expression rationnelle en
parcourant les lignes du fichier dentre
csplit fichier '/exp /offset ' '{n }'
o exp est une expression rationnelle (cf. chap. 6) qui dfinit la ligne de la coupure
(au dcalage optionnel offset prs) et n le nombre de fois o la recherche est
rpte (* signifiant autant de fois que ncessaire). Si n est diffrent de *, le
nombre maximum de coupures est n+1 et le nombre de fichiers de sortie est au
maximum n+2 .
Les noms des fichiers rsultants sont dfinis automatiquement avec comme prfixe par
dfaut x pour split ou xx pour csplit et un suffixe pris dans la srie aa, ab, ac, ...,
ba, bb ... pour split et dans la srie 00, 01, 02, ..., 10, 11 ... pour csplit.
Exemples
Par exemple, pour dcouper une base de donnes bibliographique base.bib au format
BibTEX, avec seulement des rfrences de livres introduites par le dbut de ligne @book{,
en un fichier par livre, on excutera (loption -z vite la cration dun fichier vide si le
23. Ces commandes analysent les chemins de fichiers indpendamment de lexistence de ces fichiers :
elles servent souvent constituer leur nom avant de les crer.
24. Le fichier en question peut tre un rpertoire, auquel cas laffichage de son nom par ls -F ajoute
un / terminal de dcoration qui ne doit pas tre pris pour un sparateur.

20142015

v.958

29

Chapitre 3. Hirarchie de fichiers

UPMC M1 : MNI

motif est trouv ds la premire ligne) :


csplit -z base.bib '/^@book{/' '{*}'
La commande csplit permet de sparer un fichier source en C ou fortran comportant
un programme principal et lensemble de procdures quil appelle en autant de fichiers
que de procdures.
Il est possible de spcifier la partie suffixe des noms des fichiers produits avec un format de
conversion de lentier qui les numrote habituellement grce loption -b. Par exemple,
pour dcouper le fichier source fortran unique complet.f90 en un fichier par module et
un fichier pour le programme principal, et nommer les fichiers xx0.f90, xx1.f90, etc,
on pourra utiliser la commande 25 :
csplit -b '%d.f90' complet.f90 '/end *module/+1' '{*}'
Le dcalage +1 fait que la coupure intervient aprs la ligne de fin de module. Le dernier
fichier produit est le programme principal, obligatoirement plac aprs le dernier module.

25. Le motif utilis pour rechercher les fins de modules, ici en minuscules, peut tre gnralis pour
accepter aussi les majuscules selon la syntaxe des expressions rgulires (cf. 6.3.2, p. 53) :
[eE][nN][dD] au lieu de end

30

v.958

20142015

Chapitre 4

dition, visualisation, impression


4.1
4.1.1

Les fichiers texte et leurs codes


Fichiers texte et fichiers binaires

Tous les fichiers sont avant tout des fichiers binaires dont certains peuvent reprsenter du
texte. La commande file fichier permet davoir une ide du type du fichier considr :
elle reconnait entre autres les fichiers sources crits dans les principaux langages, les
fichiers binaires excutables sur certains processeurs, les fichiers au format pdf (portable
document format), les fichiers darchives (de suffixe .tar), certains fichiers (texte ou
binaires) dimages...
Bien que, sous unix, les noms de fichiers ne comportent pas obligatoirement dextension
(ou suffixe), et puissent contenir plusieurs caractres . comme linux.tar.gz, il
est dusage (et impratif pour utiliser certaines commandes) dassocier une extension
chaque type de fichier. Par exemple, les fichiers source C et fortran90 porteront respectivement le suffixe .c et .f90, les fichiers binaires objets rsultant de la compilation de
ces sources porteront lextension .o et lexcutable issu de ldition de lien sappellera
par dfaut a.out. Les types de fichiers sont trs nombreux et on pourra sen donner une
ide en consultant par exemple le site http://www.file-extensions.org/ et, pour les
plus courantes la page durl : http://www.file-extensions.org/extensions/common
Le tableau situ en annexe (p. 113), prsente quelques suffixes usuels de fichiers, les
types associs, leur signification et le nom dun ou plusieurs logiciels permettant de les
produire, de les lire ou de les transformer.
La commande od (octal dump) permet dafficher sous diverses formes le contenu binaire
dun fichier. Elle permet entre autres dafficher un aperu du contenu de fichiers binaires
grce une ou plusieurs options -t qui spcifient comment interprter les octets (nombre
doctets grouper et conversion suivant un type), par exemple :
od -t o2 pour des entiers en octal sur 2 octets ;
od -t c pour des caractres ASCII ou des squences dchappement (sur 1 octet)
od -t d4 pour des entiers sur 4 octets (32 bits) ;
od -t f4 ou od -t fF pour des flottants sur 4 octets (32 bits).
Enfin, la commande strings permet dextraire dun fichier binaire les parties de texte
affichable. Par exemple, si un programme C ou fortran comporte lcriture dun message,
lexcutable (a.out) produit par compilation du fichier source inclut le texte du message
quil doit afficher. Ainsi la commande strings a.out affichera, parmi beaucoup de texte,
le message spcifi dans le fichier source.

4.1.2

Codage des fichiers texte

Les fichiers dits texte sont eux-mmes constitus de squences binaires reprsentant
les caractres selon un certain codage. Seuls les (128) caractres cods sur 7 bits ASCII
(American Standard Code for Information Interchange) sont reconnus de faon identique sur
la plupart des systmes. Mais de nombreux codages sur 8 bits ont permis dtendre 256
caractres le code ASCII afin de reprsenter les caractres dits nationaux, notamment les
caractres accentus. Ils se distinguent suivant les groupes de langues quils permettent
de reprsenter et les systmes dexploitation :
31

Chapitre 4. dition, visualisation, impression

UPMC M1 : MNI

La norme iso-8859 est dcline en plusieurs variantes rgionales dont le code iso-8859-1,
ou iso-latin1 pour lEurope occidentale utilis sous unix 1 .
Les systmes propritaires utilisent parfois dautres codages comme IBM ou Windows avec les codes CPxxx comme CP850 ou CP1252 (trs proche du code iso-8859 2 ,
voir man iso-8859-15), MacRoman pour MacIntosh...

4.1.3

Le codage unicode

Enfin, un standard de reprsentation des caractres de lensemble des langages du monde,


Unicode 3 , aussi connu sous la norme iso-10646 a t dfini et est en cours dimplmentation dans les systmes et les logiciels. Il permet de reprsenter environ un million de
caractres, numrots en binaire de 0 220 1 : ils ne peuvent donc tre tous cods sur
2 octets et trois codages ont t associs au standard Unicode :
UTF-32 o tous les caractres sont cods sur 4 octets ;
UTF-16 o les caractres les plus courants sont cods sur 2 octets et les autres sur
deux 16-uplets grce des codes dindirection ;
UTF-8 o les caractres les plus courants sont cods sur 1 octet et les autres sur un
2, 3 ou 4 octets. Cest sous ce codage quUnicode commence tre dploy. Si UTF8 et iso-8859-1 concident dans le codage des caractres de lASCII, il nen est pas
ainsi pour les caractres pourvus de signes diacritiques du latin-1, cods en gnral
B
sur deux octets en UTF-8, ce qui oblige distinguer octet et caractre, autrefois
confondus. Dans un environnement UTF-8, la commande wc -cm (cf. 2.3.9, p. 11
et 15.4.3, p.106) permet de dtecter les caractres sur plus dun octet mais aussi
les combinaisons invalides issues de liso-8859-1.
En UTF-8, les premiers bits dun octet permettent de dterminer son rle dans la
reprsentation des caractres :
sil commence par 0, cest un code ascii pur sur un seul octet ;
sil commence par 10, cest un octet de suite ;
sil commence par 110, cest le premier octet dun caractre sur 2 octets ;
sil commence par 1110, cest le premier octet dun caractre sur 3 octets ;
sil commence par 1111, cest le premier octet dun caractre sur 4 octets.
Pour plus de prcisions, on pourra consulter le manuel de Desgraupes (2005).

4.1.4

Outils de transcodage des fichiers texte

Deux commandes, recode 4 et iconv 5 , permettent de convertir des fichiers texte dun
code lautre. Par exemple, la commande suivante 6 convertit le fichier fic-iso.txt
cod en iso-8859-1 vers le fichier fic-utf8.txt cod en UTF-8 :
recode 'ISO-8859-1..UTF-8' < fic-iso.txt > fic-utf8.txt
La mme conversion peut tre accomplie par iconv :
iconv -f ISO-8859-1 -t UTF-8 < fic-iso.txt > fic-utf8.txt
Loption -l (list), commune ces deux commandes, permet dafficher la liste des codages
disponibles. Noter enfin que seul recode peut effectuer des transcodages irrversibles
1. Le codage iso-8859-1 ne comporte pas le caractre , ni les ligatures et , pourtant ncessaires en
franais, ni le symbole de leuro. On lui prfre la version plus rcente iso-8859-15 (voir man iso-8859-15)
ou iso-latin9 qui inclut ces caractres ( la place de 1/2 et la place de 1/4 par exemple).
2. Dans le code CP1252, les 32 caractres de contrle de 128 159 de liso-8859-15 ont t remplacs
notamment par le caractre , les ligatures et , le symbole de leuro, ... La position de ces caractres
nest donc pas la mme que dans le code iso-8859-15. Des apostrophes typographiques ont aussi t
ajoutes, qui sont parfois mal reconnues des systmes unix et traduites par des points dinterrogation.
3. cf. http://www.unicode.org/, http://hapax.qc.ca/
4. cf. http://recode.progiciels-bpi.ca/
5. cf. http://www.gnu.org/software/libiconv/
6. Prendre garde que recode travaille par dfaut en place sur le fichier fourni en argument de la
commande. Si on souhaite conserver le fichier dorigine dans le codage initial, il est donc prudent d alimenter recode par redirection.

32

v.958

20142015

UPMC M1 : MNI

Chapitre 4. dition, visualisation, impression

condition de prciser loption -f (force). Cest le cas lorsque lon souhaite supprimer
accents et signes diacritiques pour obtenir de lascii plat :
recode -f latin1..flat < fic-iso.txt > fic-ascii.txt
Les fichiers texte peuvent tre affichs par des commandes du type cat ou more (less
sous linux), commandes de visualisation de fichiers vues prcdemment. Un diteur de
texte permet de crer ou modifier un fichier texte, mais on verra que les filtres unix
permettent aussi des manipulations sur les fichiers texte. Noter enfin que les diteurs de
texte modernes comme vim 7 et emacs peuvent prendre en charge le transcodage au vol 8
des fichiers textes.

4.2

dition de fichiers texte

Sous unix, on distingue plusieurs types dditeurs de texte selon le mode dinteraction
avec lutilisateur :
ligne : les diteurs ex et ed de base dunix, puissants et trs robustes (utilisables
avec un terminal quelconque), mais dinterface aujourdhui un peu dsute ;
pleine page : ces diteurs doivent connatre le type de terminal utilis, dclar
par la variable denvironnement TERM et ses capacits de gestion du curseur texte,
... informations stockes sous la forme dune base de donnes de terminaux.
vi qui est une sur-couche de ex : trs puissant, prsent sur tous les unix, cest
aussi le seul disponible lors de linstallation du systme.
Une version amliore, vim (cf. http://www.vim.org/), est diffuse comme
logiciel libre notamment sous linux : dot dune interface plus agrable (en
particulier les commandes ex, passes sous linvite : bnficient dun historique et sont ditables de faon similaire la ligne de commande du shell),
cest un diteur sensible au langage (C, fortran, LATEX, ...) qui permet la mise
en valeur de la syntaxe par des couleurs, la compltion des mots-clefs, ... Enfin, il permet dditer des textes dans diffrents codages de caractres et en
particulier unicode (cf. 4.1.3, p. 32).
emacs (cf. http://www.gnu.org/software/emacs/emacs.html) est encore
plus puissant, et permet aussi daccomplir dautres tches (courrier, navigation, ...) mais savre plus gourmand en ressources.
environnement graphique multi-fentres avec menus, gestion de la souris, ...
Dans cette catgorie figurent la fois des diteurs lmentaires trs simples demploi, mais aussi des outils trs puissants comme gvim (version graphique de vim),
xemacs ou gedit 9 . Ces derniers ncessitent alors des ressources importantes, qui
ne les rendent pas toujours praticables distance.

4.2.1

Les modes des diteurs

Un diteur prsente deux modes principaux de fonctionnement :


le mode commande 10 o les caractres saisis sont interprts comme des ordres
(requtes), donc immdiatement excuts ;
le mode insertion o les caractres saisis sont directement insrs dans le fichier.
Le mode par dfaut est :
le mode commande sous vi, ce qui savre trs droutant au premier abord. Le B
7. La manipulation des caractres cods sur plusieurs octets ncessite une version de vi compile
avec loption +multi_byte, ce que lon peut vrifier en lanant vi --version.
8. Dans le cas dun transcodage au vol, lditeur vi affiche alors lavertissement converti sur la ligne
dtat.
9. On prfrera gedit nedit qui ne gre pas le codage UTF-8.
10. Ne pas confondre les commandes internes de lditeur plus prcisment appeles requtes et les
commandes au sens dunix interprtes par le shell.

20142015

v.958

33

Chapitre 4. dition, visualisation, impression

UPMC M1 : MNI

passage en mode insertion doit se faire par une requte (cf. figure 4.1, p. 34).
le mode insertion sous emacs. Les requtes doivent alors tre introduites par des
caractres de contrle : Ctrl , chap

4.3

Lditeur vi

Sous vi, un certain nombre de requtes permettent de passer du mode commande au


mode insertion :
a et A (append), ajout aprs le curseur ou en fin de ligne ;
i et I (insert), insertion avant le curseur ou en dbut de ligne ;
o et O (open), ouverture dune ligne aprs ou avant la ligne courante.
Il nexiste quune mthode pour passer du mode insertion au mode commande : appuyer
sur la touche chap (Escape).

i, I (insert)
a, A (append)
o, O (open)

vi file
Mode

Mode

commande

Saisie

shell

Esc

ZZ

q (quit)
q!

vi
w

Mode

(write)

w file
r file (read)

ex

Figure 4.1 Modes de fonctionnement de vi


Un troisime mode, le mode dialogue est accessible de faon temporaire depuis le mode
commande de vi pour :
passer des requtes ex via la requte :
rechercher de motifs dans le texte (via les requtes / ou ? )
Ces requtes sont actives par la touche Entre , et immdiatement aprs leur excution,
lditeur revient en mode commande. On peut enfin considrer un quatrime mode dit
de remplacement (overwrite), initi notamment par les requtes R ou c, o les caractres
frapps viennent se substituer au texte dj prsent. La sortie de ce mode seffectue via
la touche dchappement.

4.3.1

Principales requtes de lditeur vi

Dplacements
Les dplacements se font en mode commande 11 en principe.
11. Si, sur les versions modernes de vi, il est possible de dplacer le curseur avec les flches en mode
insertion, il faut tre conscient quen fait ce dplacement est interprt par une commutation du mode :
sortie du mode insertion, puis dplacement et enfin retour au mode insertion comme avec la requte
a . Si donc, on ritre la dernire commande ayant fait appel ce mcanisme par la requte . ,
on ne fera quajouter le texte insr aprs le dplacement. De mme, lannulation par la requte u
ne portera que sur cette dernire phase dinsertion postrieure au dplacement.

34

v.958

20142015

UPMC M1 : MNI

Chapitre 4. dition, visualisation, impression

les quatre flches


0 premire colonne, $ fin de ligne
par mots : w (word, dbut de mot vers lavant), e (end, fin du mot suivant), b (backwards,
dbut de mot vers larrire)
par crans : ^F (forward, vers le bas), ^B (backward, vers le haut)
en spcifiant le numro de ligne n : n G (Go)
Modifications
rc (replace) remplace 12 le caractre point par le curseur par le caractre c
cw (change word) change un mot
~ passe de majuscule minuscule et rciproquement
Destructions
x dtruit le caractre point par le curseur
dw (delete word) dtruit le mot droite du curseur
dd dtruit la ligne courante
Restitution de la mmoire tampon
p (paste) restitue le contenu du tampon aprs le curseur ; P le restitue avant
Applications
xp permet de permuter deux caractres... en cas de dyslexie au clavier !
ddp permet dchanger deux lignes (la courante et la suivante)
Divers
. ritre la commande prcdente
u (undo) annule la prcdente commande
% bascule le curseur dun dlimiteur lautre dans les paires comme ()[]{}
J (join) concatne deux lignes (la ligne suivante la ligne courante)
^L rafrachit laffichage
Recherche de chanes de caractres
/motif recherche motif vers lavant
?motif recherche motif vers larrire
n (next) recherche loccurrence suivante dans le mme sens
N (Next) recherche loccurrence suivante dans le sens inverse
Compltion automatique des mots
La compltion automatique des mots, disponible avec vim, permet de simplifier la saisie
des textes. En mode insertion, aprs avoir crit le dbut du mot, saisir ^P (Previous) ou
^N (Next) 13 pour rechercher un mot commenant ainsi et dj prsent dans le fichier
en dition. Si plusieurs mots commencent par ce motif, vim affiche une mini-liste dans
laquelle on peut se dplacer avec les flches.

4.3.2

Requtes ex

Lditeur vi nest quune sur-couche pleine page de lditeur ligne ex, dont il peut exploiter toutes les requtes, condition de passer dans le mode ex grce au caractre :
(cf. Fig. 4.1, p. 34).
12. Bien noter que dans cette requte il ne faut pas utiliser la touche dchappement pour signifier la
fin de la saisie.
13. La recherche rebouclant de la fin de fichier vers le dbut, choisir ^P ou ^N change seulement lordre
dans lequel seffectue la recherche.

20142015

v.958

35

Chapitre 4. dition, visualisation, impression

UPMC M1 : MNI

Requtes ex lmentaires
:q (quit) sort de vi
:q! force une sortie sans sauvegarde
:w (write) sauvegarde dans le fichier courant
:w fic sauvegarde dans le fichier fic
:r fic (read) ajoute le contenu du fichier fic aprs la ligne courante
Adressage des commandes ex
La porte par dfaut dune commande ex est la ligne courante, sauf si la requte est
prcde dune adresse (numrique ou paramtre).
:n1 , n2
de la ligne n1 la ligne n2
:., n
de la ligne courante ( . ) la ligne n
:n , $
de la ligne n la dernire ligne
:n1 ,+n2
+ adressage relatif
:n1 ,-n2
- adressage relatif
:% ou :1,$
lensemble des lignes
:/motif1 /,/motif2 /
de la premire ligne contenant motif1 la premire
ligne contenant motif2 en partant de la ligne qui
suit la ligne courante
Autres commandes ex
d
co (ou t)
m
s/ch1 /ch2 /
g

(delete) dtruit des lignes


(copy) copie des lignes
(move) dplace des lignes
(substitute) substitue une chane une autre
(global search) recherche un motif

Exemples de commandes ex
:r toto
:.,+10w toto
:.,$d
:1,5co32
:1,3m$
:g/motif/d

ajoute le fichier toto aprs la ligne courante


crit les 11 lignes partant de la ligne courante dans le fichier
toto
dtruit depuis la ligne courante jusqu la fin du fichier
copie les lignes 1 5 aprs la ligne 32
dplace les trois premires lignes la fin de fichier
recherche toutes les occurrences de motif dans le fichier et
dtruit les lignes o il est prsent

Substitutions lmentaires
:s/motif1/motif2/
:s/motif1/motif2/g (global)
:s/motif1/motif2/gc (confirm)

le premier motif1 ventuel sur la ligne courante est


remplac par motif2
tous les motif1 ventuels de la ligne courante sont
changs en motif2
idem mais une confirmation est demande avant substitution

Expressions rgulires
Pour construire des motifs gnriques, on peut utiliser des caractres spciaux en suivant
la syntaxe des expressions rgulires (voir chapitre 6). Dans les seconds membres des
substitutions, le motif effectivement trouv peut tre rfrenc par &. Par exemple :
:s/[-+=]/ & /g
entoure les symboles -, + et = par des espaces, & reprsente le motif effectivement trouv
36

v.958

20142015

UPMC M1 : MNI

4.3.3

Chapitre 4. dition, visualisation, impression

Configuration de vi

Les nombreuses options de vi/ex sont accessibles par :set


:set
affiche ltat des principales options
:set all
affiche ltat de toutes les options (trs nombreuses pour vim)
:set nu (:set number) affiche les numros des lignes
:set nonu
naffiche plus les numros des lignes
:set list
affiche ^I pour les tabulations
et marque les fins de ligne par $
:set nolist
affiche normalement les tabulations
et ne marque pas les fins de ligne
:set ic
ignore la casse (majuscule/minuscule) dans les recherches
:set encoding
affiche le codage employ
:set encoding=utf-8 choisit le codage UTF-8 (cf. 4.1.3, p. 32)
:set encoding=latin1 choisit le codage ISO-8859-1
:language
affiche les variables de contrle local (cf. 15.4.1, p. 105)
On peut stocker les choix doptions personnels dans le fichier de configuration de ex :
~/.exrc (les options particulires de vim peuvent tre dfinies dans le fichier ~/.vimrc).
Laide-mmoire en annexe page 125 prsente un rsum des commandes de vi.
On pourra consulter la FAQ http://vimdoc.sourceforge.net/htmldoc/vimfaq.html
et une URL enthousiaste pour lditeur vi : http://thomer.com/vi/vi.html
Correction orthographique vim propose des outils de correction orthographique
sappuyant sur des dictionnaires installs dans le rpertoire /usr/share/vim/spell/ 14
par dfaut. condition davoir install le dictionnaire franais dans le codage du fichier
en dition, la commande :setlocal spell spelllang=fr par exemple active la vrification orthographique pour le franais. Les mots inconnus sont alors affichs sur un fond
color et si on saisit z= avec le curseur sur le mot, des suggestions sont proposes. Des
dictionnaires pour les principales langues (en codage latin1 ou utf-8) sont disponibles sur
le site http://ftp.vim.org/vim/runtime/spell/ 15 .
Pour plus de dtails, consulter par exemple le paragraphe Spell checking dans la documentation https://wiki.archlinux.org/index.php/vim.
Comparaison et fusion de fichiers texte On notera de plus la commande vimdiff
qui permet, comme diff, de comparer deux fichiers texte, mais aussi de les diter en
parallle. Le terminal est spar verticalement en deux fentres , et chaque fichier est
disponible en dition dans une fentre. Les lignes communes sont masques et les diffrences colorises ; on change de fentre active en dition par la combinaison de touches
^W w ; la sortie ddition des 2 fichiers se fait par :qa
Noter enfin que vim permet de dcouper lcran selon la verticale ^W V ou lhorizontale
^W N (comme avec vimdiff), pour diter plusieurs fichiers dans un mme terminal 16 .

4.4

Les diteurs emacs et xemacs 17

emacs est lun des diteurs de textes les plus courants sous unix, aprs vi. Cest galement lun des plus puissants et lun des plus complets, ce qui na pas que des avantages :
ce logiciel est plus gourmand en ressources que vi, ce qui peut le rendre malcommode
utiliser sur des machines peu puissantes ou partages entre un grand nombre dutilisateurs.
14. Si ncessaire, on peut complter titre personnel par des dictionnaires placs sous le rpertoire
~/.vim/spell/
15. Par exemple, http://ftp.vim.org/vim/runtime/spell/fr.utf-8.spl pour le dictionnaire franais au codage utf-8.
16. Cette possibilit existe aussi sous emacs, (cf. 4.4.5, p. 40).
17. Section rdige par Frdric Meynadier (Frederic.Meynadier@obspm.fr)

20142015

v.958

37

Chapitre 4. dition, visualisation, impression

UPMC M1 : MNI

Son utilisation basique est plus simple que celle de vi, notamment parce quil ny
a pas de sparation entre ldition et la saisie, et que les versions modernes disposent
de menus droulants comparables ceux que lon trouve dans les diteurs de textes
la mode Windows. En parallle, de nombreuses commandes et de nombreux raccourcis
claviers en font un outil de choix pour ldition de textes, quil sagisse de codes de
programmation ou de simples fichiers texte. On pourra notamment consulter Cameron
et Rosenblatt (1997) en franais, ou Cameron et al. (2004) plus rcent en anglais
pour explorer plus en profondeur les possibilits demacs.
emacs et xemacs sont deux branches dun mme logiciel : cette diffrence de dnomination correspond des divergences dopinions entre dveloppeurs il y a quelques
annes, mais les deux logiciels sont essentiellement identiques et, sauf bug, les commandes utilises dans lun marchent aussi dans lautre. La principale diffrence visible
est la prsence dune barre doutils cliquable sous la barre des menus de xemacs. Cest
pourquoi les paragraphes suivants ne feront pas la distinction entre les deux.

4.4.1

Fonctions de base

Le dmarrage du logiciel se fait simplement en tapant


emacs monfichier &
Une fentre souvre alors, avec le fichier en question prt tre dit. Si emacs est lanc
sans argument, la page qui souvre est un petit mode demploi qui sefface lorsquon
presse une touche, pour tre remplac par trois lignes davertissements (qui invitent
ouvrir ou crer un fichier avant dcrire : menu File/Open File...).
Signalons quil est possible de demander emacs de ne pas ouvrir de fentre supplmen taire 18 , mais de sexcuter dans le terminal do on le lance : il suffit pour cela de taper
emacs -nw (no window).
La frappe du texte peut dmarrer directement (il ny a pas de mode insertion
spcifique enclencher). Dfinition : emacs appelle les textes en cours ddition des
Buffers.
Une fois ldition termine, il faut enregistrer les modifications. Cela peut se faire la
souris (Menu : File/save (current buffer) ou File/save buffer as... puis taper le
nom du fichier dans la ligne du bas, selon le cas). On quitte via le menu File/Exit Emacs.
En cas doubli denregistrement, emacs rappelle que le buffer nest pas enregistr et
propose de le faire.

4.4.2

Principe des raccourcis clavier

Lune des principales caractristiques de emacs est doffrir une multitude de raccourcis
clavier trs utiles, et qui peuvent devenir des rflexes si on les utilise souvent. Malheureusement, en raison du nombre de fonctions disponibles, ces raccourcis sont plus compliqus
que ceux auxquels on peut tre habitu et ncessitent souvent plus de 2 touches...
Par exemple : lenregistrement du buffer en cours se fait en maintenant appuye la touche
Control puis en pressant les touches x et s. Ce raccourci est rappel dans le menu
droulant sous la forme C-x C-s. Pour quitter, le raccourci est C-x C-c. En fait toutes
ces touches sont proches, ce qui fait que laction enregistrer puis quitter , extrmement
courante, se fait trs vite et devient rapidement un rflexe. Certains raccourcis rclament
une touche M, qui correspond la touche Meta (qui existe sur les claviers des stations
Sun, par exemple). Sur les PC, cette touche est gnralement remplace par le Alt situ
gauche du clavier 19 . Dans les paragraphes qui suivent, les raccourcis claviers seront
indiqus autant que possible en complment des menus concerns.
18. Cette mthode est prcieuse quand on travaille distance sans serveur de fentres graphiques, ou
via un rseau dbit insuffisant.
19. Humour dinformaticien : cette apparente complication a pouss les informaticiens prtendre
que emacs signifie Esc-Meta-Alt-Control-Space et quon narrive rien sans appuyer simultanment
sur toutes ces touches.

38

v.958

20142015

UPMC M1 : MNI

4.4.3

Chapitre 4. dition, visualisation, impression

Fonctions ddition de texte

Les fonctions de copier-coller la souris sont disponibles : il est possible de surligner le


texte copier en glissant la souris avec le bouton gauche enfonc, puis de coller laide
dun clic du bouton du milieu (ou de la molette). Selon les configurations, le collage aura
lieu partir du curseur ou partir de lendroit o se trouvait la souris au moment du
clic faites lexprience !
emacs introduit galement des raccourcis dditions de ligne qui ont t, par la suite,
introduits dans la plupart des shells (dont bash, cf. 2.2.2, p. 6). Citons C-k, qui efface
toute une ligne et la copie en mmoire. Il est possible de stocker ainsi plusieurs lignes par
appui rpt, condition de navoir pas dplac le curseur entre deux appuis. Le collage
se fait alors par C-y. Si pour une raison ou pour une autre les touches spciales (retour
au dbut de ligne, end, etc...) ne sont pas correctement configures et ne marchent pas,
les raccourcis suivants peuvent tre utiles : C-b revient en arrire (back) dun caractre,
C-e va la fin (end) de la ligne, C-a retourne au dbut de la ligne (le b de beginning
tait dj pris...).
Dans tous les cas, si vous ne savez plus quoi faire et que la ligne du bas vous pose
des questions auxquelles vous ne savez pas rpondre, vous pouvez taper C-g qui annule
toutes les commandes en cours et vous ramne ldition de texte.
Les fonctions de recherche et de remplacement automatique sont bien videmment disponibles. C-s propose une recherche incrmentale : cela signifie que emacs va chercher
tous les mots commenant par ce que vous tapez, au fur et mesure que vous le tapez.
Pour passer dune occurrence lautre, tapez nouveau C-s. Le traditionnel search and
replace est accessible par le menu Edit/Search/Replace... (raccourci : M-%, soit pour la
plupart des PCs : Alt(gauche)-shift-% ). Il faut dabord taper le mot que lon souhaite
remplacer, puis ce par quoi on souhaite le remplacer. La recherche ne se fait que sur le
texte situ aprs le curseur. chaque occurrence, emacs sarrte et propose deffectuer
le remplacement. y ou espace signifie oui, n signifie non, ! signifie oui pour tous
et q signifie terminer.
Autres fonctions utiles pour la lisibilit du texte : sil nest pas activ par dfaut, le retour
la ligne automatique se fait en tapant M-x auto-f<tab>, le tab compltant le nom
de commande auto-fill-mode. Ponctuellement, pour reformater un paragraphe, on
peut utiliser M-q.
En cas derreur ou de manuvre intempestive, il est toujours possible de revenir en
arrire grce dit/Undo(ou C-_).

4.4.4

Aides ldition

emacs est trs adaptable aux diffrents types de tche quon lui demande. En devinant
le type de texte que vous allez taper, grce lextension (*.c, *.f90, *.html, *.tex par
exemple), il se place automatiquement dans un mode prdfini. Souvent, cela se traduit
par lapparition dun menu spcifique dans la barre des menus. Normalement, cela active
automatiquement aussi une gestion spcifique de lindentation (cest dire les retraits
obtenus par la touche tab ) ainsi que la coloration syntaxique : les lments spcifiques
du langage, par exemple program en fortran ou int en C, apparaissent dune couleur
diffrente, choisie de faon faire ressortir la structure du programme.
Exemple dutilisation de lindentation : lintrieur dun programme en C, une boucle
for commence comme suit :
for (i = 0; i < N, i++) {
Lors du retour la ligne, emacs va se placer, de lui mme, en lger dcalage. Quand on
tape la ligne suivante, le rsultat ressemble donc ceci :
for (i = 0; i < N, i++) {
tab[i] = i;
Lors du retour la ligne suivant, emacs saligne sur le mme retrait. la dernire ligne
de la boucle, le seul caractre est } qui ferme le bloc : ds lappui sur entre, emacs
20142015

v.958

39

Chapitre 4. dition, visualisation, impression

UPMC M1 : MNI

replace laccolade fermante au mme niveau que for, et surligne brivement le dbut et
la fin du bloc :
for (i = 0; i < N, i++) {
tab[i] = i;
}
Si par la suite on ajoute une ligne au bloc, avec une mauvaise indentation, il suffit
de placer le curseur nimporte o dans la ligne puis de taper tab , ce qui restituera
lalignement correct.
Cette fonctionnalit aide aussi reprer les erreurs de syntaxe avant la compilation : en
oubliant par exemple un point virgule au bout dune ligne, le dbut de la ligne suivante
sera plac une indentation manifestement incorrecte car sattendant une continuation
de la ligne prcdente. Il suffit alors de corriger lerreur.
Notez nanmoins que lindentation automatique est une indication et pas une obligation 20 : il est toujours possible de placer ses lignes o on le souhaite coup de suppr
et de space . Nanmoins le respect dune indentation correcte est une aide prcieuse
pour rdiger des programmes lisibles.

4.4.5

Ouverture de plusieurs fichiers simultanment

emacs est capable douvrir simultanment plusieurs fichiers, par le menu File/Open File
ou le raccourci C-x C-f. Cette commande suppose de taper le nom du fichier. On dispose alors de la compltion automatique comme en shell : tapez les premires lettres
puis tab pour complter ce qui nest pas ambigu. Sil y a ambigut, un second appui
sur tab affiche une liste des fichiers possibles. Il est alors possible de choisir le fichier
concern la souris par un clic du bouton du milieu (ou de la roulette).
Cette option est de loin prfrable louverture dune seconde fentre emacs, par exemple
en tapant emacs fichier2 dans un autre shell. Dabord pour des raisons de performance : emacs, comme on la dit, est un logiciel relativement gourmand, il nest donc
pas souhaitable den avoir plusieurs qui tournent simultanment. Ensuite, emacs permet
facilement de grer plusieurs fichiers ouverts : le menu Buffers contient la liste des fichiers en cours ddition. Une toile signale les fichiers modifis par rapport la version
enregistre sur le disque dur. Le raccourci C-x s (pas de Control quand on appuie sur s,
cette fois !) permet denregistrer tous les fichiers ouverts. Enfin, si on veut diter deux fichiers simultanment, cest tout fait possible : la commande du menu File/New Frame
permet douvrir une seconde fentre ayant exactement la mme liste de buffers que la
premire. La commande du menu File/Split window (C-x 2) permet de sparer la
fentre en deux ; Unsplit Window (C-x 1) permet de revenir une seule fentre.

4.4.6

Fonctions avances

emacs est un logiciel extrmement complet et particulirement expansible. Les contributions de diffrents auteurs en font un logiciel trs polyvalent 21 .
Un inventaire complet de ces fonctionnalits serait impossible, aussi se limitera-t-on
quelques fonctions usuelles :
Slections par rectangles
Cette fonctionnalit est particulirement utile dans les fichiers de donnes, o les chiffres
sont aligns selon des colonnes. On surligne la souris une zone de texte telle que le dbut
du surlignage corresponde au coin suprieur gauche de la colonne ou des colonnes que
lon souhaite slectionner. La fin du surlignage doit correspondre au coin infrieur droit.
20. Sauf sous python, o lindentation dfinit les blocs.
21. Humour dinformaticien : emacs fait tout, mme le caf. Ple-mle, emacs peut servir pour
lenvoi et la rception de courrier lectronique, les calculs de dates dans tous les calendriers (y compris
les calendriers rpublicains et persans).

40

v.958

20142015

UPMC M1 : MNI

Chapitre 4. dition, visualisation, impression

Le surlignage dborde du rectangle sur toutes les lignes intermdiaires, qui semblent
intgralement slectionnes.
Les commandes suivantes sont alors utilisables : C-x r k coupe le rectangle slectionn,
et C-y le colle. C-x r r copie le rectangle dans un registre, quil faut nommer aprs en
frappant un caractre. Pour insrer ce registre ailleurs, la commande est C-x r i suivie
du caractre choisi prcdemment.
Cette procdure permet, par exemple, de changer lordre de colonnes, den supprimer,
de compacter un tableau en supprimant une colonne de blancs inutiles... Attention nanmoins ne pas tronquer les donnes involontairement.
Macros
Les macros servent excuter des oprations rptitives. La commande C-x ( entame
lenregistrement de la macro (au clavier uniquement). Il faut ensuite taper la suite de
touches exactement comme elles devront tre excutes. Lenregistrement est cltur
par C-x ). On peut alors excuter la macro grce C-x e. Combine la commande de
rptition (par exemple C-u 50 ? affiche 50 points dinterrogation la suite les uns des
autres), on peut excuter 50 fois la mme macro. La commande taper est alors C-u 50
C-x e.
Exemple pratique : un fichier contient mille lignes, et on veut insrer la ligne entre
chacune dentre elles. En se plaant au dbut du fichier, la suite de commandes est donc :
C-x
C-e
C-x
C-u

(
<entre> --- <flche bas>
)
998 C-x e

4.4.7

Internationalisation

Lditeur emacs dans ses versions rcentes dispose avec Multilingual Environment (mule)
de nombreuses fonctionnalits facilitant le multi-linguisme. Le codage du fichier en
dition dtect par emacs est indiqu sur la ligne dinformation par un 1 pour
iso-8859-1 et un u pour utf-8 avant le nom du fichier (cf. 15.4, p. 105). Il est
possible de convertir le tampon ddition dans un autre codage que lon peut choisir de
faon interactive grce au mini-tampon...

4.4.8

URLs

Un aide mmoire : http://www.tuteurs.ens.fr/unix/editeurs/emacs_memo.html


Le site de gnu/emacs (en anglais) : http://www.gnu.org/software/emacs/emacs.html
Le wiki de gnu/emacs : http://www.emacswiki.org/cgi-bin/emacs-fr
Une fiche rcapitulative des fonctions de base :
http://refcards.com/refcards/gnu-emacs/index.html

4.5
4.5.1

Impression
Gestion des impressions

Les commandes dimpression sont diffrentes suivant les systmes unix et on distingue
essentiellement les commandes BSD et System-V (comme aix) ; la commande lp relve
de la norme POSIX.
fonction

BSD

System-V

impression
tat de la file
annulation

lpr -Pimprim [fichier ]


lpq [-Pimprim]
lprm -Pimprim num_requte

lp -dimprim [fichier ]
lpstat [-pimprim]
cancel num_requte imprim

20142015

v.958

41

Chapitre 4. dition, visualisation, impression

UPMC M1 : MNI

Si on ne leur fournit pas de fichier dentre, les commandes dimpression lp et lpr


impriment lentre standard : elles peuvent donc tre alimentes par un tube (cf. 10.3,
p. 73). la demande dimpression par lp ou lpr, le systme rpond en attribuant un
identificateur numrique la requte, qui permet de la localiser dans la file dattente et
sera utilis si on souhaite annuler cette requte avant limpression.
Les imprimantes modernes sont gnralement des imprimantes laser postscript, configures de manire imprimer des fichiers de type postscript (suffixes .ps en gnral,
cf. p. 31) mais peuvent tre aussi utilises pour imprimer des fichiers texte.

4.5.2

Impression de fichiers non postscript

De faon assez gnrale, un fichier doit tre converti en langage postscript pour pouvoir tre imprim. Les outils de conversion dpendent de la nature des fichiers. titre
dexemple :
Pour imprimer un fichier de format pdf (portable document format), il faut en
gnral passer par un programme de conversion comme pdf2ps ou un programme
daffichage des pdf comme acroread ou xpdf, qui assure la conversion en postscript.
Mais les imprimantes rcentes sont souvent capables dinterprter le format pdf,
ce qui permet de lancer directement limpression de fichiers pdf via lpr.
Les fichiers dvi, produits par la compilations de sources LATEX avec latex, doivent
tre convertis en postscript par lutilitaire dvips pour tre imprims. Mais on peut
aussi compiler les sources LATEX avec pdflatex de faon obtenir directement des
fichiers pdf.
Les fichiers dimages dans de trs nombreux formats (jpeg, png, pbm, ppm...) doivent
aussi tre convertis en postscript ou pdf avant impression, par exemple avec loutil
convert.
Noter que les installations linux rcentes fournissent des outils qui simplifient limpression
des fichiers grce des outils de conversion automatiques : en particulier la commande
a2ps (all-to-postscript) permet dimprimer les fichiers texte 22 crits par exemple en C
ou en fortran en mettant en valeur la syntaxe de ces langages.

22. Attention, si a2ps gre correctement les caractres accentus franais en codage iso-8859 sur un
octet, il ne gre pas le codage UTF-8. Il faut donc recourir un transcodage du texte via iconv ou
recode (cf. 4.1.4, p. 32) pour le fournir a2ps.

42

v.958

20142015

Chapitre 5

Introduction aux filtres


5.1

Notion de filtre

On appelle filtre une commande qui lit les donnes dentre saisies au clavier (entre
standard), les transforme et affiche le rsultat lcran (sortie standard 1 ). On indique
la fin du texte saisi au clavier par un Ctrl-D (EOF End Of File) en dbut de ligne.
Les commandes cat, head, tail, wc, fold, cut, grep, sort et tr sont des filtres 2 . Les
filtres sont en gnral sensibles lenvironnement local (cf. 15.4, p. 105).

5.2

Classement avec sort

La commande sort trie, regroupe ou compare toutes les lignes des fichiers passs en
paramtre. Si aucun nom de fichier nest fourni aprs la commande, la lecture se fait
depuis lentre standard, i-e le clavier.
Par dfaut, sort effectue un tri sur les lignes dentre selon lordre lexicographique sur
tous les caractres de chaque ligne (en commenant par la gauche) et affiche le rsultat
lcran. Mais il est possible de prciser des critres de tri plus prcis : en dcoupant
chaque ligne en champs spars par un espace ou une tabulation, on peut spcifier avec
loption -k que le tri porte sur un ou plusieurs champs particuliers.

5.2.1

Principales options de sort

-r (reverse) pour trier selon lordre inverse ;


-f pour ignorer la casse (majuscule/minuscule) 3 ;
-b (blank) pour ignorer les blancs en tte de champ ;
-n (numeric) pour trier selon lordre numrique ;
-u (unique) pour ne garder que le premier exemplaire des lignes ex-quo du point
de vue du classement (mais pas forcment identiques) ;
-kdbut ,fin (key) classement selon les champs de numro compris entre dbut
et fin ;
-tdlim permet de choisir le sparateur de champs dlim (par dfaut, il sagit de
la catgorie [:blank:] qui comporte les espaces et les tabulations).
Recommandation Si les champs sont aligns verticalement en utilisant des espaces
multiples, il est prudent dutiliser systmatiquement loption -b pour viter que les es-
paces supplmentaires ne soient intgrs en tte de champ et influencent le classement.
1. Voir le chapitre 10 au sujet des entre et sortie standard.
2. Pour faire travailler ces filtres avec des fichiers, on pourra rediriger leurs entre ou sortie. Mais
la plupart des filtres, notamment cat, head, tail, wc, fold, cut, grep, sort et awk (mais pas tr),
admettent aussi le passage en paramtre dun ou plusieurs noms de fichiers dentre. Noter que dans ce
cas, ils peuvent exploiter le nom du fichier pass en paramtre, alors que ce nest plus possible avec une
redirection dentre. Cela se traduit par exemple avec wc par un affichage diffrent suivant la syntaxe
utilise : wc -c fichier affiche le nombre doctets et le nom du fichier, alors que wc -c < fichier
naffiche que le nombre doctets.
3. Avec une locale de type C ou POSIX, toutes les majuscules sont, par dfaut, classes avant toutes les
minuscules, selon lordre de la table des caractres ascii (cf. 15.4, p. 105). En revanche, avec une locale
francise, cette option nest pas ncessaire.

43

Chapitre 5. Introduction aux filtres

UPMC M1 : MNI

Tris hirarchiss Lorsque lon souhaite classer dabord selon un champ, puis classer
les ex-quo selon un autre champ, il faut utiliser plusieurs options -k. Bien noter que
B deux commandes sort relies par un tube ne produiraient pas le mme rsultat : le
deuxime classement dtruirait le premier.

5.2.2
1.

Exemples
bhi
bhi
cde
afh
aaa
cdi

az1
au
123
x
12 tuv

Si on saisit sort, puis les


lignes gauche suivies de
Ctrl-D , sort affichera
alors les lignes de droite.

aaa
afh
bhi
bhi
cde
cdi

12 tuv
x
au
az1
123

2. Dans lexemple prcdent, le tri porte sur la ligne dentre en intgralit. Loption
-kdbut ,fin o dbut et fin sont des entiers, permet deffectuer le tri sur la
portion de ligne comprise entre le champ numrot dbut et le champ numrot
fin inclus, o les champs correspondent aux mots de la ligne dentre spars par
une ou plusieurs espaces (sparateur par dfaut). Les options telles que n peuvent
alors porter sur un champ particulier.
Si on saisit la commande
Albert 15
Benito 5
sort -b -k2,2n, puis les
Benito 5
Estel
8.5
lignes gauche suivies de
Chati 12
Chati 12
Ctrl-D , sort affichera
Dole
17
Albert 15
alors
les lignes de droite,
Estel
8.5
Dole
17
classes selon la valeur nuValli 18.8
Valli 18.8
mrique du second champ.
3. sort permet de classer les fichiers lists par la commande ls -l avec leurs attributs
(la taille est le 5e champ et le nom est suppos le 8e, cf. 2.3.1, p. 9) :
ls -l | sort -b -k8,8
classe les fichiers par ordre lexicographique
ls -l | sort -b -k8,8r
classe les fichiers par ordre lexicographique
inverse de nom
ls -l | sort -b -k5,5n
classe les fichiers par ordre de taille croissante
ls -l | sort -b -k5,5n -k8,8
classe les fichiers par ordre de taille croissante puis les ex-quo par ordre lexicographique
ls -l | sort -b -k5,5n -u
classe les fichiers par ordre de taille croissante et naffiche quun exemplaire pour une
taille donne (fusion des ex-quo)
4. Les variables de langue (LC_ALL et LC_COLLATE) ont une importance cruciale dans
sort. Comparer (casse, accents, ...) les classements alphabtiques suivants :

ar

Abc
abc
tre
cas
chat

en franais
LC_COLLATE=fr_FR.UTF-8
LC_ALL=fr_FR.UTF-8

abc
Abc
ar
tre

cas
chat

en anglais
LC_COLLATE=C
LC_ALL=C

Abc
abc
ar
cas
chat

tre

5. sort -t: -k3,3n /etc/passwd affiche les lignes du fichier passwd (o le sparateur de champs est le caractre :) par numro did (troisime champ) croissant.
44

v.958

20142015

UPMC M1 : MNI

5.3

Chapitre 5. Introduction aux filtres

Remplacement de caractres avec tr

tr (translate) substitue (par dfaut) dans le flux dentre chaque caractre de lensemble
fourni en premier paramtre son correspondant de lensemble du deuxime paramtre et
affiche le rsultat sur la sortie standard.
syntaxe
tr jeu1 jeu2
Restriction : La commande tr nadmet pas de nom de fichier en paramtre : tr est B
un filtre pur 4 . Pour que tr lise les donnes dentre dans un fichier, il est ncessaire
dutiliser une redirection dentre (cf. 10.2.2, p. 73) :
tr jeu1 jeu2 < fichier
Exemples
La commande tr 'b' 'B' remplace les b par des B avant dafficher le texte saisi sur
lentre standard.
le balbutiement des bebes
suivi de Ctrl-D

est transform en

le BalButiement des BeBes

tr 'abc' '123' remplacera les a par des 1, les b par des 2 et les c par des 3.

5.3.1

Dfinition des jeux de caractres

Les jeux de caractres dentre et de sortie peuvent se recouvrir car tr travaille caractre
par caractre : ainsi tr 01 10 change les 0 et les 1.
condition de les protger de linterprtation par le shell, des caractres de contrle
du code ascii dsigns comme en langage C (\r pour carriage return, retour chariot par
exemple) peuvent tre utiliss dans les jeux dentre et de sortie.
La dfinition des jeux de caractres peut faire intervenir la notion dintervalle lexicographique (a-z par exemple pour reprsenter les minuscules de lascii).
tr '0-9' 'a-j' remplacera les chiffres par les dix premires lettres de lalphabet.
Mais les jeux de caractres peuvent tre construits partir de classes de caractres
(cf. 6.3.3, p. 53), dpendant de la langue de travail, parmi lesquelles :
[:lower:] les minuscules
[:upper:] les majuscules
[:alpha:] les lettres
[:digit:] les chiffres
[:alnum:] les lettres et les chiffres
[:punct:] les signes de ponctuation
[:blank:] les blancs horizontaux (espace et tabulation, cf. 5.5.3, p. 49)
[:space:] les blancs (espace, tabulation, fin de ligne, ...)
Ainsi tr "[:lower:]" "[:upper:]" remplace chaque lettre minuscule du flux dentre
par la lettre majuscule correspondante et affiche le rsultat lcran.
Malgr leurs similitudes, on ne confondra pas la syntaxe des jeux de caractres de tr
avec celle des expressions rgulires (cf. chapitre 6, p. 51).

5.3.2

Options de tr

Loption -c jeu1 (complement) permet de dfinir le jeu de caractres traiter comme


le complment du jeu fourni en premier argument.
tr -d jeu1 (delete) permet de supprimer les caractres de cet ensemble au lieu de les
transcrire.
4. Si on lance la commande tr avec un troisime argument pour signifier le nom du fichier dentre,
on obtient un message derreur du type tr: oprande supplmentaire.

20142015

v.958

45

Chapitre 5. Introduction aux filtres

UPMC M1 : MNI

tr -s (squeeze repeats) permet de remplacer les caractres conscutifs qui devraient tre
rpts en sortie par une seule occurrence. Sil ny a quun jeu de caractres (tr -s jeu1 ),
tr ne fait que supprimer les rptitions de caractres du jeu prcis ; si tr effectue une
transformation dun jeu dans un autre (tr -s jeu1 jeu2 ), la suppression des rptitions seffectue aprs la transformation : elle porte donc sur le deuxime jeu.
Exemple 1
tr -d '\r'
permet de supprimer le retour chariot des fins de lignes des fichiers issus de windows.
Exemple 2
tr -cs '[:lower:][:upper:]' '[\n*]'
remplace tous les caractres non alphabtiques par un changement de ligne (\n). Le jeu
de remplacement ne comprenant que le caractre \n, il est ncessaire de le faire suivre
du multiplicateur * pour assurer un correspondant chaque caractre du jeu dentre.
Cest loption -s qui permet finalement de fusionner les changements de ligne successifs
en un seul. On cre ainsi une liste des mots prsents dans le fichier dentre raison dun
mot par ligne.
Remarque 1 : pour des raisons historiques lies aux deux branches dunix, la commande tr admet des syntaxes diffrentes dun systme unix lautre et il est prudent de
vrifier dans le manuel (info tr, plus complet que man) le dtail des options disponibles.
on notera bien que tr travaille caractre par caractre et ne peut pas
substituer un mot un autre mot 5 . Plus prcisment, tr travaille octet par octet 6 et il
ne fonctionne pas sur les caractres multi-octets du codage UTF-8. Pour traiter par tr
un fichier texte cod en UTF-8, on peut le transcoder via iconv ou recode en ISO-88591, puis le traiter avec tr avec les variables de langage adaptes (cf. 15.4, p. 105), et enfin
le reconvertir en UTF-8. Ces transformations successives pourront seffectuer laide de
redirections et de tubes, techniques dcrites au chapitre 10, p. 72. Une autre solution
pour les oprations simples portant sur des caractres cods en UTF-8 est dutiliser la
requte y de sed (cf. 8.2, p. 59).

B Remarque 2 :

5.4
5.4.1

Autres filtres lmentaires


Aperu dun fichier avec head et tail

head/tail affiche les lignes du dbut/de la fin


Par dfaut, head/tail affiche les 10 premires/dernires lignes de lentre standard ou
du fichier pass en paramtre, mais
head/tail -n p [fic ] affiche les p premires/dernires lignes du fichier fic .
Pour afficher les lignes partir de la pe incluse (sans avoir calculer le nombre de lignes
afficher), il faut insrer le signe + devant le numro p : tail -n +p.

5.4.2

Conversion des tabulations avec expand et unexpand

expand/unexpand traduit les tabulations en espaces et inversement. Par dfaut, les tabulations sont places tous les 8 caractres, mais on peut les choisir en prcisant loption
-t suivie :
soit de la liste de leurs positions, spares par des virgules,
soit, si elles sont sont quidistantes, dun seul nombre indiquant leur espacement.
5. Pour substituer un mot un autre, on utilisera sed (cf. Chap. 8, p. 59) avec la requte s
6. Au moins jusqu la version 7.1 de tr.

46

v.958

20142015

UPMC M1 : MNI

Chapitre 5. Introduction aux filtres

Par dfaut, unexpand ne convertit que les blancs en dbut de ligne ; loption -a permet
de convertir potentiellement tous les blancs. Par exemple, partant du fichier blancs
suivant,
blancs
12345678123456781234567812345678123456781234
abc
ABCDEFGHI
zzz
le fichier tabs produit par la commande unexpand blancs > tabs ne comporte que
deux tabulations reprsentes ici par ^I 7 :
visualisation de tabs sous vi avec option list
12345678123456781234567812345678123456781234$
^I^I abc
ABCDEFGHI
zzz$
alors quavec unexpand -a blancs > tabs1, on en obtient quatre :
visualisation de tabs1 sous vi avec option list
12345678123456781234567812345678123456781234$
^I^I abc^IABCDEFGHI^Izzz$
comme on le voit aussi avec od -t a (od affiche ici 16 caractres par ligne 8 , les fins de
ligne sont marques par nl, les blancs par sp et les tabulations par ht) :
visualisation avec od -v -A n -t a
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
1
2
3
4 nl ht ht sp
a
b
c ht
A
B
C
D
E
F
G
H
I ht
z
z
z nl

5.4.3

Repliement de lignes avec fold

fold permet de replier les lignes de longueur suprieure 80 colonnes, ou une longueur
spcifie par loption -w. Loption -s permet de ne couper que sur des espaces.

Exemple
Repliement au plus 30 caractres des lignes du fichier lignes-longues
lignes-longues
Ceci est un fichier avec des lignes dpassant les 30 caractres et
la commande fold le ramne des lignes d'au plus 30 caractres,
plus ou moins intelligemment suivant l'option "-s"
fold -w 30 lignes-longues > max30
max30
Ceci est un fichier avec des l
ignes dpassant les 30 caract
res et
la commande fold le ramne d
es lignes d'au plus 30 caract
res,
plus ou moins intelligemment s
uivant l'option "-s"

fold -w 30 -s lignes-longues > max30s


max30s
Ceci est un fichier avec des
lignes dpassant les 30
caractres et
la commande fold le ramne
des lignes d'au plus 30
caractres,
plus ou moins intelligemment
suivant l'option "-s"

7. Pour visualiser les tabulations, on peut utiliser lditeur de texte vi avec loption :set list
(cf. 4.3.3, p. 37) : elles apparaissent alors sous la forme ^I. Une autre mthode consiste employer la
commande od -t c ou od -t a (cf. 4.1.1, p. 31) : les tabulations sont alors affiches sous la forme \t
avec loption -t c ou ht (horizontal tabulation) avec loption -t a.
8. Loption -v impose laffichage explicite des lignes successives identiques, au lieu du seul caractre
*, affich par dfaut la place des lignes dupliques.

20142015

v.958

47

Chapitre 5. Introduction aux filtres

5.4.4

UPMC M1 : MNI

Slection de colonnes avec cut

cut -f liste [fichier_d_entre ]


affiche sur la sortie standard la partie de chaque ligne du fichier fichier_d_entre
(lentre standard sil nest pas prcis) constitue par les champs 9 dont les numros
figurent dans liste . La liste peut tre explicite, le sparateur tant la virgule 10 , ,
ou comporter des intervalles dont les bornes sont spares par le signe moins - .
Les champs sont dlimits par dfaut par des tabulations, mais le dlimiteur peut tre
modifi grce loption -d. La slection peut aussi porter sur les octets ou les caractres
avec les options -b (byte) ou -c (character) la place de -f (field).
Exemple
On rappelle le format dune ligne du fichier de mots de passe (/etc/passwd)
p6m1mni:!:40369:2055:Jacques LEFRERE:/home/p6pfal/p6m1mni:/usr/bin/ksh
cut -d : -f 1,7 /etc/passwd affiche les champs 1 et 7 du fichier de mots de passe
(nom dutilisateur et shell de login).

5.5

Fusion de fichiers texte

Les deux commandes suivantes ne sont pas des filtres, mais des outils pour fusionner ligne
ligne des donnes issues de fichiers texte : paste concatne les lignes dans lordre, alors
que join sappuie sur un champ commun pour fusionner les lignes en correspondance.

5.5.1

Concatnation de lignes avec paste

paste [liste_de_fichiers_d_entre ]
concatne les lignes des fichiers dentre spcifis dans la liste et affiche le rsultat sur la
sortie standard. Les lignes dorigine sont spares en sortie par dfaut par des tabulations
mais on peut fournir une liste de sparateurs grce loption -d.
Exemple 1
Concatnation des lignes des fichiers notes-cc et notes-ex
paste notes-cc notes-ex > notes-cc+ex
notes-cc
notes-ex
Durand 12 14
Durand 10
Leblanc 15 17
Leblanc 13
Rosier 09 11
Rosier 17

notes-cc+ex
Durand 12 14
Durand 10
Leblanc 15 17
Leblanc 13
Rosier 09 11
Rosier 17

Exemple 2
Concatnation des lignes des fichiers notes-cc et notes2-ex
paste notes-cc notes2-ex > notes2-cc+ex
notes-cc
notes2-ex
notes2-cc+ex
Durand 12 14
Leblanc 13
Durand 12 14
Leblanc 13
Leblanc 15 17
Rosier 17
Leblanc 15 17
Rosier 17
Rosier 09 11
Untel 10
Rosier 09 11
Untel 10
9. Remarque : la slection par champ peut aussi tre effectue avec le filtre awk, cf. chapitre 9, qui
permet aussi de modifier lordre des champs, alors que cut les restitue dans lordre initial, quel que soit
lordre dans la liste.
10. Ne pas insrer despace aprs la virgule.

48

v.958

20142015

UPMC M1 : MNI

Chapitre 5. Introduction aux filtres

Attention, aucun contrle de cohrence entre les lignes nest effectu avec paste : si B
on souhaite sappuyer sur un champ commun pour associer les lignes, il faut utiliser la
commande join.

5.5.2

Fusion de lignes selon un champ commun avec join

join fichier1 fichier2


fusionne les lignes ayant un premier champ commun dans les fichiers fichier1 et
fichier2 , qui doivent tre pralablement tris selon le champ qui pilote la fusion. Par B
dfaut, seules les lignes pour lesquelles une concidence du champ de fusion est trouve
entre les deux fichiers sont affiches sur la sortie standard.
Par dfaut, le sparateur de champs en entre est lespace (simple ou multiple), mais
il peut tre modifi en utilisant loption -t suivie du ou des caractres sparateurs de
champs. Les champs pilotant la fusion peuvent aussi tre spcifis pour chaque fichier
via les options -1 n1 et -2 n2 o n1 et n2 concernent respectivement les deux fichiers
dentre fichier1 et fichier2 .
Exemple 1
Fusion des fichiers notes-cc et notes-ex (selon le premier champ)
join notes-cc notes-ex > notes
notes-cc
Durand 12 14
Leblanc 15 17
Rosier 09 11

notes-ex
Durand 10
Leblanc 13
Rosier 17

notes
Durand 12 14 10
Leblanc 15 17 13
Rosier 09 11 17

Exemple 2
Fusion des fichiers notes-cc+prenom et notes-ex selon le champ du nom (2e champ
dans le premier fichier, do loption -1 2)
join -1 2 notes-cc+prenom notes-ex > notes+prenom
notes-cc+prenom
Jean Durand 12 14
Paul Leblanc 15 17
Yves Rosier 09 11

5.5.3

notes-ex
Durand 10
Leblanc 13
Rosier 17

notes+prenom
Durand Jean 12 14 10
Leblanc Paul 15 17 13
Rosier Yves 09 11 17

Mise en garde concernant les caractres non imprimables

La prsence de caractres de contrle dans les fichiers texte peut provoquer des rsultats
inattendus quand ces fichiers sont traits par des filtres. Sous un diteur de texte ou lors
dun affichage, la plupart de ces caractres ne sont en effet pas visibles par dfaut, ou B
peuvent tre confondus. On peut citer par exemple, avec leurs squences dchappement
en langage C, leur code ascii en octal et en dcimal (cf. man ascii) :
la tabulation (horizontal tabulation, HT), note \t, 011 en octal et 09 en dcimal ;
le retour chariot (carriage return, CR), not \r, 015 en octal et 13 en dcimal ;
le saut de ligne (line feed, LF), not \n, 012 en octal et 10 en dcimal.
le retour arrire (backspace, BS), not \b, 010 en octal et 08 en dcimal.
Le retour arrire est le caractre le plus trompeur car il provoque le remplacement
du caractre sa gauche par le caractre sa droite, do son utilisation comme
touche de correction.
20142015

v.958

49

Chapitre 5. Introduction aux filtres

UPMC M1 : MNI

Codage des fins de ligne dans les fichiers texte


Les fichiers texte issus des outils DOS ou Windows utilisent la combinaison \r\n pour
marquer les fins de ligne alors quunix se contente de \n 11 . Si on transfre des fichiers
texte Windows en mode binaire vers un systme unix (par exemple via une clef USB),
les fins de ligne ne sont pas converties la convention unix. Dans ce cas, la prsence du
\r avant le \n va provoquer des comportements surprenants si on cherche ajouter des
lments en fin de ligne, car ils vont sinterposer entre \r et \n. Ils vont donc safficher
en dbut de ligne en crasant les caractres qui y figuraient auparavant. Par exemple, le
B filtrage awk '{print $0 "texte"}' va afficher le fichier de type DOS fourni en entre
avec les cinq premiers caractres de chaque ligne remplacs par texte.
Alignement de colonnes avec des tabulations
Les tabulations sont considres comme des sparateurs de champs par dfaut par certains filtres (cut, paste, ...). Elles appartiennent la classe des blancs [:blank:]
(cf. 6.3.3, p. 53), qui comporte aussi lespace (mais dpend de la langue de travail)
et sert de sparateur par dfaut pour dautres filtres (sort, awk). Mais les tabulations
ne sont pas un sparateur de champs par dfaut pour join.
Les tabulations peuvent tre confondues avec des espaces en affichage ou en dition. Mais
il ne faut pas les confondre dans les motifs utiliss sous grep, sed et awk. Par exemple,
grep ' ' affiche les lignes comportant au moins un espace, mais pas celles o les seuls
blancs sont produits par des tabulations. En revanche, grep '[[:blank:]]' affiche les
lignes qui contiennent au moins un espace ou une tabulation.
Visualisation des caractres non imprimables
Plusieurs outils daffichage permettent de reprer certains caractres non imprimables
dans un texte, parmi lesquels :
cat : cat -v affiche les caractres non imprimables avec la notation ^ pour contrle,
sauf pour les sauts de ligne et les tabulations : les retour chariot saffichent ^M et
les retour arrire ^B
cat -E (end) affiche les fins de ligne sous la forme $
cat -T affiche les tabulations sous la forme ^I
cat -A est quivalent cat -vET
vi : Loption list de lditeur vi, active par :set list, affiche les tabulations sous
la forme ^I et les fins de ligne sous la forme $
Si vi affiche [dos] sur la ligne dtat, cela signifie que le type du fichier est repr
grce la prsence de retour chariot en fin de ligne. Mais il faut lancer ldition en
mode binaire via vi -b pour voir apparatre ces caractres sous la forme ^M
od : Loutil daffichage de fichiers binaires od -tc affiche \t pour tabulation, \r pour
retour chariot, \n pour le changement de ligne, \b pour retour arrire.
Suppression de caractres non imprimables
Le filtre expand permet de traduire les tabulations par le nombre despaces ncessaires.
Le filtre tr permet de transcrire ou supprimer les caractres non imprimables dsigns
par les squences dchappement du langage C : \t pour tabulation, \r pour retour
chariot, \n pour saut de ligne, \b pour retour arrire...

11. Le systme Mac-OS, jusqu la version 9, utilisait \r.

50

v.958

20142015

Chapitre 6

Introduction aux expressions


rationnelles
6.1

Introduction

Pour dcrire lensemble des chanes de caractres qui satisfont un motif (pattern) gnrique, on utilise une syntaxe particulire qualifie dexpression rationnelle 1 (Regular
Expression). De nombreuses commandes et utilitaires unix font appel aux expressions
rationnelles pour rechercher des motifs gnriques, en particulier les diteurs ex, vi,
emacs et asedit ainsi que les filtres sed, grep (global regular expression print) et awk.
Suivant les commandes et les systmes, deux versions de la syntaxe des expressions
rationnelles peuvent tre utilises, mais de faon exclusive :
les expressions rationnelles de base BRE : Basic Regular Expressions
les expressions rationnelles tendues ERE : Extended Regular Expressions
On dcrira dabord la syntaxe des BRE, utilises par dfaut par grep, ex, vi et sed.
Exemples dapplication
Les exemples qui suivent utilisant les filtres grep et sed peuvent tre tests avec lentre
et la sortie standard (clavier et cran).
grep
grep
grep
grep

affiche toutes les lignes contenant chaine


affiche toutes les lignes commenant par a
affiche toutes les lignes commenant par chaine
affiche toutes les lignes commenant par b, ventuellement
prcd par un nombre quelconque de a
sed 's/[aA]/A+/g'
remplace (substitute) toutes les occurrences de a ou A par A+
sed 's/[aA]\{3\}/A3/g' remplace (substitute) toutes les suites de trois a (minuscule
ou majuscule) par A3

6.2

'chaine'
'^a'
'^chaine'
'^a*b'

Signification des trois caractres spciaux de base

Pour construire des motifs gnriques, il faut confrer un rle particulier certains
caractres qui doivent tre interprts : ils sont qualifis de caractres spciaux ou mtacaractres.
. (point)
\ (contre-oblique)
(backslash)
* (toile)

reprsente un caractre quelconque et un seul.


sert protger le caractre qui le suit pour empcher quil
ne soit interprt : il retrouve son sens littral. La contreoblique permet aussi de rendre spciaux certains symboles comme les parenthses et les accolades dans les BRE.
quantificateur qui reprsente un nombre doccurrences quelconque (zro, une ou plusieurs occurrences) du caractre
ou de la sous-expression (en cas de groupement, cf 6.4,
p. 54) qui prcde.

1. On dit aussi expression rgulire.

51

Chapitre 6. Introduction aux expressions rationnelles

UPMC M1 : MNI

Mise en garde Ne pas confondre les caractres spciaux des expressions rationnelles

B avec les caractres gnriques (wildcards) pour les noms de fichiers, * et ? qui sont, eux,

interprts par le shell (cf. 11.2.1, p. 81).


Correspondance :
un caractre quelconque
un nombre quelconque de caractres

pour le shell
?
*

expr. rationnelles
.
.*

Noter aussi que, malgr certains points communs, tr utilise une syntaxe diffrente.
Exemples
a*
aa*
.*
..*
\..
\\*

6.3

un nombre quelconque de fois le caractre a (y compris une chane vide)


une ou plusieurs fois le caractre a
un nombre quelconque de caractres quelconques (y compris une chane vide)
au moins un caractre
un point suivi dun caractre quelconque
un nombre quelconque (y compris zro) de contre-obliques

Caractres devenant spciaux dans certaines positions

6.3.1

Ancres

Les ancres (anchor) ne reprsentent aucune chane, mais permettent de spcifier quun
motif est situ en dbut ou en fin de ligne :
^ (accent circonflexe : caret)
$ (dollar)

spcial en dbut de motif, reprsente le dbut de ligne


spcial en fin de motif, reprsente la fin de ligne

Les dbut et fin de mot peuvent aussi tre reprsents respectivement par les ancres \<
et \>, permettant daffiner les recherches de motifs.
Exemples
^a
a$
^a$
^$
^.*$
^..*$
^a.*b$
^$.*$$
^^.*^$
\<le\>

une ligne commenant par un a


une ligne finissant par un a
une ligne constitue dun a
une ligne vide
une ligne quelconque, y compris vide
une ligne non vide
une ligne commenant par a et finissant par b
une ligne commenant et finissant par $ (contenant au moins deux fois $)
seul le dernier $ est spcial
une ligne commenant et finissant par ^ (contenant au moins deux fois ^)
seul le premier ^ est spcial
larticle le mais pas la syllabe le lintrieur dun mot

Applications
sed 's/^/# /'
grep '^..*$'

52

insre un # suivi de 2 espaces en dbut de chaque ligne


affiche les lignes non vides

v.958

20142015

UPMC M1 : MNI

6.3.2

Chapitre 6. Introduction aux expressions rationnelles

Ensembles de caractres

Les ensembles de caractres (parmi lesquels un caractre quelconque et un seul peut tre
choisi) sont spcifis entre crochets : [ensemble-de-caractres ]. lintrieur dun tel
ensemble, les caractres spciaux sont :
- (signe moins)
^ (accent circonflexe)
] (crochet fermant)

utilis pour dfinir des intervalles selon lordre lexicographique


en tte pour spcifier le complmentaire de lensemble
qui dlimite la fin de lensemble, sauf sil est plac en premire
position

Dans un tel contexte, ., *, \ et $ sont des caractres ordinaires, considrs littralement.


Exemples
[a0+]
[a-z]
[a-z_]
[0-9]
[^0-9]
[]-]

un des trois caractres a, 0 ou +


une lettre minuscule (ascii)
une lettre minuscule ou un soulign
un chiffre
nimporte quel caractre qui nest pas un chiffre
un crochet fermant ] ou un signe moins -

Remarque Bien noter que le caractre - permet de dfinir des intervalles uniquement B
lintrieur des crochets et que ses intervalles ne doivent pas tre interprts comme
numriques. En particulier [24-61] ne dsigne pas un nombre entre 24 et 61, mais un
caractre parmi 2, 4, 5, 6 ou 1. Ici lintervalle est entre 4 et 6.
Applications
grep '^[0-9]'
grep '^[^0-9]'

6.3.3

affiche les lignes commenant par un chiffre


affiche les lignes ne commenant pas par un chiffre

Classes de caractres

La norme POSIX dfinit des classes de caractres (character class), notes entre les symboles [: et :] 2 , dont le contenu dpend de la langue de travail choisie et de lordre
lexicographique (variables LANG, LC_CTYPE et LC_COLLATE, cf. man locale et 15.4.1,
p. 105). Citons simplement certaines classes dont les noms sont assez explicites :
[:alpha:] (lettres), [:lower:] (minuscules), [:upper:] (majuscules),
[:digit:] (chiffres), [:xdigit:] (symboles hexadcimaux de 0 f ou F),
[:alnum:] (chiffres et lettres),
[:print:] (affichables), [:punct:] (ponctuation), [:cntrl:] (caractres de contrle),
[:blank:] (espace et tabulation),
[:space:] (blanc, retour ligne, retour chariot, saut de page, ..., cf. 5.5.3, p. 49)
On prfrera, par exemple, utiliser [[:alnum:]], qui reprsente lensemble des caractres alphanumriques, y compris avec des signes diacritiques, au lieu de [0-9A-Za-z]
qui ne comporte pas les caractres accentus.
Remarquer que les crochets dans les noms de classes font partie intgrante du nom B
symbolique, et quils doivent donc tre inclus en plus des crochets encadrant la liste.
2. La norme POSIX dfinit aussi des classes dquivalence rassemblant lensemble des caractres devant tre considrs comme quivalents, par exemple [=e=] qui recouvre e, , ... en franais par exemple.
Enfin elle dfinit la notation [.ll.] en espagnol par exemple qui, bien que constitue de deux caractres,
doit tre considre comme une seule unit lexicographique, notamment pour les classements (il en est
de mme pour [.ch.]). Mais ces deux dernires notions ne sont pas encore pleinement implantes ce
jour dans les systmes unix.

20142015

v.958

53

Chapitre 6. Introduction aux expressions rationnelles

UPMC M1 : MNI

Exemples
[[:lower:]+^$]
[^[:alpha:]]
[-+.[:digit:]]

6.3.4

une minuscule ou un des symboles +, ^ ou $


un caractre non alphabtique
un chiffre, ou un des signes + ; - ou . employs pour crire des
nombres dcimaux

Rfrence dans les substitutions

Dans sed, ex et vi, il est possible de rfrencer la chane de caractres du membre de


gauche de la substitution qui correspond la totalit de lexpression rationnelle par le
symbole & en second membre de la substitution.
Applications
sed 's/.*/&&/'
sed 's/./&&/g'
sed 's/^[0-9][0-9]*$/(&)/'

6.4

duplique la ligne en une seule ligne


duplique tous les caractres
met entre parenthses les lignes de chiffres

Groupement en sous-expressions et rfrence

Une partie dexpression rationnelle peut tre dfinie comme sous-expression condition
de lencadrer par les dlimiteurs \( et \) (en effet, pour les BRE, les parenthses ne sont
pas des caractres spciaux). La rfrence la n-ime sous-expression se fait par \n.
Applications
sed 's/0\([0-9]\)/200\1/'
sed 's/19\([0-9][0-9]\)/\1/'
sed 's/\([0-9]\)\([0-9]\)/\2\1/'

prcise le sicle pour les annes 200x


supprime 19 devant les annes 19xx
change deux chiffres conscutifs

Spcification plus prcise des rptitions


Le quantificateur * ne permet pas de prciser le nombre de rptitions dune expression rationnelle quil autorise ; les syntaxes de quantification dlimites par les accolades
(prcdes de \ car elles ne sont pas spciales dans les BRE) \{ et \} permettent de fixer
des limites aux rptitions :
\{m\}
\{m,\}
\{m,n\}

exactement m fois
au moins m fois
entre m et n fois

Exemple
[[:digit:]]\{2,\}

6.5

dsigne un nombre dau moins deux chiffres

Rgle en cas dambigut dinterprtation

Au cas o certains caractres spciaux pourraient donner lieu plusieurs interprtations, linterprtation se fait toujours en essayant dincorporer le plus grand nombre de
caractres dans la correspondance avec lexpression rationnelle. Il est ncessaire de tenir
compte de cette avidit dans les groupements avec dlimiteurs.
54

v.958

20142015

UPMC M1 : MNI

Chapitre 6. Introduction aux expressions rationnelles

Exemple :
Dans la ligne a1!b2!c!, extraire le premier champ, sachant que le sparateur est !
Avec \(.*\)!\(.*\)!, la premire sous-expression \1 sera a1!b2 et la deuxime sera c
Pour que \1 donne a1, il faudra prciser que la premire sous-expression ne doit contenir B
aucun caractre ! via \([^!]*\)!\(.*\)!
Un exemple particulier : * signifie aussi zro fois
sed 's/@*/+/g'
appliqu 123z donne +1+2+3+z+
appliqu une ligne vide donne +
appliqu @@@ donne +
appliqu @@@ab@@c donne +a+b+c+

6.6

plusieurs fois zro occurrence de @


zro occurrence de @
cause de lavidit du *

Cas des expressions rationnelles tendues

Les expressions rationnelles tendues (ERE) sont utilises dans awk (cf. chap. 9, p. 63) et
ventuellement dans sed avec loption -r (cf. 8.1.3, p 59) ou dans grep avec la version
egrep ou loption grep -E (cf. 7.4.2, p 57). Dans le passage des expressions rationnelles
de base aux expressions tendues, les caractres () pour le groupement et {} pour la
duplication deviennent spciaux et doivent donc tre protgs par \ pour retrouver leur
valeur littrale.
De plus, loprateur | permet dexprimer une alternative (ou logique) entre deux sousexpressions. Enfin, deux oprateurs de multiplicit permettent de complter le quantificateur trop gnral * :
? signifie zro ou une occurrence de la sous-expression qui le prcde (cest un
synonyme de {0,1})
+ signifie une ou plusieurs occurrences de la sous-expression qui le prcde (cest
un synonyme de {1,})
En consquence, dans les ERE, les caractres littraux |, ? et + seront obtenus respectivement via \|, \? et \+.
Exemples dexpressions rationnelles tendues
(ab)*
a{2,4}
a|b
(aa)|(bc)
[^[:alpha:]]*[[:lower:]]+[^[:alpha:]]*
^[+-]?[[:digit:]]+

signifie zro, une ou plusieurs fois ab et


correspond donc une chane vide, ab,
abab, ou ababab, ...
signifie aa, aaa ou aaaa mais \{2a correspondra la chane {2a
signifie a ou b
signifie aa ou bc
permet de dtecter un mot comportant
au moins une lettre en minuscule
reprsente une ligne qui commence par
un nombre entier avec ventuellement
un signe

Ce chapitre ne donne quun trs bref aperu de lusage des expressions rgulires, qui
constitue le sujet de plusieurs ouvrages. On pourra notamment consulter le manuel de
Desgraupes (2001), qui aborde aussi leur emploi dans dautres utilitaires (perl, tcl,
python et JavaScript).

20142015

v.958

55

Chapitre 7

Le filtre grep
7.1

Prsentation de la commande grep

Le filtre grep permet dafficher toutes les lignes dun fichier contenant un motif donn.
Ce motif peut tre dfini explicitement ou sous la forme dune expression rgulire
(cf. chap. 6) reprsentant un motif gnrique (grep = global regular expression print).
syntaxe
grep motif [fichier_1 [fichier_2 ... ]]
Exemple : grep p6m1mni /etc/passwd
affiche la ligne de lutilisateur p6m1mni figurant dans le fichier de mots de passe.
B Ds que le motif recherch comporte des caractres que le shell peut interprter, il est
ncessaire de les protger par exemple par des ' (cf. 11.2.4, p 83).
Il est courant dutiliser la commande grep pour slectionner des lignes particulires dans
un affichage trop long pour une recherche visuelle fiable : on redirige le flux de sortie
vers le flux dentre de la commande grep grce un tube (cf. chap. 8).
Exemple : ps -ef | grep clock
affiche les processus qui comportent clock dans la ligne de description.
Le code de retour (cf. 11.3, p. 84) de grep vaut 0 si la commande trouve le motif cherch.
Remarque :
La commande grep nest elle-mme quun cas particulier dutilisation de lditeur ligne
ex. Le chapitre 8 prsente lutilisation du filtre programmable sed qui sappuie sur
lditeur ligne ed. Le travail sur la ligne de commande de vi permet donc de se familiariser
avec une syntaxe commune plusieurs commandes unix.

7.2

Principales options de grep


-i (ignore case) rend la recherche insensible la casse du motif (pas de distinction
entre majuscules et minuscules)
-v (inverse) affiche les lignes ne contenant pas le motif indiqu ;
-l (list) affiche la liste des fichiers contenant le motif au lieu des lignes le contenant ;
-n (number) affiche les lignes contenant le motif prcdes de leur numro ;
-c (count) affiche les noms des fichiers 1 et pour chaque fichier, le nombre de ses
lignes 2 qui contiennent le motif ;
-C n (Context) affiche n lignes de contexte avant et aprs la ligne comportant le
motif (extension GNU).

1. Sauf quand grep ne sapplique qu un fichier ou quand il est aliment via lentre standard.
2. Ne pas confondre avec le nombre doccurrences du motif recherch dans le fichier ; voir ce propos
loption -o, cf. 7.4.3, p. 58.

56

UPMC M1 : MNI

7.3

Chapitre 7. Le filtre grep

Exemples

grep '^!' test.f90

affiche les lignes commenant par ! dans


test.f90
affiche les lignes dont le premier caractre
non blanc est ! dans test.f90
affiche les lignes qui ne sont pas des commentaires en fortran90
recherche le mot exemple ventuellement capitalis (premier caractre en majuscule)
permet dafficher la liste des sous-rpertoires
du rpertoire courant avec leurs attributs
affiche la liste des fichiers source en C qui
appellent la fonction printf

grep '^ *!' test.f90


grep -v '^ *!' test.f90
grep '[Ee]xemple' texte
ls -l | grep ^d
grep -l printf *.c

7.4
7.4.1

Autres options
Recherche de plusieurs motifs avec loption -e

Si on doit rechercher les lignes contenant un motif parmi plusieurs, il suffit de faire
prcder chacun des motifs par loption -e :
grep -e motif1 -e motif2 fichier
affiche les lignes qui contiennent motif1 ou 3 motif2
N.-B. : la recherche des lignes contenant la fois motif1 et motif2 se fait par lintermdiaire dun tube : grep motif1 fichier | grep motif2
Loption -e constitue aussi un moyen de spcifier un motif commenant par le signe
- , vitant ainsi la confusion entre motif et option.

7.4.2

Variantes de grep : options -F et -E

La commande grep attend par dfaut une expression rgulire de base (BRE) pour dfinir
le motif recherch. Elle admet deux variantes pour lesquels le motif peut tre :
un motif statique avec la commande loption -F de grep 4 (fast) plus rapide dans
ses recherches. Avec cette option, les caractres habituellement spciaux du motif
ne sont plus interprts.
une expression rgulire tendue (ERE, cf. 6.6, p. 55) avec loption -E de grep 5 .
motif +
une ou plus dune occurrence de motif
motif ?
zro ou une occurrence de motif
motif1 |motif2
motif1 ou motif2 (protger le symbole | de
linterprtation comme un tube par le shell)
(motif )
mise entre parenthses pour regrouper des motifs
Exemples :
grep 'a.b'
grep -F 'a.b'
grep 'ab|AB'
grep -E 'ab|AB'
grep -E '(ab)+c'
grep -E 'a(x|y)b'
3. La
la mme
4. La
5. La

recherche un a suivi dun caractre quelconque suivi dun b


recherche la suite de trois caractres a.b
recherche le motif unique ab|AB, mais
recherche le motif ab ou le motif AB
recherche abc, ababc, abababc, ...
recherche axb ou ayb (comme grep -e axb -e ayb)

syntaxe tendue des motifs de recherche disponible avec grep -E (cf. 7.4.2) permet de formuler
recherche grce lalternative |.
commande fgrep, quivalente grep -F, est obsolte.
commande egrep, quivalente grep -E, est obsolte.

20142015

v.958

57

Chapitre 7. Le filtre grep

7.4.3

UPMC M1 : MNI

Affichage des chanes correspondant au motif : option -o

Ajuster une expression rgulire complexe est une tche parfois dlicate qui peut tre
clarifie en testant le motif gnrique sur des donnes saisies au clavier (entre standard).
Avec loption -o (--only-matching), grep naffiche plus les lignes compltes comportant
le motif, mais seulement chacune des chanes de la ligne qui correspondent au motif
spcifi pour grep, chaque chane tant affiche sur une ligne distincte.
Exemple :
grep -o '[0-9][0-9]*' suivi de la saisie
5septembre2009
puis Ctrl-D , va afficher
5
2009
On remarquera que le multiplicateur * correspond zro fois dans la premire concidence, et trois fois dans la seconde concidence (le multiplicateur cherche englober le
plus de caractres possibles : on le qualifie davide).
titre pdagogique, on peut prfrer la colorisation des chanes correspondant au motif spcifi par lexpression rgulire dans les lignes affiches par grep avec loption
--color=auto. Avec la commande grep --color=auto '[0-9][0-9]*' suivie de la
saisie prcdente, la ligne saisie est entirement affiche et les chanes 5 et 2009 sont
colorises.
5septembre2009
Loption -o de grep fournit un moyen de compter le nombre de motifs prsents dans un
fichier au lieu du nombre de lignes comportant ce motif :
grep -o motif fichier | wc -l

58

v.958

20142015

Chapitre 8

Le filtre sed
8.1
8.1.1

Prsentation de sed
Principes de fonctionnement et intrt

sed (sed = stream editor) est un filtre programmable de manipulation de fichiers texte,
directement issu de lditeur ligne ed, dont il emprunte les requtes 1 . Il lit chaque ligne du
fichier dentre (ou dfaut, de lentre standard), effectue les transformations spcifies
par les requtes et affiche le rsultat sur la sortie standard, mais ne modifie jamais 2 le
fichier dentre.

8.1.2

Les deux syntaxes possibles

syntaxe
sed -f fichier_d_instructions.sed [fichier_de_donnes ]
Les instructions ou requtes stipules dans fichier_d_instructions.sed (introduit
par loption -f) sont excutes sur le contenu du fichier_de_donnes . En labsence de
fichier dentre, sed traite lentre standard.
Dans le cas dinstructions courtes, il est possible de saisir ces dernires sur la ligne de
commande. Le premier paramtre de la commande constitue alors la liste des instructions
fournies sed :
sed instructions fichier_de_donnes
Cependant, pour viter linterprtation par le shell des mtacaractres ventuellement B
prsents dans les instructions sed, il est souvent ncessaire de protger globalement les
instructions en les entourant par des ' (cf. 11.2.4 p. 83) :
sed 'instructions ' fichier_de_donnes

8.1.3

Autres options de sed

-e Il est prfrable dintroduire les instructions sed par loption -e. Cette option est
dailleurs ncessaire pour introduire sur la ligne de commande plusieurs mots (au
sens du shell) contenant des instructions sed (et viter la confusion avec le nom
du fichier dentre) :
sed -e 'instruction1 ' -e 'instruction2 ' fichier_de_donnes
-n Il est parfois utile de supprimer laffichage automatique du rsultat notamment
quand sed fait appel la requte p dimpression
-r Le filtre sed travaille par dfaut avec les expressions rationnelles de base : loption
-r permet dutiliser la syntaxe des expressions rationnelles tendues (cf. 6.6, p. 55).

8.2
8.2.1

Requtes principales
Substituer

s/motif1/motif2/ (susbstitute)
1. ed est lui-mme trs proche de lditeur ligne ex, sur lequel est construit lditeur pleine page vi.
2. Sauf si on utilise loption -i, qui est dconseille dans les phases de mise au point.

59

Chapitre 8. Le filtre sed

UPMC M1 : MNI

remplace la premire occurrence de motif1 par motif2 dans chaque ligne o motif1 est
prsent.
s/motif1/motif2/g remplace toutes les occurrences de motif1 par motif2 grce loption g (global).
Remarque Le dlimiteur / nest pas impos : cest simplement le caractre qui
suit la requte s. Il devient alors un caractre spcial dans le motif recherch et la chane
B de substitution : sil doit y figurer, il faut le protger par un \ . En particulier, quand
on travaille sur des chemins unix, ce dlimiteur est fortement dconseill. Comparer par
exemple les deux requtes suivantes qui remplacent /usr/local/bin par /usr/bin :
s/\/usr\/local\/bin/\/usr\/bin/
s+/usr/local/bin+/usr/bin+
Exemples
s/^/!/ permet dinsrer lintroducteur ! de commentaires en tte de chaque ligne dun
fichier source fortran
s/@*/+/g permet de remplacer un nombre quelconque doccurrences de @ par le caractre
+. Ne pas oublier que le multiplicateur * signifie aussi zro occurrence, donc si @ nest
prsent nulle part, la substitution va introduire un + entre chaque lettre ainsi quen dbut
et fin de ligne (cf. 6.5, p. 54).

8.2.2

Transcrire caractre par caractre

y/jeu1/jeu2/ remplace le premier caractre du jeu1 par le premier caractre du jeu2,


puis le deuxime par le deuxime... comme avec tr (cf. 5.3, p. 45). Les deux jeux doivent
possder le mme nombre de caractres, ceux du premier jeu doivent tre tous diffrents,
mais pas ncessairement ceux du second.
B Ne pas confondre avec la substitution de motifs ; ici le remplacement des caractres se
fait un par un, aucun contexte ntant pris en compte. Lintrt de cette requte est que,
contrairement tr, elle peut tre restreinte certaines lignes du fichier et utilise avec
des caractres cods sur plusieurs octets, par exemple en UTF-8.
Exemple
sed -e 'y/aeiouy/AEIOUY/' passe en majuscule les voyelles
sed -e '3,$y/01/10/' change les 1 et les 0 partir de la ligne 3.

8.2.3

Supprimer des lignes

ligne1,ligne2d (delete) supprime de la ligne ligne1 la ligne ligne2 incluses


Exemples (les lignes non dtruites sont affiches) :
sed '1,12d' fic imprime de la ligne 13 la fin du fichier fic
sed '12,$d' fic imprime les lignes 1 11 du fichier fic
sed '/^#/d' fic imprime les lignes du fichier fic qui ne commencent pas par #

8.2.4

Imprimer des lignes

ligne1,ligne2p (print) imprime de la ligne ligne1 la ligne ligne2 incluses


Exemples
On prcise loption -n pour ne pas tout afficher par dfaut.
sed -n '1,12p' fic imprime les 12 premires lignes du fichier fic
sed -n '12,$p' fic imprime de la ligne 12 la fin du fichier fic
sed -n '/^#/p' fic affiche les lignes du fichier fic qui commencent par #
60

v.958

20142015

UPMC M1 : MNI

8.2.5

Chapitre 8. Le filtre sed

Quitter

ligne1 q (quit) termine sed la ligne spcifie, ce qui arrte la recopie des lignes.
Exemples
sed '12q' fic imprime les 12 premires lignes du fichier fic
sed '/^#/q' fic imprime les premires lignes du fichier fic jusqu la premire ligne
commenant par un #

8.3

Remarques importantes

1. Par dfaut, sed agit sur toutes les lignes du fichier 3 , mais il est possible de restreindre la porte dune requte un ensemble de lignes spcifies par adressage explicite (12 par ex.) ou grce la recherche dun motif (/^#/ par ex.) ;
la requte peut aussi porter sur les lignes comprises dans un intervalle (ferm)
(ligne1,ligne2, /p6m1mni/,/^#/).
2. Lorsquon utilise linstruction p qui provoque laffichage de lignes particulires, il
faut empcher laffichage global du rsultat de ldition, grce loption -n (sous
peine de voir les lignes affectes par la requte p affiches deux fois).
3. Des expressions rgulires peuvent tre utilises pour dfinir des motifs gnriques
(slection de lignes ou requtes de substitution).
Dans les requtes de substitution, la chane de caractres complte qui correspond
lexpression rgulire recherche peut tre rfrence dans le second membre
de la substitution par le caractre spcial & ; il est aussi possible de dcouper
les motifs recherchs en sous-expressions que lon peut ensuite rfrencer dans le
second membre de la substitution par \1, \2 ... (cf. chapitre 6 sur les expressions
rgulires).
Exemples :
sed -e 's/[0-9]/(&)/g' permet dentourer chaque chiffre de parenthses.
sed -e 's/[0-9][0-9]*/(&)/g' permet dentourer chaque nombre entier de parenthses.
sed -e 's/^\([0-9]\)\([0-9]\)/\2\1/' permet dchanger deux chiffres conscutifs en dbut de ligne
sed -e 's/\([0-9][0-9]*\)\.\([0-9]*\)/\1/g' supprime la partie dcimale
des nombres

8.4

Fichier dinstructions

Un fichier dinstructions sed (ou sed-script) a pour structure gnrale :


action
laction est applique toutes les lignes
ligne action
laction est applique la (les) ligne(s) dsigne(s)
ligne1,ligne2 action
laction est applique lintervalle de lignes
ligne1,ligne2{
les actions sont appliques lintervalle de lignes
action1
action2
}
Dans un sed-script, il est possible dinsrer des commentaires, introduits par le caractre
# : tout ce qui suit # (hors motif de recherche ou de substitution) jusqu la fin de la
ligne est considr comme un commentaire.
3. Au contraire, sous ex, une requte sans adresse portera sur la ligne courante (notion qui na pas
de sens sous sed) et il faudra prciser ladresssage % ou 1,$ pour que la requte sapplique toutes les
lignes du fichier.

20142015

v.958

61

Chapitre 8. Le filtre sed

UPMC M1 : MNI

Exemple
s/^#/!/
/p6m1mni/{
}

8.5

s/p6m1mni/(&)/
s/[0-9]/x/g

Complment : notion despace de travail

Le filtre sed travaille ligne ligne. Il peut tre utile de regrouper les lignes entre elles
lorsque le document est organis en paragraphes ou en blocs autonomes, par exemple, les
instructions en fortran (ou en langage C) qui stalent sur plusieurs lignes. Il est possible
de procder un traitement multilignes avec sed en forant la lecture de tout le
bloc dans lespace de travail avant de le traiter. Les coupures de lignes restent reprables
dans lespace de travail par lexpression \n (embedded new-line). On se reportera des
ouvrages spcialiss pour plus de dtails (Dougherty et Robbins, 1999, par exemple).

62

v.958

20142015

Chapitre 9

Le filtre awk
awk 1 est un filtre de manipulation de fichiers texte. Son utilisation ressemble formellement celle de sed. awk explore les fichiers ligne ligne en dcoupant chaque ligne
en ses diffrents champs. Il est donc trs adapt pour un traitement des fichiers par colonnes et possde des fonctions de tableur. Bien au-del, awk est un filtre programmable
trs puissant dot doprateurs de calcul, de nombreuses fonctions et de structures de
contrle dont la syntaxe est proche de celle utilise dans le langage C.

9.1

Syntaxe gnrale

La syntaxe gnrale, formellement identique celle de sed, est :


syntaxe
awk -f fichier_d_instructions.awk [fichier_de_donnees]
Les instructions crites dans fichier_d_instructions.awk sont excutes sur le contenu
de fichier_de_donnees . Il est possible de remplacer fichier_de_donnes par une liste
de fichiers. Si aucun fichier nest indiqu, cest lentre standard qui est prise par dfaut.
Sauf redirection 2 , le rsultat est envoy vers la sortie standard.
Dans le cas dinstructions courtes, il est possible de saisir ces dernires en ligne. La
syntaxe est alors :
awk instructions [fichier_de_donnes]
Comme les instructions comportent gnralement des caractres interprts par le shell
(ne serait-ce que lespace, mais aussi les $ dsignant les champs, cf. 11.2, p. 81), on entoure
habituellement les instructions awk dune protection forte ' sauf si on souhaite
prcisment que le shell les transforme avant que awk ne les interprte.

9.2

Programmation

9.2.1

Structure des donnes : enregistrement, champ

Dans le langage de awk, chaque ligne de fichier sappelle un enregistrement (record).


Dans un enregistrement, tout blanc (au sens de un ou plusieurs espaces ou tabulations) est un sparateur qui dlimite un champ (field). Loption -F "separ"
permet de redfinir le sparateur 3 si ncessaire.
Lorsque awk lit une ligne (enregistrement), il lclate en ses diffrents champs :
$0 reprsente toute la ligne,
$1 reprsente le premier champ,
$2 reprsente le deuxime champ,
....
NF (number of fields) contient le nombre de champs de la ligne courante.
1. Le nom de cette commande est constitu des initiales de ses inventeurs : Aho, Weinberger et
Kernighan, cf. Aho et al. (1995).
2. La redirection peut tre requise au niveau du shell, mais elle peut aussi tre stipule dans le
programme awk, (cf. 9.5.5, p. 71).
3. Il est aussi possible de le redfinir via la variable FS, cf. 9.2.3,p. 65.

63

Chapitre 9. Le filtre awk

UPMC M1 : MNI

$NF reprsente le dernier champ de la ligne courante,


NR (number of record) contient le numro de la ligne courante.
B N.B. : ne pas confondre les variables dsignant les champs sous awk avec les paramtres

positionnels de linterprteur de commande (cf. 12.1.2, p. 86).

9.2.2

Principes de base

Programme awk
Un programme awk est une suite dinstructions. Une instruction est de la forme :
slecteur {action}
awk lit chaque ligne du fichier_de_donnees et, pour chaque ligne value chaque slecteur. Si le slecteur est vrai, laction est excute.
si aucune action nest prcise, la ligne est simplement recopie sur la sortie (laction
par dfaut est print, cest--dire print $0)
en labsence de slecteur, laction est excute sur toutes les lignes de du fichier.
Les lignes de donnes sont donc automatiquement parcourues, et les actions dclenches

B par dfaut pour chaque ligne, sans avoir programmer explicitement une boucle sur les

enregistrements. En revanche, le parcours des champs dune ligne ncessite une boucle
explicite du champ 1 au champ NF.
N.B. : comme sous sed, sur une ligne de programme awk, tout ce qui suit le symbole
dise # , hors expression rgulire ou chane de caractres, constitue un commentaire.
Slecteurs sous awk
Un slecteur restreint donc la porte des actions de awk aux seules lignes pour lesquelles
il est vrai. Il peut prendre les formes suivantes :
vide et alors laction est applique toutes les lignes
une expression rationnelle tendue 4 entre / et / (extended regular expression, ERE,
cf. 6.6, p. 55)
le slecteur est vrai si le motif reprsent par lexpression rationnelle est prsent
dans la ligne
une condition logique telle que, par exemple :
$i == chane le champ i concide avec la chane chane
$i != chane le champ i est diffrent de la chane chane
$i ~ /ERE /
le champ i correspond lexpression rgulire tendue ERE
$i !~ /ERE /
le champ i ne correspond pas lexpression rgulire tendue ERE
$i <= valeur le champ i (numrique) est infrieur ou gal valeur
NR > 10
le numro denregistrement (de ligne) est suprieur 10
NF == 3
le nombre de champs est de 3
une combinaison logique (via &&, || ou !) de slecteurs des deux types prcdents
un intervalle de lignes sous la forme : slecteur1, slecteur2
BEGIN ou END qui introduisent des actions excutes avant ou aprs le traitement
ligne ligne des donnes dentre. Ces deux slecteurs sont facultatifs 5 .
Exemples de slecteurs
/motif/
$1 =="juin"

la ligne contient la chane motif


le champ 1 est la chane juin
(cf. 9.2.1, p. 63 pour la dfinition dun champ)

4. Lusage des intervalles dans les expressions rationnelles nest pas autoris par dfaut, sauf avec
loption --posix ou loption plus spcifique --re-interval
5. Ne pas croire quils constituent des dlimiteurs ncessaires du programme awk. Dailleurs END est
utilis beaucoup plus souvent que BEGIN, car il nest pas ncessaire dinitialiser les variables sous awk.
Enfin, rien nempche de placer le slecteur END en premire instruction et BEGIN en dernire instruction !

64

v.958

20142015

UPMC M1 : MNI
$2 == 333
$3 ~ /^nom/
$2 != 333 || $3 !~ /^nom/

Chapitre 9. Le filtre awk


le champ 2 est gal 333
le champ 3 commence par nom
le champ 2 nest pas gal 333 ou le champ 3
ne commence pas par nom

Action awk
Une action est une suite dinstructions spares par des ; qui incluent des affectations
de variables, des calculs ou des oprations sur des chanes de caractres. La syntaxe des
actions est calque sur celle du langage C, par exemple :
les oprateurs de awk (= + - * / % += -= *= /= ++ -- ... || && ...) 6 ; lespace sert doprateur de concatnation entre chanes ;
les contrles de flux (if, while, for, break)
les fonctions numriques et dimpression.
Toutefois, les variables ne sont pas dclares et leur typage dpend de leur premire
utilisation : numrique (initialise 0), chane de caractres (initialise la chane vide)
ou tableau (cf. 9.4 p. 67). La rfrence une variable se fait simplement laide de
son nom, contrairement la syntaxe du shell qui utilise le $ 7 ; par consquent les
constantes chanes de caractres doivent tre dlimites par des guillemets doubles " .
"mot" dsigne une chane de caractres constante, alors que mot dsigne une variable
awk, qui peut tre numrique ou de type chane et dont la valeur peut tre une chane.

9.2.3

Variables spcifiques

Il existe bien dautres variables internes awk, et en particulier :


FILENAME contient le nom du fichier en cours de traitement (mais modifier cette variable
ne modifie pas le fichier en entre ; elle est positionne automatiquement lors de la
lecture des donnes ; ainsi, une instruction nextfile, cf. 9.5.3, p. 71, la modifie).
FS (field separator) est le sparateur de champs en entre ; par dfaut, cest un blanc,
sauf sil a t modifi par loption -F de awk ; la modification peut intervenir avant
la lecture des donnes, sous le slecteur BEGIN (ce qui quivaut utiliser loption
-F), mais aussi en cours de lecture, par exemple : 'NR>10{FS = ":"}' ;
OFS (output field separator) est le sparateur de champs en sortie (par dfaut, un blanc).
OFMT (output format for numbers) : %g (au sens de printf en C) par dfaut.
RS (record separator) est le sparateur denregistrement en entre (par dfaut, le changement de ligne)
ORS (output record separator) est le sparateur denregistrement en sortie (changement
de ligne par dfaut).

9.2.4

Fonctions incorpores

Il existe dans awk des fonctions incorpores (internes), par exemple :


mathmatiques : cos(expr), sin(expr), exp(expr), log(expr), int(expr) ;
sorties :
print affiche lenregistrement courant ;
print expr1,expr2, ...exprn affiche les expresssions spares par la chane OFS
(espace par dfaut) suivies dun changement de ligne ;
printf("format",...) et sprintf("format",...) analogues au C (les changements de ligne doivent tre spcifis par "\n" dans le format) ;
6. Le langage awk comprend loprateur ^ dlvation la puissance et loprateur compos ^= qui
ne sont pas disponibles en langage C.
7. Mais les contenus des champs awk sont dsigns par $i, que ce soit pour leur affectation ou leur
rfrence.

20142015

v.958

65

Chapitre 9. Le filtre awk

UPMC M1 : MNI

chanes de caractres :
tolower(s) / toupper(s) : passe la chane s en minuscules/majuscules ;
index(s1, s2) renvoie la position de la chane s2 dans s1 et 0 si s2 napparat
pas dans s1 ;
length(s) : nombre de caractres de la chane s ;
substr(s, m, n) sous-chane de s de n caractres commenant la position m.

9.2.5

Internationalisation

Quand la commande awk prend en compte le contrle local (cf. 15.4.1, p. 105), par
exemple avce loption --posix, le sparateur dcimal passe de . en , en franais,
B comme le prouve lexemple suivant :
avec LC_ALL=C (ou seulement LC_NUMERIC=C), la commande
echo '1.25' | awk '{print 2*$1, 2/3}'
affiche 2.5 0.666667 avec des points
alors quavec LC_ALL=fr_FR (ou seulement LC_NUMERIC=fr_FR), la commande
echo '1,25' | awk '{print 2*$1, 2/3}'
affiche 2,5 0,666667 avec des virgules
Avec un environnement francis, les nombres dcimaux crits avec un point dcimal sont
alors tronqus : echo '1.25' | awk '{print 2*$1, 2/3}' affiche donc 2 0,666667
Remarques La commande gawk, version par dfaut sous linux, prenait en compte la
variable denvironnement LC_NUMERIC jusqu la version 3.1.5. Mais ce comportement a
caus tant de problmes que, depuis la version 3.1.6 de gawk, ce nest plus le cas sauf si
on utilise loption --posix ou, ce qui est plus spcifique, loption --use-lc-numeric.
De plus, depuis la version 3.15 de gawk, les fonctions traitant les chanes de caractres
telles que length, index ou substr travaillent en termes de caractres et non doctets,
B ce qui se rvle trs diffrent pour les caractres accentus cods sur plusieurs octets en
UTF-8 par exemple (cf. 4.1.3, p. 32).

9.3
9.3.1

Exemples
Exemples lmentaires de programmes awk

{print NR, $0} affiche chaque ligne prcde de son numro (comme cat -n)
END {print NR} affiche le nombre de lignes du fichier (comme wc -l)
{print $1} affiche le premier champ de chaque ligne
{s+=$1} END{print s} affiche la somme de la premire colonne (champ suppos
numrique)
{s+=$1} END{print s/NR} affiche la moyenne de la premire colonne (champ suppos numrique)
{a=$1; $1=$2; $2=a; print $0} affiche chaque ligne en changeant les deux premiers champs
{s=0; for (i=1;i<=NF;i++){s+=$i}; print s} affiche la somme des champs
(supposs numriques) de chaque ligne
BEGIN {col = ""} {col = $1 " " col} END {print col} affiche la premire colonne transpose en ligne par concatnation de chanes

9.3.2

Exemples appliqus un fichier de donnes particulier

Soit le fichier de dpenses donnees suivant :


66

v.958

20142015

UPMC M1 : MNI

lundi
mardi
mercredi
jeudi
vendredi
samedi
dimanche
mardi
lundi

Chapitre 9. Le filtre awk

4
23
7
8
14
22
13
11
27

01
02
04
10
05
05
10
01
03

2002
2003
2001
2004
2003
2004
2002
2004
2000

donnees
10H
12h
16H
9H
22h
21H
10H
13h
9h

Suzanne
Jean
Anne
Anne
Jean
Anne
Jean
Suzanne
Anne

30
40
10
15
70
20
30
14
10

restaurant
carte-orange
cafe
librairie
TGV
cafeteria
disques
cinema
bus

1. awk '{print}' donnees


affiche tout le fichier
2. awk '/2003/' donnees,
awk '/2003/{print}' donnees, mais aussi
awk '/2003/{print $0}' donnees
affichent chacune
mardi
vendredi

23
14

02
05

2003
2003

12h Jean
22h Jean

40
70

carte-orange
TGV

40
70

carte-orange
TGV

3. awk '{print "anne", $4}' donnees


affiche
anne
anne
anne
anne
anne
anne
anne
anne
anne

2002
2003
2001
2004
2003
2004
2002
2004
2000

4. awk 'END {print NR, "lignes"}' donnees


affiche
9 lignes
5. awk '$7 > 30' donnees
affiche
mardi
vendredi

23
14

02
05

2003
2003

12h Jean
22h Jean

6. awk '$4 == 2004 {print $7, $6}' donnees | sort -k1,1n


(cf. chapitre 10 pour la signification du tube |)
affiche
14 Suzanne
15 Anne
20 Anne

9.4

Les tableaux sous awk

La notion de tableau est extrmement large et souple dans awk ;


comme les variables, les tableaux nont pas besoin dtre dclars.
ils ne sont limits en taille que par lespace mmoire disponible.
ils peuvent tre indics par des chanes de caractres.
20142015

v.958

67

Chapitre 9. Le filtre awk

UPMC M1 : MNI

N.B. : la fonction interne split permet de construire des tableaux de caractres :


split(s, a, c) dcoupe la chane de caractres s selon le sparateur optionnel c en un
tableau a[1],...,a[n] de n lments et renvoie le nombre n.
Exemples de dutilisation des tableaux awk sur le fichier donnees
indice numrique
{ # en commenant l'indice 0
jours[i++]=$1 # remplir le tableau avec les jours
}
END{ # aprs lecture des NR donnes, imprimer le tableau
print "affiche les jours dans l'ordre des donnes"
for (i=0; i<NR; i++) print i, jours[i]
}
affiche :
affiche les jours dans l'ordre des donnes
0 lundi
1 mardi
2 mercredi
3 jeudi
4 vendredi
5 samedi
6 dimanche
7 mardi
8 lundi
{ # en commenant l'indice 0
jours[i++]=$1 # remplir le tableau avec les jours
}
END{ # aprs lecture des NR donnes, imprimer le tableau
print "autre syntaxe de boucle : noter l'ordre"
for (i in jours ) print i, jours[i]
}
affiche :
autre syntaxe de boucle : noter l'ordre
4 vendredi
5 samedi
6 dimanche
7 mardi
8 lundi
0 lundi
1 mardi
2 mercredi
3 jeudi
BEGIN{ # construction d'un tableau des noms des mois de l'anne
mois = "janv fevr mars avr mai juin juil aout sept oct nov dec"
n = split(mois,tab_mois," ")
print "tableau des", n, "mois"
for (i = 1; i <= n; i++) print i, tab_mois[i]
68

v.958

20142015

UPMC M1 : MNI

Chapitre 9. Le filtre awk

print "\nfichier o le numro du mois a t chang en son nom"


}
{ # remplacement du champ 3 (mois numrique) par le nom du mois
lemois = tab_mois[$3+0] ; $3 = lemois ; print $0
}
affiche :
tableau des 12 mois
1 janv
2 fevr
3 mars
4 avr
5 mai
6 juin
7 juil
8 aout
9 sept
10 oct
11 nov
12 dec
fichier o le numro du mois a t chang en son nom
lundi 4 janv 2002 10H Suzanne 30 restaurant
mardi 23 fevr 2003 12h Jean 40 carte-orange
mercredi 7 avr 2001 16H Anne 10 cafe
jeudi 8 oct 2004 9H Anne 15 librairie
vendredi 14 mai 2003 22h Jean 70 TGV
samedi 22 mai 2004 21H Anne 20 cafeteria
dimanche 13 oct 2002 10H Jean 30 disques
mardi 11 janv 2004 13h Suzanne 14 cinema
lundi 27 mars 2000 9h Anne 10 bus

indice chane de caractres (remarquer lordre en sortie)


{
}
END{
}

jours[$8]=$1
for (dette in jours) print dette, jours[dette]

affiche :
cafeteria samedi
restaurant lundi
bus lundi
disques dimanche
TGV vendredi
cinema mardi
cafe mercredi
librairie jeudi
carte-orange mardi
20142015

v.958

69

Chapitre 9. Le filtre awk

9.5

UPMC M1 : MNI

Complments

awk est un utilitaire programmable dont ce chapitre ne donne quun aperu trs succint. Pour plus dinformations, on se reportera utilement louvrage Aho et al. (1995),
crit par les concepteurs de awk, ainsi que Robbins (1999) et la documentation en
ligne http://www.gnu.org/software/gawk/manual/ de la version gawk qui prsente
des fonctionalits tendues.

9.5.1

Transmission dinformations du shell awk

Il est possible de transmettre des informations du shell vers le programme awk grce
loption -v selon la syntaxe :
awk -f fichier_d_instructions.awk -v var_awk =valeur fichier_de_donnes
par exemple : awk -f pgm.awk -v qui=${USER} donnees
permettra dutiliser dans pgm.awk la variable qui contenant le nom de lutilisateur donn
par la variable denvironnement USER (cf. 11.1.4, p. 80).

9.5.2

La fonction getline

Une restriction fondamentale de awk est quil ne procde a priori qu une seule lecture
des donnes et que toute opration ncessitant plusieurs passes sera difficile programmer. Par exemple, un simple calcul de pourcentage en colonnes ncessite a priori deux
lectures des donnes. Une solution souvent lourde peut consister stocker les donnes
dans un tableau associatif et les manipuler ensuite sous le slecteur END. Mais on peut
aussi utiliser la fonction getline qui permet de dclencher la lecture dun enregistrement
dans un fichier... pour relire le fichier dj lu par awk une fois la somme calcule.
Syntaxe de getline
getline
getline
getline
getline
getline
getline

lit une ligne sur lentre courante et laffecte $0


< "-" lit une ligne sur lentre standard et laffecte $0
var lit une ligne sur lentre courante et laffecte var
var < "fic" lit une ligne dans le fichier fic et laffecte var
var < "-" lit une ligne sur lentre standard et laffecte var
peut aussi lire un pipe via "commande unix" | getline

Remarques
getline na pas dargument mais retourne -1 en cas derreur, 0 en cas de fin de
fichier, et 1 si la lecture est correcte ;
sauf sil sagit de variables awk, les noms de fichiers et les commandes unix doivent
apparatre dlimits par "..." comme toutes les chanes de caractres ;
si laffectation se fait dans une variable, il ny a pas de dcoupage en champs $1,
$2, ... de la ligne lue.
Exemples
avec deux fichiers
awk '{if( (getline x < "tab") > 0) print x; print $0}' donnees
permet dimprimer alternativement une ligne du fichier tab suivie dune ligne du
fichier donnees. Limpression sarrte lpuisement du fichier donnees, mais si
le fichier tab comporte moins de lignes, on termine en nimprimant que celles de
donnees
avec un fichier et lentre standard
awk '{print $0;print "commenter"; getline x < "-"; print $0,x}' affiche
chaque ligne, demande de saisir un commentaire puis affiche la ligne commente ;
on pourra rediriger le dernier print dans un fichier.
70

v.958

20142015

UPMC M1 : MNI

Chapitre 9. Le filtre awk

avec un seul fichier dentre


getline force la lecture dune nouvelle ligne du fichier dans linstruction o il
apparat :
awk '{print $0; if(getline == 1) print "paire"}'
affiche les lignes de numro impair et paire la place des lignes de numro pair.

9.5.3

Instructions de saut

Linstruction next permet de sauter lenregistrement suivant sans effectuer les actions
qui suivent.
Linstruction nextfile permet de sauter la lecture du fichier suivant de la liste, donc
de terminer la lecture des donnes sil sagit du dernier. Elle est utile quand on traite
plusieurs fichiers de donnes dans lesquels tous les enregistrements ne sont pas examins.
Enfin, linstruction exit [exit_code ] permet de terminer le traitement sans lire la suite
des donnes ni la suite des instructions, sauf celle sous le slecteur END. Largument
optionnel exit_code, rendu au systme comme code de retour (cf. 11.3, p. 84) de la
commande awk peut tre utilis pour signaler les comportements exceptionnels. cet
argument prs, linstruction exit se comporte comme nextfile sil ny a quun fichier
de donnes.

9.5.4

Format des sorties

Linstruction printf "format", expression permet comme en C dafficher des expressions avec le format choisi. Celui-ci contient du texte et des descripteurs de format.
Chaque descripteur est compos par le symbole % suivi par la taille et le type de la
variable afficher (%5d pour un entier de 5 chiffres, %6.2f pour un rel avec 2 dcimales
aprs la virgule, %s pour une chane de caractres). Alors que chaque print cre une nouvelle ligne, avec printf, il est ncessaire de forcer les retours la ligne par printf "\n".
Mais printf laisse plus de latitude que print, en particulier il permet de concatener
des affichages issus de plusieurs enregistrements.

9.5.5

Redirections de sortie

Le rsultat des fonctions print et printf peut tre redirig dans un fichier ou dans un
tube (voir chapitre 10 propos des redirections).
Exemples :
1. awk '{if ($1 ~ /^#/) print $0 >"comments"; else print $0}' script
crit dans le fichier comments les lignes du fichier script commenant par # et
affiche les autres lignes
2. awk '{print $0 > $6}' donnees
clate le fichier de dettes en un fichier par personne (nomm par le prnom)
3. awk '{ print $0 | "sort -k" NF "f"}' donnees
affiche les dettes classes par ordre alphabtique du dernier champ sans tenir
compte de la casse (noter quici NF est lextrieur de la chane de caractres
et reprsente le numro du dernier champ)
lundi
mercredi
samedi
mardi
mardi
dimanche
jeudi
lundi
vendredi

20142015

27
7
22
23
11
13
8
4
14

03
04
05
02
01
10
10
01
05

2000
2001
2004
2003
2004
2002
2004
2002
2003

v.958

9h
16H
21H
12h
13h
10H
9H
10H
22h

Anne
Anne
Anne
Jean
Suzanne
Jean
Anne
Suzanne
Jean

10
10
20
40
14
30
15
30
70

bus
cafe
cafeteria
carte-orange
cinema
disques
librairie
restaurant
TGV

71

Chapitre 10

Processus, redirections et tubes


10.1

Flux standard

Une commande unix manipule


trois flux standard de donnes, auxquels sont associs des entiers appels descripteurs :

entre standard
= clavier par dfaut

0 : lentre standard
(par dfaut le clavier)
1 : la sortie standard
(par dfaut lcran)
2 : la sortie derreur standard
(par dfaut lcran)

10.2

sortie standard
= cran par dfaut

commande

sortie derreur
= cran par dfaut

Figure 10.1 Flux standard de donnes associs


une commande

Redirections

On peut rediriger ces flux vers des fichiers ou les entres/sorties dautres commandes.
Ces redirections constituent une des souplesses essentielles du systme unix car elles permettent de combiner des commandes de base pour effectuer des traitements complexes.

10.2.1

Redirection de sortie vers un fichier (> et >>)

syntaxe
commande > fichier
Pour ajouter le rsultat la fin du
fichier :
syntaxe
commande >> fichier

entre standard
= clavier par dfaut

1
fichier

2
sortie derreur
= cran par dfaut

Exemples :
ls -l > liste
date > resultats
echo fin >> resultats

commande

Figure 10.2 Redirection de la sortie

Attention : une redirection de la sortie standard dun filtre vers son fichier dentre

B vide le fichier, par exemple : cat fic1 > fic1 efface le contenu du fichier fic1...

72

UPMC M1 : MNI

10.2.2

Chapitre 10. Processus, redirections et tubes

Redirection de lentre depuis un fichier (<)

syntaxe
commande < fichier

0
fichier

Exemple : lecture des donnes dentre dun excutable sur un fichier


au lieu de la saisie au clavier

sortie standard
= cran par dfaut

commande

2
sortie derreur
= cran par dfaut

a.out < entrees

Figure 10.3 Redirection de lentre

Remarque : Dans certaines commandes qui admettent en argument une liste de fichiers, lentre standard peut tre dsigne par le symbole - . Par exemple,
sort fic1 | cat pre - post
affiche le fichier fic1 tri, prcd du fichier pre et suivi du fichier post

10.2.3

Redirection de la sortie derreurs vers un fichier (2> et


2>>)

syntaxe
commande 2> fichier
Pour ajouter les erreurs la fin du
fichier :
syntaxe
commande 2>> fichier

entre standard
= clavier par dfaut

Attention : pas despace entre 2


et >
Exemple : stockage des diagnostics
dune compilation dans un fichier
pour viter le dfilement lcran
(il faudra corriger dabord la premire erreur)

sortie standard
= cran par dfaut

commande

fichier

Figure 10.4 Redirection de lerreur

g95 essai.f90 2> erreurs

10.2.4

Redirection de lerreur standard vers la sortie standard


(2>&1)

La sortie derreur standard peut tre regroupe dans le mme flux que la sortie standard
grce la syntaxe commande 2>&1
Exemple (on suppose que /etc/motd est accessible en lecture) :
cat /etc/motd /fichier_inexistant affiche le mot du jour et un message d'erreur
cat /etc/motd /fichier_inexistant > resultat
affiche un message d'erreur
cat /etc/motd /fichier_inexistant > resultat 2>&1
n'affiche plus rien
Noter que la redirection de la sortie standard dans la dernire commande doit prcder B
la redirection de lerreur standard vers le flux de la sortie standard.

10.3

Tubes ou pipes (|)

Pour appliquer deux traitements successifs un flux de donnes, au lieu dutiliser un


fichier temporaire intermdiaire, il est plus efficace de connecter directement la sortie de
la premire commande lentre de la deuxime, constituant ainsi un tube (pipe). Le
20142015

v.958

73

Chapitre 10. Processus, redirections et tubes

UPMC M1 : MNI

traitement est plus rapide car la seconde commande commence sexcuter ds que les
premires sorties de la premire sont disponibles, sans passer par le disque.
La mthode squentielle avec fichier intermdiaire :

0
fichier

commande_1

commande_1 > fichier


commande_2 < fichier
rm fichier

peut tre simplifie en :


syntaxe
commande_1 | commande_2

commande_2

TUBE (pipe)

commande_1

commande_2

Exemple : affichage pagin des fichiers du rpertoire courant


ls -l | more

Figure 10.5 Tube ou pipe

10.4

Gestion des processus

10.4.1

Gnralits : la commande ps

Un processus est une tche lmentaire identifie sur le calculateur par un numro unique
ou pid (process identifier). On peut afficher la liste des processus avec la commande ps.
Cette commande est dcline suivant les systmes selon trois syntaxes lies lhistorique
dunix, syntaxes quil est prudent de contrler avec man. Certains systmes acceptent
partiellement les deux syntaxes historiques System V et BSD, mais la syntaxe POSIX,
actuellement en cours dimplmentation doit tre prfre.
Principales options de slection des processus et des informations affiches pour chaque
processus selon la syntaxe POSIX :
-e affiche tous les processus de tous les utilisateurs
-U liste_d_utilisateurs slectionne les processus appartenant cette liste dutilisateurs
-f (full) affiche une liste complte dinformations sur chaque processus
-o options_de_sortie permet de spcifier les informations affiches et leur format
Principaux champs affiches par ps :
UID
no dutilisateur

PID
no du processus

PPID
no du pre

TTY
terminal

VSZ
taille

CMD
commande

Exemples (sous aix)


la commande ps affiche
PID
TTY TIME CMD
1212592 pts/2 0:00 ps
1294516 pts/2 0:01 -ksh
Seuls les processus attachs au terminal courant 1 sont affichs.
N.-B. : la commande ps se voit agir.
la commande ps -U p6m1mni affiche
UID
PID
TTY TIME CMD
40369 307400
- 0:02 sshd
1. La commande tty affiche le nom du terminal courant, ici pts/2.

74

v.958

20142015

UPMC M1 : MNI
40369 1212590
40369 1294516

Chapitre 10. Processus, redirections et tubes


pts/2
pts/2

0:00 ps
0:01 ksh

Quand on prcise le nom de lutilisateur, tous ses processus sont affichs, y compris ceux
non attachs un terminal.
la commande ps -f (full) affiche
UID
PID
PPID
C
STIME
p6m1mni 1294516 307400
0 00:23:53
p6m1mni 2027692 1294516 45 00:59:00

TTY
pts/2
pts/2

TIME CMD
0:01 -ksh
0:00 ps -f

En prcisant les champs et ventuellement leur intitul :


la commande ps -o uid=ID,tty=term,pid,ppid,vsz,args=commande affiche
ID
term
PID
PPID
VSZ commande
40369 pts/2 1294516 307400 1280 -ksh
40369 pts/2 2027768 1294516
532 ps -o uid=ID,tty=term,pid,ppid,vsz,args=

10.4.2

Caractres de contrle et signaux

Les caractres de contrle (obtenus par la frappe simultane de la touche Ctrl , et dun
caractre, par exemple Ctrl C , not ^C) sont des caractres spciaux la plupart du
temps interprts par le shell.
^? ou ^H
^L
^S
^Q
^D
^C
^\

erase
erase
stop
start
eof
intr
quit

^Z
^W

susp
werase

effacement du dernier caractre


effacement de lcran
blocage de laffichage lcran
dblocage de laffichage lcran
fermeture du flux dentre
interruption du processus
interruption du processus
avec production dune image mmoire (fichier binaire core)
suspension du processus en cours
effacement du premier mot gauche du curseur

Laffectation des caractres de contrle certaines fonctions dpend des installations et


est gre par la commande stty (stty -a affiche laffectation courante).
Un caractre de contrle ne peut agir que sur le processus en interaction avec le terminal ;
pour intervenir sur un autre processus, il faut lui envoyer un message appel signal.
Pour envoyer un signal un processus quelconque, on utilise la commande kill, avec
comme paramtre le numro du processus (PID). kill envoie par dfaut un signal de
terminaison, mais si le processus ne sinterrompt pas, on peut tre plus svre avec
kill -KILL (kill -9).

10.4.3

Processus en arrire plan

Comme le systme unix est multi-tche, il est possible de lancer une commande longue
excuter en arrire-plan (background) et de garder la main pour dautres commandes
pendant que cette tche de fond se droule de faon asynchrone. Il suffit dajouter une
esperluette (&) la fin de la ligne de commande.
syntaxe
commande &
Gestion des processus :
jobs affiche la liste numrote des processus en arrire-plan(jobs -l affiche aussi
les numros de processus associs (pid).
20142015

v.958

75

Chapitre 10. Processus, redirections et tubes

UPMC M1 : MNI

fg (foreground) passe le job courant en premier plan


bg (background) passe le job courant en arrire-plan
-] jobs -l
[1]- 26001 Running
[2]+ 26005 Running

xterm &
xclock &

En utilisant la syntaxe % suivi du numro du job (plus simple que le numro de processus
ou pid), on peut indiquer le processus concern aux commandes fg, bg et kill ; par
exemple kill %2 va arrter xclock.
Exemple
Lancer xterm, on perd la main dans la fentre initiale jusqu la fin du processus xterm lanc en premier-plan. Terminer normalement le processus xterm par
exemple en tapant exit ou ^D (la fermeture du flux dentre du shell termine le
processus) dans la nouvelle fentre. On retrouve la main dans la fentre initiale.
Lancer xterm dans la fentre initiale en premier plan. On peut interrompre le
processus xterm par ^C et retrouver la main dans la fentre initiale.
Lancer xterm & en arrire plan : on conserve la main dans la fentre initiale. Les
deux fentres peuvent tre utilises de faon asynchrone. Depuis la fentre initiale,
on peut interrompre le processus xterm en arrire plan par kill suivi de son pid.
Un processus en arrire-plan ne peut plus (en gnral) recevoir de donnes saisies au
clavier (sil en attend, le processus se bloque), et il est prudent de ne pas le laisser
afficher des rsultats volumineux lcran pour viter des interfrences avec laffichage
de premier-plan : en gnral, on redirige les entres et sorties dune commande avant de
la lancer en arrire-plan 2 .
N.-B. : si on a lanc par erreur une tche longue en premier plan, on peut la suspendre
avec ^Z, puis la relancer en arrire-plan par bg, afin de reprendre la main pendant quelle
sexcute.

10.5

Complments

10.5.1

Les fichiers spciaux : exemple /dev/null

Le rpertoire /dev contient des fichiers spciaux grant des flux de donnes entre le calculateur et les priphriques (devices) : terminaux, imprimantes, disques, ... La commande
tty permet de connatre le fichier spcial particulier (ils sont numrots) attribu un
terminal. On peut ainsi par exemple rediriger vers le pseudo terminal 3 la sortie derreur
standard dune commande lance dans le terminal 2 (commande 2> /dev/pts/3).
Mais le fichier spcial /dev/tty dsigne de faon gnrique le terminal attach la
connexion.
Parmi les fichiers spciaux, /dev/null peut tre utilis comme une poubelle pour se
dbarrasser de certaines sorties inutiles.
syntaxe
commande 2> /dev/null
empche le flux derreur de safficher lcran.
Exemple
find rep -name "nom " -print 2> /dev/null
permet dviter laffichage des messages derreur, notamment ceux mis 3 quand on tente
daccder des fichiers non autoriss.
2. On prfre souvent garder la sortie derreur lcran pour surveiller le bon droulement du processus en arrire-plan.
3. Attention, tous les messages derreur sont perdus, y compris ceux qui pourraient signaler une
erreur de syntaxe dans lutilisation de find.

76

v.958

20142015

UPMC M1 : MNI

10.5.2

Chapitre 10. Processus, redirections et tubes

Duplication de flux : tee

La commande tee (T en anglais) duplique le flux de son entre standard sur le fichier
pass en argument et sur sa sortie standard. Par exemple, tee permet de conserver une
trace du rsultat intermdiaire dans un tube :
cmd_1 | tee f_intermediaire | cmd_2

10.5.3

Notion de document joint (<<)

Il est possible de rediriger lentre dune commande habituellement interactive pour lui
passer des requtes depuis une procdure. Il suffit de faire suivre la commande par << et
un mot dlimiteur quelconque (sans espace) ; le texte qui suit, jusqu la premire ligne
(exclue) qui commence par le dlimiteur, est redirig 4 vers lentre de la commande.
Exemple
vi journal > /dev/null <<EOF
:r /etc/motd
8dd
:w
:q
EOF

10.5.4

dition du fichier journal


lecture du fichier /etc/motd
destruction des 8 premires lignes
sauvegarde
sortie de vi
fin de redirection

Groupement de commandes

On rappelle que pour crire plusieurs commandes unix sur une mme ligne, il suffit de
les sparer par un point-virgule ;
cd ; pwd ; ls
Il est possible de grouper plusieurs commandes grce aux parenthses ; elles sexcutent
alors dans un sous-shell, fils du shell interactif. Au retour dans le shell pre, il ny a aura
pas hritage de lenvironnement modifi dans le fils.
B
cd /tmp ; pwd
(cd /bin ; pwd)
pwd

affiche /tmp
affiche /bin dans le sous-shell
affiche de nouveau /tmp

Remarquer la diffrence avec une excution squentielle normale en cas de redirection.


date ; hostname > memo1
(date ; hostname) > memo2
Dans le premier cas, la date saffiche lentre et memo1 contient ibm1, alors que rien ne
saffiche dans le deuxime et que memo2 contient les deux lignes :
Wed Oct 12 22:44:05 DST 2005
ibm1
De manire plus gnrale, lorsque plusieurs commandes sont regroupes en blocs par
des parenthses (sous-shell), des accolades (fonction anonyme, cf. 15.1.3, p. 100), ou
une structure itrative (do...done, cf. 14.3.5, p. 99), les redirections extrieures au bloc
portent sur lensemble du bloc de commandes.
4. Le shell effectue les substitutions de variables et de commandes sur le texte redirig, sauf si le mot
dlimiteur du dbut du document joint est protg par le caractre de protection \, des '...' ou des
"...". En bash et ksh, si le mot de dbut est protg, celui de fin ne doit pas ltre ; en csh ou tcsh, les
deux mots dlimitant le texte du document joint doivent tre protgs de faon identique.

20142015

v.958

77

Chapitre 10. Processus, redirections et tubes

10.5.5

UPMC M1 : MNI

Processus dtach

Une tche trs longue, sans interaction avec un terminal, peut tre lance comme processus dtach dont lexcution pourra continuer aprs la fin de session interactive.
nohup commande <entrees >sortie 2>erreurs &
Par dfaut la commande nohup redirige ses sorties standard et derreur vers le fichier
nohup.out dans le rpertoire courant. Le processus lanc avec nohup ne sera plus sensible
au signal SIGHUP produit par la fermeture de la session 5 .
Il existe dautres modes dexcution des processus qui font appel au service cron :
dtach et diffr (faire prcder la commande de at, suivi de la date souhaite 6
pour le lancement, ou batch et alors cest le systme qui gre les priorits dexcution),
processus priodiques (voir la commande crontab) essentiellement pour la gestion du systme (sauvegardes, purges despaces temporaires, mise jour de bases
dindexation pour les manuels et les commandes, ...).

5. Il est possible de dplacer le terminal dinteraction dune session, condition de grer la session
interactive via la commande screen. On peut alors la dtacher du terminal sans linterrompre, puis la
reprendre depuis un autre poste via screen -r
6. Linstant fourni la commande at peut tre une date absolue ou relative : la commande accepte
par exemple now +5hours ou tomorrow. Il est de mme pour la commande date qui permet dafficher
une date quelconque, grce loption -d dont largument peut tre une date absolue ou un dcalage
par rapport la date courante. En particulier, date -d +2days affiche la date telle que date la donnera
dans 2 jours.

78

v.958

20142015

Chapitre 11

Variables et mtacaractres
11.1

Variables

11.1.1

Affectation et substitution

Le shell manipule des variables non types et qui nont pas besoin dtre dclares. Elles
permettent de stocker des chanes de caractres.
Syntaxe daffectation 1 (en shell de type Bourne) :
syntaxe

variable =valeur

(sans espace autour du signe =)

Rfrence la valeur 2 de la variable :


$variable

syntaxe
ou, plus prcisment,
${variable }

Ne pas confondre la syntaxe du shell, qui utilise le $ uniquement pour la rfrence la B


valeur, avec celle de perl ou php qui utilisent le $ pour dsigner une variable scalaire.
a=toto
b=25
c=3b
echo variables : a b c,
d=x+${a}
echo a=${a} d=${d}

valeurs : ${a} ${b} ${c}

N.-B. : pour effectuer des oprations arithmtiques sur les variables, on utilisera la commande expr qui interprte les valeurs des variables comme des entiers (cf. chapitre 13),
par exemple expr 12 + 2 fera laddition attendue.
La commande interne set permet dafficher la liste de toutes les variables du shell, sous
la forme variable =valeur , raison dune variable par ligne.
set | more
set | wc -l

11.1.2

pour compter le nombre de variables

La commande read

La commande interne (built-in) read permet aussi laffectation de valeurs des variables.
syntaxe
read liste de variables
liste de valeurs
(saisies au clavier sur une seule ligne)
1. La convention utilise par le shell est intermdiaire entre celles du C et du fortran, o le nom de
la variable est utilis sans signe $ (var2=var1) et celle de langages tels que perl et php pour lesquels il
est toujours prcd dun $ ($var2=$var1), que ce soit en rfrence ou en affectation.
2. Lemploi des accolades pour dlimiter le nom de la variable est conseill et parfois ncessaire
lorsque la valeur de la variable est suivie dune chane de caractres : $var2 dsigne ${var2}, le contenu
de la variable var2 et non ${var}2, la chane obtenue en concatnant le contenu de var et le caractre
2.

79

Chapitre 11. Variables et mtacaractres

UPMC M1 : MNI

read lit une ligne sur lentre standard et affecte chaque mot de cette ligne une variable,
de gauche droite. Si le nombre de mots est suprieur au nombre de variables, la dernire
variable se voit affecter la chane constitue des mots restants de la ligne.
read aa bb
A BB CCC DDDD
echo ${aa}
A
echo ${bb}
BB CCC DDDD

11.1.3

(commande lance)
(saisie de l'utilisateur)
(rponse du shell)
(rponse du shell)

Porte des variables

B Par dfaut, les variables ne sont pas hrites par les processus fils, comme on peut le

constater en testant ce qui suit :

a=bonjour
echo a contient +${a}+
bash
ps
echo a contient +${a}+
a=salut
echo a contient +${a}+
exit
ps
echo a contient +${a}+

11.1.4

affectation dans le processus pre


a contient +bonjour+
lancement d'un shell fils
a contient ++

(non affect)

a contient +salut+
retour au shell pre
a contient +bonjour+

Variables denvironnement

Mais certaines variables vitales, dites variables denvironnement et gnralement dsignes par des noms en majuscules, sont systmatiquement hrites par les processus fils
( linverse, un processus fils ne peut pas affecter une variable du processus pre). La
commande interne env permet dafficher la liste des variables denvironnement et leur
contenu sous le mme format que set pour les variables normales.
env | more
env | wc -l
echo TERM = ${TERM} , HOME = ${HOME}
echo PATH = ${PATH} , USER = ${USER}
Variables denvironnement standard :
SHELL : interprteur de commandes ou shell (bash, ksh, tcsh, ...)
TERM : type de terminal utilis (vt100, xterm, ...)
HOME : rpertoire daccueil
PATH : liste des chemins de recherche des commandes spars par des :
USER : nom de lutilisateur
Pour forcer lhritage dune variable par les processus fils, on doit explicitement le spcifier dans le processus pre par :
export variable

syntaxe

En bash, export -p affiche la liste de variables exportes et leurs valeurs.


80

v.958

20142015

UPMC M1 : MNI

11.1.5

Chapitre 11. Variables et mtacaractres

Complment : valeur par dfaut

Le mcanisme de substitution des variables admet de nombreuses constructions plus


sophistiques lintrieur des accolades, notamment pour fournir des valeurs par dfaut
suivant la syntaxe ${variable -valeur } qui donne :
la valeur de ${variable } si cette variable est dfinie
valeur sinon
Exemple : ${TMPDIR-/tmp}
La variante ${variable :-valeur } rend aussi la valeur par dfaut lorsque la variable
est dfinie mais vide.

11.1.6

dition du contenu des variables

La syntaxe ${variable} qui permet de rfrencer le contenu dune variable admet de


nombreuses extensions permettant de manipuler la chane de caractre rsultante, notamment :
${#var } qui dsigne le nombre de caractres du contenu de la variable var
${var :n} qui dsigne la sous-chane commenant aprs le caractre numro n
Exemple : si on affecte fr_FR.UTF-8 la variable de langue LC_ALL, la commande
echo ${LC_ALL:6} affiche partir du septime caractre de la variable, cest--dire
la partie codage soit ici UTF-8.
${var :n:lg} qui dsigne la sous-chane de longueur lg commenant aprs le caractre numro n
${var //motif1 /motif2 } qui remplace toutes les occurrences de motif1 par motif2
dans le contenu de la variable var
Exemple : ${PATH//:/ } permet de transformer la liste des chemins daccs aux
commandes en bash ou ksh (donc spars par des :) par une liste conforme la
syntaxe csh o le sparateur est lespace.
Si ${PATH} vaut /usr/bin:/usr/local/bin:/usr/bin/X11
${PATH//:/ } vaudra /usr/bin /usr/local/bin /usr/bin/X11

11.2

Caractres spciaux

Nous avons dj vu que le shell interprte certains caractres spciaux aussi appels mtacaractres (metacharacters), en particulier les espaces pour dcouper la ligne de commande en mots, >, > et | pour les redirections, ainsi que $ pour rfrencer les variables.
Mais nous allons voir que ces caractres spciaux sont en fait trs nombreux.

11.2.1

Caractres gnrant des noms de fichiers

Caractres jokers 3 ou constructeurs de modles de noms de fichiers :


*
?
[...]
[!...]
{motif1,motif2}

une chane quelconque dans un nom de fichier


un caractre quelconque dans un nom de fichier
un caractre quelconque pris dans la liste entoure par les crochets ( lintrieur des [ ], c1 -c2 reprsente la liste des caractres entre c1 et c2 dans lordre lexicographique)
un caractre quelconque pris hors de la liste entoure par les
crochets
motif1 ou motif2 (alternative)

3. Il est possible dinhiber lexpansion des caractres jokers (ou wildcards) pour dsigner des
fichiers dont le nom comporte un ou plusieurs dentre-eux avec loption noglob du shell : set -o noglob.
La commande set +o noglob rautorise lexpansion (cf. 15.1.7, p. 102).

20142015

v.958

81

Chapitre 11. Variables et mtacaractres


Exemples :
*
*.f90
*.*
data??
f.[abc]
f.[0-9]
f.[!0-9]
f.200[1-5]
*.{for, f90}

UPMC M1 : MNI

tous les fichiers du rpertoire courant


tous les fichiers dont le nom finit par .f90
tous les fichiers dont le nom comporte un point
tous les fichiers dont le nom est data suivi de deux caractres
les fichiers f.a, f.b, et f.c sils existent
les fichiers dont le nom scrit f. suivi dun chiffre
les fichiers dont le nom scrit f. suivi dun caractre qui ne soit pas
un chiffre
les fichiers dont le nom scrit f. suivi dun nombre compris entre 2001
et 2005 (ne pas utiliser [2001-2005] qui signifie un seul chiffre parmi
0, 1, 2 ou 5 et o lintervalle rduit 1-2)
les fichiers dextension .for ou .f90

B Par dfaut (mais ce comportement est modifiable via une option du shell, cf. 15.1.7,

p. 102), on ignore les noms des fichiers cachs, cest dire ceux dont le nom commence
par un point.
Par dfaut, si aucun fichier du rpertoire de travail ne correspond au motif gnrique
B utilisant ces caractres jokers, le shell les restitue inchangs (cf. 14.2, p. 95). Par exemple,
dans un rpertoire sans fichier source en C, la commande ls *.c affiche *.c. Pour obtenir
dans ce cas une rponse sous forme de liste vide, on utilise la commande interne shopt
pour positionner loption nullglob du shell : shopt -s nullglob.

11.2.2

Liste des mtacaractres

, TAB
*, ?, [...]
~
<, <<, >, >>, |
$ ou ${...}
$(...) ou `...`
;
:
(...)
{...}
&
!
|| et &&
#
\
'...'
"..."

11.2.3

espace et tabulation : sparateur dentre (IFS)


constructeurs de noms de fichiers
rpertoire daccueil
redirections
valuation de variable
substitution de commande
sparation de commandes (sur une mme ligne)
commande nulle
groupement de commandes dans un sous-shell
groupement de commandes (sans sous-shell)
lancement en arrire plan
non logique
association de commandes
introducteur de commentaire en shell
protection individuelle de caractre
protection forte
protection faible

Substitution de commande

Le rsultat dune commande (sa sortie standard) peut tre affect une chane de caractres pour tre stock dans une variable ou repris par une autre commande.
$(commande )

syntaxe

Noter lancienne syntaxe, avec des accents graves (backquotes) `commande `, moins lisible,

B en particulier dans le cas dimbrications. Ne pas confondre ${variable } et $(commande ).

La substitution de commande est utilise pour paramtrer les shell-scripts, pour effectuer
des calculs sur les entiers avec la commande expr, et, par exemple, pour manipuler des
noms de fichiers et des chemins avec les commandes basename et dirname.

82

v.958

20142015

UPMC M1 : MNI

Chapitre 11. Variables et mtacaractres

qui=$(whoami) ; echo $qui ; echo ${qui} # affectation de la variable qui


echo $(whoami)
# utilisation directe
echo la date est $(date)
echo la date est `date`
# ancienne syntaxe (Bourne shell)
#
s1=$(expr 12 + 2)
# calcul puis affectation s1
echo la somme de 12 et 2 est ${s1}
echo la somme de 12, 2 et 1 est $(expr $(expr 12 + 2) + 1) # imbrication
#
sans_suffixe=$(basename source.for .for) # suppression du suffixe .for
source90=$(basename source.for .for).f90 # changement du suffixe en .f90
echo ${sans_suffixe} ${source90}

11.2.4

Protections des mtacaractres

Pour rendre aux caractres spciaux leur valeur littrale et les protger de linterprtation
par le shell, trois mthodes sont disponibles :
la contre-oblique (backslash) \ interdit linterprtation du caractre qui suit :
echo
echo
echo
echo
echo

liste des fichiers : *


caractre \*
\$TERM = ${TERM}
texte; date
texte\; date

un couple dapostrophes (quotes) autour de la chane constitue une protection forte,


interdisant toute interprtation par le shell lintrieur de la chane protge :
echo
echo
echo
echo
echo
echo

liste des fichiers : *


'caractre *'
'$TERM = ${TERM}'
texte; date
'texte; date'
'la date est $(date)'

parfois, on souhaite laisser le shell effectuer les substitutions de variables et de


commandes lintrieur de la chane et on prfre une protection faible laide
dun couple de doubles apostrophes (double quotes) :
echo
echo
echo
echo
echo
echo

liste des fichiers : *


"caractre *"
"$TERM = ${TERM}"
texte; date
"texte; date"
"la date est $(date)"

N. B. : lintrieur des doubles apostrophes, les simples ne sont pas interprtes (et
rciproquement).

11.2.5

Exemples

Exemple 1
Comme le shell dcoupe la ligne de commande en mots , il nest pas possible de
considrer une chane de caractres comportant des blancs comme un mot, par exemple
pour laffecter une variable (NAME=nom prenom cherche lancer la commande prenom,
aprs avoir affect nom NAME). Pour protger le blanc (un ou plusieurs espaces ou
tabulations) de linterprtation par le shell, trois mthodes sont disponibles :
NAME=nom\ prenom, mais il en faut autant que despaces protger
NAME=nom\ \ \ prenom
20142015

v.958

83

Chapitre 11. Variables et mtacaractres

UPMC M1 : MNI

NAME='nom prenom
NAME="nom prenom"
qui va permettre de substituer le nom dutilisateur dans : NAME="$USER prenom"
Exemple 2
Il est possible daffecter une valeur une variable par simple concatnation de chanes
qui utilisent dautres variables ou le rsultat de commandes : var="${var1}$(cmd)".
partir de commandes lmentaires didentification, on peut construire une variable
adresse contenant ladresse de messagerie sur un serveur.
adresse=$(whoami)@$(hostname)
Exemple 3
En choisissant les options de la commande date, on peut afficher seulement lanne, le
mois et jour sous le mme format que celui obtenu en listant des fichiers avec ls -l
(cf. 2.3.1, p. 9). Cette date peut tre utilise pour slectionner via grep les seuls fichiers
du jour dans une liste de fichiers :
ls -al | grep "$(date +'%%Y-%m-%d')"
En fait, pour rechercher des fichiers selon un critre de date, la commande find (cf. 3.2.1,
p. 22) est plus puissante.
Exemple 4
find ~lefrere -name '*.f90' -print
Sans protection, *.f90 est remplac par la liste des fichiers de suffixe .f90 dans le
rpertoire courant avant lexcution de find (cf. 3.2.1, p. 23).
Sil y en a plus dun, cela provoque une erreur de syntaxe sur find.

11.3

Code de retour dune commande ($?)

Toute commande unix renvoie en fin dexcution un code entier, appel valeur de retour
(voir par exemple la valeur de retour entire de la fonction main en C) ou statut de fin
(return status) lappelant qui peut le rfrencer par $? pour contrler les commandes
ultrieures. Par convention, le code de sortie 0 indique que la commande sest bien
droule, les autres valeurs pouvant renseigner sur le type de problme rencontr.
cd /bin
cd /introuvable
echo $? affiche 0
echo $? affiche 1
La commande test permet de produire un statut de fin en valuant des conditions diverses portant sur des fichiers, des chanes de caractres ou des entiers (cf. le chapitre 13).

11.4

Complments

11.4.1

Inversion du statut de retour (!)

Le code de retour dune commande peut tre invers (0 devient 1 et tout code diffrent
de 0 devient 0) en faisant prcder la commande dun point dexclamation, suivi dune
espace 4 :
syntaxe
!commande
4. Sans lespace ! suivi dune commande, ou du dbut dune ligne de commande prsente dans lhistorique (avec suffisamment de caractres pour ne pas prsenter dambigit, comme dans les compltions)
serait interprt comme la relance de cette commande.

84

v.958

20142015

UPMC M1 : MNI

11.4.2

Chapitre 11. Variables et mtacaractres

Combinaison de commandes (&&)

commande_1 && commande_2

syntaxe

La premire commande est excute. Si et seulement si elle russit (code de retour gal
zro), la seconde est alors excute.
N.-B. : le code de retour de la combinaison est celui de la dernire commande effectivement excute, donc diffrent de 0 si commande_1 choue et le code de retour de
commande_2 si commande_1 russit.
Par exemple, on lance un excutable seulement si sa production (compilation et lien)
sest effectue sans erreur.
g95 source.f90 && a.out

11.4.3

Combinaison de commandes (||)

commande_1 || commande_2

syntaxe

La premire commande est excute. Si et seulement si elle choue (code de retour diffrent de zro), la seconde est alors excute.
N.-B. : le code de retour de la combinaison est celui de la dernire commande effectivement excute, donc 0 si commande_1 russit et le code de retour de commande_2 si
commande_1 choue.
On peut ainsi grer de faon minimale les checs de certaines commandes :
cp fichier1 fichier2 || echo la copie a chou

11.4.4

La commande nulle :

Le shell possde aussi une commande nulle , dsigne par le caractre : qui
nexcute aucune action mais donne lieu interprtation par le shell ; elle peut tre
utile dans les structures de contrle (boucles infinies ou premier bloc dun test type
if; then ... else ... fi dans lequel seul le bloc else requiert une action). Comme
son flux de sortie est vide, elle permet aussi de crer des fichiers vides par redirection
(: >fichier__vider ). Enfin, lors de son excution, les variables sont values, donc
elle peut servir positionner des variables :
REP="${TMPDIR-/tmp}" :
affecte "${TMPDIR}" sil est dfini (cf. 11.1.5 p. 81) ou sinon /tmp REP.

11.4.5

Invite pour la commande read

La commande read peut aussi afficher un message, sans retour la ligne (prompt) invitant
saisir la rponse. La syntaxe dpend des implmentations :
sous bash : option -p suivie du message, le tout plac avant la premire variable ;
read -p "entrez deux valeurs : " aa bb
entrez deux valeurs : AAA BBB
echo ${aa} ${bb}
AAA BBB

(en bash)
(rponse du shell)

sous ksh : caractre ? suivi du message, le tout plac aprs la premire variable.
read aa?"entrez deux valeurs : " bb
entrez deux valeurs : AAA BBB
echo ${aa} ${bb}
AAA BBB

20142015

v.958

(en ksh)
(rponse du shell)

85

Chapitre 12

Procdures de commande
12.1

Fichiers de commande

Une procdure en shell (shell script) est un fichier texte contenant une suite de commandes
unix et rendu excutable (par la commande chmod u+x nom_du_fichier par exemple,
cf. 3.1.4, p. 21).
Si la variable denvironnement PATH contient le chemin daccs au rpertoire contenant le
fichier, la procdure peut tre excute telle une commande unix, en tapant simplement
son nom. Sinon, il faut fournir le chemin complet daccs au fichier.
En pratique, on placera le rpertoire courant (.) dans le PATH pour tester les procdures
facilement, mais on crera un rpertoire personnel ${HOME}/bin que lon adjoindra la
liste PATH pour stocker les commandes personnelles une fois mises au point.

12.1.1

Exemple de procdure sans paramtre

Les procdures suivantes affichent la date, le nom de lutilisateur et le nom du calculateur.


Pour le shell, tout ce qui, sur une ligne, suit le caractre # plac en dbut de mot est un
commentaire 1 .
# affichage de la date
date
whoami # du nom de l'utilisateur
hostname # du nom du calculateur
#! /bin/sh
# shell-script interprt en sh quel que soit le shell courant
# utilise des substitutions de commandes selon la syntaxe $(cmde)
echo nous sommes le $(date)
echo mon nom de login est $(whoami)
echo sur le calculateur $(hostname)
# fin du shell-script

12.1.2

Les paramtres des procdures

lintrieur dune procdure, plusieurs variables spciales sont automatiquement positionnes auxquelles on peut se rfrer :
$0
le nom du fichier de commande (tel que spcifi lors de lappel)
$1, $2, ... $9 les paramtres positionnels (arguments) avec lesquels la procdure a t
appele (en fait le nombre de paramtres peut dpasser 9 et on peut
accder par exemple au dixime paramtre via ${10})
$*
la chane forme par lensemble des paramtres dappel "$1 $2 $3 ..."
$#
le nombre de paramtres positionnels lors de lappel
$$
le numro du processus lanc (pid = process identifier)
$_
le dernier paramtre positionnel
1. Cependant, la premire ligne #!/bin/sh permet de spcifier le chemin absolu du fichier excutable
qui va interprter la procdure indpendamment du shell interactif de lutilisateur.

86

UPMC M1 : MNI

12.1.3

Chapitre 12. Procdures de commande

Exemple de procdure avec paramtres

#!/bin/sh
echo la procdure $0
echo a t appele avec $# paramtres
echo le premier paramtre est $1
echo le dernier paramtre est $_
echo la liste des paramtres est $*
echo le numro du processus lanc est $$

12.1.4

Utilisation de set

set est une commande interne du shell multiples facettes :


set sans paramtre affiche la liste des variables et leur valeur
set suivie dune liste de mots affecte chacun des mots un paramtre positionnel
($1, $2, ...)
set aaa
echo $#
echo $1
echo $2
echo $3

bbb "ccc d"


affiche 3
affiche aaa
affiche bbb
affiche ccc d

set suivie dune option introduite par - (ou +) permet de positionner des rglages du
shell ; les options suivantes sont utiles dans la phase de mise au point des procdures :
set -v (verbose) affiche les commandes (sans valuation) avant de les excuter
set -x (xtrace) affiche les commandes aprs valuation des substitutions avant de
les excuter

12.1.5

La commande shift

La commande interne shift permet de dcaler les paramtres positionnels de la procdure dune unit : le n + 1e paramtre devenant le ne, le premier est alors perdu.
$1 $2 $3 $4 $5 $6
a

n
n

$1 $2 $3 $4 $5

Figure 12.1 Dcalage des paramtres positionnels par shift


shift suivi dun entier p dcale de p les paramtres. La variable $# est automatiquement
dcrmente de p.
Exemple de procdure utilisant shift
Si la procdure shift1.sh contient :
#!/bin/sh
echo liste des $# paramtres : $*
echo dcalage d\'une unit
shift
echo liste des $# paramtres : $*
echo dcalage de deux units
shift 2
echo liste des $# paramtres : $*
exit
20142015

v.958

87

Chapitre 12. Procdures de commande

UPMC M1 : MNI

En lanant shift1.sh aa b c ddd ee ff, on obtient :


liste des 6 paramtres : aa b c ddd ee ff
dcalage d'une unit
liste des 5 paramtres : b c ddd ee ff
dcalage de deux units
liste des 3 paramtres : ddd ee ff
La commande shift sera notamment utilise dans une boucle sur les paramtres positionnels dune procdure pour se dbarrasser des paramtres aprs leur prise en compte.

12.2

Complments

12.2.1

Distinction entre $* et $@

La variable spciale $@ est quivalente $*, et contient la liste des paramtres positionnels. Mais ces variables se comportent diffremment si elles sont entoures de guillemets :
"$*" reprsente la liste des paramtres en un seul mot cest dire
"$1 $2 $3 ..."
"$@" reprsente la liste des paramtres avec un mot par paramtre cest dire
"$1" "$2" "$3" .... En particulier, si aucun paramtre positionnel nest fourni,
"$@" rend un mot vide.

12.2.2

Complments sur la commande set

Lorsquon utilise set pour affecter les paramtres positionnels $1, $2 ..., si le premier
caractre du premier mot qui suit la commande commence par un signe -, set va linB terprter comme lintroduction dune option. Pour permettre daffecter $1 une valeur
commenant par -, il faut utiliser la syntaxe set -- liste_de_mots, les deux signes -indiquant la fin des options.
set -- $(ls -al .profile)
echo le fichier $9 comporte $5 octets
Si on utilise set suivie dune liste de mots dans une procdure, on va craser autant de
paramtres positionnels quon fournira de mots : il est donc prudent de les sauvegarder
avant de lancer set.

88

v.958

20142015

Chapitre 13

Les commandes test et expr


13.1

La commande test

La commande test permet de comparer des nombres entiers ou des chanes de caractres
et de tester les proprits de fichiers. Elle peut tre invoque sous deux formes :
test expression
[expression ] en plaant simplement la condition entre crochets 1
Les arguments de test doivent tre spars par un espace de la mme faon quun espace
doit sparer la condition tester des dlimiteurs [ et ].
La commande test fournit un code de retour (status en anglais) $? (cf. 11.3, p. 84) nul si
la condition est ralise et non nul sinon, status selon lequel des traitements diffrencis
pourront tre conduits laide de structures de contrle du shell de type if, while ou
until.
Remarque : les commandes true et false permettent de rendre un code de retour
fixe, respectivement 0 et 1.

13.1.1

Comparaisons arithmtiques
-le
-lt
-eq
-ge
-gt
-ne

lower or equal
lower than
equal
greater or equal
greater than
not equal

infrieur ou gal
infrieur
gal
suprieur ou gal
suprieur
diffrent de

Exemples :
test3-gt2
echo$?
-> 0

test3-lt2
echo$?
-> 1

#!/bin/sh
# sauve.sh : shell-script qui doit tre appel avec au moins 1 paramtre
if [ $# -lt 1 ]
then # cas o $# < 1
echo il manque le paramtre '$1' de la commande $0
else # cas o $# >= 1
echo appel correct
cp $1 $1.sav
echo copie de $1 dans $1.sav
fi
exit
1. Certains shells, dont bash, ksh et zsh admettent une syntaxe plus simple utilisant des doubles
crochets, [[ ... ]], entre lesquels certains mtacaractres (dont *, >, <, ||, &&) ne sont plus interprts
par le shell.

89

Chapitre 13. Les commandes test et expr

13.1.2

UPMC M1 : MNI

Comparaisons de chanes de caractres


-n
-z
s1
s1

s
s
= s2
!= s2

chane
chane
chane
chane

s de longueur non nulle


s de longueur nulle
s1 et chane s2 identiques
s1 et chane s2 diffrentes

Exemples :
[ -z "" ]
echo $?
-> 0

[ a1 = a2 ]
echo $?
-> 1

var1=aaa ; var2=aaa
[ ${var1} != ${var2} ]
echo $?
-> 1
Remarque : Ces tests sont trs souvent appliqus des variables dans des scripts. Il
est alors prudent de dlimiter la chane rsultant de lvaluation de la variable par des ".
Cela permet dviter une erreur de syntaxe pour la commande test qui, sans les ", ne
verrait aucun argument dans le cas o la variable value est constitue de blancs, est
vide ou non initialise.
var1=aaa ; var2="
"
test ${var1} != ${var2}
-> ksh: test: 0403-004 Specify a parameter with this command.
ou, suivant le shell
-> -bash: test: aaa: unary operator expected
echo $?
-> 1 en ksh, ou -> 2 en bash
test "${var1}" != "${var2}"
echo $?
-> 0

13.1.3

Tests sur les fichiers


-r
-w
-x
-e
-f
-d
-s

toto
toto
toto
toto
toto
toto
toto

read
write
execute
exist
file
directory
size

toto est un fichier accessible en lecture


toto est un fichier accessible en criture
toto est un fichier accessible en excution
le fichier toto existe
le fichier toto existe et est un fichier ordinaire
le fichier toto existe et est un rpertoire
le fichier toto existe et est non vide

Exemples :
test -r /etc/motd
echo $?
-> 0
test -w /etc/motd
echo $?
-> 1

13.1.4
!
-o
-a

test -d /tmp
echo $?
-> 0
test -f /tmp
echo $?
-> 1

Combinaisons de conditions

ngation
ou logique (or)
et logique (and)

Les parenthses permettent de grouper des sousconditions, mais elles ne doivent pas tre interprtes
par le shell, donc il faut les protger par \.

Exemple : test\("${a}"-ge2\)-a\("${a}"-le5\) est vrai si 2 6 a 6 5.

90

v.958

20142015

UPMC M1 : MNI

13.2

Chapitre 13. Les commandes test et expr

La commande expr

La commande expr permet dvaluer des expressions contenant des oprateurs arithmtiques ou logiques ou portant sur des chanes de caractres. Chaque terme de lexpression
valuer doit tre spar du suivant par un espace et il faut aussi protger (par des \)
les mtacaractres de linterprtation par le shell. La commande expr est principalement
utilise pour effectuer des calculs sur des variables du type expr ${var1 } + ${var2 }
que lon peut ensuite affecter une autre variable via une substitution de commandedu
type var =$(expr ${var1 } + ${var2 }).

13.2.1

Oprateurs arithmtiques
+
*
/
%

somme
diffrence (binaire) ou oppos (unaire)
produit
quotient de la division entire
reste de la division entire

Exemples :
expr3\*2
-> 6
expr13%5
-> 3

a=3
a=$(expr${a}\*2)
echo$a
-> 6

var1=3
var2=2
var3=$(expr10\*\(${var1}+${var2}\))
echo${var3}
-> 50

13.2.2

Autres oprateurs

La commande expr permet aussi des comparaisons grce aux oprateurs binaires <, <=,
=, !=, >, >=, qui utilisent des mtacaractres devant videmment tre protgs dune
valuation par le shell. Le rsultat de la comparaison est 1 si la condition est ralise, et
0 sinon (ne pas confondre ce rsultat avec le code de retour $? de la commande, qui suit
une convention inverse, comme le code de retour de test) 2 .
Exemples :
expr2\>1
-> 1
echo$?
-> 0

expr2\<1
-> 0
echo$?
-> 1

13.3

Autres outils pour les calculs

13.3.1

Oprateurs intgrs au shell

La plupart des shells modernes (ksh, bash et zsh notamment), disposent de commandes
internes qui permettent deffectuer des oprations arithmtiques sur les entiers beaucoup
plus rapidement quavec expr en utilisant des syntaxes nettement plus concises.
2. La commande expr permet aussi certains traitements sur les chanes de caractres (recherche de
motifs, dtermination de longueur, recherche de sous-chanes, de position dune sous-chane).

20142015

v.958

91

Chapitre 13. Les commandes test et expr

UPMC M1 : MNI

Par exemple, ils interprtent directement les commandes du type


var =$((${var1 }+${var2 })), voire var =$((var1 +var2 )),
pour calculer la somme de deux variables et affecter le rsultat une troisime. ce
propos, ne pas oublier que, dans ce contexte, les entiers commenant par le chiffre 0
B sont, comme en langage C, considrs comme crits en octal : ainsi echo $((011+2))
va afficher 11, alors que expr 011 + 2 affiche la valeur attendue, soit 13.

13.3.2

Les commandes de calcul non entier dc et bc

Les commandes internes du shell ainsi que la commande expr ne peuvent faire de calculs
que sur les nombres entiers. Pour manipuler des nombres non entiers, on peut faire appel
aux commandes dc ou bc.
Elles ont en commun notamment de travailler en prcision arbitraire et de traiter soit
un fichier de script pass en argument, soit par dfaut lentre standard. Donc ces commandes se terminent 3 par une fin de fichier, soit ^D. Elles se prtent lcriture de
shell-scripts si on rcupre dans une variable les rsultats, par dfaut affichs sur la
sortie standard.
La commande de calcul dc
La commande dc permet deffectuer des calculs numriques en notation polonaise inverse, avec la notion de pile et doprateurs post-fixs.
La commande de calcul bc
La commande bc permet deffectuer des calculs numriques dans une syntaxe proche de
celle du langage C. Grce loption -l, elle peut faire appel certains fonctions de la
bibliothque mathmatique du langage C. Par exemple, la fonction arc-tangente, appele
simplement a, peut tre invoque pour calculer comme suit :
pi = 4.*a(1)

3. En particulier quand on a lanc dc en lieu et place de la commande cd.

92

v.958

20142015

Chapitre 14

Structures de contrle du shell


Introduction
Comme les langages de programmation tels que C ou le fortran, le shell possde des
structures de contrle qui prennent tout leur intrt lors de lcriture de shell-scripts,
mme si elles restent utilisables en interactif sur la ligne de commande. Elles permettent
de dcider, au vu de certaines conditions portant en gnral sur le code de retour de
commandes, quelles instructions de la procdure doivent tre excutes et de mettre en
uvre de faon itrative une liste de commandes.
Une commande quelconque peut tre utilise pour conditionner une action 1 , mais trs
souvent, cest le code de retour de la commande test qui est utilis, et il est donc
ncessaire de consulter le chapitre 13 qui lui est consacr.
Ces structures de contrle sont introduites par des mots-clefs rservs (if, case, for, ...)
placs en dbut de ligne. Ne sont dcrites ici que les syntaxes des shells de type Bourne ;
pour ceux de type C-shell, voir par exemple DuBois (1995).
Pour viter de confondre les syntaxes des diffrents langages, on consultera le tableau
comparatif des structures de contrle en shell, fortran et langage C en annexe page 114.

14.1

Les conditions

14.1.1

La construction if ... fi

Dans la structure if, la condition porte sur le code de retour de la commande qui suit
if. En particulier, sil sagit dune commande compose, par exemple avec un tube, cest
le code de retour de la dernire commande de la ligne qui est test.
syntaxe
if commande
then
commande(s)
(excutes si le code de retour est 0)
else
commande(s)
(excutes si le code de retour est diffrent de 0)
fi
La partie else ... jusqu fi exclus est optionnelle.
Exemples
#!/bin/sh
# fichier qui contrle si un paramtre au moins a t fourni
#
if test $# -eq 0 # viter "=" pour une comparaison numrique
then
echo Relancer la commande en lui ajoutant un paramtre
else
echo Enfin\! Vous avez compris.
fi
1. Cest un des aspects les plus droutants par rapport aux structures de contrle dautres langages
de programmation.

93

Chapitre 14. Structures de contrle du shell

UPMC M1 : MNI

#!/bin/sh
# fichier qui indique si l'utilisateur de nom pass
#
en paramtre est connect
if who | grep "^$1 " # recherche comme un mot en premire colonne
then
echo $1 est connect
fi
Les structures if ... fi peuvent semboter et on peut contracter else if en elif en ne
conservant alors que le fi terminal.
syntaxe
if ...
if ...
then
then
...
...
else if ...
elif ...
then
then
...
...
else if ...
elif ...
then
then
...
...
fi
fi
fi
fi
exemple avec elif
#!/bin/sh
if test $# -eq 0
then
echo Relancer la commande en lui ajoutant un paramtre
elif who | grep "^$1 " > /dev/null
# affichage perdu
then
echo $1 est connect
fi

14.1.2

La construction case ... esac

Quand le nombre des tests imbriqus est important, et quand ils portent sur la correspondance entre une chane variable et des motifs, il est souvent plus efficace dutiliser la
structure case qui permet dnumrer une liste de motifs possibles.
syntaxe
case variable in
il y a comparaison de variable
motif1 ) commande(s)
avec les motifs de haut en bas.
;;
A la premire concidence,
motif2 ) commande(s)
il y a excution
;;
des commandes correspondantes
...
jusqu'au double point-virgule
esac
et sortie de la structure.
Les motifs peuvent faire intervenir des caractres spciaux qui seront interprts comme :
* = un nombre quelconque de caractres quelconques
[xyz] = lun quelconque des caractres numrs entre les crochets
[x-z] = lun des caractres entre x et z dans lordre lexicographique
motif1|motif2|motif3 = un quelconque des motifs spars par des |
Cas du C-shells : noter que la structure switch du C-shell et du langage C ne se comporte de manire similaire qu condition de terminer chaque cas par breaksw/break;.
Le motif le plus gnral (quivalent de *) est, dans ces langages, dsign par default.
94

v.958

20142015

UPMC M1 : MNI

Chapitre 14. Structures de contrle du shell

Exemple
#! /bin/sh
echo ecrivez OUI
read reponse
case ${reponse} in
OUI)

echo bravo
echo merci infiniment
[Oo][Uu][Ii]) echo merci beaucoup
o*|O*)
n*|N*)
*)

esac

echo
echo
echo
echo

;;

un petit effort !
vous etes contrariant
ce n\'est pas malin
recommencez

;;
;;
;;
;;

Attention : les motifs peuvent se recouvrir , mais seule la premire concidence provoque
lexcution de commandes. Lordre est donc important ; lchange des deux premiers cas,
par exemple, aura des consquences.

14.2

Les structures itratives

14.2.1

La structure for ... do ... done

syntaxe
for variable in liste de mots (par dfaut: "$@")
do
commande(s)
done
Les commandes entre do et done sont excutes pour chaque mot de la liste.
N.-B : ne pas confondre cette structure avec les boucles avec compteur du fortran ou du B
C ; en shell, la suite de valeurs que prend la variable est soit explicitement fournie soit,
dfaut, la liste des paramtres positionnels de la procdure.
Exemple avec liste explicite
#! /bin/sh
for mot in 1 5 10 2 "la fin"
do
echo mot vaut ${mot}
done

Exemple avec liste implicite


do-echo.sh 11 2 "3 3" 44
affiche

soit le script do-echo.sh


do-echo.sh
#! /bin/sh
for param
do
echo +${param}+
done
20142015

+11+
+2+
+3 3+
+44+

v.958

95

Chapitre 14. Structures de contrle du shell

UPMC M1 : MNI

Exemples avec liste produite par le shell


#!/bin/sh
for fichier in *.f90
do
echo fichier ${fichier}
done
Par dfaut, si aucun fichier du rpertoire courant ne correspond au motif gnrique,
celui-ci est restitu avec le ou les caractres jokers inchangs. Ce comportement peut
B tre gnant dans les shell-scripts o on prfrerait alors une liste vide. La commande
shopt -s nullglob permet de forcer le shell produire une liste vide dans ce cas.
Procdure un argument : le motif recherch.
#!/bin/sh
motif=$1
for fic in $(grep -l ${motif} *)
do
echo le fichier $fic contient le motif $motif
done

14.2.2

La structure until ... do ... done (jusqu ce que)

until commande
do
commande(s)
done

syntaxe

Les commandes entre do et done sont excutes jusqu ce que la commande qui suit
until rende un code nul.
Exemple
Script qui boucle jusqu ce quun utilisateur se connecte :
#!/bin/sh
utilisateur=$1
until who | grep "^${utilisateur} " > /dev/null
do
echo ${utilisateur} n\'est pas connect
sleep 2
done
echo ${utilisateur} est connect
exit 0

14.2.3

La structure while ... do ... done (tant que)

while commande
do
commande(s)
done

syntaxe

Les commandes entre do et done sont excutes tant que la commande qui suit while
rend un code nul.
96

v.958

20142015

UPMC M1 : MNI

Chapitre 14. Structures de contrle du shell

Exemple
Script qui boucle jusqu ce quun utilisateur se dconnecte :
#!/bin/sh
utilisateur=$1
while who | grep "^${utilisateur} " > /dev/null
do
echo ${utilisateur} est connect
sleep 2
done
echo ${utilisateur} n\'est pas connect
exit 0

14.3

Complments : branchements

14.3.1

La commande exit

La commande exit 2 , suivie ventuellement dun code de retour arrte lexcution de


la procdure et rend ce code (0 par dfaut) lappelant. Elle permet en particulier de
terminer prmaturment la procdure en cas dutilisation inadapte et doit dans ce cas
rendre un code diffrent de zro.
...
if [ $# -lt 1 ]
# test sur le nb d'arguments
then
echo "il manque le(s) argument(s)" >&2 # message sur sortie d'erreur
exit 1
# sortie avec code d'erreur
fi
...

14.3.2

La commande break

La commande break permet de sortir dune boucle avant la fin ; break n sort des n
boucles les plus intrieures.
Exemple
#!/bin/sh
# fichier break.sh
while true
# boucle a priori infinie
do
echo "entrer un chiffre (0 pour finir)"
read i
if [ "$i" -eq 0 ]
then
echo '**' sortie de boucle par break
break
# sortie de boucle
fi
echo vous avez saisi $i
done
echo fin du script
exit 0
2. Elle se comporte de faon similaire la fonction exit du langage C.

20142015

v.958

97

Chapitre 14. Structures de contrle du shell

14.3.3

UPMC M1 : MNI

La commande continue

La commande continue saute les commandes qui suivent dans la boucle et reprend
lexcution en dbut de boucle.
continue n sort des n 1 boucles les plus intrieures et reprend au dbut de la ne
boucle.
Exemple
#!/bin/sh
# fichier continue.sh
for fic in *.sh
do
echo "< fichier ${fic} >"
if [ ! -r "${fic}" ]
then
echo "*************************"
echo "fichier ${fic} non lisible"
continue # sauter la commande head
fi
head -4 ${fic}
done
exit 0

14.3.4

La commande trap

La commande trap permet dintercepter les signaux envoys un processus en cours


dexcution (soit par un caractre de contrle, soit par la commande kill, cf. 10.4.2,
p. 75) et dexcuter des commandes au lieu des actions habituellement requises par ces
signaux.
syntaxe
trap action liste de signaux intercepter
Si la chane de caractres action entre trap et la liste des signaux est la chane
vide ('' ou ""), le signal intercept est ignor par le processus.
Si elle se rduit -, la commande trap restitue aux signaux lists leur effet par
dfaut.
Noter que laction indique se substitue laction normalement provoque par le
signal : en particulier, si on intercepte un signal dinterruption, il faut prciser exit
en fin daction si on souhaite que le signal provoque finalement larrt du processus.

Si laction comporte plusieurs commandes, elle est entoure de caractres de protection ' ou " et les commandes sont spares par des ; 3
Par exemple, si un processsus en cours dexcution reoit un signal dinterruption, on
peut souhaiter supprimer les fichiers temporaires de travail qui ont t crs et restituer si
possible ltat initial des fichiers utilisateur avant dinterrompre le processus. On insrera
alors dans la procdure une commande du type :
trap "/bin/rm -f /tmp/fichier_temporaire; exit 1" INT KILL TERM
3. Laction est interprte deux fois par le shell :
lexcution de la ligne trap ;
et linterception ventuelle dun signal de la liste.
Si le dlimiteur est une protection forte, le shell ninterprtera laction quau moment o le signal est
intercept. Si le dlimiteur est une protection faible, le shell interprte les $ ds de lexcution de la ligne
trap, sans attendre larrive dun signal.

98

v.958

20142015

UPMC M1 : MNI

Chapitre 14. Structures de contrle du shell

Exemple
#! /bin/sh
# fichier trap.sh
for f in *
do
echo dbut de boucle $f
trap "echo fin provoque par signal; \
exit 3" INT QUIT
echo fin de boucle $f
done
echo fin de script
exit 0

14.3.5

Structures itratives et redirections

Pour rediriger la sortie standard dune structure itrative, on peut rediriger chaque commande sur la fin du fichier de sortie par >>, en veillant vider le fichier en dbut de
boucle. Cela permet entre autres de choisir finement quelles commandes on redirige
lintrieur de la boucle. Mais il est parfois prfrable de placer la redirection juste aps
le mot rserv done qui termine la boucle.

Exemple : redirection chaque commande


#!/bin/sh
# fichier redir-iterat2.sh
# redirection et structure itrative
# version redirection commande par commande
cat /dev/null > resultat # partir d'un fichier vide
for i in 1 2 3
do
echo $i >> resultat
# accumuler dans la boucle
done
exit 0
Exemple : redirection globale du bloc
#!/bin/sh
# fichier redir-iterat.sh
# redirection et structure itrative
# version redirection globale
for i in 1 2 3
do
echo $i
done > resultat # redirection aprs done
exit 0

20142015

v.958

99

Chapitre 15

Retour sur le shell


15.1

Le shell : approfondissement

15.1.1

Notion de commande interne

Certaines commandes trs usites ont t intgres au shell, ce qui rend leur excution
plus performante car elle ne ncessite pas le lancement dun nouveau processus. Ces
commandes sont appeles commandes internes (builtin) ou primitives du shell. De plus,
les commandes internes permettent daffecter le shell courant : par exemple, la commande
cd doit tre une commande interne pour que le changement de rpertoire quelle provoque
perdure aprs son excution.
Parmi les commandes internes, citons bg, cd, exit, export, echo, false, fg, kill, read,
set, shift, trap, true, type... Les commandes internes ne sont pas documentes sous
une page de manuel leur nom, mais dans le manuel du shell lui-mme ; toutefois, sous
bash, la commande help cmd affiche une aide succincte sur la commande interne cmd .

15.1.2

Les alias du shell

Les alias permettent de dfinir des raccourcis de commandes existantes en leur spcifiant
ventuellement des options par dfaut.
syntaxe
alias nom_court ='commande [options ]'
La commande interne alias sans argument affiche la liste des alias dfinis.
Exemples
alias ls='ls -F' force loption -F (Flag)
alias rm='rm -i' force loption de confirmation
alias la='ls -a' pour voir les fichiers cachs
Par dfaut, si un nom dalias concide avec une commande, lalias est prioritaire. Mais il
suffit de prfixer le nom de la commande par une contre-oblique \ pour retrouver la
commande native.
La commande interne unalias suivie du nom dun alias permet de le supprimer.

15.1.3

Les fonctions du shell

Afin de rendre plus modulaire lcriture des shell-scripts, il est possible de dfinir des
fonctions constitues dune suite de commandes mmorises afin dtre excutes lors de
lappel la fonction. Deux syntaxes sont disponibles pour dfinir une fonction :
syntaxe
function nom
{
liste_de_commandes
}

syntaxe
nom ()
{
liste_de_commandes
}
100

UPMC M1 : MNI

Chapitre 15. Retour sur le shell

Exemple de fonction
La fonction gfortran2003mni permet de lancer le compilateur fortran gfortran avec
des options de compilation trs restrictives pour la mise au point des programmes sans
avoir rpter ces options explicitement chaque appel.
gfortran2003mni ()
{
gfortran -Wextra -Wall -fimplicit-none -Wunused -ffloat-store \
-fbounds-check -Wimplicit-interface -ftrapv -fexceptions \
-pedantic -fautomatic -std=f2003 $* ;
}
Les fonctions admettent des paramtres qui sont rfrencs comme les paramtres positionnels des shell-scripts. Mais les autres variables manipules dans une fonction sont
globales par dfaut, sauf si on les dclare locales suivant la syntaxe local variable .

15.1.4

Interprtation dun nom de commande avec type

La commande interne type suivie dun nom permet didentifier comment ce nom sera
interprt par le shell. Dans lordre, le shell scrute successivement si le nom pass peut
tre :
un alias,
un mot-clef (if par exemple),
une fonction,
une commande interne,
un shell-script ou un programme excutable (dont la recherche suit lordre des
rpertoires indiqu par la variable denvironnement PATH)
Avec type -a nom , il est possible dafficher toutes les interprtations possibles dun
identificateur.
Signalons enfin que, pour acclrer laccs aux commandes les plus utilises, bash entretient une table de leurs chemins. La commande interne hash permet dafficher la liste de
ces correspondances. Aprs une modification de la variable PATH, la liste des rpertoires
scruts pour rechercher une commande change et il est parfois ncessaire de supprimer B
lentre associe dans cette table pour viter quelle ne court-circuite cette recherche :
hash -d cmd supprime lentre associe la commande cmd et hash -r vide cette table.

15.1.5

Algorithme dinterprtation de la ligne de commande

Enfin, linterprtation de la ligne de commande par le shell suit un algorithme complexe


dans lequel interviennent successivement :
linterprtation des redirections 1 ;
le dcoupage en mots ;
lidentification des mots-clefs du shell (en particulier ceux introduisant les structures de contrle) ;
linterprtation des alias ;
le dveloppement des accolades ;
la substitution des ~ ;
la substitution des variables ;
la substitution des commandes dans les expressions $(...)$ ;
la substitution des caractres jokers par des noms de fichiers...
Certaines de ces tapes pouvant savrer rcursives, on se reportera pour plus de prcision, au schma de la figure 7.1 du chapitre 7 de Cameron et Rosenblatt (1997).
1. Les redirections sont interprtes trs tt dans ce processus, ce qui autorise les placer de faon
trs libre sur la ligne de commande, y compris, mme si cela reste vivement dconseill pour la lisibilit,
entre le nom de la commande et ses paramtres, voire entre les paramtres.

20142015

v.958

101

Chapitre 15. Retour sur le shell

15.1.6

UPMC M1 : MNI

Fichiers dinitialisation du shell

Lors de louverture dune session, un shell de type Bourne (sh, ksh, pdksh ou bash)
excute successivement plusieurs fichiers dinitialisation 2 , qui permettent de configurer
lenvironnement de travail :
1. /etc/profile qui dtermine lenvironnement commun tous les utilisateurs
2. ~/.bash_profile en bash ou (sinon) ~/.profile qui configure lenvironnement
personnel au niveau de chaque utilisateur particulier
3. puis, suivant le shell utilis, ventuellement un fichier dont le nom peut tre dfini
par la variable denvironnement ENV et qui est par dfaut :
~/.kshrc en ksh
~/.bashrc en bash
Dans ces fichiers sont dfinis ou modifis notamment les variables PATH (liste des chemins
de recherche des commandes), MANPATH (liste des chemins de recherche des manuels des
commandes), PS1 (Prompt String, invite primaire) 3 du shell).

15.1.7

Options du shell

La commande interne set -o affiche les options en cours pour le shell. Elle permet
aussi de positionner certaines options, par set -o option ou de les supprimer par
set +o option . Par exemple set -o noclobber (ou aussi set -C) configure le shell
quil empche dcraser un fichier existant par redirection de sortie. Par ailleurs set -o vi
ou set -o emacs permet de choisir le mode ddition de la ligne de commande.
Dautres options plus nombreuses (une quarantaine) sont accessibles via la commande
interne shopt. shopt permet dafficher la liste de ces options. shopt -s permet dactiver
une option alors que shopt -d permet de la dsactiver. Par exemple shopt -s dotglob
permettrait de considrer par dfaut les fichiers dont le nom commence par un point,
qui sont habituellement cachs.

15.2

Excutions spciales de commandes

15.2.1

Excution dans le shell courant

Il est parfois ncessaire dexcuter certaines commandes dans le shell courant, notamment
pour positionner des variables (personnalisation de lenvironnement).
syntaxe
.shell-script
En particulier le fichier dinitialisation 4 de la session, ~/.profile est excut de cette
faon pour pouvoir affecter le shell courant.

15.2.2

Excution en remplacement du shell courant

La commande interne exec commande permet de susbtituer une commande au shell


courant, de telle sorte que lorsque la commande se termine, le processus partir duquel
exec a t lanc se termine aussi.
2. Pour les shells de type csh (csh et tcsh), les fichiers dinitialisation de site excuts sont
/etc/csh.cshrc, puis /etc/csh.login et les fichiers dinitialisation personnels ~/.cshrc (en tcsh
~/.tcshrc sil existe, sinon ~/.cshrc) puis ~/.login.
3. Lorsque lutilisateur saisit une chane de caractres dlimite par des ou des " comportant
un retour-ligne, ou une structure de contrle sur plusieurs lignes, linvite du shell est modifie pour
signaler que le shell attend la fermeture de cette chane ou de cette structure. Plus gnralement, dans
tous les cas o le shell attend une saisie pour terminer la lecture dune commande, cest linvite secondaire
PS2 (> par dfaut) qui est affiche.
4. Ceci vaut pour les shells de type sh, comme bash et ksh. Mais, en csh ou tcsh, lexcution dans
le shell courant du script .cshrc est lance par : source.cshrc

102

v.958

20142015

UPMC M1 : MNI

Chapitre 15. Retour sur le shell

Cest une mthode pour changer de shell interactif sans empiler les processus :
exec bash vient substituer bash linterprteur courant. Si on saisit ensuite exit, on
ferme la session interactive.
La commande exec redirection (sans commande) en dbut de script permet deffectuer des redirections qui porteront sur toute la procdure.
exec > fic en dbut de script
redirige la sortie sortie standard vers fic pendant tout le script.

15.2.3

Double valuation par le shell : eval

Quand une double valuation de la ligne de commande par le shell est ncessaire, on
prfixe la commande par eval. Une premire substitution est alors effectue avant lvaluation normale par le shell.
Le cas le plus classique est laccs au contenu du contenu dune variable : on cherche B
valuer ${${variable }}, o variable contient le nom de la variable valuer. On crira
eval valeur=\${${variable }} en protgeant le premier $ de la premire substitution
par le shell.
Exemple : affichage du dernier argument positionnel dun script
Si le script test-eval.sh contient
i=$#
echo variable \${${i}}
eval echo valeur \${${i}}

15.2.4

Lappel test-eval.sh un deux trois affichera


le nom du dernier paramtre puis sa valeur, par
exemple : variable ${3}
valeur trois

Priorit dexcution avec nice

Une commande grosse consommatrice de ressources peut tre lance avec une priorit
plus faible grce la commande nice.
syntaxe
nice commande
Si le processus est dj lanc, la commande renice permet de baisser sa priorit. Noter
que seul ladministrateur peut lancer une commande avec une priorit plus leve ou
modifier la priorit dun processus qui ne lui appartient pas.

15.2.5

Mesure du temps dexcution avec time

La commande time, prcdant une commande unix permet dafficher la dure dexcution de cette commande sur la sortie derreur standard. Loption -p est conseille pour
obtenir une mise en forme portable. Trois dures sont indiques : le temps rel coul
entre lancement et fin de la commande, le temps utilisateur et le temps systme.
Exemple time -p ./calcul_det_recursif.x

>/dev/null

real 2.16
user 2.15
sys 0.00

15.2.6

Rcursivit

Un shell-script peut en appeler un autre, pourvu que ce dernier soit accessible soit
par son chemin explicite, soit (en labsence de / dans le nom du script) en explorant les
rpertoires de la variable denvironnement PATH. Mais un shell-script peut aussi sappeler
lui-mme, de faon rcursive. La rcursivit, si elle peut apparatre comme une mthode
de programmation concise et lgante, se heurte cependant parfois des problmes de
performances ou de ressources en termes de nombre de processus lancs.
20142015

v.958

103

Chapitre 15. Retour sur le shell

UPMC M1 : MNI

Exemple
Le script scripts/recursive-ls0.sh dresse la liste du rpertoire qui lui est pass en
argument de faon rcursive 5 , en se relanant ds quil rencontre un rpertoire. Attention, pour ne pas alourdir cet exemple, il est prsent dans sa version la plus simple
(absolument pas robuste), en particulier sans contrle de validit du paramtre pass.
recursive-ls0.sh
#!/bin/sh
# fichier recursive-ls0.sh
cd $1
pwd
for i in $(ls)
do
if [ -d "${i}" ]
then
recursive-ls0.sh "${i}"
else
ls -l "${i}"
fi
done

15.3

Autres commandes internes

15.3.1

Analyse syntaxique avec getopts

getopts simplifie le dcoupage (parsing) des paramtres optionnels passs un script.


Par exemple, getopts x:yz nom_option
recherche si une des options x, y ou z a t passe,
place cette option dans la variable nom_option
si nom_option vaut x, la valeur fournie pour loption x est place dans la variable
OPTARG
On doit fournir getopts toutes les lettres-clefs (ici x, y et z) spcifiant les options
possibles en faisant suivre celle(s) qui admettent un argument par : .
getopts rend un code nul tant quil reste des options dans la liste des paramtres passs
au script : on peut donc lutiliser dans une structure while et exploiter les valeurs
nom_option et OPTARG via une structure case.
while getopts x:yz nom_option
do
case ${nom_option } in
x)
x_value="${OPTARG}"
;;
y)
exploitation de l'option -y
...
;;
z)
exploitation de l'option -z
...
;;
esac
done
5. Ne pas oublier que la commande ls -lR ralise cet affichage de faon plus efficace.

104

v.958

20142015

UPMC M1 : MNI

15.4

Chapitre 15. Retour sur le shell

Internationalisation

Si langlais reste la langue incontournable des systmes informatiques, de grands progrs


ont t accomplis rcemment dans linternationalisation des programmes. Tenir compte
des spcificits linguistiques et culturelles suppose non seulement de reprsenter les caractres des diffrentes langues via des codes plus ou moins universels, mais aussi de
respecter les conventions dcriture de certaines informations comme la date, la monnaie
ou les nombres dcimaux.
De nombreuses commandes sont affectes par le choix de la langue, notamment man, wc,
grep, awk, sort mais aussi ls pour lordre daffichage.

15.4.1

Les variables de contrle local

Lensemble de ces variantes relve du contrle local qui recouvre plusieurs catgories
de particularits, spcifies par des variables denvironnement dont le nom commence
par LC_ 6 , parmi lesquelles :
LC_CTYPE qui dfinit la classification des caractres en majuscules, minuscules,
chiffres, ponctuation,... par exemple les classes [:upper:], [:lower:], [:digit:],
... (cf. 6.3.3, p. 53) ;
LC_COLLATE qui dfinit les regroupements de caractres loigns dans les tables ou
quivalences (cf. p. 53) pour spcifier lordre lexicographique, comme [=a=] qui,
en franais, contient notamment , , ;
LC_TIME qui dfinit le format daffichage de la date et de lheure ;
LC_NUMERIC qui dfinit le format des nombres et en particulier le sparateur ( ,
en franais, mais . en anglais) entre partie entire et partie fractionnaire des
nombres dcimaux ;
LC_MONETARY qui dfinit lunit montaire ;
LC_MESSAGES qui dfinit la langue dans laquelle sont affichs les messages du systme ;
LC_PAPER qui dfinit le format de la page par dfaut (A4 en Europe ou Letter aux
tats-Unis) ;
LC_ALL qui permet de dfinir globalement toutes les autres.
Exemples : avec seulement le jour de la semaine
LC_ALL=C date "+%A"
LC_ALL=de_DE.ISO-8859-1 date "+%A"
LC_ALL=es_ES.ISO-8859-1 date "+%A"
LC_ALL=fr_FR.ISO-8859-1 date "+%A"
LC_ALL=en_EN.ISO-8859-1 date "+%A"

15.4.2

Friday
Freitag
viernes
vendredi
Friday

Les valeurs des variables de contrle local

Les variables de contrle local permettent dindiquer :


la langue avec deux lettres minuscules : en pour english, fr pour le franais, ...
ventuellement les variantes locales de la langue grce deux lettres majuscules :
en_US pour langlais des tats-Unis, fr_FR pour le franais de France, fr_CA pour
le franais du Canada francophone...
le codage (cf. 4.1.2, p. 31) des caractres utiliss pour la langue : ISO-8859-1 pour
le latin1 des langues europennes, ou plus souvent maintenant UTF-8 pour de
lunicode cod en utf-8.
6. La variable denvironnement LANG peut aussi tre utilise au niveau global. Enfin la variable denvironnement LANGUAGE dtermine la langue utilise pour les messages lutilisateur :
LANGUAGE=es_ES.UTF-8 man toto
No hay ninguna pgina sobre toto

20142015

v.958

105

Chapitre 15. Retour sur le shell

UPMC M1 : MNI

Le format gnral utilise les sparateurs _ entre la langue et sa variante locale et


. entre langue et codage : fr_FR.UTF-8 par exemple.
La norme par dfaut est spcifie par la valeur C ou POSIX des variables de langue : elle
correspond aux conventions nord-amricaines des systmes qui restent toujours disponibles. En particulier, avec la norme POSIX, le classement des caractres se fait selon
lordre de la table ascii, avec notamment toutes les majuscules avant les minuscules.
On peut se douter que de nombreuses commandes unix notamment les filtres comme
awk(cf. 9.2.5, p. 66), sort, tr, wc , mais aussi ls (qui classe ses rsultats), vont voir leur
comportement affect par le positionnement de ces variables.
La commande locale permet dafficher les valeurs de toutes les variables de contrle
local. Rappelons quil est possible de modifier temporairement la valeur dune variable
le temps du droulement dune commande, grce la syntaxe :
variable =valeur commande
On pourra forcer temporairement le sparateur dcimal sa notation anglo-saxone
(point) en prfixant par exemple une commande awk par LC_NUMERIC=C pour viter
de perdre la partie fractionnaire des nombres.

15.4.3

Outils associs au codage UTF-8

Pour visualiser des caractres cods en UTF-8, il faut disposer :


de polices adaptes qui comportent les glyphes utiliss au codage UTF-8 (iso10646) ;
de terminaux grant les caractres multi-octets.
Terminaux et codage
Le terminal graphique xterm possde des options permettant de prendre en compte
les variables de contrle local (-lc) ou simplement lencodage (-en) ou de spcifier
lencodage UTF-8 (-u8) ainsi quune version spcialise pour utf-8 : uxterm. Une fois
xterm lanc, il est possible dactiver lUTF-8 via un menu accessible avec la combinaison
touche de Contrle et bouton droit de la souris.
Le terminal konsole possde un menu de configuration qui offre un trs large choix de
codages dont iso-8859-1 et utf-8.
Un outil de conversion permettant le dialogue entre un terminal UTF-8 et une application
dans un autre codage permet dassurer la transition pour les applications pas encore
multilingues. Il sagit du filtre luit, souvent appel de faon automatique par certaines
applications dont xterm.
diteurs de texte et codage
Par ailleurs, les diteurs de texte comme vim et emacs possdent, dans leurs versions les
plus rcentes, les outils permettant de prendre en charge le multiliguisme et les caractres
multi-octets, avec un ventuel transcodage au vol (cf. 4.3.3 p. 37 pour vim et 4.4.7 p. 41).

Autres outils
Dautre part, cest dans un environnement UTF-8, que la commande wc -m -c 7 va
permettre de dtecter le nombre de caractres sur 2 octets (en supposant quil ny ait
aucun caractre sur plus de 2 octets).
LC_ALL=fr_FR.UTF-8 wc -m -c fichier-utf.txt
Mais elle pourra afficher un message derreur 8 comme par exemple en franais :
7. Lordre des options de wc est sans importance sur lordre daffichage des nombres demands : le
nombre de caractres prcde toujours le nombre doctets, de mme que le nombre de lignes prcde le
nombre de mots, qui prcde le nombre de caractres.
8. Ctait le cas dans les versions 5 de wc, mais en version 7, aucun message derreur nest mis :
les caractres invalides en UTF-8 ne sont tout simplement pas comptabiliss et le nombre de caractres
apparat alors infrieur dautant.

106

v.958

20142015

UPMC M1 : MNI

Chapitre 15. Retour sur le shell

Chane multi-octets ou tendue de caractres invalide ou incomplte


si le fichier comporte par exemple des caractres avec des signes diacritiques cods en
ISO-8859-1.
Noter enfin que loption dencodage UTF-8 est propose dans certains outils de production de fichiers texte, par exemple partir de pdf : pdftotxt -enc UTF-8 est capable
dextraire des ligatures telles que ffi alors stockes sur 3 octets.

20142015

v.958

107

Chapitre 16

Conclusion
16.1

Du bon usage dunix

Connatre parfaitement la syntaxe du shell et des commandes unix nest ni absolument


ncessaire (il est toujours possible et mme conseill de consulter la documentation en
ligne), ni certainement suffisant pour utiliser ce systme efficacement. Lobjectif de ce
court chapitre est de donner quelques conseils de bon usage des outils qui viennent dtre
prsents.

16.1.1

Analyser avant de coder...

Avant de se lancer dans la programmation dun shell script, il est toujours prudent
danalyser le problme pos pour rechercher lalgorithme permettant de le traiter.

16.1.2

Choisir les outils dans la panoplie unix

Les commandes disponibles sous unix sont si diversifies quil existe bien souvent de
trs nombreuses combinaisons (en particulier des combinaisons de filtres) pour mettre
en uvre lalgorithme choisi. Larbitrage reste trs marqu par lexprience personnelle
acquise sur les diffrents outils, mais une culture minimale est ncessaire pour viter
de passer du temps reconstruire laborieusement des fonctions dj existantes : en
particulier, il serait maladroit de rinventer un programme de tri alors que la commande
sort est dj optimise dans ce but. Par ailleurs, il faut garder prsent lesprit la
puissance de sed dans les substitutions de motifs, celle de awk dans les oprations de
type tableur. Mais wc -l sera plus rapide que awk 'END{print NR}' pour simplement
compter le nombre de lignes dun fichier. Enfin, pour assurer une meilleure portabilit
des scripts, on privilgiera les commandes et les options conformes la norme POSIX.

16.1.3

Mettre au point et corriger

Il est souvent prfrable de partir dune version lmentaire de la procdure, de la tester


dans les cas les plus simples avant de lenrichir progressivement pour lui permettre de
traiter les cas plus dlicats.
Mais il vaut mieux adopter ds le dbut les critures les plus robustes, par exemple
${var } ou mieux "${var }" (cf. 13.1.2, p. 90) au lieu de $var pour la valeur de la variable
var . Lcriture systmatique de messages via la commande echo, et lusage des options
set -v qui affiche la commande avant de lexcuter et surtout set -x (cf. 12.1.4, p. 87)
qui affiche chaque commande aprs valuation des susbtitutions de variables (${...})
et de commandes ($(...)) peuvent aider localiser les ventuelles erreurs.

16.1.4

Documenter

Lors de la rutilisation dun script (par son auteur ou par dautres), la prsence de
documentation constitue une aide essentielle. Il est donc conseill de commenter les
shell-scripts ds leur conception : auteur, date, nom du fichier, systme et machine de
dveloppement, objectif et mthode, puis version et date de mise jour doivent tre
indiqus dans les premires lignes. Une pratique trs saine consiste dfinir une chane
de caractres indiquant brivement la syntaxe dappel (parfois dans une fonction) en tte
108

UPMC M1 : MNI

Chapitre 16. Conclusion

de script et lafficher en cas dusage non conforme (nombre de paramtres et options


par exemple). Les diffrentes parties doivent tre identifies et les points dlicats ainsi
que les faiblesses connues prciss dans les commentaires. ce sujet, les formulations les
plus concises, parfois trs spcifiques dunix, ne sont pas forcment les plus lisibles et
les plus mme dvoluer 1 . Enfin, la mise en vidence des blocs de commandes par une
indentation systmatique est fortement conseille 2 .

16.2

Conclusion

Cette prsentation de lenvironnement unix, reste loin dtre exhaustive. Le shell, bien
connu comme interprteur de commande, y est aussi dcrit comme un langage de programmation avec ses variables, ses propres structures de contrle et ses procdures paramtres. Il est donc capable de prendre en charge efficacement de nombreuses tches
de transfert, de mise en forme de donnes, de gestion de fichiers... autant de travaux
difficiles confier des programmes en langage compil, tels que le fortran, plus adapts
au calcul scientifique lui-mme.
Une des limitations majeures du shell est quil ne manipule que des chanes de caractres :
il faut avoir recours des utilitaires comme awk qui permet daccder aux oprateurs
du langage C, pour effectuer du calcul en flottant. Dautres langages, actuellement en
plein dveloppement tels que perl (cf. http://www.perl.org/) allient sous une syntaxe
unique les capacits de manipulation de fichiers, de chanes de caractres, mais aussi de
calcul en flottant 3 .
Mais, pour le calcul scientifique, il est prcieux de disposer dun systme dexploitation
du domaine public comme linux que lon peut installer sur la plupart des ordinateurs,
et qui permet de bnficier de tous les outils dvelopps dans la communaut unix, qui
stend aujourdhui bien au-del du secteur universitaire. En particulier, il est possible
sous linux de disposer de logiciels libres de calcul scientifique comme par exemple scilab
(cf. http://www.scilab.org/) qui intgre une trs riche bibliothque mathmatique et
le fortran 95 grce aux versions rcentes des compilateurs g95 (cf. http://www.g95.
org/) et gfortran (cf. http://gcc.gnu.org/fortran/).

1. titre dexemple, pour changer tous les noms de fichiers du rpertoire courant de suffixe .f77 en
suffixe .f90, doit-on prfrer la commande (inspire de Powers et al. (2003), 10.9, p. 212 et 213)
ls -d *.f77 | sed "s/\(.*\)\.f77$/mv '&' '\1.f90'/" | sh
un script avec une boucle explicite ?
2. Le nombre despaces choisi doit rester faible pour permettre dcrire chaque commande sur une
seule ligne, sous peine de devoir protger les retour-ligne par des contre-obliques.
3. perl prsente aussi lavantage de pouvoir tre utilis sous des systmes dexploitation autres
quunix.

20142015

v.958

109

Bref guide dinstallation de Cygwin


Ce chapitre a t rdig par Frdric Meynadier (Frederic.Meynadier@obspm.fr).

Introduction

Cygwin est un ensemble de programmes permettant dmuler, dans une certaine mesure,
un environnement linux sous windows. Il ne ncessite aucun partitionnement ou modification du systme windows, cest une couche supplmentaire qui tourne par dessus. Les
performances sont donc moins bonnes, et toutes les fonctionnalits dun systme Unix
ne sont pas reproduites.
Il sagit nanmoins dun choix trs judicieux si on souhaite disposer dun environnement
linux de base sans modification lourde de son PC windows, et sans se connecter distance en permanence. Il faut cependant disposer dune connexion internet haut dbit
pour tlcharger les fichiers assez volumineux qui composent ces programmes.
Le guide dinstallation pas pas qui suit a t rdig pour la version 1.5.18-1 et mis
jour pour la v.1.7.30. titre indicatif, lespace disque ncessaire est de lordre de 500 Mo,
et linstallation prend environ 30 mn sur un systme 2.6 GHz quip dune connexion
haut dbit (> 2 Mo/s).

Installation des composants de base

Allez sur la page web daccueil de Cygwin :


www.cygwin.com
Pour une premire installation, suivre le lien Install ou pour une mise jour ou des
complments, suivre le lien Update. Ils aboutissent tous les deux la page :
www.cygwin.com/install.html
Avant de continuer, il faut savoir si on dispose dun systme Windows 32 bits ou 64
bits : selon le cas, on doit tlcharger le fichier setup-x86.exe ou setup-x86_64.exe
(cas des systmes les plus rcents). On rcupre ainsi un fichier excutable windows qui
permettra dinstaller les diffrents composants de Cygwin, que ce soit pour la premire
installation ou, ultrieurement, pour lajout de composants. Une fois tlcharg, excuter
ce fichier.
Trois possibilits sont offertes : a priori Install from Internet est celle quil vous faut.
Ce choix demande Cygwin de tlcharger puis dinstaller les fichiers que vous demanderez.
lcran suivant, le "Root Directory" est le point de votre disque dur qui sera, plus tard,
la racine (/) de votre systme de fichiers cygwin. Le choix par dfaut, C:\cygwin, est
recommand. Il est conseill de laisser les autres options telles que recommandes, sauf
si on sait ce quon fait...
Lcran suivant demande le "Local Package Directory", cest l quil stocke les fichiers
compresss des composants qui seront installs. Par dfaut cest le rpertoire o a t
tlcharg setup-x86_64.exe, aussi modifiez le tel que vous le souhaitez, par exemple
C:\cygwin_packages
110

UPMC M1 : MNI

Bref guide dinstallation de Cygwin

A priori, si vous nutilisez pas de proxy, choisissez ensuite "Direct Connection", puis slectionnez lun des serveurs ftp abritant une copie des fichiers.
Une liste de composants saffiche, classe par thme. Dveloppez larborescence pour
connatre le contenu des thmes. Seront installs ceux qui ont un numro de version,
tandis que les autres sont ignors ("skip"). Cliquez sur "skip" pour slectionner dautres
paquetages installer. Si un paquetage en ncessite dautres, ils seront slectionns
automatiquement (par exemple, gcc-g++ ncessite gcc-core). Parmi les composants
qui seront le plus susceptibles de vous intresser et qui ne sont pas installs par dfaut :
catgorie devel : gcc-core, gcc-g++, gcc-gfortran, make
catgorie editors : emacs, xemacs, vim, nedit
noter quil est galement possible dinstaller LATEX (le programme qui le contient est
tetex).
Une fois le choix fait, appuyez sur "suivant". Les ventuelles dpendances supplmentaires sont signales, acceptez leur installation et continuez.
Une fois linstallation effectue vous disposez dun terminal texte sous bash, comparable
celui que vous ouvrez sur les stations linux.

Installation dun serveur X

Si vous souhaitez profiter des capacits graphiques de certains programmes ainsi que de la
transmission de fentres partir de machines distantes, vous devez installer le paquetage
xorg-x11-base, dans la catgorie X11. Il est possible que ce paquetage ait t slectionn
par dfaut au moment de linstallation. Si ncessaire, relancez setup-x86_64.exe et slectionnez xorg-x11-base. Sil est dj install, son numro de version et Keep sont
affichs.
Le dmarrage du serveur X se fait par lintermdiaire dun fichier appel startxwin.bat
(qui fait partie du paquetage X-startup-scripts, normalement install avec le reste).
Il se trouve dans /usr/X11R6/bin/startxwin.bat o / est probablement C:\cygwin si
vous avez gard le nom par dfaut tout lheure). Vous pouvez crer un raccourci vers ce
fichier pour latteindre plus rapidement, par exemple partir du bureau. Selon la version
du programme dinstallation, il est possible que ce raccourci ait t automatiquement
cr.
la premire utilisation (double clic sur le raccourci ou sur le programme startxwin.bat),
votre pare-feu risque de vous demander si ce programme a le droit de communiquer avec
lextrieur - rpondez "oui" en vous arrangeant pour quil retienne la rponse (en gnral,
une case cocher).
Le terminal qui souvre alors est gr par le serveur X ( la diffrence du prcdent,
qui tait gr par Windows). Vous pouvez maintenant utiliser des programmes ncessitant des fentres graphiques (gv, xpdf, gnuplot, etc... condition quils soient installs !)
noter : mme si tous les terminaux sont ferms, le serveur X continue de tourner jusquau reboot suivant (un "X" apparat dans la liste des programmes en train de tourner,
en bas droite). Un clic droit sur licne offre la possibilit de fermer le serveur.

Connexion une machine distante

La connexion aux machines distantes se fera prfrentiellement par shell scuris (ssh),
qui permet dviter de faire passer le mot de passe en clair sur le rseau. Pour cela,
20142015

v.958

111

Bref guide dinstallation de Cygwin

UPMC M1 : MNI

installer le paquetage openssh se trouvant dans la catgorie Net.


Une fois install, laccs se fait par la commande
ssh login@sappli1.datacenter.dsi.upmc.fr
o login doit tre remplac par votre login

Transfert de fichiers

Utiliser la commande scp (fournie avec ssh) dont la syntaxe est la suivante :
scp mon_fichier login@sappli1.datacenter.dsi.upmc.fr:rep_destination
o rep_destination (optionnel) est un sous-rpertoire de votre rpertoire personnel
daccueil. Vous pouvez lomettre, et dans ce cas le fichier se trouvera sur la machine
distante dans le rpertoire daccueil, mais noubliez pas : la fin, sinon le fichier
sera simplement copi en local dans un fichier de mme nom que la machine distante...
videmment a marche aussi dans lautre sens :
scp login@sappli1.datacenter.dsi.upmc.fr:repertoire/mon_fichier .
Il existe galement un outil purement windows proposant une interface souris pour ce
protocole (http://winscp.net)

Installation de programmes ne figurant pas dans la


liste

En dehors de la liste de programmes installables partir de setup.exe, il existe des


programmes ne faisant pas partie de la distribution standard, mais dont les sources ont
t compiles sous cygwin, et qui peuvent donc tre installs.
Cest, par exemple, le cas du compilateur Fortran 95 g95, dont les excutables prcompils pour cygwin peuvent tre trouvs ladresse : http://www.g95.org/. Ils se
prsentent sous la forme dun tar.gz dcompresser partir de la racine (C:\cygwin,
normalement). Pour ce faire, il suffit de tlcharger le fichier tar.gz dans ce rpertoire,
puis ouvrir un terminal cygwin et procder comme sous unix :
cd /; tar -xzvf [fichier].tar.gz
g95 est alors immdiatement disponible.

112

v.958

20142015

Types de fichiers, extensions


et outils associs
Cette page prsente quelques exmples de types de fichiers et les suffixes (extensions)
habituellement utiliss pour ces fichiers. On distingue :
les fichiers texte, que lon peut examiner et modifier avec les diteurs de texte (vi,
emacs, gedit, ...), dont certains peuvent tre utiliss par des outils ddis ;
les fichiers binaires pour lesquels des outils spcifiques sont ncessaires.

Fichiers texte
.txt
.c
.h
.f
.f90
.pl
.py
.tex
.ps
.eps
.fig
.html
.xml

fichier texte
fichier source en langage C
fichier texte (entte pour prprocesseur)
fichier source en fortran
fichier source en fortran 90
fichier source perl
fichier source python
fichier texte (source LATEX)
Adobe Postscript document (text/graphics)
fichier postscript encapsul
fichier de dessin au format texte xfig
HyperText Markup Language (texte)
Extensible Markup Language (texte)

gcc, compilation
cpp, prprocesseur
g95 gfortran, compilation
g95 gfortran, compilation
perl, interprteur
python, interprteur
latex pdflatex, compilation
gv ghostview, visualisation
gv ghostview, visualisation
xfig, cration fig2dev, conversion
mozilla, opera, ... affichage

Fichiers binaires
.dvi
.gif
.png
.pbm
.pgm
.ppm
.jpg
.mod
.o
.a
.so
.tar
.gz
.bz2
.lzma
.pdf

Device Independent File Format (TeX)


Bitmap graphics (Graphics Interchange Format)
Portable Network Graphics
Portable Bit Map P4 (image noir et blanc)
Portable Gray Map P5 (image en niveaux de gris)
Portable Pixel Map P6 (image en couleur)
Bitmap graphics (JPEG Joint Photography Experts Group)
fichier de module fortran
fichier objet (binaire)
fichier bibliothque (binaire)
fichier bibliothque dynamique partage (binaire)
tar file archive (binaire)
fichier compress (Lempel-Ziv)
fichier compress (Burrows-Wheeler)
fichier compress (LZMA : Lempel-Ziv-Markov chain-Algorithm)
Portable Document Format

113

xdvi
xv
xv
xv, convert
xv, convert
xv, convert
xv
gfortran, g95, ...
ld
ld, ar
ld
tar
gzip, gunzip
bzip2, bunzip2
unlzma, xz
xpdf, evince, acroread, ...

if (expr. log.)

scilab
if expr. log. then

else
liste de cmdes

bloc
else
bloc
switch ( expr. entire) {
case slecteur :
bloc
break;
default :
bloc

end
for vect = dbut [: pas] :fin

liste de cmdes
else
liste de cmdes
end
select (expr.)
case slecteur
liste de cmdes

}
for (expr1 ; expr2 ; expr3 )

case (default)
bloc
end select
do entier = dbut, fin[, pas]

while (expr. log.)


bloc

bloc

bloc
end do
do while (expr. log.)

continue;
break;
goto tiquette;
return;
exit;

liste de cmdes

return;

break

end

liste de cmdes
end
while expr. log.
bloc
end do
cycle
exit
go to tiquette-numr.
return
stop

bloc
else
bloc
endif
select case (expr.)
case ('slecteur')
bloc

fortran 90
if (expr. log.) then

Correspondance des structures de contrle dans diffrents langages

liste de cmdes
;;

shell (sh)
if commande
then
liste de cmdes
else
liste de cmdes
fi
case $variable in
motif)
liste de cmdes
;;
*)

esac
for variable in liste de mots
do
liste de cmdes
done
while commande
do
liste de cmdes
done
continue
break
exit

114

Bibliographie
Indication approximative du niveau des ouvrages rfrencs :
(A) accessible aux dbutants
(B) niveau intermdiaire
(C) niveau ou sujet spcialis
Abrahams, Paul W. et Bruce R. Larson, Unix pour limpatient, 462 pages (OReilly,
1999), ISBN 2-84177-015-X.
(B) Un document trs complet dtaillant les variantes des commandes suivant les systmes
unix et prcisant en particulier celles qui respectent la norme POSIX.

Aho, Alfred, Brian Kernighan et Peter Weinberger, awk, langage de programmation, 256 pages (Addison-Wesley, 1995), ISBN 2-87908-110-6.
(B) crit par les concepteurs du langage awk eux-mmes, cet ouvrage constitue une mine
dexemples astucieux pour approfondir lutilisation du filtre awk.

Albing, Carl, JP Vossen et Cameron Newham, bash, Le livre de recettes, 636 pages
(OReilly Media Inc., 2007), premire dition, ISBN 2-84177-447-3.
Berlat, Abdelmadjid, Jean-Franois Bouchaudy et Gilles Goubet, Unix Shell,
350 pages (Eyrolles, 2001), ISBN 2-212-09094-3.
(A) Un ouvrage concis sur unix orient utilisateur, illustr dexercices et dot de prcieuses
annexes.

Besanon, Thierry, Administration de systmes Unix, Formation Permanente, Universit Pierre et Marie Curie, 14e dition, 2012, URL http://www.formation.
jussieu.fr/ars/2011-2012/UNIX/cours/.
(B) Ces visuels du cours dAdministration Systmes Rseaux (ARS) de la Formation Permanente de lUPMC prsentent en dtail le systme unix. Lobjectif du cours est bien sr
ladministration, mais les bases dunix sont prsentes de faon trs pdagogique, avec de
nombreuses comparaisons avec le systme Windows.

Bouillet, Dominique, Unix par la pratique, 224 pages (Ellipses, 1997), ISBN 2-72989711-9.
(A) Une introduction concise unix du point de vue des utilisateurs. La dmarche de cet
ouvrage est assez proche de celle de lUE mme sil traite essentiellement du shell ksh.

Bourne, Steve, Le systme unix, 398 pages (Inter Editions, Addison-Wesley, 1991),
ISBN 2-7296-0014-0.
(A-B) Un ouvrage classique crit par un des concepteurs du shell (le Bourne-shell). Trs
progressif, il prsente dabord le shell pour lutilisateur, puis la partie programmation du
shell ; il introduit ensuite le langage C et la programmation systme et prsente enfin les
filtres unix.

Cameron, Debra, James Elliott, Marc Loy, Eric S. Raymond et Bill Rosenblatt, Learning GNU Emacs, 544 pages (OReilly, 2004), troisime dition, ISBN
0-596-00648-9.
(C) Cette troisime dition, revue et augmente de Cameron et Rosenblatt (1997) dcrit lditeur de texte emacs dans sa version 21.3. Elle intgre un chapitre sur linstallation
demacs sur divers systmes dexploitation et met jour la prsentation de cet outil la fois
diteur de texte, gestionnaire des fichiers, interface du systme et vritable environnement de
dveloppement.

Cameron, Debra et Bill Rosenblatt, GNU Emacs, 462 pages (OReilly, 1997),
deuxime dition, ISBN 2-84177-015-X.

(C) Louvrage classique sur emacs, diteur de texte, mais aussi outil trs puissant pour
la gestion des fichiers, de la messagerie, ... ou comment emacs peut devenir un vritable
environnement de dveloppement.

115

BIBLIOGRAPHIE

UPMC M1 : MNI

Champarnaud, Jean-Marc et Georges Hansel, Passeport pour UNIX et C,


502 pages (Vuibert, 2000), ISBN 2-7117-8663-3.
(B) Une approche assez classique consistant prsenter conjointement unix et le langage C
ainsi que la bibliothque standard du C.

Desgraupes, Bernard, Introduction aux expressions rgulires, 248 pages (Vuibert,


2001), ISBN 2-7117-8680-3.
(C) Un ouvrage en franais intgralement consacr aux expressions rationnelles qui dcrit
en dtail les subtilits de leur syntaxe. Loin de se restreindre aux filtres unix, il aborde les
applications dans plusieurs langages dont perl et python.

Desgraupes, Bernard, Passeport pour Unicode, 288 pages (Vuibert, 2005), ISBN 27117-4827-8.
Dougherty, Dale et Arnold Robbins, sed & awk, 407 pages (OReilly International
Thomson, 1999), deuxime dition, ISBN 1-56592-225-5.

(C) Ouvrage spcialis destin ceux qui souhaient approfondir les filtres sed et awk, notamment grce aux exemples dapplications avances prsents.

DuBois, Paul, Using csh & tcsh, 239 pages (OReilly International Thomson, 1995),
ISBN 1-56592-132-1.
(B) Lquivalent de la rfrence Newham et Rosenblatt (2006) sur bash, pour ceux qui
choisissent de travailler dans les shells de type C (csh et surtout tcsh). Les shells-scripts ne
sont cependant pas abords, car lauteur lui-mme prfre les crire en sh ou en perl.

Kernighan, Brian et Rob Pike, The Unix programming environment, 240 pages
(Prentice Hall, 1984), ISBN 0-13-93768.
(B) crit par les concepteurs du systme unix, il sagit avant tout dun ouvrage dintrt
historique. Les premiers chapitres prsentent le systme unix, puis les filtres avant daborder
la programmtion shell. La deuxime partie de louvrage introduit le langage C et est consacre
la programmation systme. Dun niveau avanc, il nest pas conseill comme premier contact
avec unix.

Kiddle, Oliver, Jerry Peek et Peter Stephenson, From Bash to Z Shell : Conquering the Command Line, 472 pages (Apress, 2004), ISBN 978-1-59059-376-9.
(B) Un premier ouvrage traitant du shell zsh, mais qui constitue plus gnralement une
prsentation moderne des shells et aborde aussi le shell bash.

Lamb, Linda et Arnold Robbins, Learning the vi editor, 173 pages (OReilly International Thomson, 1998), sixime dition, ISBN 1-56592-426-6.

(A-B) Un document essentiel et trs concis qui prsente lditeur vi ainsi que ses diverses
extensions. Pour une tude plus complte de vim, on pourra consulter la septime dition
Robbins et al. (2008), qui constitue une refonte importante mais plus volumineuse.

Lry, Jean-Michel et Frdric Jacquenod, UNIX & Linux (Pearson Education,


2011), troisime dition, ISBN 978-2-7440-7542-1.
(A-B) crit par lancien directeur du cicrp et son collgue, cet ouvrage rdit trs rcemment, et illustr de nombreux exemples et exercices couvre un spectre trs large allant de
lutilisation de linux ladministration des systmes unix.

Nebra, Mathieu, Reprenez le contrle laide de LINUX, 506 pages (Simple IT, 2010),
ISBN 978-2-9535278-2-7.
(A) crit par le fondateur du site du zro (http://www.siteduzero.com/), cet ouvrage trs
rcent regroupe et complte les clbres cours linux pour dbutants du site.

Newham, Cameron et Bill Rosenblatt, Le shell bash, 342 pages (OReilly Editions,
2006), troisime dition, ISBN 2-84177-403-1.

(B) Louvrage classique permettant dapprofondir le shell bash la fois interprteur de


commande et langage de programmation ( exploitez et programmez votre shell ) dans sa
troisime dition traduite en franais.

Powers, Shelley, Jerry Peek, Tim OReilly et Mike Loukides, Unix Power
Tools, 113 pages (OReilly, 2003), troisime dition, ISBN 0-596-00330-7.
116

v.958

20142015

UPMC M1 : MNI

BIBLIOGRAPHIE

(C) Ouvrage trs avanc sur lenvironnement unix, le shell et les scripts. Il sadresse des
utilisateurs avertis qui vont le parcourir pour sinspirer des nombreux exemples comments
qui y sont compils.

Plissier, Christian, Unix : utilisation, administration rseau internet, 895 pages


(Herms, 1998), troisime dition, ISBN 2866017072.
(B) La premire partie de louvrage prsente unix du point de vue utilisateur, alors que
la deuxime aborde le systme lui-mme. Sont notamment prsents le shell et le C-shell
ainsi que la gnration dapplications avec make. Cette troisime dition, considrablement
augmente fait une plus large place aux interfaces graphiques et lenvironnement rseau.

Ramey, Chet et Brian Fox, GNU Bash Reference Manual, 204 pages (Network Theory
Ltd., 2006), 3e dition, ISBN 0-9541617-7-7, URL http://www.network-theory.co.
uk/bash/manual/.
(B) Un ouvrage de rfrence trs complet sur le shell bash

Rifflet, Jean-Marie et Jean-Baptiste Yuns, Unix : programmation et communication, 800 pages (Dunod, 2003), quatrime dition, ISBN 2100079662.
(C) Ouvrage classique plutt destin des informaticiens dsireux dapprofondir ltude de
la programmation du systme unix.

Robbins, Arnold, Effective awk programming, 421 pages (OReilly International Thomson, 1999), troisime dition, ISBN 0-596-00070-7.
(C) Pour ceux qui souhaitent approfondir le langage awk, et aussi les extensions proposes
par gawk, la version gnu de awk.

Robbins, Arnold et Nelson Beebe, Introduction aux scripts shell - Automatiser les
tches Unix, 580 pages (OReilly Media Inc., 2006), premire dition, ISBN 2-84177375-2.
Robbins, Arnold, Elbert Hannah et Linda Lamb, Learning the vi and Vim editors,
492 pages (OReilly Media, 2008), septime dition, ISBN 0-596-52983-X.
(A-B) Au prix dune augmentation importante de la pagination, la septime dition de
Lamb et Robbins (1998) comporte une prsentation beaucoup plus complte de la version
tendue vim de lditeur vi.

Rosenblatt, Bill et Arnold Robbins, Learning the Korn Shell, 432 pages (OReilly
International Thomson, 2002), deuxime dition, ISBN 0-596-00195-9.
(B) Lquivalent de la rfrence Newham et Rosenblatt (2006) sur bash, pour le shell ksh.

Schwartz, Randal L. et Tom Phoenix, Introduction Perl, 291 pages (OReilly,


2002), troisime dition, ISBN 2-84177-201-2.
(A-B) Un document trs pdagogique conseiller pour sinitier perl et comprendre ltat
desprit du langage au del des aspects syntaxiques.

Waldmann, Uwe, A Guide to Unix Shell Quoting, Max Planck Institut Informatik, 2008, URL http://www.mpi-inf.mpg.de/~uwe/lehre/unixffb/quotingguide.html.
(C) Issue dun cours avanc dunix, une revue plutt pointue des problmes de protection
des mtacaractres sous bash, mais aussi sous dautres shells et quelques applications.

Welsh, Matt, Matthias Kalle Dalheimer, Terry Dawson et Lar Kaufman, Le


systme Linux, 700 pages (OReilly International Thomson, 2003), quatrime dition,
ISBN 2-84177-241-1.
(B) Une rfrence pour dbuter dans linstallation et ladministration dun systme linux,
couvrant notamment les aspects matriels et rseau.

20142015

v.958

117

BIBLIOGRAPHIE

118

UPMC M1 : MNI

v.958

20142015

Index
Symboles
! ngation logique . . . . . . . . . . . . . . . . 82, 84
!=, test dingalit . . . . . . . . . . . . . . . . . . . . 64
" double quote ou guillemet
sous awk . . . . . . . . . . . . . . . . . . . . . . . . . 65
sous le shell . . . . . . . . . . . 14, 77, 82, 83
# commentaire
en shell . . . . . . . . . . . . . . . . . . . . . . 82, 86
sous awk . . . . . . . . . . . . . . . . . . . . . . . . . 64
sous sed . . . . . . . . . . . . . . . . . . . . . . . . . 61
#! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
$ dollar
ancre de fin de ligne . . . . . . . . . . . . . 52
rfrence dune variable . . . . . . . . . . 79
$# nombre de paramtres . . . . . . . . . . . . . 86
$$ numro dun processus . . . . . . . . . . . . 86
$( ) substitution de commande . . . 82, 91
$(( )) calcul en shell . . . . . . . . . . . . . . . . 92
$* liste des paramtres . . . . . . . . . . . 86, 88
$? code de retour . . . . . . . . . . . . . . . . . . . . . 84
$@ liste des paramtres . . . . . . . . . . . . . . . 88
$_ dernier paramtre positionnel . . . . . 86
${ } rfrence dune variable . . . . . . . . . 79
& ampersand ou esperluette
arrire plan . . . . . . . . . . . . . . . . . . 75, 82
rfrence de substitution . . . . . 54, 61
&& ET logique
en shell . . . . . . . . . . . . . . . . . . . . . . 82, 85
sous awk . . . . . . . . . . . . . . . . . . . . . . . . . 64
' quote ou apostrophe . . . . . 23, 77, 82, 83
( ) groupement
dans les ERE . . . . . . . . . . . . . . . . . . . . . 55
en shell . . . . . . . . . . . . . . . . . . . . . . . . . . 82
* toile
caractre joker . . . . . . . . . . . . . . . . . . . 81
dans une expression rationnelle . . 51
motif par dfaut de case . . . . . . . . . 94
multiplication sous expr . . . . . . . . . 91
+
addition sous expr . . . . . . . . . . . . . . . 91
expression rationnelle tendue 55, 57
dans une expression rationnelle . . 81
expression rationnelle . . . . . . . . . . . . 53
pour dsigner lentre standard 6, 73
soustraction sous expr . . . . . . . . . . . 91
valeur par dfaut dune variable . . 81
--, option de set . . . . . . . . . . . . . . . . . . . . . 88
. suivi dune commande . . . . . . . . . . . . 102

. point
dans une expression rationnelle . . 51
rpertoire courant . . . . . . . . . . . . . . . . 16
.. rpertoire parent . . . . . . . . . . . . . . . . . . 16
.bash_profile . . . . . . . . . . . . . . . . . . . . . 102
.bashrc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
.exrc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
.kshrc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
.profile . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
.vimrc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
/
chemin . . . . . . . . . . . . . . . . . . . . . . . . . . 15
dlimiteur dERE sous awk . . . . . . . 64
division sous expr . . . . . . . . . . . . . . . 91
recherche de motif sous more . . . . . . 9
: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82, 85
; . . . . . . . . . . . . . . . . . . . . . . . . . . 25, 65, 77, 82
;; dans la structure case . . . . . . . . . . . . 94
< redirection dentre . . . . . . . . . . . . . 73, 82
<< document joint . . . . . . . . . . . . . . . . . . . . 77
= affectation en shell . . . . . . . . . . . . . . . . . 79
==, test dgalit . . . . . . . . . . . . . . . . . . . . . 64
> redirection de sortie . . . . . . . . . 72, 82, 99
>> redirection de sortie . . . . . . . . . . . 72, 99
?
caractre joker . . . . . . . . . . . . . . . . . . . 81
expression rationnelle tendue 55, 57
[ ]
caractres jokers . . . . . . . . . . . . . . . . . 81
dans une expression rationnelle . . 36,
53, 57
structure case . . . . . . . . . . . . . . . . . . . 94
[! ] complmentaire dun ensemble . . 81
[. .] lettre multi-caractres . . . . . . . . . 53
[: :] classe de caractres . . . . . . . . 45, 53
[= =] classe dquivalence . . . . . . . . . . . . 53
[[ ]] test en bash . . . . . . . . . . . . . . . . . . . 89
[^ ] complmentaire dun ensemble . . 53
\ backslash ou contre-oblique
dans une expression rationnelle . . 51,
54
non expansion dalias . . . . . . . . . . . 100
protection en shell 25, 77, 82, 83, 90,
91
%
adressage sous ex . . . . . . . . . . . . . . . . 36
oprateur reste en division entire 91
suivi du numro de job . . . . . . . . . . . 76
\( \) groupement de motif BRE . . . . . 54

119

INDEX

UPMC M1 : MNI

\{ \} quantification de motif BRE . . . 54


^ caret ou accent circonflexe dans une expression rationnelle
ancre de dbut de ligne . . . . . . . . . . 52
complment dun ensemble . . . . . . . 53
\b retour arrire . . . . . . . . . . . . . . . . . . 49, 50
\n saut de ligne . . . . . . . . . . . . . . . . . . . 49, 50
\r retour chariot . . . . . . . . . . 45, 46, 49, 50
\t tabulation . . . . . . . . . . . . . . . . . . . . . 49, 50
{ }
caractres jokers . . . . . . . . . . . . . . . . . 81
groupement en shell . . . . . . . . . . . . . . 82
quantificateur dans les ERE . . . . . . 55
^A dplacement en dbut de ligne . . . . . . 7
^C interruption . . . . . . . . . . . . . . . . . . . . . . . 75
^D fermeture du flux dentre . . . . . 44, 75
^E dplacement en fin de ligne . . . . . . . . . 6
^I affichage de tabulation sous vi . . . . 37
^L
requte vi : rafrachit laffichage . 35
sous le shell : effacement dcran . 75
^N compltion sous vim . . . . . . . . . . . . . . . 35
^P compltion sous vim . . . . . . . . . . . . . . . 35
^T change de 2 caractres conscutifs . 7
^W effacement dun mot en shell . . . . 7, 75
^Z suspension . . . . . . . . . . . . . . . . . . . . . . . . 75
` backquote ou accent grave . . . . . . . . . . 82
| pipe ou tube
alternative dans les ERE . . . . . . 55, 57
alternative sous case . . . . . . . . . . . . 94
redirection en shell . . . . . . . . . . . . . . 73
|| OU logique
en shell . . . . . . . . . . . . . . . . . . . . . . 82, 85
sous awk . . . . . . . . . . . . . . . . . . . . . . . . . 64
~ tilde
en shell . . . . . . . . . . . . . . . . . . . . . . 16, 82
sous awk . . . . . . . . . . . . . . . . . . . . . . . . . 64
2> redirection de sortie . . . . . . . . . . . . . . . 73
2>&1 fusion de lerreur avec la sortie . . 73
2>> redirection derreur . . . . . . . . . . . . . . 73

A
a2ps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
acroread . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
alias . . . . . . . . . . . . . . . . . . . . . . . . 21, 100, 101
alpine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
anchor . . . . . . . . . . . . . . . . . . . . . . . . . cf. ancre
ancre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
apropos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
arborescence . . . . . . . . . . . . . . . . . . . . . . 15, 23
ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31, 45
at . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
attributs de fichier . . . . . . . . . . . . . . . . . . . . 20
awk . . . . . . . . . . . . . . . . . . . . . . 50, 63-71, 106

B
background . . cf. processus en arrire-plan
120

backspace . . . . . . . . . . . . . . . . . . . . . . . . . cf. \b
basename . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
bash . . . . . . . . . . . . . . . . . . . 3, 89, 91, 93, 102
bc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
BEGIN, slecteur awk . . . . . . . . . . . . . . . . . . 64
bg . . 75, cf. processus en arrire-plan, 100
blanc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6, 63
BRE : Basic Regular Expression 51-55, 57
break . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65, 97
buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
built-in . . . . . . . . . . . . cf. commande interne
bunzip2 . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 27
bzip2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 27

C
calcul
entier . . . . . . . . . . . . . . . cf. expr, $(())
non entier . . . . . . . . . . . . . . . . cf. bc, dc
cancel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
caractre . . . . . . . . . . . . . . . . . . 11, 32, 66, 94
de contrle . . . . . . . . . . . . . . . . . . . 45, 75
joker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
non imprimable . . . . . . . . . . . . . . . . . . 49
spcial . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
carriage return . . . . . . . . . . . . . . . . . . . . . cf. \r
case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
casse . . . . . . . . 4, 10, 22, 37, 43, 44, 56, 71
cat . . . . . . . . . . . . . . . . . . . . . . . . . . . 10, 43, 50
cd . . . . . . . . . . . . . . . . . . . . . . . 11, 16, 17, 100
chane de caractres . . . . . . . . . . . . . . . . . . 90
champ . . . . . . . . . . . . . . . . . . . . . . . . 44, 63, 65
chemin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
absolu . . . . . . . . . . . . . . . . . . . . 11, 16, 28
relatif . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
chmod . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21, 86
classement . . . . . . . . . . . . . . cf. sort, 43-44
hirarchis . . . . . . . . . . . . . . . . . . . . . . . 44
classes de caractres . . . . . . . . . . . . . 53, 105
clef USB . . . . . . . . . . . . . . . . . . . . . . 15, 22, 50
codage . . . . . . . . . . . . . . . . . . . . . . . 31-33, 105
--color=auto, option de ls . . . . . . . . . . . 9
commande . . . . . . . . . . . . . . . . . . . . 6, 85, 101
code de retour dune . . . . . . . 84, 89
interne . . . . . . . . . . . . . . 22, 79, 80, 100
commentaire . . . . . . . . . . . . . . . . . . . . . . 64, 86
compltion
des commandes et noms de fichiers sous
le shell . . . . . . . . . . . . . . . . . . . . . . . 7
des mots sous vim . . . . . . . . . . . . . . . 35
continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
convert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
correction orthographique sous vim . . . 37
courrier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
cp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10, 11
crontab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
csh . . . . . . . . . . . . . . . . . . . . . . . 3, 93, 94, 102

v.958

20142015

UPMC M1 : MNI

INDEX

csplit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
curl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
afficher un . . . . . . . . . . . . . . . . . . . 9-10
cut . . . . . . . . . . . . . . . . . . . . . . . . . . . 43, 48, 50
compresser un . . . . . . . . 10, cf. gzip
cygwin . . . . . . . . . . . . . . . . . . . . . . . . . 110-112
copier un . . . . . . . . . . . . . . . 10, cf. cp
dcompresser un . . . 10, cf. gunzip
D
dplacer un . . . . . . . . . . . . . 10, cf. mv
date . . . . . . . . . . . . . . . . . . . 8, 72, 78, 84, 105
dtruire un . . . . . . . . . . . . . 10, cf. rm
date dans ls -l . . . . . . . . . . . . . . . . . . . 9, 84
date dun . . . . . . . . . . . . . . . . . . . . . . 20
dc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
de commande . . . . . . . . . 20, 22, 29, 86
dictionnaires . . . . . . . . . . . . . . . . . . . . . . . . . 37
droits daccs dun . . . . . . . . . . . . . 20
diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10, 37
renommer un . . . . . . . . . . . 10, cf. mv
directory . . . . . . . . . . . . . . . . . . . cf. rpertoire
spcial . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
dirname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
taille dun . . . . . . . . . . . . . . . . . . . 9, 20
do ... done . . . . . . . . . . . . . . . . . . . . . . . . . 95
test sur un . . . . . . . . . . . . . . . . . . . . . 90
documentation . . . . . . . . . . . . . cf. man, info field . . . . . . . . . . . . . . . . . . . . . . . . . . . cf. champ
dotglob, option du shell . . . . . . . . . . . . 102 file . . . . . . . . . . . . . . . . . . . . . . . . . . . . cf. fichier
droits daccs . . . . . . . . . . . . . . . 9, 20-22, 28 file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
dvips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 filtre . . . . . . . . . . . . . . . . . . . . . . 43, 51, 59, 63
find . . . . . . . . . . . . . . . . . . . . . . . . . . 22, 76, 84
E
fold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
chappement . . . . . . . . . . . . . . . . . . . . . . . . . 34 fonction . . . . . . . . . . . . . . . . . . . . . . . . 100, 101
echo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8, 100 for . . . . . . . . . . . . . . . . . . . . . . . . . . 65, 95, 114
dition . . . . . . . . . . . . . . . . . . . . . . . . . . . 33-41 foreground . cf. processus en premier plan
effective user . . . . . . . . . . . . . . . . . . . . . . . . . . 20 francisation . . . . . . cf. internationalisation
egrep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 FS (field separator) sous awk . . . . . . . . . . 65
else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 function . . . . . . . . . . . . . . . . . . . . . cf. fonction
elsif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 fvwm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
emacs . . . . . . . . . . . . . . . . . . . . . . . . . 33, 37-41
mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
G
END, slecteur awk . . . . . 64, 66, 67, 70, 71 gedit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
enregistrement . . . . . . . . . . . . . . . . . . . . . . . 63 get, sous sftp . . . . . . . . . . . . . . . . . . . . . . . 14
entre standard . . . . . . . . . . . . . . . . 6, 72, 73 getline (fonction awk) . . . . . . . . . . . . . . . 70
env . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 getopts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
ERE : Extended Regular Expression 51, 55, gid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
57, 59, 64
gnome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
erreur standard . . . . . . . . . . 72, 73, 76, 103 GNU, Gnu is Not Unix . . . . . . . . . . . . . 1, 6, 8
escape . . . . . . . . . . . . . . . . . . cf. chappement grep . . . . . . . . . . . . . . . . . . . . . . 43, 50, 56-58
/etc/group . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 groupe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
/etc/passwd . . . . . . . . . . . . . . . . . . . 4, 20, 48 gunzip . . . . . . . . . . . . . . . . . . . . . . . . . . . 10, 27
eval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 gvim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
ex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35-37 gzip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10, 27
exec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
excutable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
H
exit
hash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
en shell . . . . . . . . . . . . 5, 8, 97, 98, 100 head . . . . . . . . . . . . . . . . . . . . . . . . . . 10, 43, 46
sous awk . . . . . . . . . . . . . . . . . . . . . . . . . 71 help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
expand . . . . . . . . . . . . . . . . . . . . . . . . . . . 46, 50 history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
export . . . . . . . . . . . . . . . . . . . . . . . . . . 80, 100 HOME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
expr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 home directory cf. rpertoire daccueil, cf.
expression rationnelle . . 36, 51-55, 61, 64
rpertoire daccueil
expression rgulire . cf. expr. rationnelle hostname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
http . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
F
https . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
false . . . . . . . . . . . . . . . . . . . . . . . . . . . 89, 100
fentre . . . . . . . . . . . . . 5, 33, 38, 40, 76, 111
I
fg . 76, cf. processus en premier plan, 100 icewm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
fgrep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 iconv . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32, 46
20142015

v.958

121

INDEX

UPMC M1 : MNI

id . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4, 8
if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65, 93
IFS, Internal Field Separator . . . . . . . . 6, 82
impression . . . . . . . . . . . . . . . . . . . . . . . . 41-42
info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
internationalisation . . . . . . . 41, 53, 66, 105
interruption . . . . . . . . . . . . . . . . . . . . . . . . . . 75
intervalle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
invite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5, 102
iso-10646 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
iso-8859-1 . . . . . . . . . . . . . . . . 32, 37, 41, 105
iso-8859-15 . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

majuscule . . . . 4, 10, 35, 37, 43-45, 56, 71


man . . . . . . . . . . . . . . . . . . . . . . . . . . . 7, 11, 102
MANPATH . . . . . . . . . . . . . . . . . . . . . . . . . . 8, 102
metacharacter . . . . . . . cf. caractre spcial
minuscule . . . . 4, 10, 35, 37, 43-45, 56, 71
mkdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
mksh (shell) . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
more . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
mot de passe . . . . . . . . . . . . . . . . . . . . . . . 4, 20
mot-clef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
motif . . . . . . . 36, 51-55, 56, 59, 61, 64, 94
mv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10, 11

jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 nedit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49, 50 next (instruction awk) . . . . . . . . . . . . . . . . 71
joker . . . . . . . . . . . . . . . . . . cf. caractre joker nextfile (instruction awk) . . . . . . . . . . . 71
NF (number of fields sous awk) . . . . . . . . 63
K
nice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
kde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 noclobber, option du shell . . . . . . . . . . 102
keyword . . . . . . . . . . . . . . . . . . . . . cf. mot-clef noglob, option du shell . . . . . . . . . . . . . . . 81
kill . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75, 100 nohup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
konsole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 NR (number of record sous awk) . . . . . . . 64
ksh . . . . . . . . . . . . . . . . . . . . 3, 89, 91, 93, 102 nullglob, option du shell . . . . . . . . . 82, 96

L
LANG . . . . . . . . . . . . . . . . . . . . . . . . 43, 53, 105
LANGUAGE . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
langue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii, 42
latin-1, latin-9 . . . . . . . . . . . . . . . . . . . . . . . . 32
LC_ALL . . . . . . . . . . 43, 53, 66, 81, 105, 106
LC_COLLATE . . . . . . . . . . . . . . . . . 43, 53, 105
LC_CTYPE . . . . . . . . . . . . . . . . . . . . 43, 53, 105
LC_MONETARY . . . . . . . . . . . . . . . . . . . . . . . 105
LC_NUMERIC . . . . . . . . . . . . . . . . . 43, 66, 105
LC_PAPER . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
LC_TIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
lcd, sous sftp . . . . . . . . . . . . . . . . . . . . . . . 14
less . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
LESSOPEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
lien symbolique . . . . . . . . . . . . . . . . . 9, 20-22
ligne . . . . . . . . . . . . . . . . . . . . . . . 11, 59, 61-66
line feed . . . . . . . . . . . . . . . . . . . . . . . . . . . cf. \n
locale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4, 5
lp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
lpq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
lpr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
lprm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
lpstat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
ls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9, 106
luit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
lxde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

O
octet . . . . . . . . . . . . . . . . . 11, 25, 31, 32, 106
od . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31, 47, 50
OFS (output field separator) sous awk . . 65
oprateur arithmtique . . . . . . . . . . . . . . . 91
ordre
inverse . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
lexicographique . . . . . . 43, 53, 81, 105
numrique . . . . . . . . . . . . . . . . . . . . . . . 43

paramtre . . . . . . . . . . . . . . . . . . . . . . 6, 86, 87
passwd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
password . . . . . . . . . . . . . . . . cf. mot de passe
paste . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48, 50
PATH . . . . . . . . . . . . . . . . . . . . 80, 86, 101, 103
path . . . . . . . . . . . . . . . . . . . . cf. chemin, PATH
pattern . . . . . . . . . . . . . . . . . . . . . . . . . cf. motif
pdf (format) . . . . . . . . . . . . . . . . . . . . . . . . . . 42
pdftotxt . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
pdksh (shell) . . . . . . . . . . . . . . . . . . 3, 93, 102
perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
permissions . . . . . . . . . . . . cf. droits daccs
pid (process identifier) . . . . . . . . . . . . . 74, 86
pine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12, 13
pipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cf. tube
POSIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1, 106
--posix, option de gawk . . . . . . . . . . 64, 66
--re-interval, option de gawk . . . . . . 64
postscript (langage) . . . . . . . . . . . . . . . . . . . 42
M
primitive . . . . . . . . . . cf. commande interne
mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 processus . . . . . . . . . . . . . . . . . . . . . . . . . 74-78
122

v.958

20142015

UPMC M1 : MNI

INDEX

dtach . . . . . . . . . . . . . . . . . . . . . . . . . . 78
en arrire-plan . . . . . . . . . . . . . . . . . . . 75
en premier plan . . . . . . . . . . . . . . . . . . 76
fils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
interruption de . . . . . . . . . . . . . 75, 98
numro du . . . . . . . . . . . . . . . . . 74, 86
pre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
prompt string . . . . . . . . . . . . . . . . . . . cf. invite
protection des mtacaractres
dans les expressions rgulires 51, 55
pour le shell . . . 14, 23-25, 56, 59, 63,
83-84
ps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74, 80
PS1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
PS2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
put, sous sftp . . . . . . . . . . . . . . . . . . . . . . . 14
pwd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 16

Q
quantificateur dans les expressions rationnelles . . . . . . . . . . . . . . . . . . . 51, 54,
55
quota despace disque . . . . . . . . . . . . . . . . . . 4

R
read . . . . . . . . . . . . . . . . . . . . . 79-80, 97, 100
invite de . . . . . . . . . . . . . . . . . . . . . . . . . 85
real user . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
recherche
de fichier . . . . . . . . . . . . . . . . . . . . . . . . 22
de motif . . . . . . . . . . . . . . . . . . . . . . . . . 56
recode . . . . . . . . . . . . . . . . . . . . . . . . . . . 32, 46
record . . . . . . . . . . . . . . . . . cf. enregistrement
rcursivit . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
redirection
sous awk . . . . . . . . . . . . . . . . . . . . . . . . . 71
sous le shell 2, 32, 45, 72, 99, 101-103
regular expression . cf. expression rgulire
renice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
rpertoire . . . . . . . . . . . . . . . . . . . . . . . . . . 9, 15
courant . . . . . . . . . . . . . . . . . . . 11, 16, 17
crer un . . . . . . . . . . . . . . . . . . . . . . . . . 11
pre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
renommer un . . . . . . . . . . . . . . . . . . . . 11
supprimer un . . . . . . . . . . . . . . . . . . . . 11
return status . . . . . . . . . . . . . . cf. commande
rm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
rmdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
RPM (Redhat Package Manager) . . . . 1, 14
rsync . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

cut . . . . . . . . . . . . . . . . . . . . . . . . . . 48, 50
de PATH . . . . . . . . . . . . . . . . . . . . . . . . . . 80
join . . . . . . . . . . . . . . . . . . . . . . . . . 49, 50
paste . . . . . . . . . . . . . . . . . . . . . . . . 48, 50
sort . . . . . . . . . . . . . . . . . . . . . . . . . 43, 50
set . . . . . . . . . . . . . . . . . . . . . . 79, 87, 88, 100
sftp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
sgid bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3, 93, 102
SHELL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
shell . . . . . . . . . . . . . . . . . . . . . . . 4, 6, 100, 114
shift . . . . . . . . . . . . . . . . . . . . . . . . . . . 87, 100
shopt . . . . . . . . . . . . . . . . . . . . . . . . 82, 96, 102
slogin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4, 13
sort . . . . . . . . . . . . . . . . . . . . . . . . . 43-44, 106
sortie standard . . . . . . . . . . . . . . . . . . . 72, 73
source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
sous-shell . . . . . . . . . . . . . . . . . . . . . . . . . 27, 77
split . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
ssh . . . . . . . . . . . . . . . . . . . . . . . . . . . 4, 13, 112
strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
stty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
substitution de motif via sed . . . . . . . . . 59
suffixe . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29, 31
suid bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9, 20

T
tabulation . 6, 7, 37, 43, 45, 46, 48-50, 53
tail . . . . . . . . . . . . . . . . . . . . . . . . . . 10, 43, 46
tar . . . . . . . . . . . . . . . . . . . . . . . . . . 25-28, 112
tcsh . . . . . . . . . . . . . . . . . . . . . . 3, 93, 94, 102
tee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
tlchargement . . . . . . . . . . . . . . . . . . 14, 112
telnet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
temps dexcution . . . . . . . . . . . . . . . . . . . 103
TERM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33, 80
test . . . . . . . . . . . . . . . . . . 84, 89-90, 94, 97
time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
--time-style= . . . . . . . . . . . . . . . . . . . . . . . . 9
tr . . . . . . . . . . . . . . . . . . . . . . . 45, 50, 60, 106
transcodage de texte . . . . . 32, 33, 42, 106
trap . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98, 100
tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
tri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cf. sort
true . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89, 100
tty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
tube . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71, 73
type . . . . . . . . . . . . . . . . . . . . . . . . . . . 100, 101

uid (user identifier) . . . . . . . . . . . . . . . . . 4, 74


S
umask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
scp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 unalias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 uname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
sed . . . . . . . . . . . . . . . . . . . . 50-52, 54, 55, 59 unexpand . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
sparateur de champs
Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
awk . . . . . . . . . . . . . . . . . . . . . . . 50, 63, 65 unlzma . . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 27
20142015

v.958

123

INDEX

UPMC M1 : MNI

until . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
--use-lc-numeric, option de gawk . . . 66
USER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
utf-8 . 32, 33, 37, 41, 46, 60, 66, 105-107

V
variable . . . . . . . . . . . . . . . . . . . . . . . . . . 79-80
affectation dune . . . . . . . . . . . . . . . 79
awk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
denvironnement . . . . . . . . . . . . . . . . . 80
spciale . . . . . . . . . . . . . . . . . . . . . . . . . . 86
valeur dune . . . . . . . . . . . . . . . . . . . 79
vi . . . . . . . . . . . . . . . . . . . . . . . . . 33-37, 47, 50
vimdiff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

W
wc . . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 43, 106
webmail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
wget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
whatis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
while . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65, 96
who . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
whoami . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
wildcards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
windows, systme . . . . . 16, 22, 46, 110-112
working directory . . . cf. rpertoire courant

X
xemacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
xpdf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
xterm . . . . . . . . . . . . . . . . . . . . . . . . 76, 80, 106
xz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 27

Z
zsh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89, 91

124

v.958

20142015

,
,
,
,

I
A
O
R

h , j , k , l
w , W
b , B
e , E
( , )
{ , }
0 , $
1G , G
n G ou :n
fc , Fc
H , M , L

i
a
o
r

:x
:q
:q!

caractre droite, gauche


jusqu la fin de la ligne
la ligne
la ligne

x , X
D
dd
:d

Presque toutes les commandes de suppression sont accomplies en


frappant d suivi dun dplacement. Par exemple, dw supprime un
mot. Voici quelques autres commandes de suppression :

Destruction de texte

gauche, vers le bas, vers le haut, droite


mot suivant, mot dlimit par un espace
dbut de mot, de mot dlimit par un espace
fin de mot, de mot dlimit par un espace
phrase prcdente, suivante
paragraphe prcdent, suivant
dbut, fin de ligne
dbut, fin de fichier
ligne n
caractre c suivant, prcdent
haut, milieu, bas de lcran

Dplacements

insre avant le curseur, avant la ligne


ajoute aprs le curseur, aprs la ligne
ouvre une nouvelle ligne aprs, avant
remplace un caractre, plusieurs caractres

Insertion de texte

sortie avec sauvegarde des modifications


sortie (sauf si modifications)
sortie (force, sans sauvegarde des modifications)

Sortie

Vi a deux modes : le mode insertion et le mode commande. Ldition dbute en mode commande, o seffectuent les mouvements
du curseur, la destruction et le dplacement de texte. Les commandes dinsertion ou de changement permettent dentrer dans
le mode insertion. [ESC] ramne lditeur dans le mode commande (do lon peut quitter, par exemple en frappant :q!).
La plupart des commandes sexcutent ds quon les frappe, sauf
les commandes prcdes du : qui attendent le retour chariot
pour sexcuter.

Modes

Aide mmoire vi

p
P

C
cc

/string
?string
n , N

remplace le motif par la chane


:s/motif /chane /options
options : toutes sur chaque ligne, confirmer chaque fois g , c
recommencer le dernier remplacement :s
&

La fonction de recherche et substitution est obtenue grce la


commande :. On lutilise souvent combine avec des intervalles
ou la commande :g (cf. plus bas).

Remplacement

recherche aprs
recherche avant
recherche rpte dans le mme sens, en sens inverse

Recherche de chanes

poser le pointeur c cette ligne


mc
aller au pointeur c
c
aller au premier caractre non blanc de la ligne du pointeur c
c

On peut placer des pointeurs nomms sur nimporte quelle ligne


dun fichier. Toute lettre minuscule peut servir de nom pour un
pointeur. Les pointeurs peuvent aussi tre utiliss pour dlimiter
une zone.

Pointeurs

Des mmoires tampons nommes peuvent tre utilises pour


toutes les commandes de suppression, modification, slection ou
collage. Il suffit de faire prcder ces commandes par "c o c
dsigne une lettre minuscule quelconque. Par exemple, "adw supprime un mot et le mmorise dans le tampon a. Ce mot peut par
la suite tre rappel avec une commande de collage approprie,
par exemple "ap.

Mmoires nommes

placer aprs le pointeur ou aprs la ligne


placer avant le pointeur ou avant la ligne

Replacer un texte slectionn

jusqu la fin de la ligne


la ligne courante

Les commandes de modification sont des suppressions qui placent


lditeur dans le mode commande. Elles sont obtenues en frappant c suivi dune commande de dplacement. Par exemple cw
modifie un mot. Voici dautres commandes de modification :

Modification de texte

yy
:y

. (point)
*
[... ]
[ ... ]
, $
\< , \>
\(. . . \)
\n

:n ,m
:.
:$
:c
:%
:g/pattern /

change majuscule et minuscule

colle deux lignes


J
rpte la dernire commande de modification de texte
.
annule la dernire modification, toutes les modifications sur la
ligne
u , U

Divers

crit fichier (le fichier courant si aucun nom nest donn


:w
fichier
lit fichier aprs la ligne
:r fichier
fichier suivant
:n
fichier prcdent
:p
dite fichier
:e fichier
remplace la ligne par la sortie de programme
!!programme

Fichiers

lignes n-m
ligne courante
dernire ligne
pointeur c
toutes les lignes
toutes les lignes contenant le motif

On peut faire prcder la plupart des commandes suivant le


deux-points par un intervalle qui indique la ou les lignes o
elles sexcutent. Par exemple, :3,7d dtruit les lignes 3 7.
On combine souvent les intervalles dadressage avec la commande :s pour effectuer une substitution sur plusieurs lignes,
comme :.,$s/pattern/string/g pour substituer de la ligne
courante la dernire ligne.

Intervalles de lignes

Presque toutes les commandes peuvent tres prcdes par un


nombre qui indique le nombre de fois quelle doit tre applique.
Par exemple, 5dw dtruira 5 mots et 3fe avancera le curseur
jusqu la 3ime occurrence de la lettre e. Mme les insertions
peuvent tre rptes selon cette mthode, par exemple pour insrer la mme ligne 100 fois.

Multiplicateurs

un caractre quelconque, sauf le retour ligne


zro, un ou plus dune occurrence de
un caractre quelconque de lensemble
un caractre quelconque hors de lensemble
dbut, fin de ligne
dbut, fin de mot
groupement
contenu du n ime groupe

Comme celles de suppression, les commandes de slection sont


obtenues en frappant y suivi dune commande de dplacement.
Par exemple, y$ slectionne jusqu la fin de la ligne. Voici deux
autres commandes de slection :
ligne
ligne

Expressions Rationnelles

Slection de texte

Vi Reference Card
Modes

I
A
O
R

:x
:q
:q!
,
,
,
,

h , j , k , l
w , W
b , B
e , E
( , )
{ , }
0 , $
1G , G
n G or :n
fc , Fc
H , M , L

i
a
o
r

Vi has two modes : insertion mode, and command mode. The


editor begins in command mode, where cursor movement and
text deletion and pasting occur. Insertion mode begins upon entering an insertion or change command. [ESC] returns the editor to command mode (where you can quit, for example by typing :q!). Most commands execute as soon as you type them
except for colon commands which execute when you press the
return key.

Quitting
exit, saving changes
quit (unless changes)
quit (force, even if unsaved)

Inserting text
insert before cursor, before line
append after cursor, after line
open new line after, line before
replace one char, many chars

Motion
left, down, up, right
next word, blank delimited word
beginning of word, of blank delimited word
end of word, of blank delimited word
sentence back, forward
paragraph back, forward
beginning, end of line
beginning, end of file
line n
forward, back to char c
top, middle, bottom of screen

Deleting text

x , X
D
dd
:d

Almost all deletion commands are performed by typing d followed by a motion. For example dw deletes a word. A few other
deletions are :
character to right, left
to end of line
line
line

Yanking text

Regular Expressions

yy
:y

Like deletion, almost all yank commands are performed by typing y followed by a motion. For example y$ yanks to the end of
line. Two other yank commands are :
line
line

toggle upper/lower case


join lines
repeat last text-changing command
undo last change, all changes on line

Other

write file (current file if no name given)


read file after line
next file
previous file
edit file
replace line with program output

Files

lines n-m
current line
last line
marker c
all lines
all matching lines

. (dot)
*
[... ]
[ ... ]
, $
\< , \>
\(. . . \)
\n

J
.
u , U

:w file
:r file
:n
:p
:e file
!!program

:n ,m
:.
:$
:c
:%
:g/pattern /

Ranges may precede most colon commands and cause them


to be executed on a line or lines. For example :3,7d would
delete lines 37. Ranges are commonly combined with the :s
command to perform a replacement on several lines, as
with :.,$s/pattern/string/g to make a replacement from the
current line to the end of the file.

Ranges

Nearly every command may be preceded by a number that specifies how many times it is to be performed. For example 5dw
will delete 5 words and 3fe will move the cursor forward to the
3rd occurance of the letter e. Even insertions may be repeated
conveniently with this method, say to insert the same line 100
times.

Counts

any single character except newline


zero or more repeats
any character in set
any character not in set
beginning, end of line
beginning, end of word
grouping
contents of n th grouping

Changing text

p
P

C
cc

The change command is a deletion command that leaves the


editor in insert mode. It is performed by typing c followed by
a motion. For example cw changes a word. A few other change
commands are :
to end of line
line

Putting text
put after position or after line
put before position or before line

Buffers
Named buffers may be specified before any deletion, change,
yank, or put command. The general prefix has the form "c where
c may be any lower case letter. For example, "adw deletes a word
into buffer a. It may thereafter be put back into the text with
an appropriate put command, for example "ap.

Markers

/string
?string
n , N

mc
c
c

Named markers may be set on any line of a file. Any lower case
letter may be a marker name. Markers may also be used as the
limits for ranges.
set marker c on this line
goto marker c
goto marker c first non-blank

Search for Strings


search forward
search backward
repeat search in same, reverse direction

Replace

The search and replace function is accomplished with the :s


command. It is commonly used in combination with ranges or
the :g command (below).
replace pattern with string
:s/pattern /string /flags
flags : all on each line, confirm each
g , c
repeat last :s command
&

C-x
C-x
C-x
C-x
C-x
C-x

C-f
C-s
s
i
C-v
C-w

C-z
C-x C-c

M-p
M-n
RET
DEL
C-g

select previous search string


select next later search string
exit incremental search
undo effect of last character
abort current search

c 1998 Free Software Foundation, Inc. Permissions on back. v2.0 XEmacs


Use C-s or C-r again to repeat the search in either direction.


If Emacs is still searching, C-g cancels only the part not done.

C-s
C-r
C-M-s
C-M-r

search forward
search backward
regular expression search
reverse regular expression search

Incremental Search

abort partially typed or executing command C-g


recover a file lost by a system crash
M-x recover-file
recover files from a previous Emacs session
M-x recover-session
undo an unwanted change
C-x u or C-_
restore a buffer to its original contents
M-x revert-buffer
redraw garbaged screen
C-l

Error Recovery

C-h
C-h
C-h
C-h

apropos: show commands matching a string


show the function a key runs
describe a function
get mode-specific information

a
c
f
m

q
space

quit Help window


scroll Help window

The Help system is simple. Type C-h and follow the directions.
If you are a first-time user, type C-h t for a tutorial.

Getting Help

read a file into Emacs


save a file back to disk
save all files
insert contents of another file into this buffer
replace this file with the file you really want
write buffer to a specified file

Files

suspend Emacs (or iconify frame under X)


exit Emacs permanently

Leaving Emacs

To read in a file to edit, see Files, below.

To enter XEmacs, just type its name: xemacs

Starting Emacs

(for version 21.0+)

XEmacs Reference Card

to next screen
to previous screen
left
right
current line to center of screen

forward
C-f
M-f
C-n
C-e
M-e
M-}
C-x ]
C-M-f
C-M-e
M->

M-@
M-h
C-x C-p
C-M-@
C-M-h
C-x h

set mark arg words away


mark paragraph
mark page
mark sexp
mark function
mark entire buffer

replace this one, go on to next


replace this one, dont move
skip to next without replacing
replace all remaining matches
back up to the previous match
exit query-replace
enter recursive edit (C-M-c to exit)
delete match and enter recursive edit

Valid responses in query-replace mode are


SPC or y
,
DEL or n
!
^
ESC
C-r
C-w

interactively replace a text string


M-%
using regular expressions
M-x query-replace-regexp

Query Replace

C-@ or C-SPC
C-x C-x

set mark here


exchange point and mark

Marking

C-y
M-y

yank back last thing killed


replace last yank with previous kill

forward
C-d
M-d
C-k
M-k
C-M-k

C-w
M-w
M-z char

backward
DEL
M-DEL
M-0 C-k
C-x DEL
M-- C-M-k

C-v
M-v
C-x <
C-x >
C-u C-l

backward
C-b
M-b
C-p
C-a
M-a
M-{
C-x [
C-M-b
C-M-a
M-<

kill region
copy region to kill ring
kill through next occurrence of char

entity to kill
character (delete, not kill)
word
line (to end of)
sentence
sexp

Killing and Deleting

scroll
scroll
scroll
scroll
scroll

entity to move over


character
word
line
go to line beginning (or end)
sentence
paragraph
page
sexp
function
go to buffer beginning (or end)

Motion

M-u
M-l
M-c
C-x C-u
C-x C-l
M-x capitalize-region

TAB
C-M-\
C-M-q
C-x TAB
C-o
C-M-o
C-x C-o
M-^
M-\
M-SPC
M-q
C-x f
C-x .

C-x 1
C-x 0
C-x 2
C-x 3
C-M-v
C-x o
M-x shrink-window
C-x ^
C-x {
C-x }
C-x 4 b
C-x 4 C-o
C-x 4 f
C-x 4 r
C-x 4 d
C-x 4 .

The following keys are defined in the minibuffer.


complete as much as possible
TAB
complete up to one word
SPC
complete and execute
RET
show possible completions
?
fetch previous minibuffer input
M-p
fetch next later minibuffer input
M-n
regexp search backward through history
M-r
regexp search forward through history
M-s
abort command
C-g
Type C-x ESC ESC to edit and repeat the last command that
used the minibuffer. The following keys are then defined.
previous minibuffer command
M-p
next minibuffer command
M-n
3

The Minibuffer

uppercase word
lowercase word
capitalize word
uppercase region
lowercase region
capitalize region

Case Change

indent current line (mode-dependent)


indent region (mode-dependent)
indent sexp (mode-dependent)
indent region rigidly arg columns
insert newline after point
move rest of line vertically down
delete blank lines around point
join line with previous (with arg, next)
delete all white space around point
put exactly one space at point
fill paragraph
set fill column
set prefix each line starts with

Formatting

delete all other windows


delete this window
split window in two vertically
split window in two horizontally
scroll other window
switch cursor to another window
shrink window shorter
grow window taller
shrink window narrower
grow window wider
select buffer in other window
display buffer in other window
find file in other window
find file read-only in other window
run Dired in other window
find tag in other window

Multiple Windows

M-.
C-u M-.
M-x visit-tags-table

M-$
M-x ispell-region
M-x ispell-buffer

C-t
M-t
C-x C-t
C-M-t

C-x b
C-x C-b
C-x k

XEmacs Reference Card


Buffers
select another buffer
list all buffers
kill a buffer

characters
words
lines
sexps

Transposing
transpose
transpose
transpose
transpose

Spelling Check
check spelling of current word
check spelling of all words in region
check spelling of entire buffer

Tags
find a tag (a definition)
find next occurrence of tag
specify a new tags file

C-x
C-x
C-x
C-x
C-x

a
a
a
a
a

g
l
i g
i l
e

C-x r r
C-x r k
C-x r y
C-x r o
M-x clear-rectangle
M-x string-rectangle
M-button1

M-!
M-|
C-u M-|
M-x shell

regexp search on all files in tags table


M-x tags-search
run query-replace on all the files
M-x tags-query-replace
continue last tags search or query-replace
M-,

Shells
execute a shell command
run a shell command on the region
filter region through a shell command
start a shell in window *shell*

Rectangles
copy rectangle to register
kill rectangle
yank rectangle
open rectangle, shifting text right
blank out rectangle
prefix each line with a string
select rectangle with mouse

M-/

Abbrevs

expand previous word dynamically

add global abbrev


add mode-local abbrev
add global expansion for this abbrev
add mode-local expansion for this abbrev
explicitly expand abbrev

Regular Expressions
any single character except a newline
zero or more repeats
one or more repeats
zero or one repeat
any character in the set
any character not in the set
beginning of line
end of line
quote a special character c
alternative (or)
grouping
nth group
beginning of buffer
end of buffer
word break
not beginning or end of word
beginning of word
end of word
any word-syntax character
any non-word-syntax character
character with syntax c
character with syntax not c

. (dot)
*
+
?
[ ... ]
[^ . . . ]
^
$
\c
\|
\( . . . \)
\n
\
\
\b
\B
\<
\>
\w
\W
\sc
\Sc

C-x r s
C-x r i

Registers
save region in register
insert register contents into buffer

C-x r SPC
C-x r j

h
?
q
s

n
p
u
m
n
f
l
d
g

SPC
DEL
. (dot)

C-h i

save value of point in register


jump to point saved in register

Info
enter the Info documentation reader
Moving within a node:
scroll forward
scroll reverse
beginning of node
Moving between nodes:
next node
previous node
move up
select menu item by name
select nth menu item by number (15)
follow cross reference (return with l)
return to last node you saw
return to directory node
go to any node by name
Other:
run Info tutorial
list Info commands
quit Info
search nodes for regexp

Keyboard Macros

start defining a keyboard macro


C-x (
end keyboard macro definition
C-x )
execute last-defined keyboard macro
C-x e
edit keyboard macro
C-x C-k
append to last keyboard macro
C-u C-x (
name last keyboard macro
M-x name-last-kbd-macro
insert Lisp definition in buffer
M-x insert-kbd-macro

Commands Dealing with Emacs Lisp

eval sexp before point


C-x C-e
eval current defun
C-M-x
eval region
M-x eval-region
eval entire buffer
M-x eval-current-buffer
read and eval minibuffer
M-ESC
re-execute last minibuffer command
C-x ESC ESC
read and eval Emacs Lisp file
M-x load-file
load from standard system directory
M-x load-library

Simple Customization

Here are some examples of binding global keys in Emacs Lisp.

(global-set-key [(control c) g] goto-line)


(global-set-key [(control x) (control k)] kill-region)
(global-set-key [(meta #)] query-replace-regexp)

(setq backup-by-copying-when-linked t)

An example of setting a variable in Emacs Lisp:

Writing Commands

(defun command-name (args)


"documentation"
(interactive "template")
body)

An example:

(defun this-line-to-top-of-window (line)


"Reposition line point is on to top of window.
With ARG, put point on line ARG.
Negative counts from bottom."
(interactive "P")
(recenter (if (null line)
0
(prefix-numeric-value line))))

The argument to interactive is a string specifying how to get


the arguments when the function is called interactively. Type
C-h f interactive for more information.

c 1998 Free Software Foundation, Inc.


Copyright
designed by Stephen Gildea, April 1998 v2.0 XEmacs
for GNU Emacs version 19 on Unix systems
Updated for XEmacs in February 1995 by Ben Wing

Permission is granted to make and distribute copies of this card provided the copyright notice and this permission notice are preserved on
all copies.

For copies of the GNU Emacs manual, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

Indentation

Ouvrir un fichier (existant ou non)


C-x C-f
Ouvrir un rpertoire existant (dans un buffer dexploration)
C-x d
Enregistrer un fichier
C-x C-s
Enregistrer un fichier sous un autre nom
C-x C-w
Enregistrer tous les fichiers
C-x s

Navigation et gestion des fichiers

C-s / C-r
C-M-s
C-M-r
M-%

Lindentation est automatique sous emacs dans la quasi-totalit


des langages, condition de se trouver dans le bon mode.
Indente automatiquement la ligne courante
TAB
Indente la slection
C-M-\
Indente le buffer
C-M-q
Tabulation sur la slection
C-x TAB

Recherche et remplacement

Recherche en avant / en arrire


Recherche selon expression rgulire en avant
Recherche selon expression rgulire en arrire
Remplacement interactif

Annuler la dernire action


Couper le prochain mot
Couper la fin de la ligne courante
changer deux caractres successifs
changer deux lignes successives
Marquer le dbut de slection
Couper la slection
Copier la slection
Coller la slection
Couper la slection rectangulairement
Coller la slection rectangulairement
Remplir un rectangle avec une chane

/ M-f
/ C-n
/ C-e
C-M-e
/ M->
C-x >

C-_
M-d
C-k
C-t
C-x C-t
C-ESPACE
C-w
M-w
C-y
C-x r k
C-x r y
C-x r t

le prochain mot (en arrire / en avant)


M-b
la prochaine ligne (en arrire / en avant)
C-p
le dbut / la fin de la ligne courante
C-a
le dbut / la fin de la fonction courante C-M-a /
le dbut / la fin du buffer
M-<
la page de gauche / page de droite
C-x < /

dition

Vers
Vers
Vers
Vers
Vers
Vers

Dplacement

Une fentre emacs peut contenir un ou plusieurs cadres, chacun


deux permettant dafficher un buffer diffrent.
Fermer le cadre courant
C-x 0
tendre le cadre courant
C-x 1
Diviser le cadre en 2 horizontalement
C-x 2
Diviser le cadre en 2 verticalement
C-x 3

Gestion des cadres

Emacs permet louverture de plusieurs fichiers la fois. Chaque


fichier est alors contenu dans un buffer , qui est dsign par
le nom du fichier. Les buffers ne sont pas toujours rattachs
un fichier (peut tre un shell, une fentre dexploration, ...).
La ligne de mode, juste au-dessus du mini-buffer, apporte divers renseignements sur le buffer (tat, nom, mode, position du
curseur)
Choisir un autre buffer
C-x b
Lister tous les buffers ouverts
C-x C-b
Fermer un buffer
C-x k

Gestion des buffers

Les modes sous emacs dsignent la faon deffectuer certaines


oprations comme lindentation. Par exemple, ds quun fichier
ouvert a pour extension .f90, le mode Fortran est activ. Il est
donc important de nommer correctement les fichiers de travail
afin dactiver le bon mode leur ouverture.

Les modes

Le mini-buffer est le mini-cadre en bas demacs. Toutes les fonctions emacs sont excutes partir de ce cadre et sy droulent.
Excuter
RET
Auto-compltion
TAB
Montrer les combinaisons possibles
?
Navigation dans lhistorique des commandes
UP/DOWN

Le mini-buffer

M- veut dire la cl Mta (cl Alt sur la plupart des claviers)


C-g annule lopration ou la commande emacs en cours

C- veut dire (appuyer sur) la cl Control

important

Aide mmoire emacs

C-x C-u
C-x C-l
M-x capitalize-region

http://www.gnu.org/software/emacs/manual/
emacs.html

http://www.emacswiki.org (en franais)

Plus de documentations sur emacs

Une multitude de fonctions internes propres emacs


est disponible partir du mini-buffer.
Appelle une fonction emacs
M-x nom_de_fonction
Dcrit la fonction
C-h f nom_de_fonction
Le manuel peut souvrir directement dans emacs par la
fonction man.
Le fichier ~/.emacs permet de configurer lemacs de
chaque utilisateur, comme par exemple lactivation de
la colorisation automatique, la surbrillance des parenthses, des raccourcis... Certaines distributions comme
Mandriva fournissent un fichier .emacs dj trs complet.
Il est possible de sauver ltat demacs automatiquement, pour lobtenir lidentique sa prochaine
ouverture. Il suffit pour cela deffectuer la fonction
desktop-save (disponible selon le .emacs de lutilisateur).
Pour utiliser emacs directement dans le terminal (au
lieu douvrir une nouvelle fentre), lancer emacs par la
commande emacs -nw

Divers

Il est possible dexcuter des commandes shell sous emacs, voire


douvrir un buffer se comportant comme un terminal shell habituel. Pour ouvrir plusieurs shells sous emacs, il est ncessaire
de les renommer (fonction rename-buffer).
Excuter une commande shell
M-!
Excuter une commande shell sur un fichier/dossier (dans un
buffer dexploration)
!
Ouvrir un buffer shell
M-x shell
Commande prcdente de lhistorique dans le buffer shell M-p
Commande suivante de lhistorique dans le buffer shell
M-n

Shell

Mettre une slection en majuscule


Mettre une slection en minuscule
Mettre une slection en capitale

Changement de casse