Академический Документы
Профессиональный Документы
Культура Документы
Paris VI
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
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.
ii
v.958
20142015
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3.2
3.1.4
Autres
3.2.1
3.2.2
3.2.3
3.2.4
3.2.5
UPMC M1 : MNI
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
v.958
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
20142015
UPMC M1 : MNI
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
UPMC M1 : MNI
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
89
89
89
90
90
90
91
91
91
91
91
92
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
v.958
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
vii
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
113
114
Bibliographie
115
Index
119
Mmento vi
125
Mmento emacs
127
viii
v.958
20142015
Chapitre 1
Introduction
1.1
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
Chapitre 1. Introduction
UPMC M1 : MNI
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
1.3.2
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
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
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
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
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.
20142015
v.958
2.2
2.2.1
UPMC M1 : MNI
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
v.958
20142015
UPMC M1 : MNI
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
v.958
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
2.3
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
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
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
more f1
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
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
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
mv f1 f2
mv f1 f2 rep/
2.3.8
diff f1 f2
2.3.7
cp f1 f2
cp f1 f2 ... fn rep
2.3.6
rm f1
rm -i f1
rm -r rep
2.3.5
Compresser/dcompresser un fichier
gzip fic
gunzip fic.gz
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
2.3.9
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
2.3.11
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
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
12
v.958
20142015
UPMC M1 : MNI
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
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
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
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
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
UPMC M1 : MNI
3.1.1
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
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
.
|-|
|
|
|
`--
.
|-|
|
|
|
`--
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
bin
dev
etc
ls
home
group_a
cd .
user_a1
dir_1
file1
tmp
group_b
user_a2
lib
man
user_b1
file2
cd .
v.958
usr
man1
cat1
dir_1
laisse
dans
le
rpertoire
courant
17
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
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
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
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
20142015
v.958
19
3.1.4
UPMC M1 : MNI
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
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
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
3.2.1
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
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
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
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
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
UPMC M1 : MNI
home/
cd ~/..
tmp/
f.tar
gp_b/
gp_a/
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/
1) cd ~/..
2) tar -cf /tmp/f.tar ua1
ua1/
dir1/
dir2/
file1
f1_1
d21/
ua0/
26
v.958
20142015
UPMC M1 : MNI
home/
user0/
tmp/
user1/
cd ~user1/repB/
repA/
repB/
f.tar
tar xf ~user1/f.tar
ua1/
dir1/
dir2/
f1_1
d21/
file1
20142015
v.958
27
UPMC M1 : MNI
B Remarque importante :
3.2.3
28
v.958
20142015
UPMC M1 : MNI
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
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
3.2.5
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
UPMC M1 : MNI
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
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
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
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
4.1.4
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
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
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
20142015
v.958
33
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
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
4.3.1
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
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
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
Exemples de commandes ex
:r toto
:.,+10w toto
:.,$d
:1,5co32
:1,3m$
:g/motif/d
Substitutions lmentaires
:s/motif1/motif2/
:s/motif1/motif2/g (global)
:s/motif1/motif2/gc (confirm)
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
Configuration de vi
4.4
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
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
4.4.2
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
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
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
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
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
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
lp -dimprim [fichier ]
lpstat [-pimprim]
cancel num_requte imprim
20142015
v.958
41
UPMC M1 : MNI
4.5.2
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
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
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
43
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
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
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
tr 'abc' '123' remplacera les a par des 1, les b par des 2 et les c par des 3.
5.3.1
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
20142015
v.958
45
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
5.4.2
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
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
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"
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
5.4.4
UPMC M1 : MNI
5.5
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
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
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
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
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
UPMC M1 : MNI
50
v.958
20142015
Chapitre 6
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
6.2
'chaine'
'^a'
'^chaine'
'^a*b'
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)
51
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,
pour le shell
?
*
expr. rationnelles
.
.*
Noter aussi que, malgr certains points communs, tr utilise une syntaxe diffrente.
Exemples
a*
aa*
.*
..*
\..
\\*
6.3
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)
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\>
Applications
sed 's/^/# /'
grep '^..*$'
52
v.958
20142015
UPMC M1 : MNI
6.3.2
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)
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
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
UPMC M1 : MNI
Exemples
[[:lower:]+^$]
[^[:alpha:]]
[-+.[:digit:]]
6.3.4
6.4
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/'
exactement m fois
au moins m fois
entre m et n fois
Exemple
[[:digit:]]\{2,\}
6.5
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
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
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:]]+
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
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
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
Exemples
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
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
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
7.4.3
UPMC M1 : MNI
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
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
-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
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
8.2.3
8.2.4
v.958
20142015
UPMC M1 : MNI
8.2.5
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
20142015
v.958
61
UPMC M1 : MNI
Exemple
s/^#/!/
/p6m1mni/{
}
8.5
s/p6m1mni/(&)/
s/[0-9]/x/g
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
9.2
Programmation
9.2.1
63
UPMC M1 : MNI
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"
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/
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
9.2.4
Fonctions incorpores
20142015
v.958
65
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
v.958
20142015
UPMC M1 : MNI
lundi
mardi
mercredi
jeudi
vendredi
samedi
dimanche
mardi
lundi
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
23
14
02
05
2003
2003
12h Jean
22h Jean
40
70
carte-orange
TGV
40
70
carte-orange
TGV
2002
2003
2001
2004
2003
2004
2002
2004
2000
23
14
02
05
2003
2003
12h Jean
22h Jean
9.4
v.958
67
UPMC M1 : MNI
v.958
20142015
UPMC M1 : MNI
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
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
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
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
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
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
Flux standard
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
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
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
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
syntaxe
commande < fichier
0
fichier
sortie standard
= cran par dfaut
commande
2
sortie derreur
= cran par dfaut
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
syntaxe
commande 2> fichier
Pour ajouter les erreurs la fin du
fichier :
syntaxe
commande 2>> fichier
entre standard
= clavier par dfaut
sortie standard
= cran par dfaut
commande
fichier
10.2.4
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
v.958
73
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_2
TUBE (pipe)
commande_1
commande_2
10.4
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
74
v.958
20142015
UPMC M1 : MNI
40369 1212590
40369 1294516
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
10.4.2
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
10.4.3
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
UPMC M1 : MNI
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
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
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
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
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
20142015
v.958
77
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
syntaxe
ou, plus prcisment,
${variable }
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
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
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)
B Par dfaut, les variables ne sont pas hrites par les processus fils, comme on peut le
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
(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
v.958
20142015
UPMC M1 : MNI
11.1.5
11.1.6
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
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
UPMC M1 : MNI
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
, TAB
*, ?, [...]
~
<, <<, >, >>, |
$ ou ${...}
$(...) ou `...`
;
:
(...)
{...}
&
!
|| et &&
#
\
'...'
"..."
11.2.3
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,
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
11.2.4
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
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
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
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
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
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
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
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
12.1.2
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
#!/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 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
v.958
87
UPMC M1 : MNI
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
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
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
13.1.2
UPMC M1 : MNI
s
s
= s2
!= s2
chane
chane
chane
chane
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
toto
toto
toto
toto
toto
toto
toto
read
write
execute
exist
file
directory
size
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 \.
90
v.958
20142015
UPMC M1 : MNI
13.2
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
13.3.1
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
UPMC M1 : MNI
13.3.2
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)
92
v.958
20142015
Chapitre 14
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
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
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
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
14.2.1
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
+11+
+2+
+3 3+
+44+
v.958
95
UPMC M1 : MNI
14.2.2
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
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
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
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
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
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
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
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.
20142015
v.958
99
Chapitre 15
Le shell : approfondissement
15.1.1
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 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
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
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
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
20142015
v.958
101
15.1.6
UPMC M1 : MNI
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
15.2.1
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
102
v.958
20142015
UPMC M1 : MNI
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
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
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
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
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
15.3.1
104
v.958
20142015
UPMC M1 : MNI
15.4
Internationalisation
15.4.1
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
20142015
v.958
105
UPMC M1 : MNI
15.4.3
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
20142015
v.958
107
Chapitre 16
Conclusion
16.1
16.1.1
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
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
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
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
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).
UPMC M1 : MNI
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.
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.
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
UPMC M1 : MNI
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)
112
v.958
20142015
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
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]
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
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
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.
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.
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.
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.
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.
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
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
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
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!
x , X
D
dd
:d
Destruction de texte
Dplacements
Insertion de texte
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
Remplacement
recherche aprs
recherche avant
recherche rpte dans le mme sens, en sens inverse
Recherche de chanes
Pointeurs
Mmoires nommes
Modification de texte
yy
:y
. (point)
*
[... ]
[ ... ]
, $
\< , \>
\(. . . \)
\n
:n ,m
:.
:$
:c
:%
:g/pattern /
Divers
Fichiers
lignes n-m
ligne courante
dernire ligne
pointeur c
toutes les lignes
toutes les lignes contenant le motif
Intervalles de lignes
Multiplicateurs
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
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
Other
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
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
Changing text
p
P
C
cc
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
Replace
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
C-s
C-r
C-M-s
C-M-r
search forward
search backward
regular expression search
reverse regular expression search
Incremental Search
Error Recovery
C-h
C-h
C-h
C-h
a
c
f
m
q
space
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
Files
Leaving Emacs
Starting Emacs
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
Query Replace
C-@ or C-SPC
C-x C-x
Marking
C-y
M-y
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
scroll
scroll
scroll
scroll
scroll
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 Minibuffer
uppercase word
lowercase word
capitalize word
uppercase region
lowercase region
capitalize region
Case Change
Formatting
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
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
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
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
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
Simple Customization
(setq backup-by-copying-when-linked t)
Writing Commands
An example:
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
C-s / C-r
C-M-s
C-M-r
M-%
Recherche et remplacement
/ 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
dition
Vers
Vers
Vers
Vers
Vers
Vers
Dplacement
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
important
C-x C-u
C-x C-l
M-x capitalize-region
http://www.gnu.org/software/emacs/manual/
emacs.html
Divers
Shell
Changement de casse