Update Prog-Internet course
[hacks/simpleWebSlides.git] / prog_internet / prog_internet_01.xhtml
1 <?xml version="1.0" encoding="utf-8" ?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3           "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
4 >
5 <html xmlns="http://www.w3.org/1999/xhtml" >
6   <head>
7     <title>Systèmes d'exploitation (1/2)</title>
8
9     <meta http-equiv="Content-Type"
10           content="text/html; charset=utf-8" />
11     <meta name="copyright"
12           content="Copyright &#169; 2013 Kim Nguyễn" />
13
14     <!-- Load jQuery -->
15     <script src="../jquery-1.9.1.min.js" type="text/javascript" ></script>
16     <!-- Load the library -->
17     <script src="../simpleWebSlides.js" type="text/javascript" ></script>
18
19     <link rel="stylesheet" href="../simpleWebSlides.css" type="text/css"  media="all" />
20     <!-- Load a custom Theme, the class-element marks this style-sheet
21       a "theme" that can be swtiched dynamicaly -->
22     <link class="sws-theme" rel="stylesheet"  title="U-Psud style"  href="../themes/uPsud.css" type="text/css" />
23
24     <!-- Customize some templates and initialize -->
25
26     <script type="text/javascript">
27       SWS.Config['sws-slide-change'] = SWS.Effects.slideChangeFadeOutIn;
28       SWS.Config['sws-object-deactivate'] =  SWS.Effects.objectDeactivateFadeOut;
29       SWS.Config['sws-object-activate'] = SWS.Effects.objectActivateFadeIn;
30
31       //Ensures that we load SWS at the very end, after MathJax has
32       //been initialized
33
34       $(window).load(SWS.Presentation.init);
35     </script>
36
37   </head>
38   <body>
39
40     <div class="sws-slide sws-cover sws-option-nofooter">
41       <h1>Programmation Internet</h1>
42       <h1>Cours 1</h1>
43       <a href="mailto:kn@lri.fr">kn@lri.fr</a>
44     </div>
45
46     <div class="sws-slide" >
47       <h1>Contenu du cours</h1>
48       <ol >
49         <li > Comprendre les bases du Web
50           <ul>
51             <li>Fonctionnement des ordinateusr Unix (cours 1 et 2) </li>
52             <li>Notions de réseau (cours 3 et 4) </li>
53           </ul>
54         </li>
55         <li class="sws-pause" style="padding:20pt 0;" > Programmer (pour) le Web
56         <ul>
57           <li>Pages statiques (HTML &amp; CSS cours 5)</li>
58           <li>Pages dynamiques avec PHP (cours 6, 7 et 8)</li>
59           <li>Notions de sécurité des sites Web (cours 9)</li>
60           <li>Bonus (cours 10)</li>
61         </ul>
62         </li>
63         <p>Cours disponible en ligne
64         sur <a href="https://www.lri.fr/~kn/teaching_fr.html">https://www.lri.fr/~kn/teaching_fr.html</a>. Les
65         supports de cours seront distribués à partir de la semaine prochaine.</p>
66       </ol>
67
68     </div>
69     <div class="sws-slide" >
70       <h1>Modalités de Contrôle des Connaissances (MCC)</h1>
71       <p>2 sessions:</p>
72       <ul >
73         <li > 1<sup>ère</sup> session
74           <ul>
75             <li> Contrôle continu (50%):
76             <ul>
77               <li> Partiel (fin octobre/début novembre) 25% </li>
78               <li> 1 interro(s) de TP (25 %) </li>
79             </ul>
80             </li>
81             <li> Examen (50%) </li>
82           </ul>
83         </li>
84         <li class="sws-pause" >
85           2<sup>ème</sup> session (examen 100%)</li>
86       </ul>
87       <p class="sws-pause" ><b>Rappel:</b>
88         <i>La défaillance fait obstacle au calcul de la moyenne
89           et implique l'ajournement.
90           La présence de l'étudiant étant obligatoire en TP [...], plus
91           d'une absence injustiée dans un enseignement peut entraîner
92           la défaillance de l'étudiant dans l'enseignement concerné
93         </i>
94       </p>
95     </div>
96
97     <div class="sws-slide" >
98       <h1>Organisation</h1>
99       <ul>
100         <li> 10 semaines de cours :
101           <ul>
102             <li> 8/9, 16/9, 23/9, 30/9, 7/9, 14/9 </li>
103             <li> partiel/toussaint </li>
104             <li>  4/11, <em>(pas de cours le 11/11)</em>, 18/11, 25/11, 2/12</li>
105           </ul>
106         </li>
107         <li> 10 semaines de TP :
108           <ul><li>18/9, 25/9, 2/10, 9/10, 16/10</li>
109             <li> partiel/toussaint</li>
110             <li>6/11, 13/11, 20/11, 27/11, 4/12</li>
111           </ul>
112         </li>
113         <li> examen début Janvier</li>
114         <li> cours tous les mardi (13h30) </li>
115         <li> TP le jeudi (9h) </li>
116       </ul>
117     </div>
118     <div class="sws-slide" >
119       <h1> Plan </h1>
120       <ol >
121         <li> Systèmes d'exploitation
122           <ul class="empty">
123             <li class="hl">1.1 Principes des systèmes
124             d'exploitation</li>
125             <li>1.2 Système de gestion de fichiers</li>
126             <li>1.3 Système de gestion de processus</li>
127             </ul>
128         </li>
129       </ol>
130     </div>
131
132     <div class="sws-slide">
133       <h1> Système d'exploitation </h1>
134       <p>Quelques systèmes:</p>
135       <ul>
136         <li>Windows XP/NT/2003/7/8, …</li>
137         <li>Linux, FreeBSD, NetBSD, OpenBSD, …</li>
138         <li>MacOS X (basé sur une variante de FreeBSD), …</li>
139         <li>Unix, AIX, Solaris, HP-UX, …</li>
140         <li>Symbian OS (Nokia), iOS, Android, …</li>
141       </ul>
142     </div>
143
144     <div class="sws-slide">
145       <h1> Système d'exploitation </h1>
146       <p>Qu'est-ce qu'un système d'exploitation ?</p>
147       <ul>
148         <li class="sws-pause" >c'est un <em>programme</em></li>
149         <li class="sws-pause" > qui <em>organise</em> l'accès aux <em>ressources</em> de la machine</li>
150       </ul>
151       <p class="sws-pause"> Quelles sont les ressources d'une machine?</p>
152       <ul>
153         <li>Processeur (temps d'exécution)</li>
154         <li>Mémoire</li>
155         <li>Accès aux périphériques de stockage</li>
156         <li>Accès aux périphériques d'entrées/sorties</li>
157         <li>…</li>
158       </ul>
159     </div>
160     <div class="sws-slide">
161       <h1> Système d'exploitation </h1>
162       <br/>
163       <div style="display:inline-block;vertical-align:middle;width:19%;text-align:center;">
164         Haut niveau<br/>
165       <span style="font-size:6cm;">↓</span><br/>
166       Bas niveau
167       </div>
168       <div style="display:inline-block; width:80%;vertical-align:middle;">
169         <ul class="empty">
170           <li><em>Applications</em>: navigateur Web, éditeur de
171           texte, anti-virus, jeu, compilateur, …</li>
172           <li style="margin-top:2em;" ><em><b>Système d'exploitation</b></em>:
173             <ul>
174               <li>Gestion des ressources</li>
175               <li>Interface avec le matériel (pilotes)</li>
176             </ul>
177           </li>
178           <li style="margin-top:2em;"><em>Matériel</em>: CPU, mémoire, périphériques, …</li>
179         </ul>
180       </div>
181     </div>
182     <div class="sws-slide centerbox">
183       <h1>Le système Unix</h1>
184       <table class="desc">
185         <tr><td>1965</td> <td>MultICS: <i>Multiplexed Information and Computing Service</i> (Bell &amp; MIT) </td>
186         </tr>
187         <tr><td>1969</td> <td>Unix: 1<sup>ère</sup> version en
188         assembleur (AT&amp;T)</td>
189         </tr>
190         <tr><td style="width:4em;">1972-73</td><td> Unix réécrit en C</td></tr>
191         <tr><td>1976</td><td> Invention de TCP/IP</td></tr>
192         <tr><td>1977</td><td> <i>Berkeley Software Distribution</i>
193         (BSD)</td></tr>
194         <tr><td>1985</td><td>Unix System V</td></tr>
195         <tr><td>1988</td><td>Minix</td></tr>
196         <tr><td>1992</td><td>Linux</td></tr>
197       </table>
198     </div>
199     <div class="sws-slide">
200       <div class="centerbox">
201       <h1>Unix : architecture</h1>
202       <table style="position:relative;left:5%;width:90%;" class="rounded">
203         <tr><td colspan="2" style="background:#ddf;width:100%;">
204             Applications
205             </td>
206         </tr>
207         <tr><td style="width:50%;background:#bbf;">
208             Interface utilisateur
209           </td>
210           <td style="width:50%;background:#bbf;">
211             Services
212           </td>
213         </tr>
214         <tr><td colspan="2" style="width:100%;background:#99f;color:white;">
215             Noyau (<i>kernel</i>)
216             </td>
217         </tr>
218         <tr><td style="border-style:none;"/> <td style="background:#88f;color:white;">
219             Micro-code
220           </td>
221         </tr>
222         <tr><td colspan="2" style="width:100%;background:#77f;color:white;">
223             Matériel
224             </td>
225         </tr>
226       </table>
227       </div>
228     </div>
229     <div class="sws-slide">
230       <h1>Zoom sur le noyau</h1>
231       <table style="position:relative;left:5%;width:90%;" class="rounded">
232         <tr> <td style="background:#ddf;width:20%;">
233             Applications
234             </td>
235         </tr>
236         <tr><td style="width:20%; border-style:none;" />
237           <td style="width:80%;background:#ddf;">
238             Bibliothèques
239             (<tt>libc</tt>, <tt>DirectX</tt>, <tt>OpenGL</tt>, …)
240           </td>
241         </tr>
242       </table>
243       <hr style="border-bottom: dashed 1pt #696968; width: 90%;border-top:none;" />
244       <table  style="position:relative;left:5%;width:90%;"
245               class="rounded sws-pause">
246         <tr><td  style="width:100%;background:#f99;color:white;">
247             Appels systèmes
248             </td>
249         </tr>
250         <tr> <td style="background:#f66;color:white;">
251             Noyau <br/>
252             <div style="font-size:smaller">
253             pilotes de périphériques <span style="display:inline-block;width:4em"> </span>
254             ordonnanceur (gestion du temps CPU)<br/>
255             gestionnaire de mémoire <span style="display:inline-block;width:4em"> </span>
256             système de fichier<br/>
257             </div>
258           </td>
259         </tr>
260         <tr><td  style="width:100%;background:#f33;color:white;">
261             Matériel
262             </td>
263         </tr>
264       </table>
265     </div>
266     <div class="sws-slide">
267       <h1>Le <i>Shell</i> Unix</h1>
268       <ul>
269         <li>Interface utilisateur <em>en mode texte</em><br/>
270         L'utilisateur écrit des commandes dont le résultat est
271           affiché à l'écran</li>
272         <li>Interface « historique » sous Unix</li>
273         <li>Expose à l'utilisateur certains concepts Unix
274         (permissions, propriétaires, processus, …)</li>
275         <li>Ces concepts sont importants pour pouvoir concevoir de
276         sites Web</li>
277       </ul>
278     </div>
279     <div class="sws-slide">
280       <h1>Le <i>Shell</i> Unix</h1>
281       <p>Exemple de session <i>shell</i>:</p>
282       <div>
283         <code>
284           $ ls
285           <span style="color:blue">Documents   Downloads   Public    Person</span>
286           $ cd Documents
287           $ ls
288           <span style="color:blue">compte_rendu.txt</span>
289           $ mv compte_rendu.txt cr.txt
290           $ ls
291           <span style="color:blue">cr.txt</span>
292         </code>
293       </div>
294     </div>
295
296     <div class="sws-slide" >
297       <h1> Plan </h1>
298       <ol >
299         <li> Systèmes d'exploitation
300           <ul class="empty">
301             <li >1.1 Principes des systèmes
302             d'exploitation</li>
303             <li class="hl">1.2 Système de gestion de fichiers</li>
304             <li>1.3 Système de gestion de processus</li>
305             </ul>
306         </li>
307       </ol>
308     </div>
309     <div class="sws-slide">
310       <h1>Système de gestion de fichiers (<i>filesystem</i>)</h1>
311       <ul>
312         <li> <em>Organise</em> les données sur le support
313         physique </li>
314         <li>Protège contre les <em>corruptions de données</em> </li>
315         <li>Gestion optimale de l'espace disponible</li>
316         <li><em>Accès efficace</em> aux données</li>
317         <li><em>Abstraction</em> du support physique (DVD, mémoire
318         flash, disque réseau, …)</li>
319         <li>Enregistrement des <em>méta-données</em> (date de
320         création, propriétaire, taille, …)</li>
321       </ul>
322     </div>
323     <div class="sws-slide">
324       <h1>Le concept de <em>fichier</em></h1>
325       <p>
326         Un fichier est une <em>collection d'infromations
327         numériques</em> réunies sous un même <em>nom</em> et
328         enregistrée sur un support de stockage
329       </p>
330       <ul>
331         <li>Manipulable comme une unité</li>
332         <li>Selon les systèmes, le <em>nom</em> a plus ou moins
333         d'importance</li>
334         <li>possède un type</li>
335       </ul>
336     </div>
337     <div class="sws-slide">
338       <h1>Le concept de <em>fichier</em></h1>
339       <p>Ne pas confondre:</p>
340       <ul>
341         <li>type du fichier: il influe sur le comportement du système
342         (fichier « normal », répertoire, lien (raccourcis), fichier
343         système, …). C'est une méta-donnée conservée par le système
344         de fichier</li>
345         <li>type du contenu: le type des <em>données</em> contenues
346         dans le fichier:
347           <ul>
348             <li>DOS puis Windows: l'extension (les 3 derniers
349             caractères après le « . ») détermine le type de contenu
350             </li>
351             <li>MacOS puis OS X/iOS: les premiers octets du fichier
352             déterminent son type
353             </li>
354             <li>Premiers octets ou extension, selon les interfaces
355             utilisées</li>
356           </ul>
357         </li>
358       </ul>
359     </div>
360     <div class="sws-slide">
361       <h1>Les attributs d'un fichier</h1>
362       <table class="desc">
363         <tr>
364           <td style="width:7em;"><em>Nom</em></td> <td/>
365         </tr>
366         <tr>
367           <td><em>Propriétaire</em></td>
368           <td>utilisateur qui possède ce fichier</td>
369         </tr>
370         <tr>
371           <td><em>Groupe</em></td>
372           <td>groupe d'utilisateurs qui possède ce fichier</td>
373         </tr>
374         <tr>
375           <td><em>Emplacement</em></td>
376           <td>localisation du fichier sur le support physique</td>
377         </tr>
378         <tr>
379           <td><em>Taille</em></td>
380           <td>en octet (peut être la taille réelle ou la taille
381         occupée sur le support)</td>
382         </tr>
383         <tr>
384           <td><em>Permissions</em></td>
385           <td> « qui a quel droit » sur le fichier (lecture, écriture,
386           exécution, …)
387           </td>
388         </tr>
389         <tr>
390           <td><em>Type</em></td>
391           <td/>
392         </tr>
393         <tr>
394           <td><em>Dates</em></td>
395           <td>dernier accès, dernière modification, création, …</td>
396         </tr>
397       </table>
398     </div>
399 <div class="sws-slide">
400 <h1>Organisation logique des fichiers</h1>
401 <p> Usuellement, les fichiers sont regroupés en <em>répertoires</em>. Les
402 répertoires sont imbriqués les uns dans les autres de manière a former
403 une <em>arborescence</em>.
404 </p>
405 <p>
406   <em>Sous Unix</em> il y a un répertoire racine, « <em>/</em> »
407 (<i>slash</i>) qui contient toute l'arborescence du système.<br/>
408 Chaque utilisateur possède aussi un répertoire personnel
409 </p>
410 </div>
411
412 <div class="sws-slide">
413 <h1>Noms de fichiers et chemins</h1>
414 <p style="background:white;">
415 Un chemin est une <em>liste de répertoire</em> à traverser pour
416 atteindre un fichier ou répertoire donné.
417 Sous Unix, le séparateur de chemin est le « <em>/</em> » <br/>
418 <em>Les chemins absolus </em> commencent par un <tt>/</tt> et
419            dénotent des fichiers à partir de la racine. Exemple:
420            <code>
421              /home/kim/Documents/ProgInternet/cours01.pdf
422        </code>
423 <em>Les chemins relatifs</em> dénotent des fichiers à partir du
424   répertoire courant. Exemple:<br/>
425 <code>                    Documents/ProgInternet/cours01.pdf</code>
426 si on se trouve dans le répertoire <tt>/home/kim</tt>
427 <br/>
428 <br/>
429 <em>Les noms spéciaux</em>: « . » dénote le répertoire
430     courant,
431   « .. » le répertoire parent, « ~ » le répertoire de
432   l'utilisateur et « ~<tt>toto</tt> » le répertoire de l'utilisateur
433     <tt>toto</tt>
434 </p>
435 </div>
436
437 <div class="sws-slide">
438   <h1>Utilisation du <i>Shell</i></h1>
439   <p>
440     Le <em>shell</em> affiche un <em>invite de commande</em>
441     (<i>prompt</i>). Exemple:<br/>
442     <code>kim@machine $ <span class="sws-pause" /></code><br/><br/>
443     <span>On peut alors saisir une commande:</span><br/><br/>
444     <code>   kim@machine $ ls *.txt<span class="sws-pause"/></code><br/><br/>
445     <span>Le shell affiche la <em>sortie</em> de la commande:</span><br/><br/>
446     <code>   fichier1.txt   fichier2.txt</code><br/><br/>
447     <span>Certains caractères doivent être précédés d'un « \ » (échappés):</span><br/><br/>
448     <code>   kim@machine $ ls mon\ fichier\#1.txt</code>
449   </p>
450 </div>
451 <div class="sws-slide">
452 <h1>La ligne de commande</h1>
453 <p>
454   Une ligne de commande a la forme:<br/>
455   <code>prog item1 item2 item3 item4 … </code>
456 </p>
457   <ol>
458   <li class="sws-pause"> Si <tt>prog</tt> est un chemin il doit
459     dénoter <em>un fichier exécutable </em>
460   </li>
461   <li class="sws-pause"> Si <tt>prog</tt> est un simple nom, il doit dénoter un fichier
462     exécutable se trouvant dans un des <em>répertoires prédéfinis</em>
463     (<tt>/bin</tt>, <tt>/usr/bin</tt>, …)
464   </li>
465   <li class="sws-pause"> Pour chaque <tt>item<sub>i</sub></tt> (séparés par un ou plusieurs espaces
466     non échappés) le <i>shell</i> fait une <em>expansion de nom</em>
467   </li>
468   <li class="sws-pause"> La liste de toutes les chaînes de caractères expansées est
469     passée comme argument au programme <tt>prog</tt>
470   </li>
471   </ol>
472 </div>
473 <div class="sws-slide">
474 <h1>Expansion des noms<br/>Expressions régulières glob</h1>
475 <p>
476   Certains caractères sont <em>interprétés</em> de manière spéciale par le
477   <i>shell</i>. Ces caractères sont « expansés » selon des
478   règles. Si la forme <em>expansée</em> correspond a un ou plusieurs fichiers
479   existants, alors leurs noms sont placés sur la ligne de commande. Sinon
480   la chaîne de caractère de départ garde sa valeur textuelle.
481 </p>
482 </div>
483 <div class="sws-slide">
484   <h1>Expressions régulières glob</h1>
485   <p>Règles d'expansion:
486   <tt><em>*</em></tt> n'importe quelle chaîne<br/>
487    <tt><em>?</em></tt> n'importe quel caractère
488    <tt><em>[ab12…]</em></tt> un caractère dans la liste <br/>
489    <tt><em>[^ab12…]</em></tt> un caractère absent de liste<br/>
490    <tt><em>[a-z]</em></tt> un caractère dans l'intervalle<br/>
491    <tt><em>[^a-z]</em></tt> un caractère absent de l'intervalle<br/>
492    <tt><em>{m<sub>1</sub>, m<sub>2</sub>}</em></tt>
493   motif <tt>m<sub>1</sub></tt> ou <tt>m<sub>2</sub></tt> <br/>
494   <tt><em>?(m<sub>1</sub>|…|m<sub>n</sub>)</em></tt>
495   <span style="display:inline-block;width:2em" />
496   <tt><em>@(m<sub>1</sub>|…|m<sub>n</sub>)</em></tt>
497   <span style="display:inline-block;width:2em" />
498   <tt><em>*(m<sub>1</sub>|…|m<sub>n</sub>)</em></tt>
499   <span style="display:inline-block;width:2em" />
500   <tt><em>+(m<sub>1</sub>|…|m<sub>n</sub>)</em></tt><br/>
501   <i>k</i> motifs parmi <tt>m<sub>i</sub></tt> <br/>
502   <tt><em>?</em></tt>: <tt>0 ≤ <i>k</i> ≤ 1</tt>
503   <span style="display:inline-block;width:2em" />
504   <tt><em>@</em></tt>: <tt><i>k</i> = 1</tt>
505   <span style="display:inline-block;width:2em" />
506   <tt><em>*</em></tt>: <tt><i>k</i> ≥ 0</tt>
507   <span style="display:inline-block;width:2em" />
508   <tt><em>+</em></tt>: <tt><i>k</i> ≥ 1</tt>
509   <br/>
510   <tt><em>!(m<sub>1</sub>|…|m<sub>n</sub>)</em></tt>:
511   ni <tt>m<sub>1</sub></tt>, …, ni <tt>m<sub>n</sub></tt>
512 </p>
513 </div>
514 <div class="sws-slide">
515 <h1>Expressions régulières glob<br/>Exemples</h1>
516 <p><tt><em>ls  !(*[aeiouy]?)</em></tt> <span class="sws-pause">
517   La chaine « <tt>!(*[aeiouy]?)</tt> » est remplacée par la liste de tous
518   les fichiers dont l'avant dernière lettre du nom n'est pas une
519   voyelle. S'il n'y a pas de tel fichier, la chaîne
520   « <tt>!(*[aeiouy]?)</tt> » est passée à la commande <tt>ls</tt>.</span><br/><br/>
521   <span>
522   <tt><em>ls [0-9]*</em></tt> affiche la liste des fichiers commençant par un
523   chiffre<br/><br/>
524   <tt><em>ls +(abc)</em></tt> affiche la liste des fichiers dont le nom est une
525   répétition de «&nbsp;abc&nbsp;».
526 </span>
527 </p>
528 </div>
529 <div class="sws-slide">
530 <h1>Commandes shell de base</h1>
531 <ul class="empty">
532 <li><em>cd </em><i>chemin</i>: <i>chemin</i> devient le
533   répertoire courant. Si absent, utilise le répertoire personnel
534 </li>
535 <li><em>ls</em> <i>chemin<sub>1</sub></i> … <i>chemin<sub>n</sub></i>:
536   affiche le nom des <i>n</i> fichiers. Si <i>n=0</i> affiche le contenu du
537   répertoire courant. Avec l'option <tt><em>-l</em></tt> affiche la liste
538   détaillée.
539 </li>
540 <li><em>cp</em> <i>chemin<sub>1</sub></i>  <i>chemin<sub>2</sub></i>:
541 copie de fichier
542 </li>
543 <li><em>mv</em> <i>chemin<sub>1</sub></i>  <i>chemin<sub>2</sub></i>:
544   déplacement
545   de fichier (et renommage)
546 </li>
547 <li><em>rm</em> <i>chemin<sub>1</sub></i> … <i>chemin<sub>n</sub></i>:
548   supprime les fichiers (définitif)
549 </li>
550 </ul>
551 </div>
552 <div class="sws-slide">
553 <h1>Droits et propriétés des fichiers</h1>
554 <p>
555 Sous Unix un utilisateur est identifié par son <em>login</em> (ou nom
556 d'utilisateur). Chaque utilisateur est dans  un <em>groupe
557   principal</em>.<br/>
558 Chaque fichier appartient à un utilisateur et à un groupe.<br/>
559 Chaque fichier possède 3 permissions pour son propriétaire, son groupe
560 et tous les autres. Les permissions sont lecture, écriture, exécution
561 (plus d'autres non abordées dans ce cours).<br/>
562 <table >
563   <tr><th style="width:20%">Permission</th> <th  style="width:40%">fichier</th> <th style="width:40%">répertoire</th> </tr>
564   <tr><td><em>lecture</em> (r)</td> <td>lire le contenu du
565   fichier</td>
566     <td >lister le contenu du répertoire</td></tr>
567
568   <tr><td style="vertical-align:top;"><em>écriture</em> (w)</td> <td style="vertical-align:top;">écrire dans le fichier</td>
569     <td style="vertical-align:top;">supprimer/renommer/créer des
570     fichiers dans le répertoire</td></tr>
571   <tr><td style="vertical-align:top;"><em>exécution</em>
572   (x)</td> <td style="vertical-align:top;">exécuter le fichier
573   (si<br/>
574
575   c'est un programme)</td>
576     <td style="vertical-align:top;">rentrer dans le répertoire
577   </td></tr>
578 </table>
579 <code>$ ls -l
580 drwxr-x---  9 kim prof 4096 Sep  7 21:31 Documents</code>
581 </p>
582 </div>
583 <div class="sws-slide">
584 <h1>La commande <em>chmod</em></h1>
585 <code>
586    chmod <i>permissions</i> <i>chemin<sub>1</sub></i> … <i>chemin<sub>n</sub></i>
587 </code>
588 <p> modifie les permissions des fichiers <i>1</i> à <i>n</i>. La chaîne
589 <i><tt>permissions</tt></i> est soit une suite de modifications de
590 permissions <em>symbolique</em> soit l'ensemble des permissions données
591 de manière <em>numérique</em>: <br/>
592 <code>
593     chmod 755 fichier.txt
594     chmod u-w,a+x,g=w fichier.txt
595 </code>
596 </p>
597 </div>
598 <div class="sws-slide">
599 <h1>Permissions numériques</h1>
600 <p>
601 On groupe les <em>bits</em> de permissions par trois puis on convertit
602 en décimal:<br/>
603 <table style="width:100%;text-align:center;" class="btable">
604 <tr> <th colspan="3" style="width:33%"> Utilisateur </th>
605   <th colspan="3" style="width:33%">
606     Groupe</th>
607   <th colspan="3" style="width:33%">Autres</th>
608 </tr>
609 <tr>
610   <td>r</td>   <td>w</td>    <td>x</td>   <td>r</td>   <td>w</td>    <td>x</td>   <td>r</td>   <td>w</td>    <td>x</td>
611 </tr>
612 <tr>
613   <td>1</td>   <td>1</td>    <td>0</td>   <td>1</td>   <td>0</td>    <td>0</td>   <td>0</td>   <td>0</td>    <td>0</td>
614 </tr>
615 <tr>
616 <td colspan="3"> 6 </td> <td colspan="3">
617     4</td><td colspan="3">0</td>
618 </tr>
619 </table>
620 Le fichier est lisible et modifiable mais pas exécutable par son
621 propriétaire, lisible pour le groupe. Les autres ne peuvent ni le lire
622 ni le modifier.</p>
623 </div>
624 <div class="sws-slide">
625 <h1>Permissions symboliques</h1>
626 <code>
627        cible modifieur permission
628 </code>
629 <ul class="empty">
630   <li> <em>cible</em> : u (utilisateur), g (groupe), o (others), a
631   (all)
632   </li>
633
634   <li> <em>modifieur</em> : + (autorise), - (interdit), = (laisse
635   inchangé)
636   </li>
637
638   <li><em>permission</em> : r (lecture), w (écriture), x (exécution)</li>
639 </ul>
640 <p>
641 Exemple:<br/>
642 <code>   chmod u+rw,u-x,g+r,g-wx,o-rwx fichier.txt </code>
643 </p>
644 </div>
645 <div class="sws-slide">
646   <h1>Liens symboliques (1)</h1>
647 <p>Pour des raisons d'organisation, on veut pouvoir « voir » le même
648   fichier ou répertoire sous deux noms différents (ou à deux endroits
649   différents). Par exemple:
650 </p>
651 <code style="background:white">
652  $  ls -l <mark>Documents/Cours</mark>
653  total 8
654  drwxr-xr-x 3 kim prof 4096 Sep  9 11:30 <mark>Licence</mark>
655  drwxr-xr-x 3 kim prof 4096 Sep  9 11:30 <mark>Master</mark>
656
657  $  cd <mark>Documents/Cours/Master</mark>; ls
658   <mark>Compilation    XMLProgInternet</mark>
659
660  $  cd <mark>XML_Prog_Internet</mark>; ls
661  <mark>cours01 cours02  cours03 cours04 cours05  cours06</mark>   <mark style="color:turquoise">Prereq</mark>  
662
663  $ ls -l Prereq
664  lrwxrwxrwx 1 kim prof 28 Sep  9 11:30 <mark style="color:turquoise">Prereq</mark> -> <mark>../../Licence/UnixProgWeb/</mark>
665 </code>
666
667 </div>
668 <div class="sws-slide">
669   <h1>Liens symboliques (2)</h1>
670   <p>La commande <em><tt>ln</tt></em> permet de créer des <em>liens
671   symboliques</em>. Un lien est un petit fichier qui contient
672   un <em>chemin</em> vers un fichier de destination.
673   </p>
674   <p>Exemple d'utilisation</p>
675 <code>    $ ln -s ../foo/bar/baz/toto.txt rep/titi.txt
676 </code>
677 <p class="sws-pause">crée un lien vers le fichier <tt>toto.txt</tt>
678   sous le nom <tt>titi.txt</tt> (chacun placé dans des sous/sur
679   répertoires)
680 </p>
681 <ul>
682   <li>Ouvrir/modifier le lien &gt; ouvre/modifie la cible</li>
683   <li>Supprimer le lien &gt; supprime le lien mais pas la cible</li>
684   <li>Si la cible est un répertoire, faire <tt>cd</tt> nous place «
685   dans » la cible, mais le repertoire parent est celui d'où l'on vient</li>
686 </ul>
687 <p>Cela permet de créer l'illusion que la cible a été copiée à
688   l'identique, sans les inconvénients</p>
689 </div>
690 <div class="sws-slide">
691   <h1>À propos de la suppression</h1>
692   <p>La commande <tt>rm  fichier</tt> efface un fichier définitivement<br/>
693   La commande <tt>rm -d  rep</tt> efface un répertoire s'il est vide<br/>
694   La commande <tt>rm -r  rep</tt> efface un répertoire récursivement
695   mais demande confirmation avant d'effacer des éléments<br/>
696   La commande <tt>rm -rf rep</tt> efface un répertoire
697   récursivement et sans confirmation</p>
698   <p><s>Toute suppression est définitive</s></p>
699   <p>Gag classique :</p>
700   <code style="background:white">    $  mkdir <s>\~</s>
701     ...
702     $ ls
703      <mark> Documents  Photos  Musique   ~</mark>
704     $ rm -rf <s>~</s>
705      <mark style="font-size:200%;"> &#9760; &#9760; &#9760; &#9760; &#9760; &#9760;</mark>
706 </code>
707 </div>
708 <div class="sws-slide">
709   <h1>Obtenir de l'aide sur une commande</h1>
710   <p>La commande <em><tt>man</tt></em> permet d'obtenir de l'aide sur
711   une commande. Lors qu'une page d'aide est affichée, on peut la faire
712   défiler avec les touches du clavier, la quitter avec « <tt>q</tt> »
713   et rechercher un mot avec la touch « <tt>/</tt> »</p>
714   <code style="position:relative;left:10%;font-size:70%">
715 LS(1L)            Manuel de l'utilisateur Linux            LS(1L)
716
717
718 <FONT COLOR="#000000"><B>NOM</B></FONT>
719        ls, dir, vdir - Afficher le contenu d'un répertoire.
720
721 <FONT COLOR="#000000"><B>SYNOPSIS</B></FONT>
722        <FONT COLOR="#000000"><B>ls</B></FONT> <FONT COLOR="#000000"><B>[options]</B></FONT> <FONT COLOR="#000000"><B>[fichier...]</B></FONT>
723
724        Options POSIX : <FONT COLOR="#000000"><B>[-1acdilqrtuCFR]</B></FONT>
725
726        Options  GNU  (forme courte) : <FONT COLOR="#000000"><B>[-1abcdfgiklmnopqrstuxABCD­</B></FONT>
727        <FONT COLOR="#000000"><B>FGLNQRSUX]</B></FONT> <FONT COLOR="#000000"><B>[-w</B></FONT> <FONT COLOR="#0000ff"><I>cols<FONT COLOR="#000000"><B>]</B></FONT></I></FONT> <FONT COLOR="#000000"><B>[-T</B></FONT> <FONT COLOR="#0000ff"><I>cols<FONT COLOR="#000000"><B>]</B></FONT></I></FONT>  <FONT COLOR="#000000"><B>[-I</B></FONT>  <FONT COLOR="#0000ff"><I>motif<FONT COLOR="#000000"><B>]</B></FONT></I></FONT>  <FONT COLOR="#000000"><B>[--full-time]</B></FONT>
728        <FONT COLOR="#000000"><B>[--format={long,verbose,commas,across,vertical,single-col­</B></FONT>
729        <FONT COLOR="#000000"><B>umn}]</B></FONT>                  <FONT COLOR="#000000"><B>[--sort={none,time,size,extension}]</B></FONT>
730        <FONT COLOR="#000000"><B>[--time={atime,access,use,ctime,status}]</B></FONT>
731        <FONT COLOR="#000000"><B>[--color[={none,auto,always}]]</B></FONT> <FONT COLOR="#000000"><B>[--help]</B></FONT> <FONT COLOR="#000000"><B>[--version]</B></FONT> <FONT COLOR="#000000"><B>[--]</B></FONT>
732
733 <FONT COLOR="#000000"><B>DESCRIPTION</B></FONT>
734        La commande <FONT COLOR="#000000"><B>ls</B></FONT> affiche  tout  d'abord  l'ensemble  de  ses
735        arguments  <FONT COLOR="#0000ff"><I>fichiers</I></FONT>  autres  que  des répertoires. Puis <FONT COLOR="#000000"><B>ls</B></FONT>
736        affiche  l'ensemble  des  fichiers  contenus  dans  chaque
737        répertoire  indiqué.   <FONT COLOR="#000000"><B>dir</B></FONT> et <FONT COLOR="#000000"><B>vdir</B></FONT> sont des versions de <FONT COLOR="#000000"><B>ls</B></FONT>
738        affichant par défaut leurs résultats  avec  d'autres  for­
739        mats.
740  
741 </code>
742
743 </div>
744 <div class="sws-slide">
745   <h1>Recherche de fichiers</h1>
746   <p>La commande <tt>find rep <i>criteres</i></tt> permet de trouver
747   tous les fichiers se trouvant dans le répertoire <tt>rep</tt> (ou un
748   sous répertoire) et répondant à certains critères. Exemples de
749   critères :</p>
750   <ul>
751     <li> <tt>-name '*toto*'</tt>  dont le nom
752       contient <tt>toto</tt></li>
753     <li> <tt>-size +200M</tt> dont la taille sur le disque est
754       supérieure à 200 Mo</li>
755     <li> <tt> <i>c<sub>1</sub></i> -a <i>c<sub>2</sub></i></tt> pour
756       lesquel les critères <tt> <i>c<sub>1</sub></i></tt>
757       et <tt> <i>c<sub>2</sub></i></tt> sont vrais</li>
758     <li> <tt> <i>c<sub>1</sub></i> -o <i>c<sub>2</sub></i></tt> pour
759       lesquel l'un au moins des critères <tt> <i>c<sub>1</sub></i></tt>
760       et <tt> <i>c<sub>2</sub></i></tt> est vrais</li>
761     <li> <tt>-user toto</tt> qui appartiennent à l'utilisateur <tt>toto</tt></li>
762   </ul>
763   <p> Comment trouver toutes les options de la commande <tt>find</tt>
764   ? <span class="sws-pause"><tt><em> man find</em></tt></span></p>
765 </div>
766 <div class="sws-slide">
767   <h1>Quelques commandes utiles</h1>
768   <ul>
769     <li> <tt>cat <i>fichier</i></tt> permet d'afficher le contenu d'un fichier dans
770     le terminal</li>
771     <li> <tt>less <i>fichier</i></tt> permet de lire le contenu d'un fichier (avec
772     défilement en utilisant les flêches du clavier si le fichier est
773     trop grand)</li>
774     <li> <tt>sort <i>fichier</i></tt> permet d'afficher les lignes d'un fichier
775     triées (on peut spécifier des options de tri)</li>
776     <li> <tt>file <i>fichier</i></tt> permet de connaître le type d'un
777     fichier</li>
778     <li> <tt>wc <i>fichier</i></tt> permet de compter le nombre de
779     caractères/mots/lignes d'un fichier</li>
780     <li> <tt>head <i>fichier</i></tt> permet de garder les <i>n</i>
781     premières lignes d'un fichier</li>
782   </ul>
783   <p>On verra comment composer ces commandes pour exécuter des
784   opérations complexes</p>
785 </div>
786   </body>
787 </html>