semi-adv.tex 14.1 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
	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.

Stephane Bonnet's avatar
find    
Stephane Bonnet committed
21
	\begin{exampleblock}{Créons des fichiers}
Stephane Bonnet's avatar
Stephane Bonnet committed
22
		\cmd{cd ; mkdir api ; cd api}
Stephane Bonnet's avatar
find    
Stephane Bonnet committed
23
		\cmd{touch here that there this}
Stephane Bonnet's avatar
Stephane Bonnet committed
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
269

	\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
270
271
272
\end{frame}

\begin{frame}[fragile]{Et les fichiers cachés?}
Stephane Bonnet's avatar
Stephane Bonnet committed
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
317
	\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
318
319
320
\end{frame}

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

\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
337
\begin{frame}[fragile]{\cmd{locate}}
Stephane Bonnet's avatar
locate    
Stephane Bonnet committed
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
	\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
359
360
\end{frame}

Stephane Bonnet's avatar
locate    
Stephane Bonnet committed
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
\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
384
\begin{frame}[fragile]{\cmd{find}}
Stephane Bonnet's avatar
find    
Stephane Bonnet committed
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

	\begin{block}{}
		\begin{description}
			\item[\cmd{find}] recherche un fichier en parcourant l'arborescence
		\end{description}
	\end{block}
	
	Il suffit de spécifier le point de départ et ce qu'on cherche.
	
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
	\begin{Verbatim}
$ find . -name file_1
./api/file_1
	\end{Verbatim}  
	\end{beamercolorbox}	
	
	On peut utiliser des jokers dans le nom
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
	\begin{Verbatim}
$ find . -name 'file_1*' -print
./api/file_11
./api/file_18
./api/file_1
[...]
	\end{Verbatim}  
	\end{beamercolorbox}
	
	\begin{alertblock}{Attention aux quotes}
		Le motif doit être entre quotes, sinon il sera interprété par le
		shell.
	\end{alertblock}
\end{frame}

\begin{frame}[fragile]{Filtrer avec \cmd{find}}

	\begin{block}{}
		\cmd{find} est capable de filtrer la recherche 
		\begin{itemize}
			\item{Par type de fichier}
			\item{Par taille}
			\item{Par date de modification}
			\item ...
		\end{itemize}
	\end{block}
	
	\begin{exampleblock}{Cherchons les fichiers de plus de 10 Mo}
		\cmd{find / -size +10M -print} 
	\end{exampleblock}
	
	\begin{alertblock}{Il y a plein d'erreurs!}
		Elles sont dûes au permissions d'accès à certains fichiers. 
		On peut les supprimer en redirigeant la sortie d'erreur vers 
		le périphérique 'poubelle' \cmd{/dev/null}:
		
		\cmd{find / -size +10M -print 2> /dev/null}
	\end{alertblock} 
Stephane Bonnet's avatar
Stephane Bonnet committed
441
442
443
\end{frame}

\begin{frame}[fragile]{Exécuter des commandes avec \cmd{find}}
Stephane Bonnet's avatar
find    
Stephane Bonnet committed
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465

	\cmd{find} peut exécuter une commande sur chaque fichier trouvé
	avec l'option \cmd{-exec}.	
	
	\begin{exampleblock}{Créer un backup de chaque fichier}
		\cmd{find api -name 'file*' -exec cp \{\} \{\}.bak \textbackslash;}
	\end{exampleblock}

	\begin{block}{Explication}
		\begin{itemize}
			\item \cmd{cp}] est exécutée pour chaque fichier trouvé
			\item \cmd{\{\}} est remplacé par le nom du fichier trouvé
			\item \cmd{\textbackslash;} indique la fin de la commande.
		\end{itemize}			
	\end{block}	
	
	\begin{alertblock}{}
		\begin{itemize}
			\item \cmd{-exec} n'autorise qu'une seule commande.
			\item On peut avoir plusieurs \cmd{-exec}.
		\end{itemize}
	\end{alertblock}
Stephane Bonnet's avatar
Stephane Bonnet committed
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
\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}