forked from oleiade/Learn-unix-the-hacker-way-fr
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
496 lines (486 loc) · 46.7 KB
/
index.html
1
2
3
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
269
270
271
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
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
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
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta name="generator" content="pandoc" />
<title>Hack it baby - </title>
<link rel="stylesheet" href="style.css" type="text/css" />
<meta name="viewport" content="width=device-width">
</head>
<body>
<p>
<h1>Learn Unix the hacker way</h1>
<h3>By Oleiade <a href="http://twitter.com/oleiade">@oleiade</a></h3>
</p>
<div style="width:500px">
<iframe src="http://ghbtns.com/github-btn.html?user=oleiade&repo=Learn-unix-the-hacker-way&type=watch&count=true"
allowtransparency="true" frameborder="0" scrolling="0" width="110px" height="20px"></iframe>
<iframe allowtransparency="true" frameborder="0" scrolling="no" src="http://platform.twitter.com/widgets/tweet_button.1333103182.html#_=1333404284780&count=horizontal&id=twitter-widget-0&lang=en&original_referer=http%3A%2F%2oleiade.github.com%2FLearn-unix-the-hacker-way%2F&size=m&text=Learn%20Unix%20the%20hacker%20way&url=https%3A%2F%2Fgithub.com%2Foleiade%2FLearn-unix-the-hacker-way&via=oleiade" class="twitter-share-button twitter-count-horizontal" style="width: 107px; height: 20px; " title="Twitter Tweet Button"></iframe>
<script id="twitter-wjs" src="//platform.twitter.com/widgets.js"></script><script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<p> <br></p>
</div>
<p><img src="img/learn-unix-the-hacker-way.jpg"></p>
<div id="TOC">
<ul>
<li><a href="#introduction">Introduction</a><ul>
<li><a href="#daccord-mais-unix-cest-quoi">D’accord, mais, Unix, c’est quoi?</a></li>
<li><a href="#et-comment-est-ce-que-lon-va-sy-prendre">Et comment est-ce que l’on va s’y prendre?</a></li>
<li><a href="#et-le-dessein">Et le dessein?</a></li>
<li><a href="#de-quoi-sagit-il">De quoi s’agit-il</a></li>
<li><a href="#pourquoi-tout-ce-tintouin">Pourquoi tout ce tintouin</a></li>
<li><a href="#a-destination-de">a destination de?</a><ul>
<li><a href="#qui">qui</a></li>
</ul></li>
<li><a href="#qui-a-commis-ceci">Qui a commis ceci?</a></li>
<li><a href="#nomenclature">Nomenclature</a></li>
</ul></li>
<li><a href="#au-jour-le-jour">Au jour le jour</a><ul>
<li><a href="#les-commandes-et-le-file-system">Les commandes et le file-system</a><ul>
<li><a href="#exercices">Exercices</a></li>
<li><a href="#défi">Défi</a></li>
<li><a href="#background">Background</a><ul>
<li><a href="#le-systeme-de-fichier">Le systeme de fichier</a></li>
<li><a href="#le-terminal">Le terminal</a></li>
<li><a href="#le-shell">Le shell</a></li>
<li><a href="#anatomie-dune-commande-unix">Anatomie d’une commande unix</a></li>
<li><a href="#les-wildcard">Les wildcard</a></li>
<li><a href="#un-protocole">Un protocole</a></li>
</ul></li>
<li><a href="#cheat-codes">Cheat codes</a><ul>
<li><a href="#ouvrir-un-terminal">Ouvrir un terminal</a></li>
<li><a href="#une-commande-unix">Une commande unix</a></li>
<li><a href="#passer-une-option-à-une-commande">Passer une option à une commande</a></li>
<li><a href="#commandes">Commandes</a></li>
</ul></li>
</ul></li>
<li><a href="#les-fichiers-et-les-internets">Les fichiers et les internets</a><ul>
<li><a href="#exercices-1">Exercices</a></li>
<li><a href="#défi-1">Défi</a></li>
<li><a href="#background-1">Background</a><ul>
<li><a href="#hierarchie-du-systeme-de-fichier">Hierarchie du systeme de fichier</a></li>
<li><a href="#le-home-directory">Le Home directory</a></li>
<li><a href="#description-dun-fichier">Description d’un fichier</a></li>
<li><a href="#les-expressions-regulieres">Les expressions regulieres</a></li>
<li><a href="#ascii">ASCII</a></li>
<li><a href="#les-liens">Les liens</a></li>
<li><a href="#ladresse-ip">L’adresse IP</a></li>
<li><a href="#url-uri">Url / Uri</a></li>
</ul></li>
<li><a href="#cheat-codes-1">Cheat codes</a><ul>
<li><a href="#différence-entre-la-notation-et-homemonutilisateur">Différence entre la notation <code>~/</code> et /home/MONUTILISATEUR</a></li>
<li><a href="#lire-un-ficher">Lire un ficher</a></li>
<li><a href="#afficher-les-dernières-lignes-dun-fichier">Afficher les dernières lignes d’un fichier</a></li>
<li><a href="#afficher-les-premières-lignes-dun-fichier">Afficher les premières lignes d’un fichier</a></li>
<li><a href="#rechercher-des-occurences-dans-un-fichier">Rechercher des occurences dans un fichier</a></li>
<li><a href="#compter-le-nombre-de-lignes-dans-un-fichier">Compter le nombre de lignes dans un fichier</a></li>
<li><a href="#chercher-des-fichiers-sur-le-file-system">Chercher des fichiers sur le file-system</a></li>
<li><a href="#faire-des-liens-sur-un-système-unix">Faire des liens sur un système unix</a></li>
<li><a href="#ladresse-ip-locale-universelle">L’adresse ip locale universelle</a></li>
<li><a href="#trouver-ladresse-ip-dun-domaine">Trouver l’adresse ip d’un domaine</a></li>
<li><a href="#télécharger-des-fichiers">Télécharger des fichiers</a></li>
</ul></li>
</ul></li>
<li><a href="#le-root-et-lanonymous">Le root et l’anonymous</a><ul>
<li><a href="#exercices-2">Exercices</a><ul>
<li><a href="#un-peu-plus-sur-le-shell">Un peu plus sur le shell</a></li>
<li><a href="#le-droit-de-rien-lenvie-de-tout.">Le droit de rien, l’envie de tout.</a></li>
</ul></li>
<li><a href="#defi">Defi</a></li>
<li><a href="#background-2">Background</a></li>
</ul></li>
<li><a href="#rollback">Rollback</a><ul>
<li><a href="#et-si-on-se-revoyait">Et si on se revoyait?</a></li>
<li><a href="#le-shell-et-lenvironnement.">le shell et l’environnement.</a></li>
<li><a href="#background-3">Background</a></li>
</ul></li>
<li><a href="#shell-scripting">Shell scripting</a><ul>
<li><a href="#exercices-3">Exercices</a></li>
<li><a href="#defi-1">Defi:</a></li>
<li><a href="#background-4">Background</a></li>
</ul></li>
</ul></li>
</ul>
</div>
<h1 id="introduction"><a href="#TOC">Introduction</a></h1>
<p><code>Learn Unix the hacker way</code> avant d’être un livre, est un tutoriel.</p>
<p>Il est modestement destiné à guider ceux qui desirent apprendre les fondamentaux d’Unix dans leur quête.</p>
<p>A éclairer ceux qui souhaitent apprendre un peu plus de la chose avec qui ils passent leur journée: leur ordinateur.</p>
<p>Ou encore, plus simplement, les intarissables curieux.</p>
<h4 id="daccord-mais-unix-cest-quoi"><a href="#TOC">D’accord, mais, Unix, c’est quoi?</a></h4>
<p>Et bien Unix, c’est un système d’exploitation. Crée en 1969 par deux ingenieurs des Bell labs: <a href="http://fr.wikipedia.org/wiki/Ken_Thompson">Ken Thompson</a> et <a href="http://fr.wikipedia.org/wiki/Dennis_Ritchie">Dennis Ritchie</a>(également créateur du langage <code>C</code>) aux etats-unis.</p>
<p>C’est à dire que c’est “un ensemble de programmes qui dirigent l’utilisation des capacités d’un ordinateur par des logiciels applicatifs”(<a href="http://fr.wikipedia.org/wiki/Syst%C3%A8me_d%27exploitation">Source</a>).</p>
<p>C’est, en très gros, le cerveau qui permet à votre ordinateur de faire des choses, comme stocker des informations sur votre disque dur, exécuter vos applications, commander à votre écran d’afficher vos photos.</p>
<p>Vous connaissez sans doute déjà d’autres systèmes d’exploitation, parfois même sans le savoir. Parmi eux: Windows, OSX, Linux… [TO BE CONTINUED TODO]</p>
<h4 id="et-comment-est-ce-que-lon-va-sy-prendre"><a href="#TOC">Et comment est-ce que l’on va s’y prendre?</a></h4>
<p>Ce livre s’organise en sessions relatives aux thématiques des systèmes unix.</p>
<p>Chaque session consistera en une serie d’exercices didactiques et progressifs.</p>
<p>Suivi d’explications des concepts et de l’historique des concepts manipulés lors de ceux-ci.</p>
<p>Enfin, des “cheat codes”, en fait les solutions des exercices, au cas où les moins perseverant d’entre vous se cherchent une béquille.</p>
<h4 id="et-le-dessein"><a href="#TOC">Et le dessein?</a></h4>
<p>Learn Unix the hacker way vous propose une manière didactique, excitante, parfois rigolote, mais surtout autodidacte de vous former a l’ecosystème Unix.</p>
<p>Son but n’est pas de faire de vous des stars du clavier, quand bien même certains pourraient se découvrir une vocation.</p>
<p>Son but n’est pas non plus de remplir votre cerveau d’un tas de connaissances que vous vous empresseriez d’oublier.</p>
<p>Mais bien plutôt de vous apprendre à apprendre par vous-même. A chercher, vous interroger, tourner en rond, eprouver cette joie indicible de parvenir à resoudre un problème après des heures à l’avoir tourné et retourné dans tous les sens.</p>
<p>Son but est de vous donner envie; de connaitre mieux votre camarade, j’ai nommé l’ordinateur; de maitriser ses compétences, de l’utiliser sans restrictions; d’en apprendre encore plus.</p>
<h3 id="de-quoi-sagit-il"><a href="#TOC">De quoi s’agit-il</a></h3>
<h3 id="pourquoi-tout-ce-tintouin"><a href="#TOC">Pourquoi tout ce tintouin</a></h3>
<p>[ TODO: * On utilise les ordinateurs quotidienement, on delai tout un tas d’operation aux ordinateurs, on leur confie notre vie, sans vraiment ni savoir les utiliser, ni comprendre comment ils fonctionnent. Confier les cles de chef soi a un inconnu? Non. Alors pourquoi confier</p>
<ul>
<li><p>En plus, les ordinateurs, et tout ce qui tourne autour ont souvent la reputation d’etre complexe, complique a apprehender, une elite souvent deconsidere, alors que comme nous l’ont prouve recemment arduino et raspberry pi, ils sont fun, peuvent s’averer de veritables objets de creation, et sont un vrai sujet d’emerveillement et d’apprentissage constant.</p></li>
<li><p>L’informatique est un domaine “scientifique” certes, mais une opportunite incomparable de rendre la science didactiqe, rigolote, et “reel”. Elle permet d’apprendre et d’exprimenter avec le minimum de bagages possibles et sans risque (blague sur marie curie, le radium tout ca)</p></li>
</ul>
<p>]</p>
<h3 id="a-destination-de"><a href="#TOC">a destination de?</a></h3>
<h4 id="qui"><a href="#TOC">qui</a></h4>
<p>[ TODO: * A l’origine ecrit pour une journaliste equipee d’un mac, desireuse d’apprendre comment il marchait “vraiment”.</p>
<ul>
<li><p>N’importe qui, du berceau au tombeau, peut realiser ces exercices</p></li>
<li><p>Plus, n’importe qui devrait y trouver son compte, de celui qui veut juste se la jouer en soiree avec un terminal noir sur blanc, celle qui veut mieux comprendre comment ca marche vraiment, a celui ou celle qui veut devenir le prochain guru des hackers, et suivre le lapin blanc.</p></li>
<li><p>Pense pour etre didactique, progressif, et sans contrainte temporel. On peut le prendre, l’arreter, le reprendre, l’oublier, et y revenir.</p></li>
</ul>
<p>]</p>
<h3 id="qui-a-commis-ceci"><a href="#TOC">Qui a commis ceci?</a></h3>
<p>[ TODO: * Theo crevon, ingenieur a la sauvette. Poete a l’aide de petits bouts de codes. Photographe parfois. Et ecrivain selon l’humeur. Desireux de partager, et de vulgariser, ce que sa formation et son experience lui ont fait acquerir. * Avec l’aide de Nathan mustaki : description * Avec comme cobaye totalement consentent Morgane Tual</p>
<p>]</p>
<h3 id="nomenclature"><a href="#TOC">Nomenclature</a></h3>
<p>TODO</p>
<h1 id="au-jour-le-jour"><a href="#TOC">Au jour le jour</a></h1>
<h3 id="les-commandes-et-le-file-system"><a href="#TOC">Les commandes et le file-system</a></h3>
<h4 id="exercices"><a href="#TOC">Exercices</a></h4>
<p><strong>1</strong>. Trouve comment ouvrir un terminal.</p>
<p><strong>2</strong>. Maintenant, documente toi pour savoir ce qu’est une commande sur un système Unix.</p>
<p><strong>3</strong>. Quelle est la syntaxe pour passer des options a une commande?</p>
<p><strong>4</strong>. Trouve les commandes qui permettent d’effectuer les actions suivantes :</p>
<ul>
<li><p>Imprimer à l’écran l’endroit sur le système de fichier ou tu te trouves actuelement.</p></li>
<li><p>Lister le contenu d’un dossier. Quelle option passée à cette commande permet de lui faire lister <strong>recursivement</strong> le contenu d’un dossier ? Quelle combinaison d’options permet de lister les fichiers en affichant leur <strong>date de creation</strong>, <strong>l’utilisateur</strong> qui les a crée, et les droits que celui ci a dessus ( on verra plus en détail les droits plus tard)</p></li>
<li><p>Se déplacer dans le système de fichier.</p></li>
<li><p>Copier un fichier. Ainsi que l’option qui permet à celle-ci de copier un dossier.</p></li>
<li><p>Deplacer un fichier. Déplacer un dossier.</p></li>
<li><p>Renommer un fichier (Ce n’est pas nécéssairement une nouvelle commande). Renommer un dossier.</p></li>
<li><p>Effacer un fichier. Ainsi que l’option qui permet à celle-ci d’effacer un dossier.</p></li>
<li><p>Créer un dossier.</p></li>
<li><p>Créer un fichier.</p></li>
<li><p>Ecrire dans un fichier et le sauver dans ~/Desktop.</p>
<p><strong>Nota</strong>: Tu peux utiliser un petit outil en ligne de commande présent par défaut sur la plupart des systèmes unix baptisé nano. Familiarise toi avec, il est très très simple d’utilisation, et s’avérera très pratique.</p></li>
</ul>
<p><strong>5</strong>. Documente toi un petit peu pour être apte à répondre à la question: Mais au fait, c’est quoi un système unix? C’est quoi la difference avec windows?</p>
<h4 id="défi"><a href="#TOC">Défi</a></h4>
<p>Maintenant, un défi, pour pratiquer sur un cas concret: Trouve avec quelle commande et quelles options te connecter au serveur hackerway.oleiade.com via le protocole ftp en ligne de commande. Une fois connecté, trouve le moyen de rappatrier le fichier <code>defi_ftp</code> dans le dossier sur ta machine <code>~/Downloads</code> (si ce second n’existe pas, crée le)</p>
<p><strong>Note pour les pessimistes</strong>: C’est plus simple que ca en a l’air.</p>
<p><strong>Au préalable</strong></p>
<p>Je te conseille de lire quelques petits tutoriels pour comprendre ce qu’est un système de fichiers, à quoi ça correspond, et surtout à quoi ca ressemble.</p>
<p>Le système de fichier, c’est le nom qu’on donne à l’agencement des fichiers et dossiers sur ton ordinateur. C’est là où il, toi, et tous les utilisateurs du système vont ranger leur données.</p>
<p>Tu peux le considérer comme un gros arbre avec des branches.La plupart des systemès unix partagent cette hiérarchie.</p>
<p>Ensuite, sache que la commande qui te sauvera <strong>toujours</strong> la vie, et qui a donné naissance à la fameuse réplique “RTFM” (Read The Fucking Manual) sur les forums techniques est <code>man</code>.</p>
<p>Pour chaque commande du système, tu as ce qu’on appelle un <code>man</code>. Par exemple, si tu tapes ‘man cat’ le manuel d’utilisation de la commande <code>cat</code>, detaillant son utilisation et toutes les options que tu peux lui passer s’affichera à l’écran.</p>
<h4 id="background"><a href="#TOC">Background</a></h4>
<h6 id="le-systeme-de-fichier"><a href="#TOC">Le systeme de fichier</a></h6>
<p>TODO</p>
<h6 id="le-terminal"><a href="#TOC">Le terminal</a></h6>
<p>TODO</p>
<h6 id="le-shell"><a href="#TOC">Le shell</a></h6>
<p>TODO</p>
<h6 id="anatomie-dune-commande-unix"><a href="#TOC">Anatomie d’une commande unix</a></h6>
<p>TODO</p>
<h6 id="les-wildcard"><a href="#TOC">Les wildcard</a></h6>
<p>TODO</p>
<h6 id="un-protocole"><a href="#TOC">Un protocole</a></h6>
<p>TODO</p>
<h4 id="cheat-codes"><a href="#TOC">Cheat codes</a></h4>
<h6 id="ouvrir-un-terminal"><a href="#TOC">Ouvrir un terminal</a></h6>
<ul>
<li><p><strong>Raspberry Pi</strong> : Si vous vous exercez sur cette plateforme, c’est que vous etes probablement deja au fait de l’utilisation d’un terminal.</p></li>
<li><p><strong>OSX</strong> : L’application <code>Terminal</code> se trouve dans <code>/Applications/Utilitaires</code></p></li>
<li><p><strong>Linux</strong>: Généralement, sur les distributions Linux, vous trouverez le terminal dans le menu <code>Applications</code> puis dans la section <code>Utilitaires</code> ou <code>Outils système</code> ou assimilés.</p></li>
</ul>
<h6 id="une-commande-unix"><a href="#TOC">Une commande unix</a></h6>
<ul>
<li>Voir [[ Anatomie d’une commande unix ]]</li>
</ul>
<h6 id="passer-une-option-à-une-commande"><a href="#TOC">Passer une option à une commande</a></h6>
<p>Généralement une même option d’une commande unix à deux syntaxes possibles. Elle se distingue par le nombre de tirets qui la précède: 1 ou 2.</p>
<p>Lorsqu’une option est passée à l’aide d’un seul tiret, son nom ne se compose que d’une seule lettre.</p>
<p>Cependant on peut cumuler à la suite d’un seul tiret autant d’options composée d’une lettre unique qu’on le souhaite.</p>
<p>Par exemple, sont valides:</p>
<p><code>macommande -o</code> et <code>macommande -oadks</code> ainsi que <code>macommande -o -a -d -k -s</code></p>
<p>Par ailleurs, certaines options nécéssitent de leur passer une valeur, d’autres agissent comme des “flags” et ne nécéssitent de passer aucune valeur.</p>
<p>Une option peut généralement être utilisée avant, ou après les arguments obligatoires de cette commande ( par exemple la commande <code>ls</code> prend obligatoirement une série de chemins dont elle devra lister le contenu).</p>
<p>Exemples:</p>
<ul>
<li><p>Avec une option écrite avec un tiret simple et en passant une valeur</p>
<p><code>macommande arg1 -o [valeurdeloption]</code></p>
<p>ou</p>
<p><code>macommande -o [valeurdeloption] arg1</code></p></li>
<li><p>Qui géneralement a sa variante en toutes lettres précédée par deux tirets</p>
<p><code>macommande --option [valeurdeloption] arg1</code></p></li>
</ul>
<h6 id="commandes"><a href="#TOC">Commandes</a></h6>
<ul>
<li><p>Imprimer à l’ecran l’endroit où l’on se trouve</p>
<p><code>pwd</code></p></li>
<li><p>Lister le contenu d’un dossier</p>
<p><code>ls</code></p></li>
<li><p>Lister récursivement le contenu d’un dossier</p>
<p><code>ls -R</code></p></li>
<li><p>Lister les fichiers ainsi que leur date de création, l’utilisateur qui les a crée et les droits afférents à celui-ci.</p>
<p>`ls -la</p></li>
<li><p>Se déplacer dans le système de fichiers</p>
<p><code>cd madestination</code></p></li>
<li><p>Copier un fichier</p>
<p><code>cp monfichier madestination</code></p></li>
<li><p>Copier un dossier</p>
<p><code>cp -r mondossier ma destination</code></p></li>
<li><p>Déplacer un fichier ou un dossier</p>
<p><code>mv monfichieroudossier destination</code></p></li>
<li><p>Renommer un fichier ou un dossier</p>
<p>Généralement, on utilise également la commande <code>mv</code> pour renommer des fichiers et dossiers.</p>
<p>Attention cependant, lorsque vous renommez un fichier ou dossier dans un endroit différent de celui où vous vous trouvez actuelement en utilisant <code>mv</code>, il est important de respecter le chemin complet du fichier de départ ainsi que du fichier d’arrivée.</p>
<p><code>mv monfichier nouveaunomdufichier</code></p></li>
<li><p>Effacer un fichier</p>
<p><code>rm monfichier</code></p></li>
<li><p>Effacer un dossier</p>
<p><code>rm -rf mondossier</code></p></li>
<li><p>Créer un dossier</p>
<p><code>mkdir mondossier</code></p>
<p>Lorsque vous souhaitez créer une imbrication de dossiers en une seule commande, vous pouvez utiliser l’option <code>-p</code></p>
<p><code>mkdir mondossier/imbrique1/imbrique2</code></p></li>
<li><p>Créer un fichier</p>
<p><code>touch monfichier</code></p></li>
<li><p>Créer et écrire dans un fichier sur <code>~/Desktop</code></p>
<p><code>nano ~/Desktop</code></p></li>
</ul>
<h3 id="les-fichiers-et-les-internets"><a href="#TOC">Les fichiers et les internets</a></h3>
<h4 id="exercices-1"><a href="#TOC">Exercices</a></h4>
<p><strong>1</strong>. Quelle est la différence entre ~/Desktop, /home/TONUTILISATEUR/Desktop (/Users/TONUTILISATEURS/Desktop sur OSX) ?</p>
<p>Quand tu tapes / et que tu appuies deux fois sur la touche <code>Tab</code> que se passe t’il ? Qu’en conclus-tu ? Ca ne te rappelle rien ?</p>
<p>Jette à nouveau un coup d’oeil à la hiérarchie du système de fichiers unix, ça pourrait t’éclairer.</p>
<p><strong>2</strong>. Comment lire un fichier, c’est à dire, à l’aide de quelle commande qui ne soit ni nano/vi ou tout autre “éditeur de text” conventionel en afficher le contenu à l’écran?</p>
<p><strong>3</strong>. Comment afficher les dernières lignes d’un fichier?</p>
<p>Comment afficher les premières?</p>
<p>Quelle est l’option commune à ces deux commandes pour lui spécifier combien de lignes depuis le début/la fin on souhaite afficher à l’ecran?</p>
<p><strong>4</strong>. Quelle commande utiliser pour chercher des occurences (des expressions) dans un fichier?</p>
<p>Par exemple, si tu crée un fichier <code>jackson5</code> avec le contenu suivant dans ~/Desktop:</p>
<pre><code>ABC
Easy as...
123
As simple as...
Do re mi
ABC, 123, baby, you and me girl
ABC
Easy as...
123
As simple as...
Do re mi
ABC, 123, baby, you and me</code></pre>
<ul>
<li><p>Comment vérifier que celui-ci contient bien l’occurence 123?</p></li>
<li><p>Comment trouver tous les fichiers dans ~/Desktop qui contienent l’occurence “As simple as…”</p></li>
<li><p>Comment trouver tous les fichiers dans ~/Desktop qui matchent l’expression régulière(<a href="http://fr.wikipedia.org/wiki/Expression_rationnelle">quéquécé??</a>) <code>^ABC$</code>?</p></li>
</ul>
<p><strong>5</strong>. A l’aide de quelle commande peux-tu compter le nombre de lignes dans un fichier?</p>
<p>Combien y en a t’il dans le fichier que je t’ai fait créer precedement ?</p>
<p><strong>6</strong>. Quelle commande utiliser pour chercher des fichiers/dossiers sur le file system?</p>
<p>Comment trouver à l’aide de celle-ci tous les dossiers qui se nomment <code>MONUTILISATEUR</code> à l’interieur du dossier <code>/home</code> (<code>/Users</code> sur OSX)?</p>
<p>Comment trouver à l’aide de celle-ci tous les fichiers qui s’appellent MONUTILISATEUR sur le disque dur, c’est à dire, à partir de <code>/</code> ?</p>
<p>A cette fin, n’hésite pas à revoir l’agencement et la hierarchie du filesystem unix.</p>
<p><strong>7</strong>. Qu’est-ce qu’un lien sur un système Unix?</p>
<p>Quelle commande permet d’en faire un?</p>
<p>Quelle difference entre un lien symbolique et un lien “dur”(ou hardlink)?</p>
<p>Comment faire un lien symbolique du fichier précédemment crée dans le dossier <code>~/Desktop</code> afin de pouvoir y acceder depuis <code>~/</code>?</p>
<p><strong>8</strong>. Quelle est l’adresse ip <code>locale</code> de tous les ordinateurs? (<code>localhost</code>)</p>
<p>Quelle phrase célèbre sur les internets fait référence à cette ip universelle?</p>
<p>Comment trouver l’ip d’un domaine?</p>
<p>Par exemple:</p>
<p>Trouve l’ip de <code>oleiade.com</code>, celle de <code>twitter.com</code>… Comme toujours avec les systèmes Unix, il y à plusieurs methodes possibles.</p>
<p>Comment découvrir le temps que met un site à te répondre? Avec quelle commande?</p>
<p><strong>9</strong>. Trouve une commande (qui ne soit pas <code>curl</code>) qui te permette de télécharger un fichier depuis son Url.</p>
<p>Rappatrie dans <code>~/Desktop</code>, et affiche les 42 dernières lignes du fichier situé à l’url suivante: <code>http://wiki.freebase.com/images/e/eb/Steve-martin-quad-sample.txt</code></p>
<h4 id="défi-1"><a href="#TOC">Défi</a></h4>
<p>A l’aide de la commande <code>curl</code>, que tu auras probablement à installer sur ta machine, je voudrais que tu télécharges et écrive dans un fichier oleiade_com.html dans <code>~/</code> la page d’accueil de http://oleiade.com.</p>
<h4 id="background-1"><a href="#TOC">Background</a></h4>
<h6 id="hierarchie-du-systeme-de-fichier"><a href="#TOC">Hierarchie du systeme de fichier</a></h6>
<p>TODO</p>
<h6 id="le-home-directory"><a href="#TOC">Le Home directory</a></h6>
<p>TODO</p>
<h6 id="description-dun-fichier"><a href="#TOC">Description d’un fichier</a></h6>
<p>TODO</p>
<h6 id="les-expressions-regulieres"><a href="#TOC">Les expressions regulieres</a></h6>
<p>TODO</p>
<h6 id="ascii"><a href="#TOC">ASCII</a></h6>
<p>TODO (Et Les caracteres non affichables qui permettent de demarque un mot, une ligne, un tab etc… (space). )</p>
<h6 id="les-liens"><a href="#TOC">Les liens</a></h6>
<p>TODO</p>
<h6 id="ladresse-ip"><a href="#TOC">L’adresse IP</a></h6>
<p>TODO</p>
<h6 id="url-uri"><a href="#TOC">Url / Uri</a></h6>
<p>TODO</p>
<h4 id="cheat-codes-1"><a href="#TOC">Cheat codes</a></h4>
<h6 id="différence-entre-la-notation-et-homemonutilisateur"><a href="#TOC">Différence entre la notation <code>~/</code> et /home/MONUTILISATEUR</a></h6>
<p>C’est bien simple il n’y a virtuelement aucune différence entre la notation <code>~/</code> et <code>/home/MONUTILISATEUR</code>.</p>
<p>En effet, le shell remplace automatiquement le symbole <code>~</code> par le chemin vers le <code>HOME</code> directory de l’utilisateur courant.</p>
<h6 id="lire-un-ficher"><a href="#TOC">Lire un ficher</a></h6>
<p>Généralement la commande utilisée est <code>cat</code></p>
<h6 id="afficher-les-dernières-lignes-dun-fichier"><a href="#TOC">Afficher les dernières lignes d’un fichier</a></h6>
<p><code>tail monfichier</code></p>
<p>A noter que l’on peut explicitement déterminer combien de lignes nous souhaitons que tail affiche en partant de la fin à l’aide de l’option <code>-n</code>.</p>
<p><code>tail -n 200 monfichier</code> affichera ainsi les 200 dernières lignes du fichier.</p>
<h6 id="afficher-les-premières-lignes-dun-fichier"><a href="#TOC">Afficher les premières lignes d’un fichier</a></h6>
<p><code>head monfichier</code></p>
<p>La commande <code>head</code> partage avec <code>tail</code> les mêmes options et a un usage tout à fait similaire.</p>
<h6 id="rechercher-des-occurences-dans-un-fichier"><a href="#TOC">Rechercher des occurences dans un fichier</a></h6>
<p>La commande <code>grep</code> permet de chercher des occurences dans des fichiers et respecte l’usage suivant:</p>
<p><code>grep occurence mesfichiers</code></p>
<p>Donc, pour chercher les occurences de “123” dans les fichiers du dossiers <code>~/Desktop</code>, celle-ci peut-être utilisée de la façon suivante:</p>
<p><code>grep "123" ~/Desktop/jackson5</code></p>
<p>Sachant que l’option <code>-r</code> comme vous l’aurez probablement déjà deviné indique à grep de chercher l’occurence récursivement dans les fichiers situés dans <code>~/Desktop</code> on peut rechercher l’occurence “As simple as…” dans ceux-ci comme ceci:</p>
<p><code>grep -r "As simple as..." ~/Desktop</code></p>
<p>Enfin, pour trouver tous les fichiers dans <code>~/Desktop</code> qui continent une occurence matchant avec l’expression regulière “^ABC$”, il faut utiliser l’option <code>-G</code> de <code>grep</code>:</p>
<p><code>grep -rG "^ABC$" ~/Desktop</code></p>
<h6 id="compter-le-nombre-de-lignes-dans-un-fichier"><a href="#TOC">Compter le nombre de lignes dans un fichier</a></h6>
<p><code>wc -l monfichier</code></p>
<h6 id="chercher-des-fichiers-sur-le-file-system"><a href="#TOC">Chercher des fichiers sur le file-system</a></h6>
<p><code>find pointdedepart -name nomdefichier</code></p>
<p>Ainsi pour chercher tous les fichiers s’appellant <code>MONUTILISATEUR</code> dans <code>/home</code> (ou <code>/Users</code> sur OSX) on utilisera <code>find</code> comme suit:</p>
<p><code>find /home -name "MONUTILISATEUR"</code></p>
<h6 id="faire-des-liens-sur-un-système-unix"><a href="#TOC">Faire des liens sur un système unix</a></h6>
<p>La commande qui permet de faire des liens est : <code>ln</code></p>
<p>Aussi, <code>ln -s fichieralier fichierlie</code> permet de faire des liens symboliques. Donc, <code>ln -s ~/Desktop/jackson5 ~/</code> créera un lien symbolique <code>jackson5</code> dans ~/ Qui pointera vers le fichier <code>~/Desktop/jackson5</code></p>
<h6 id="ladresse-ip-locale-universelle"><a href="#TOC">L’adresse ip locale universelle</a></h6>
<p>Universelement, l’adresse ip locale de tous les ordinateurs est <code>127.0.0.1</code> ainsi, toute communication avec cette adresse ip vous adressera toujours… à votre propre ordinateur.</p>
<p>La célèbre référence à découvrir était: “There no such place like 127.0.0.1” (Que l’on peut traduire comme suit: “Rien ne vaut 127.0.0.1”)</p>
<h6 id="trouver-ladresse-ip-dun-domaine"><a href="#TOC">Trouver l’adresse ip d’un domaine</a></h6>
<p>La commande <code>ping</code> n’est pas initialement prévue à cette fin, cependant elle s’avère très pratique dès lors qu’il s’agit de trouver l’adresse ip d’un domaine.</p>
<p>Ainsi <code>ping oleiade.com</code> ou <code>ping twitter.com</code> devrait vous révéler l’ip de la machine qui vous “sert” les sites <code>oleiade.com</code> et <code>twitter.com</code>.</p>
<h6 id="télécharger-des-fichiers"><a href="#TOC">Télécharger des fichiers</a></h6>
<p><code>wget url</code></p>
<p>Donc, pour télécharger le fichier mentioné dans la question et afficher les 42 dernieres lignes de son contenu:</p>
<p><code>wget http://wiki.freebase.com/images/e/eb/Steve-martin-quad-sample.txt -o ~/Desktop/Steve-martin-quad-sample.txt</code></p>
<p>puis</p>
<p><code>tail -n 42 ~/Desktop/Steve-martin-quad-sample.txt</code></p>
<h3 id="le-root-et-lanonymous"><a href="#TOC">Le root et l’anonymous</a></h3>
<h4 id="exercices-2"><a href="#TOC">Exercices</a></h4>
<h5 id="un-peu-plus-sur-le-shell"><a href="#TOC">Un peu plus sur le shell</a></h5>
<p>Jusqu’ici on s’est contente d’operations assez basiques dans l’ensemble: demander au systeme d’effectuer une, et une seule action a la fois.</p>
<p>Cependant le shell sait faire beaucoup plus que ca, et met a disposition ce qu’on appelle des operateurs qui permette par exemple d’exprimer le <code>AND</code>(fais ceci, et, cela), le <code>OR</code> (fais ceci, ou, si ca ne marche pas, fais cela), le <code>PIPE</code>, les superior, inferior.</p>
<p>Leur apprentissage peut etre fastidieux, moi-meme je n’en utilise quotidienement qu’un lot tres restreint. Parcours les internets pour en apprendre un peu plus et c’est parti:</p>
<p><strong>1</strong>. Quel est l’operateur qui permet de chainer des commandes? C’est a dire de les executer a la suite les unes des autres?</p>
<p><strong>2</strong>. Tu te rappelles le symbole <code>~</code> ? Lorsque tu l’utilise au sein des arguments d’une commande, le shell comprend qu’il doit le remplacer par le dossier principal de ton utiliser (<code>/Users/MONUTILISATEUR</code> sur ton mac). Il y a un autre symbole qu’il interprete comme : remplacer ce symbole par le dernier repertoire dans lequel je me situais avant celui-la, quel est-t’il ?</p>
<p>Il y en a encore un autre qu’il interprete comme : remplacer ce symbole par la liste de tous les elements de ce dossier, lequel est-il?</p>
<p><strong>3</strong>. Trouve le moyen en une seule commande de : te deplacer dans le dossier <code>/Users/MONUTILISATEUR/Downloads</code>, en afficher le contenu, puis te deplacer dans le dossier <code>/etc</code>, afficher les 42 dernieres lignes du fichier passwd qui s’y trouve, enfin de retourner dans le dossier <code>/Users/MONUTILISATEUR/Downloads</code>.</p>
<p>Attention, ici j’attend que tu utilises ce que tu as appris a point 1. et 2.</p>
<p><strong>4</strong>. (<em>optionel parce qu’un peu complexe</em>) Il y a un operateur qu’on appelle de redirection (superieur ou inferieur) qui permet, comme son nom l’indique de rediriger la sortie d’une commande dans une autre.</p>
<p>A l’aide de echo, sauras-tu inserer “Hello World” dans un fichier <code>mypleasure.txt</code> a l’aide de l’operateur superieur?</p>
<p><strong>Nota</strong>: Je ne l’avais pas mentione jusqu’ici, mais un programme sur unix, a ce qu’on appelle une entree (les fichiers que tu lui demande de traiter, d’utiliser, (c’est le cas de <code>ls</code>), le texte que tu lui demande de manipuler (c’est le cas de cat, ou de grep quand tu lui demande de trouver une occurence), et une sortie: le resultat.</p>
<p>Il est important de garder a l’esprit que toutes ces entrees, et sorties sont dites “normalisees”, ces normes sont generalement definies par ce qu’on appelle la norme POSIX (C’est pour la culture generale).</p>
<p>Donc tu peux parfaitement, envoyer la sortie d’un programme, en tant qu’entree d’un autre. C’est trop abstrait?</p>
<p><em>Un exemple</em>:</p>
<p>Je peux trouver tous les fichiers qui contienent “test” dans le dossier <code>/Users/MONUTILISATEUR</code> en envoyant le resultat de la commande ls dans l’entree de grep, c’est l’operateur <code>pipe</code>:</p>
<pre><code>ls /Users/MONUTILISATEUR | grep</code></pre>
<p><strong>5</strong>. Trouve une commande qui permette de lister tous les processus en cours sur ton ordinateur, et recherche-y firefox :)</p>
<h5 id="le-droit-de-rien-lenvie-de-tout."><a href="#TOC">Le droit de rien, l’envie de tout.</a></h5>
<p><strong>6</strong>. Qu’est-ce qu’un groupe sur un systeme unix? qu’est-ce qu’un administrateur? quel est son nom? Comment executer une commande en tant qu’administrateur?</p>
<p><strong>7</strong>. A l’aide de quelles options de la commande ls peut-lister en version longue l’integralite de tous les fichiers d’un dossier (tu peux au passage utiliser l’un des symboles decouverts plus haut) ?</p>
<p>A quelle information correspond chacun des elements de la ligne?</p>
<p>Si tu utilises cette methode sur ton dossier HOME (<code>/Users/MONUTILISATEUR</code> ou <code>~/</code>), et que tu compares le resultat avec ce que t’affiches le finder dans ce meme dossier, que constate-tu? Qu’est-ce qui en est la cause?</p>
<p><strong>8</strong>. Puisque dorenavant, tu sais quel element dans ce listing represente les droits afherents a ces fichiers, a quoi correspondent chacun des dix membres de cet elements? (d f ou l, puis r, w, ou x repetes).</p>
<p><strong>9</strong>. Comment change t’on les droits d’un fichier? <strong>10</strong>. Comment change t’on les droits d’un dossier? <strong>11</strong>. Comment change t’on son possesseur? (owner)</p>
<p><strong>12</strong>. Creer un fichier <code>/Users/MONUTILISATEUR/test</code> et change ses droits afin que l’utilisateur ai le droit d’y ecrire, de le lire, de l’executer, son groupe ai les memes droits, et qu’un utilisateur lambda n’ai le droit que de le lire. * Change le owner de ce fichier afin que ce soit root * Change le groupe de ce fichier afin que ce soit root egalement * Est-ce que sans utiliser la commande qui permet d’etre administrateur tu parviens a y ecrire dorenavant? pourquoi?</p>
<h4 id="defi"><a href="#TOC">Defi</a></h4>
<p>En preambule de la suite, je voudrais que tu apprenes a utiliser la commande ssh et la commande scp.</p>
<p>Documente toi un peu sur ce que c’est que le protocole ssh (scp en est une extension, est-ce que tu peux deviner juste a l’aide de son nom a quoi elle sert).</p>
<p>Le but du jeu sera dans un premier temps de parvenir a te connecter au serveur ssh hackerway.oleiade.com, a l’aide de l’identifiant : hackerway et du mot de passe : asimov, via le port 4242 (tiens, tiens, c’est quoi un port unix?</p>
<p>Et tiens, au fait, c’est quoi tcp, aussi appelle tcp/ip, c’est quoi la difference avec udp? ) et d’y creer un fichier victoire.diditbitch dans lequel tu me mettras un super message d’amour.</p>
<p>Puis de te deconnecter, et de telecharger ce fichier sur ton ordinateur a l’aide de la commande scp.</p>
<p>Enfin, si tu y arrives, tu m’enverras son contenu par mail en chainant la commande cat sur ce fichier, et la command mail (qui permet, comme son nom l’indique d’envoyer des mails, elle est peu abrupte dans un premier temps, hesite pas a googler pour trouver comment l’utiliser)</p>
<h4 id="background-2"><a href="#TOC">Background</a></h4>
<p>TODO</p>
<h3 id="rollback"><a href="#TOC">Rollback</a></h3>
<h5 id="et-si-on-se-revoyait"><a href="#TOC">Et si on se revoyait?</a></h5>
<p><strong>1</strong>. Comment creer le dossier <code>/Users/morgane/Downdloas/I/Love/You</code> en une seul commande</p>
<p><strong>2</strong>. Meme si tu n’as pas internet sur ta machine, connecte toi en ssh a l’ip <code>127.0.0.1</code> avec l’utilisateur morgane et le meme mot de passe que ton mac? Est-ce que cela marche? A ton avis, pourquoi?</p>
<p>Qu’est-ce que tu en deduis de ce que represente l’ip 127.0.0.1? qu’est-ce que tu en deduis a propos de ssh?</p>
<p><strong>3</strong>. Cree le dossier <code>~/ThisIsATest</code> et cree y un fichier abc contenant “easy as” , ainsi qu’un autre fichier 123 contenant “or simple as” a l’aide d’une seule commande. Puis copie le dossier <code>~/ThisIsATest</code> dans <code>~/Downloads</code> a l’aide de la commande scp.</p>
<p><strong>4</strong>. Cree un lien symbolique pointant sur le fichier <code>~/ThisIsATest/abc</code> dans <code>~/Desktop</code>. Ecris dans celui-ci “one, two, three, baby, you and me!” sans utiliser d’editeur.</p>
<p>Si tu te sers d’une commande que tu as deja rencontre pour afficher le contenu du lien symbolique representant le fichier <code>~/Desktop/abc</code>, que constates-tu?</p>
<p>Si maintenant tu utilises l’operateur <code>>></code> pour ecrire “Come on, let me love you just a little bit!” a la fin du fichier represente par le lien symbolique <code>~/Desktop/abc</code>, qu’est ce qui arrive au fichier <code>~/ThisIsATest/abc</code>? pourquoi?</p>
<p><strong>5</strong>. <code>cut</code> : cette commande permet de decouper des morceaux de lignes a l’aide d’un delimiteur. A l’aide cette commande, affiche les colonnes 1 et 5 du fichier <code>/etc/passwd</code>. Ce fichier contient des informations sur tous les utilisateurs de ton ordinateur.</p>
<p>Pour info, avoir plusieurs utilisateurs permet de limiter les degats en cas d’attaque/virus/fin du monde, et c’est ce qui explique que Windows est une passoire, et aue ton serveur soit sous Linux (mummmm).</p>
<p><strong>6</strong>. Affiche le contenu du fichier <code>/etc/passwd</code>. Puis compte le nombre de lignes de ce fichier. Maintenant, obtiens le meme resultat en utilisant l’operateur <code>|</code> (pipe). Est-ce que son fonctionnement te semble plus clair ? Continue de jouer avec <code>|</code> : refais le #5 en utilisant <code>|</code>, plutot que de passer le fichier directement en argument.</p>
<h5 id="le-shell-et-lenvironnement."><a href="#TOC">le shell et l’environnement.</a></h5>
<p>Il y a bien longtemps, quand les ordianteurs prenaient plus de place que ton appartement, on s’y connectait a distance a partir de “terminaux”, des ecrans munis d’un clavier, et le programme charge d’interpreter tes commandes et de les transmettre a l’ordinateur s’appelait un shell.</p>
<p>Aujourd’hui, tu as les trois dans le meme objet : ordinateur, ecran et logiciel pour transmettre tes commandes. Citons le poete : le shell est bien un coquillage, mais tu entends les “bruits” de l’ordinateur, et en plus tu peux lui parler.</p>
<p>A chaque fois que tu lances un shell, ou interpreteur de commande, il charge un “environnment”, qui lui permet d’avoir un certain nombre d’ informations sur ton systeme et tes preferences.</p>
<p>Par exemple, ou sont enregistres les programmes sur ton ordinateur. Le shell te procure un certain nombre d’utilitaires integres pour te faciliter la vie, comme les <code>|</code>, les <code>>></code> et <code><<</code>, etc…</p>
<p><strong>7</strong>. tape la commande <code>env</code></p>
<p><strong>8</strong>. Dans tout le fratras qui s’affiche, quelle ligne contient :</p>
<ul>
<li>ton nom d’utilisateur</li>
<li>le chemin vers les programmes (aussi appele binaires)</li>
<li>le chemin vers ton dossier utilisateur</li>
<li>pour rigoler, es-tu capable de faire ces commandes avec des | et cut ?</li>
</ul>
<p><strong>9</strong>. Lis a la fin de ce fichier le man de la commande <code>export</code></p>
<p>Cree une variable biteenbois avec pour valeur popeye.</p>
<p>Pour verifier que tout s’est bien passee, cherche la dans l’environmment avec grep en une seule commande.</p>
<p><strong>10</strong>. En toute logique, la commande pour supprimer une ligne de l’ environnement est <code>unset</code>.</p>
<p>Supprime donc la variable que tu viens de creer.</p>
<p><strong>11</strong>. Recree une nouvelle variable capitaine ave comme value hadock</p>
<p>Ouvre un nouveau terminal et cherche cette valeur dans l’env (pas a la main, fais faire le boulot)</p>
<p>Ouvre un troisieme terminal, et cherche la egalement. Qu’en conclus-tu ?</p>
<p><strong>12</strong>. L’important c’est le chemin…</p>
<p>Supprime la variable PATH et essaye de lancer quelques commandes selon ton bon plaisir. Rigolo non ?</p>
<p>Qu’en conclus tu ? Est-il possible de retablir la variable path ?</p>
<p><em>Man export</em></p>
<pre><code>Set an environment variable. Mark each name to be passed to child processes in the environment.
Syntax
export [-fn] [-p] [name[=value]]
Options
-f The names refer to shell functions;
otherwise the names refer to shell variables
-n No longer mark each name for export.
-p Display output in a form that may be reused as input.
If no names are supplied, or if the `-p' option is given, a list of exported names is displayed.
The return status is zero unless an invalid option is supplied, one of the names is not a valid shell</code></pre>
<h4 id="background-3"><a href="#TOC">Background</a></h4>
<p>TODO</p>
<h3 id="shell-scripting"><a href="#TOC">Shell scripting</a></h3>
<h4 id="exercices-3"><a href="#TOC">Exercices</a></h4>
<p><strong>Avant toutes choses, un peu de theorie.</strong></p>
<p>Jusqu’ici, tu t’es contente de papoter avec ton syteme au travers du shell. De lui donner quelques ordres, en les chainant parfois.</p>
<p>C’est très pratique, mais parfois, tu pourrais avoir besoin d’automatiser un peu tout ca. Heuresement, les papas d’Unix ont pense a tout.</p>
<p>C’est ce qu’on appelle le shell scripting, et ça consiste a écrire dans un fichier une série d’instruction. Lorsque tu demanderas au shell d’exécuter ce “script” il effectuera cette série d’instruction les unes a la suite des autres; tu me concéderas que c’est quand meme beaucoup plus pratique que de les retaper une a une a chaque fois.</p>
<p>Le shell script a la réputation d’avoir une syntaxe un peu abrupte pour les débutants, mais c’est aussi une bonne manière d’appréhender pourquoi des langages comme le Python que nous verrons plus tard existent.</p>
<p>Il n’est cependant pas insurmontable, et reste toujours très pragmatique, je t’ai donc trouve une documentation utile qui pourrait t’aider dans ta quête du jour: <code>http://www.freeos.com/guides/lsst/ch02sec01.html</code></p>
<p><strong>Nota</strong></p>
<p>On peut considerer le shell comme un telephone avec une ligne direct avec ton système d’exploitation, et plus précisément avec un élément clé de celui qu’on appelle le kernel (plus communément baptise le noyau); c’est lui qui traduit et gère les instructions que tu lui donnes pour les faire exécuter par la machine.</p>
<p>On peut donc considérer que d’une certaine manière, interagir avec le système d’exploitation unix via le shell serait comme donne des instructions a qui on aurait bande les yeux.</p>
<p><strong>1</strong>. Creer un fichier hello.sh dans ~/Desktop, qui affiche a l’écran “Hello world /”, il y a quelques prerequis: s’assurer que le fichier soit exécutable, utiliser un shellbang, et trouver comment l’exécuter, le tutoriel sur le shell script que je t’ai fournis plus haut devrait aider.</p>
<p><strong>2</strong>. Modifie le script hello.sh, et cree une variable NAME au sein de laquel tu mettras comme valeur le nom que tu veux, et fait en sorte que le script affiche a l’écran “Hello VALEURDELAVARIABLENAME /”</p>
<p><strong>3</strong>. Exploitons un peu les variables d’environnement. Les shell script sont comme leur nom l’indique exécute par ton shell, donc elle partage l’environnement de celui-ci (voir les journées précédentes).</p>
<p>Cree donc une variable d’environnement HELLONAME dont tu setters la valeur selon tes souhaits, et fait en sorte que ton script affiche dorénavant a l’écran “Glad to me meet you VALEURDELAVARIABLE_HELLONAME”</p>
<p><strong>4</strong>. Creer un nouveau fichier de script fate.sh, ainsi qu’une variable DESTINY dans l’environement dont la valeur serait 1.</p>
<p>Au sein de ce script, a l’aide des expressions conditionelles, tu afficheras “Youpi tralala” si la valeur de la variable d’environement DESTINY cree plus tot est 1, “Too bad” si c’est une valeur differente.</p>
<p>Fait les tests en changeant la valeur de DESTINY dans ton environement avant de lancer le script.</p>
<p><strong>5</strong>. A l’aide d’une boucle (indice : for (beaucoup d’exemples sur les internets)), cree dix fichier test_n avec n de 1 a 10 et dans chacun d’entre eux, insere “I’m VALEURDEN” :) dans un dossier suffix_test dans /tmp (la notion de droit peut entrer en ligne de compte)</p>
<p><strong>6</strong>. A l’aide d’une boucle et d’expressions conditionelles, affiche les contenu de tous les fichiers precedement cree dont le suffixe n est pair. Puis dont le suffixe n est impair.</p>
<h4 id="defi-1"><a href="#TOC">Defi:</a></h4>
<p>Je voudrais que tu ecrives un premier script shell quicree un dossier “medias” dans ~/Downloads, et qui cree 10 fichiers suffixes (n, comme dans les precedents exercices) avec comme extensions .avi, 10 autres suffixes avec l’extension .jpg, et encore 10 autres suffixes avec l’extension .mp3.</p>
<p>Et qu’ensuite tu ecrives un second script qui cree au sein du dossier “medias” precedemment cree trois autres sous-dossiers : films, photos, musique. Et que celui-ci deplace tous les fichiers dans medias avec l’extension avi dans films, tous ceux avec l’extension jpg dans photos, et tous ceux avec l’extension mp3 dans musique.</p>
<p>Voila voila, si tu trouves ca plus dur, c’est tout a fait normal. Mais comme toujours la cle de tout ca, c’est la pratique, la perseverance, et l’espoir de decouvrir un langage plus simple, plus joli et plus puissant… Un jour il sera tiens, ohhhh oui un jour il sera tiens!</p>
<h4 id="background-4"><a href="#TOC">Background</a></h4>
<p>TODO</p>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-26598640-4']);
_gaq.push(['_setDomainName', 'github.com']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</body>
</html>