semi-adv.tex 12 KB
Newer Older
Stephane Bonnet's avatar
Stephane Bonnet committed
1
\subsection{Globbing patterns et wildcards}
Stephane Bonnet's avatar
Stephane Bonnet committed
2
3

\begin{frame}[fragile]{Faire référence à plusieurs fichiers}
Stephane Bonnet's avatar
Stephane Bonnet committed
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
	C'est fastidieux d'être obligé d'écrire le nom de tous les fichiers dans
	les commandes. On peut se simplifier la vie grâce aux globbing patterns.
	
	\begin{block}{globbing pattern (\emph{motif d'englobement})}
		Un motif de nom de fichier qui en englobe plusieurs.
	\end{block}
	
	\begin{block}{wildcard (\emph{joker})}
		Lettre spéciale qui représente un caractère ou une suite de caractères quelconques dans un \emph{globbing pattern}.
	\end{block}
\end{frame}

\begin{frame}[fragile]{Le joker ``*''}

	Joker le plus utilisé.
	Remplace toute suite de caractères dans un motif. S'il est utilisé seul, remplace tout mot.

	\begin{exampleblock}{Créeons des fichiers}
		\cmd{cd ; mkdir api ; cd api}

	\end{exampleblock}
	
	\begin{alertblock}{Le point-virgule}
		Le point virgule sépare des commandes successives sur la ligne de commande.
	\end{alertblock}
	
	\begin{alertblock}{\cmd{touch}}
		Crée les fichiers passés en arguments. Si un fichier existe déjà,
		met à jour sa date de dernière modification.
	\end{alertblock}
\end{frame}

\begin{frame}[fragile]{Le joker ``*''}

	\begin{exampleblock}{Supprimons des fichiers}
		On pourrait écrire: \cmd{rm here that there this}
		
		\cmd{rm *} fait la même chose car le joker ``*'' correspond à tous les noms de fichiers.
	\end{exampleblock}
	
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
	\begin{Verbatim}
$ ls
here that there this
$ \textcolor{yellow}{rm *}
$ ls
$ 
	\end{Verbatim}  
	\end{beamercolorbox}	
\end{frame}

\begin{frame}[fragile]{Le joker ``*''}

	\begin{exampleblock}{Re-créeons des fichiers}
		\cmd{touch here that there this}	
	\end{exampleblock}
	
	On peut restreindre le motif en donnant une partie du nom.
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
	\begin{Verbatim}
$ ls *
here that there this
$ ls t*
that there this
$ ls *h*
here that there this
$ ls th*e
there
$ ls that*
that
$ ls thi*s
this
	\end{Verbatim}  
	\end{beamercolorbox}	
		
	\begin{alertblock}{Attention}
		``*'' correspond aussi aux séquences vides!
	\end{alertblock}
\end{frame}

\begin{frame}[fragile]{Le joker ``?''}

	\begin{block}{}
		Il représente un caractère unique quelconque dans un motif.
	\end{block}

	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
	\begin{Verbatim}
$ ls th?t
that
$ ls th??
that this
$ ls th???
there
$ ls ?here
there
$ ls *here	\textcolor{red}{<---- Attention ici le joker correspond aussi à une séquence vide}
here there
	\end{Verbatim}  
	\end{beamercolorbox}	
\end{frame}

\begin{frame}[fragile]{Le joker ``[]''}
	\begin{block}{}
		Permet de définir un ensemble de caractères pouvant apparaître dans le nom.
	\end{block}
	
	\begin{exampleblock}{Créons plus de fichiers}
		\cmd{touch file\_1 file\_2 file\_3 file\_4 file\_a file\_b file\_c file\_d}
	\end{exampleblock}
	
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
	\begin{Verbatim}
$ ls file_[12ab]
file_1 file_2 file_a file_b
	\end{Verbatim}  
	\end{beamercolorbox}	
\end{frame}

\begin{frame}[fragile]{Le joker ``[]''}

	On peut spécifier des intervalles plutôt que de donner tous les caractères.
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
	\begin{Verbatim}
$ ls file_[1-3b-d]
file_1 file_2 file_3 file_b file_c file_d
	\end{Verbatim}  
	\end{beamercolorbox}
	
	\vspace{10pt}
	On peut aussi prendre le complément de la liste en la préfixant par un ``\verb+^+''.
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
	\begin{Verbatim}
$ ls file_[^1-3b-d]
file_4 file_a
	\end{Verbatim}  
	\end{beamercolorbox}
\end{frame}

\begin{frame}[fragile]{Échappement de caractères}

	Et si il y a un fichier dont le nom contient le caractère ``-''?

	\begin{exampleblock}{Un fichier de plus}
		\cmd{touch file\_-}
	\end{exampleblock}	
	
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
	\begin{Verbatim}
$ ls file_[1-3b-d]
file_1 file_2 file_3 file_b file_c file_d
$ ls file_[1-3b-d\textcolor{yellow}{\textbackslash{}-}]
file_- file_1 file_2 file_3 file_b file_c file_d
	\end{Verbatim}  
	\end{beamercolorbox}
	
	\vspace{10pt}
	\begin{block}{Caractère d'échappement}
		Le caractère ``\textbackslash'' supprime l'interprétation par le shell du caractère qui le suit.
		On peut même échapper l'espace.
	\end{block}
	
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
	\begin{Verbatim}
$ touch my\textbackslash file
$ ls
'my file'           \textcolor{cyan}{<----- Les simple quotes indiquent qu'il s'agit d'un seul fichier}
	\end{Verbatim}  
	\end{beamercolorbox}
\end{frame}

\begin{frame}[fragile]{Expansion d'accolades}
	\begin{block}{Expansion d'accolades}
		\cmd{bash} supporte l'expansion d'accolades: générer toutes les chaînes dans un intervalle ou à partir 
		d'une liste.
	\end{block}
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
	\begin{Verbatim}
$ echo \{1..20\}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
$ echo a\{c,d,e\}f
acf adf aef
	\end{Verbatim}  
	\end{beamercolorbox}	

	\vspace{10pt}	
	Cette expansion peut être utilisée dans des motifs.
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
	\begin{Verbatim}
$ touch file_\{1..20\}
$ ls
file_1   file_12  file_15  file_18  file_20  file_5  file_8
file_10  file_13  file_16  file_19  file_3   file_6  file_9
file_11  file_14  file_17  file_2   file_4   file_7
$ rm file_\{12..14\}
$ ls
file_1   file_15  file_18  file_20  file_5  file_8
file_10  file_16  file_19  file_3   file_6  file_9
file_11  file_17  file_2   file_4   file_7
	\end{Verbatim}  
	\end{beamercolorbox}
\end{frame}

\begin{frame}[fragile]{Expansion d'accolades}
	\begin{block}{Extensions multiples}
		L'expansion d'accolade est très utilisée pour sélectionner des fichiers avec des extensions multiples.
		
		\cmd ls *.\{jpg,png,bmp\}
		
		listera tous les fichiers correspondants à ces extensions.
	\end{block}
	
	\begin{alertblock}{Extensions}
		\begin{itemize}
			\item Les extensions n'ont pas de sens particulier sous UNIX. 
			\item Spécificité de Windows et de ses prédécesseurs.
			\item Pratique pour indiquer le type des fichiers...
		\end{itemize}
	\end{alertblock}
\end{frame}

\begin{frame}[fragile]{Remarques}

	\begin{block}{Jokers dans les chemins}
		Le chemin fait partie du nom des fichiers, on peut mettre des jokers dans ceux-ci.
		
		\cmd{ls /var/*/*.log} 

		liste tous les fichiers de logs dans tous les sous-répertoires directs de \cmd{/var}

		\cmd{ls /var/*/*/*.log} 
		
		liste tous les fichiers de logs dans tous les sous-répertoires des sous-répertoires de \cmd{/var}
		
	\end{block}
	
	\begin{block}{Si le motif ne correspond à aucun fichier?}
		Dans ce cas, le motif est transmis tel quel à la commande.
	\end{block}
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
	\begin{Verbatim}
$ rm file?
rm: impossible de supprimer 'file?': Aucun fichier ou dossier de ce type
	\end{Verbatim}  
	\end{beamercolorbox}		
\end{frame}

\begin{frame}[fragile]{Remarques}
	\begin{alertblock}{Attention aux noms pris comme des options}
	   On suppose qu'il existe un fichier ``-R''.
	   
	   Si on exécute ``\cmd{rm *}'', l'englobement va passer le nom \cmd{-R} à ``\cmd{rm}'' qui l'interprétera comme une option.
	   
	   La commande réellement exécutée sera ``\cmd{rm -R *}''. Oups!
	\end{alertblock}
	
	\begin{block}{Séparer les options des arguments}
		\begin{itemize}
			\item ``\cmd{-{}-}'' est utilisé dans les commandes pour séparer explicitement les options des arguments.
	
			\item Tout ce qui suit ``\cmd{-{}-}'' est interprété comme un argument.
		\end{itemize}
		
		``\cmd{rm -{}- *}'' est donc plus sûr, puisque c'est bien la commande ``\cmd{rm -{}- -R *}'' qui sera exécutée.
	\end{block}
Stephane Bonnet's avatar
Stephane Bonnet committed
269
270
271
\end{frame}

\begin{frame}[fragile]{Et les fichiers cachés?}
Stephane Bonnet's avatar
Stephane Bonnet committed
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
	\begin{block}{Des fichiers cachés? Où ça?}
		Tous les fichiers dont le nom commence par un point sont cachés.
		\begin{itemize}
			\item Ils ne sont pas affichés par ``\cmd{ls}''.
			\item Ils ne sont pas considérés pour l'englobement.
		\end{itemize}
	\end{block}
	
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
	\begin{Verbatim}
$ touch .hidden
$ ls
$ ls -a
\textcolor{blue}{.}  \textcolor{blue}{..}  .hidden
$ rm *
$ ls -a
\textcolor{blue}{.}  \textcolor{blue}{..}  .hidden
	\end{Verbatim}  
	\end{beamercolorbox}
	
\end{frame}

\begin{frame}[fragile]{Et les fichiers cachés?}
	\begin{alertblock}{\cmd{shopt}}
		\cmd{shopt} permet de changer certaines options du shell.
		\begin{itemize}
			\item \cmd{shopt -s <option>} active l'option \cmd{<option>}
			\item \cmd{shopt -u <option>} active l'option \cmd{<option>}
		\end{itemize}
	\end{alertblock}

	\begin{block}{L'option \cmd{dotglob}}
		Si elle est active, les fichiers commençant par un point sont candidats à l'englobement. Par défaut désactivée.
	\end{block}
	
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
	\begin{Verbatim}
$ ls -a
\textcolor{blue}{.}  \textcolor{blue}{..}  .hidden
$ \textcolor{yellow}{shopt -s dotglob}
$ rm *
$ ls -a
\textcolor{blue}{.}  \textcolor{blue}{..}
	\end{Verbatim}  
	\end{beamercolorbox}
Stephane Bonnet's avatar
Stephane Bonnet committed
317
318
319
\end{frame}

\subsection{Chercher des fichiers}
Stephane Bonnet's avatar
locate    
Stephane Bonnet committed
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335

\begin{frame}{Trouver des fichiers}
	Des centaines de milliers de fichiers sur une distribution classique.
	
	Difficile de s'y retrouver sans outils...
	
	\begin{block}{\cmd{locate}}
		Recherche des fichiers dans une base de données préremplie
	\end{block}
	
	\begin{block}{\cmd{find}}
		Recherche des fichiers dans l'arborescence, éventuellement avec des filtres
		précis.
	\end{block}
\end{frame}

Stephane Bonnet's avatar
Stephane Bonnet committed
336
\begin{frame}[fragile]{\cmd{locate}}
Stephane Bonnet's avatar
locate    
Stephane Bonnet committed
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
	\begin{block}{}
		\begin{description}
			\item[\cmd{locate <motif>}] recherche \cmd{<motif>} dans la base de données \cmd{/var/lib/mlocate/mlocate.db}
		\end{description}
	\end{block}
	
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
	\begin{Verbatim}
$ locate issue
/etc/issue
/etc/issue.net
[...]
	\end{Verbatim}  
	\end{beamercolorbox}	
	
	\begin{alertblock}{Si \cmd{locate} ne renvoie rien}
		\begin{itemize}
			\item Rien n'a été trouvé
			\item La base de donnée est vide
		\end{itemize}
	\end{alertblock}
Stephane Bonnet's avatar
Stephane Bonnet committed
358
359
\end{frame}

Stephane Bonnet's avatar
locate    
Stephane Bonnet committed
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
\begin{frame}[fragile]{\cmd{updatedb}}
	\begin{block}{}
		\begin{description}
			\item[\cmd{updatedb}] met à jour la base de données \cmd{/var/lib/mlocate/mlocate.db}
		\end{description}
	\end{block}
	
	\begin{alertblock}{\cmd{sudo} obligatoire!}
		Cette commande modifie un fichier que seul le superutilisateur peut modifier.
		
		Il faut exécuter \cmd{sudo updatedb}.
	\end{alertblock}
	
	\begin{alertblock}{\cmd{sudo} (\emph{SuperUserDO})}
		\begin{itemize}
			\item Cette commande exécute une autre commande avec les droits du superutilisateur.
			\item Seuls certains utilisateurs ont le droit de l'invoquer.
			\item Elle demande le mot de passe de l'utilisateur qui l'invoque avant de s'exécuter.
		\end{itemize}
	\end{alertblock}
\end{frame}


Stephane Bonnet's avatar
Stephane Bonnet committed
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
\begin{frame}[fragile]{\cmd{find}}
\end{frame}

\begin{frame}[fragile]{Exécuter des commandes avec \cmd{find}}
\end{frame}

\subsection{Chercher à l'intérieur des fichiers}

\begin{frame}[fragile]{\cmd{grep}}
\end{frame}

\begin{frame}[fragile]{Expressions régulières}
\end{frame}

\subsection{Identifier des fichiers}

\begin{frame}[fragile]{\cmd{file}}
\end{frame}

\subsection{Manipuler des fichiers}

\begin{frame}[fragile]{Un peu de manipulation de fichiers}
	%% cut
	%% sort
	%% wc
\end{frame}

\subsection{Combiner les commandes: les pipes}
\begin{frame}[fragile]{Pipes}
\end{frame}

\begin{frame}[fragile]{\cmd{tee}}
\end{frame}

\subsection{Processus et jobs}

\begin{frame}[fragile]{Les processus}
\end{frame}

\begin{frame}[fragile]{Mettre fin à des processus}
\end{frame}

\begin{frame}[fragile]{Terminaux}
\end{frame}

\begin{frame}[fragile]{Exécution en arrière plan}
\end{frame}

\begin{frame}[fragile]{Gestion des jobs}
\end{frame}

\subsection{Substitution de commandes}

\begin{frame}[fragile]{Substitution de commandes}
\end{frame}

\subsection{L'historique}
\begin{frame}[fragile]{Rappeler des commandes}
	%% Historique + manipulation
	%% Où est l'historique (bases)
\end{frame}

\begin{frame}[fragile]{Rechercher dans l'historique}
\end{frame}