[191] | 1 | % $Id: perl.tex 183 2008-09-04 23:55:50Z nanardon $ |
---|
| 2 | \documentclass[notes]{beamer} |
---|
| 3 | \usepackage[frenchb]{babel} |
---|
| 4 | \usepackage[T1]{fontenc} |
---|
| 5 | \usepackage{moreverb} |
---|
| 6 | \usepackage{graphicx} |
---|
| 7 | \usepackage{listings} |
---|
| 8 | \usepackage{color} |
---|
| 9 | |
---|
| 10 | \mode<presentation> |
---|
| 11 | { |
---|
| 12 | \definecolor{beamerstructure}{RGB}{143,79,112} |
---|
| 13 | \definecolor{sidebackground}{RGB}{230,242,250} |
---|
| 14 | \color{beamerstructure} |
---|
| 15 | \usetheme[secheader]{Madrid} |
---|
| 16 | \usepackage{times} |
---|
| 17 | \userightsidebarcolortemplate{\color{sidebackground}} |
---|
| 18 | \beamertemplateballitem |
---|
| 19 | } |
---|
| 20 | |
---|
| 21 | \AtBeginSection[] |
---|
| 22 | { |
---|
| 23 | \begin{frame}<beamer> |
---|
| 24 | \frametitle{Plan} |
---|
| 25 | \tableofcontents[currentsection,hideothersubsections] |
---|
| 26 | \end{frame} |
---|
| 27 | } |
---|
| 28 | |
---|
| 29 | \AtBeginSubsection[] |
---|
| 30 | { |
---|
| 31 | \begin{frame}<beamer> |
---|
| 32 | \frametitle{} |
---|
| 33 | \tableofcontents[sectionstyle=show/hide,subsectionstyle=show/shaded/hide] |
---|
| 34 | \end{frame} |
---|
| 35 | } |
---|
| 36 | |
---|
| 37 | \title{UNIX/Linux} |
---|
| 38 | \subtitle{Jouer avec le système} |
---|
| 39 | \author{Olivier Thauvin} |
---|
| 40 | \date{\today} |
---|
| 41 | |
---|
| 42 | \begin{document} |
---|
| 43 | |
---|
| 44 | \frame{\titlepage} |
---|
| 45 | |
---|
| 46 | \begin{frame} |
---|
| 47 | \tableofcontents[hideallsubsections] |
---|
| 48 | \end{frame} |
---|
| 49 | |
---|
| 50 | \section{L'Ordinateur} |
---|
| 51 | |
---|
| 52 | \subsection{Anatomie} |
---|
| 53 | |
---|
| 54 | \begin{frame} |
---|
| 55 | \frametitle{Principaux composants} |
---|
| 56 | \begin{columns}[c] |
---|
| 57 | \column{2.5in} |
---|
| 58 | \centering |
---|
| 59 | \includegraphics[height=40mm]{asus_mb} |
---|
| 60 | |
---|
| 61 | \column{2.5in} |
---|
| 62 | \begin{itemize} |
---|
| 63 | \item les éléments vitaux (PC) |
---|
| 64 | \begin{itemize} |
---|
| 65 | \item \textcolor{red}{CPU} |
---|
| 66 | \item \textcolor{green}{Mémoire} |
---|
| 67 | \item \textcolor{blue}{Bus} |
---|
| 68 | \item clavier |
---|
| 69 | \item carte graphique |
---|
| 70 | \end{itemize} |
---|
| 71 | \item le reste |
---|
| 72 | \begin{itemize} |
---|
| 73 | \item mulot et autres rongeurs |
---|
| 74 | \item disques durs |
---|
| 75 | \item carte son |
---|
| 76 | \item \ldots |
---|
| 77 | \end{itemize} |
---|
| 78 | \end{itemize} |
---|
| 79 | \end{columns} |
---|
| 80 | \end{frame} |
---|
| 81 | |
---|
| 82 | \begin{frame}[fragile] |
---|
| 83 | \frametitle{Fonctionnement général} |
---|
| 84 | \begin{itemize} |
---|
| 85 | \item \textcolor{red}{CPU} (Central processor unit) |
---|
| 86 | \begin{itemize} |
---|
| 87 | \item fait les calculs |
---|
| 88 | \item presque pas de mémoire (registres) |
---|
| 89 | \end{itemize} |
---|
| 90 | \item \textcolor{green}{Mémoire} |
---|
| 91 | \begin{itemize} |
---|
| 92 | \item sert à stocker les données |
---|
| 93 | \item est moins rapide que le CPU (rapport \verb+~+ 1/3) |
---|
| 94 | \end{itemize} |
---|
| 95 | \item \textcolor{blue}{Bus} |
---|
| 96 | \begin{itemize} |
---|
| 97 | \item sur la carte mère |
---|
| 98 | \item transporte les données entre les différents composants |
---|
| 99 | \end{itemize} |
---|
| 100 | \end{itemize} |
---|
| 101 | \end{frame} |
---|
| 102 | |
---|
| 103 | \section{UNIX} |
---|
| 104 | |
---|
| 105 | \subsection{LES UNIX} |
---|
| 106 | |
---|
| 107 | \begin{frame} |
---|
| 108 | \frametitle{la grande famille des UNIX} |
---|
| 109 | \emph{ |
---|
| 110 | UNIX est le nom d'un système d'exploitation multitâche et multi-utilisateur créé en 1969, |
---|
| 111 | conceptuellement ouvert et fondé sur une approche par laquelle il offre de nombreux petits |
---|
| 112 | outils chacun dotés d'une mission spécifique.} |
---|
| 113 | |
---|
| 114 | Définition \href{http://fr.wikipedia.org/wiki/UNIX}{Wikipédia} |
---|
| 115 | \vfill |
---|
| 116 | |
---|
| 117 | \textbf{Les grandes lignes:} |
---|
| 118 | |
---|
| 119 | \begin{itemize} |
---|
| 120 | \item mulitâche préemptif |
---|
| 121 | \item multiutilisateurs (donc gestion de droit) |
---|
| 122 | \item multisessions |
---|
| 123 | \item tout est fichier |
---|
| 124 | \end{itemize} |
---|
| 125 | \end{frame} |
---|
| 126 | |
---|
| 127 | \begin{frame} |
---|
| 128 | \frametitle{Vite une Norme !} |
---|
| 129 | \textbf{Exemples d'UNIX:} |
---|
| 130 | |
---|
| 131 | \begin{itemize} |
---|
| 132 | \item GNU/Linux |
---|
| 133 | \item *BSD (Net, Free, Open, \ldots) |
---|
| 134 | \item MacOS X (est un BSD, d'Apple) |
---|
| 135 | \item Digital UNIX (de Digital) |
---|
| 136 | \item Solaris (de Sun) |
---|
| 137 | \item AIX (de IBM) |
---|
| 138 | \item \ldots |
---|
| 139 | \end{itemize} |
---|
| 140 | \vfill |
---|
| 141 | |
---|
| 142 | \textbf{Norme POSIX:} |
---|
| 143 | standard de fonctionnement et commandes (IEEE). |
---|
| 144 | \end{frame} |
---|
| 145 | |
---|
| 146 | \begin{frame} |
---|
| 147 | \frametitle{De l'ordi à l'utilisateur} |
---|
| 148 | \begin{columns}[c] |
---|
| 149 | \column{2.5in} |
---|
| 150 | \centering |
---|
| 151 | \includegraphics[height=40mm]{process} |
---|
| 152 | \column{2.5in} |
---|
| 153 | \begin{block}{Role du kernel} |
---|
| 154 | \begin{itemize} |
---|
| 155 | \item gérer le matériel |
---|
| 156 | \item donner le temps CPU aux applications |
---|
| 157 | \item vérifier les droits d'accès |
---|
| 158 | \item assurer l'intégrité du système |
---|
| 159 | \end{itemize} |
---|
| 160 | \end{block} |
---|
| 161 | \end{columns} |
---|
| 162 | \end{frame} |
---|
| 163 | |
---|
| 164 | \section{Les fichiers} |
---|
| 165 | |
---|
| 166 | \subsection{Les fichiers} |
---|
| 167 | |
---|
| 168 | \begin{frame}[fragile] |
---|
| 169 | \frametitle{Nom de fichiers} |
---|
| 170 | |
---|
| 171 | \begin{block}{Accès aux fichiers} |
---|
| 172 | \begin{itemize} |
---|
| 173 | \item le séparateur est \verb+/+ |
---|
| 174 | \item plusieurs \verb+/+ ne font qu'un |
---|
| 175 | \item la longueur maximal d'un chemin est de 1024 (POSIX) |
---|
| 176 | \item tout les caractère sont permis sauf \verb+/+ et \emph{NULL} |
---|
| 177 | \end{itemize} |
---|
| 178 | \end{block} |
---|
| 179 | |
---|
| 180 | \begin{alertblock}{On évitera} |
---|
| 181 | \begin{itemize} |
---|
| 182 | \item l'espace |
---|
| 183 | \item \verb+-+ (surtout en premier, option en ligne de commande) |
---|
| 184 | \item ce qui ne se tape au clavier |
---|
| 185 | \item les accents |
---|
| 186 | \end{itemize} |
---|
| 187 | \end{alertblock} |
---|
| 188 | |
---|
| 189 | \end{frame} |
---|
| 190 | |
---|
| 191 | \begin{frame}[fragile] |
---|
| 192 | \frametitle{L'inode} |
---|
| 193 | |
---|
| 194 | Le fichier est matérialisé par une inode: |
---|
| 195 | |
---|
| 196 | {\small\begin{verbatim} |
---|
| 197 | [olivier@andromede unix]$ ls -li unix.tex |
---|
| 198 | 6160386 -rw-r--r-- 1 olivier olivier 3049 17:30 unix.tex |
---|
| 199 | \end{verbatim} |
---|
| 200 | } |
---|
| 201 | |
---|
| 202 | \begin{itemize} |
---|
| 203 | \item un numéro (6160386) |
---|
| 204 | \item un type |
---|
| 205 | \item des métadata |
---|
| 206 | \begin{itemize} |
---|
| 207 | \item taille (3049) |
---|
| 208 | \item propriétaires / droits d'accès |
---|
| 209 | \item date d'accès (access time) |
---|
| 210 | \item date de création \textbf{de l'inode} (creation time) |
---|
| 211 | \item date de dernière modification (modification time) |
---|
| 212 | \item \ldots |
---|
| 213 | \end{itemize} |
---|
| 214 | \item éventuellement un contenu |
---|
| 215 | \end{itemize} |
---|
| 216 | \end{frame} |
---|
| 217 | |
---|
| 218 | \begin{frame}[fragile] |
---|
| 219 | \begin{alertblock}{quand ctime dépasse mtime} |
---|
| 220 | Copie en préservant les métadata: |
---|
| 221 | {\small\begin{verbatim} |
---|
| 222 | [olivier@andromede unix]$ cp -a unix.tex unix2.tex |
---|
| 223 | \end{verbatim} |
---|
| 224 | } |
---|
| 225 | Le fichier vient d'être créé: |
---|
| 226 | {\small\begin{verbatim} |
---|
| 227 | [olivier@andromede unix]$ ls -l --time=c unix2.tex |
---|
| 228 | -rw-r--r-- 1 olivier olivier 3049 18:47 unix2.tex |
---|
| 229 | \end{verbatim} |
---|
| 230 | } |
---|
| 231 | Pourtant la date de modification est antérieur: |
---|
| 232 | {\small\begin{verbatim} |
---|
| 233 | [olivier@andromede unix]$ ls -l unix2.tex |
---|
| 234 | -rw-r--r-- 1 olivier olivier 3049 17:30 unix2.tex |
---|
| 235 | \end{verbatim} |
---|
| 236 | } |
---|
| 237 | \end{alertblock} |
---|
| 238 | \end{frame} |
---|
| 239 | |
---|
| 240 | \begin{frame}[fragile] |
---|
| 241 | \frametitle{les types de fichiers} |
---|
| 242 | |
---|
| 243 | - \emph{rw-r--r-- 1 olivier olivier 3049 17:30 unix2.tex} |
---|
| 244 | |
---|
| 245 | \begin{itemize} |
---|
| 246 | \item les simples fichiers (-) |
---|
| 247 | \item les répertoires (d) |
---|
| 248 | \item les liens symboliques (l) |
---|
| 249 | \item les fichiers de périphérique (c ou b) |
---|
| 250 | \item les fifo (tubes nommés, p) |
---|
| 251 | \item les sockets (=) |
---|
| 252 | \end{itemize} |
---|
| 253 | \end{frame} |
---|
| 254 | |
---|
| 255 | \begin{frame}[fragile] |
---|
| 256 | \frametitle{existance d'un fichier} |
---|
| 257 | \begin{block}{un fichier existe tant que} |
---|
| 258 | \begin{itemize} |
---|
| 259 | \item l'inode est référencée par un nom (lien hard) |
---|
| 260 | \item l'inode est ouverte |
---|
| 261 | \end{itemize} |
---|
| 262 | \end{block} |
---|
| 263 | |
---|
| 264 | \begin{exampleblock}{liens hard} |
---|
| 265 | {\small\begin{verbatim} |
---|
| 266 | [olivier@andromede unix]$ ln fichier1 fichier2 |
---|
| 267 | [olivier@andromede unix]$ ls -li fichier* |
---|
| 268 | 6160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier1 |
---|
| 269 | 6160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier2 |
---|
| 270 | [olivier@andromede unix]$ rm -f fichier1 |
---|
| 271 | [olivier@andromede unix]$ ls -li fichier* |
---|
| 272 | 6160393 -rw-r--r-- 1 olivier olivier 1101 19:54 fichier2 |
---|
| 273 | \end{verbatim} |
---|
| 274 | } |
---|
| 275 | \end{exampleblock} |
---|
| 276 | \end{frame} |
---|
| 277 | |
---|
| 278 | \begin{frame}[fragile] |
---|
| 279 | \begin{exampleblock}{deleteopen.pl} |
---|
| 280 | \frametitle{existance d'un fichier} |
---|
| 281 | \listinginput[2]{1}{deleteopen.pl} |
---|
| 282 | \end{exampleblock} |
---|
| 283 | |
---|
| 284 | \begin{block}{} |
---|
| 285 | \begin{itemize} |
---|
| 286 | \item le fichier n'est accessible que par l'application |
---|
| 287 | \item si l'application quitte: l'espace disque est récupéré |
---|
| 288 | \item la fermeture du descripteur entraine la fin du fichier |
---|
| 289 | \end{itemize} |
---|
| 290 | {\small\begin{verbatim} |
---|
| 291 | perl 23536 ol 3w REG 8,7 0 49065 /tmp/opened (deleted) |
---|
| 292 | \end{verbatim} |
---|
| 293 | } |
---|
| 294 | Utile pour les fichiers temporaires. |
---|
| 295 | \end{block} |
---|
| 296 | \end{frame} |
---|
| 297 | |
---|
| 298 | \begin{frame}[fragile] |
---|
| 299 | \frametitle{les fichiers à trous (sparse files)} |
---|
| 300 | \end{frame} |
---|
| 301 | |
---|
| 302 | \begin{frame}[fragile] |
---|
| 303 | \frametitle{Fichier de périphérique} |
---|
| 304 | \begin{block}{2 types} |
---|
| 305 | \begin{itemize} |
---|
| 306 | \item block (b) |
---|
| 307 | \item caractères (c) |
---|
| 308 | \end{itemize} |
---|
| 309 | \end{block} |
---|
| 310 | |
---|
| 311 | \begin{exampleblock}{Tout est fichier} |
---|
| 312 | \begin{verbatim} |
---|
| 313 | brw-rw---- 1 nanardon cdwriter 11, 0 12:26 /dev/sr0 |
---|
| 314 | \end{verbatim} |
---|
| 315 | |
---|
| 316 | C'est le premier lecteur CDROM SCSI (SATA en réalité) |
---|
| 317 | |
---|
| 318 | Je peux le lire comme un fichier: |
---|
| 319 | \begin{verbatim} |
---|
| 320 | [nanardon@virgo ~]$ dd if=/dev/sr0 bs=1024 count=20 | wc |
---|
| 321 | 20+0 enregistrements lus |
---|
| 322 | 20+0 enregistrements écrits |
---|
| 323 | 20480 octets (20 kB) copiés, 0,803619 s, 25,5 kB/s |
---|
| 324 | 0 0 20480 |
---|
| 325 | \end{verbatim} |
---|
| 326 | \end{exampleblock} |
---|
| 327 | \end{frame} |
---|
| 328 | |
---|
| 329 | \begin{frame}[fragile] |
---|
| 330 | \frametitle{les fifos} |
---|
| 331 | \begin{exampleblock}{Première console:} |
---|
| 332 | \begin{verbatim} |
---|
| 333 | [olivier@andromede unix]$ mkfifo /tmp/fifo |
---|
| 334 | [olivier@andromede unix]$ cat /etc/passwd > /tmp/fifo |
---|
| 335 | \end{verbatim} |
---|
| 336 | \end{exampleblock} |
---|
| 337 | |
---|
| 338 | \begin{exampleblock}{Deuxième console:} |
---|
| 339 | \begin{verbatim} |
---|
| 340 | [olivier@andromede ~]$ grep root < /tmp/fifo |
---|
| 341 | root:x:0:0:root:/root:/bin/bash |
---|
| 342 | \end{verbatim} |
---|
| 343 | \end{exampleblock} |
---|
| 344 | |
---|
| 345 | \begin{block}{Cet exemple simple revient à} |
---|
| 346 | \begin{verbatim} |
---|
| 347 | cat /etc/passwd | grep root |
---|
| 348 | \end{verbatim} |
---|
| 349 | \end{block} |
---|
| 350 | \end{frame} |
---|
| 351 | |
---|
| 352 | \subsection{Systèmes de fichiers} |
---|
| 353 | |
---|
| 354 | \begin{frame}[fragile] |
---|
| 355 | \frametitle{principe} |
---|
| 356 | \begin{block}{le montage} |
---|
| 357 | \begin{itemize} |
---|
| 358 | \item une méthode d'accès |
---|
| 359 | \item une structure arborescente |
---|
| 360 | \item on le fait apparaitre dans un répertoire existant |
---|
| 361 | \end{itemize} |
---|
| 362 | \end{block} |
---|
| 363 | |
---|
| 364 | \begin{exampleblock}{la commande mount} |
---|
| 365 | \begin{verbatim} |
---|
| 366 | [olivier@andromede unix]$ mount |
---|
| 367 | /dev/sda3 on / type ext3 (rw,noatime) |
---|
| 368 | /dev/sda8 on /home type ext3 (rw,noatime) |
---|
| 369 | [...] |
---|
| 370 | virgo:/home/data on /mnt/disk type nfs (ro,addr=192.168.76.1) |
---|
| 371 | \end{verbatim} |
---|
| 372 | \end{exampleblock} |
---|
| 373 | \end{frame} |
---|
| 374 | |
---|
| 375 | \begin{frame}[fragile] |
---|
| 376 | \frametitle{Organisation globale} |
---|
| 377 | \begin{block}{} |
---|
| 378 | \begin{tabular}{ll} |
---|
| 379 | \verb+/etc+&fichiers de configuration\\ |
---|
| 380 | \verb+/bin+, \verb+/usr/bin+&les executables utilisateur\\ |
---|
| 381 | \verb+/sbin+, \verb+/usr/sbin+&idem, pour root\\ |
---|
| 382 | \verb+/lib+, \verb+/usr/lib+&les librairies\\ |
---|
| 383 | \verb+/usr/share+&les données statiques des programmes\\ |
---|
| 384 | \verb+/usr/include+&les fichiers .h (C)\\ |
---|
| 385 | \verb+/var+&les données variables (spool, etc...)\\ |
---|
| 386 | \verb+/tmp+, \verb+/var/tmp+&données temporaires\\ |
---|
| 387 | \verb+/opt+&espace pour les apps. propriétaires\\ |
---|
| 388 | \verb+/proc+, \verb+/sys+&représentation temp réelle du système\\ |
---|
| 389 | \end{tabular} |
---|
| 390 | \end{block} |
---|
| 391 | |
---|
| 392 | \begin{alertblock}{le FHS} |
---|
| 393 | Le Filesystem Hierarchy Standard normalise l'empacement des fichiers |
---|
| 394 | \end{alertblock} |
---|
| 395 | \end{frame} |
---|
| 396 | |
---|
| 397 | |
---|
| 398 | \section{les processus} |
---|
| 399 | |
---|
| 400 | \subsection{le temps CPU} |
---|
| 401 | |
---|
| 402 | \begin{frame} |
---|
| 403 | \frametitle{scheduler préemptif} |
---|
| 404 | \begin{alertblock}{préemptif ?} |
---|
| 405 | Seul le noyau décide du temps CPU alouer ! |
---|
| 406 | \end{alertblock} |
---|
| 407 | |
---|
| 408 | \begin{block}{Le scheduler} |
---|
| 409 | Le scheduler est appelé à interval régulier (plusieurs centaintes de fois par seconde) pour donner du temps |
---|
| 410 | CPU à l'application sauf si: |
---|
| 411 | \begin{itemize} |
---|
| 412 | \item l'application ne demande pas de temps CPU (sleep) |
---|
| 413 | \item est en attente d'une réponse matériel (IO wait) |
---|
| 414 | \end{itemize} |
---|
| 415 | Le temps CPU est donné en fonction de la priorité |
---|
| 416 | \end{block} |
---|
| 417 | \end{frame} |
---|
| 418 | |
---|
| 419 | \subsection{la ram} |
---|
| 420 | |
---|
| 421 | \begin{frame} |
---|
| 422 | \frametitle{La RAM} |
---|
| 423 | \begin{block}{le contenu} |
---|
| 424 | \begin{itemize} |
---|
| 425 | \item Mémoire vérouillée: |
---|
| 426 | \begin{itemize} |
---|
| 427 | \item le BIOS (programme interne du PC) |
---|
| 428 | \item mémoire du matériel |
---|
| 429 | \item le code et données du noyau |
---|
| 430 | \end{itemize} |
---|
| 431 | \item Mémoire haute (swappable): |
---|
| 432 | \begin{itemize} |
---|
| 433 | \item code des applications |
---|
| 434 | \item données des applications |
---|
| 435 | \end{itemize} |
---|
| 436 | \item Mémoire vive libre: |
---|
| 437 | \begin{itemize} |
---|
| 438 | \item buffers |
---|
| 439 | \item cache (disque) |
---|
| 440 | \end{itemize} |
---|
| 441 | \item swap (sur disque, très lente) |
---|
| 442 | \end{itemize} |
---|
| 443 | \end{block} |
---|
| 444 | |
---|
| 445 | \begin{alertblock}{} |
---|
| 446 | Un système qui swap un peu n'est pas surchargé ! |
---|
| 447 | \end{alertblock} |
---|
| 448 | \end{frame} |
---|
| 449 | |
---|
| 450 | \begin{frame}[fragile] |
---|
| 451 | \frametitle{Allocation par segment} |
---|
| 452 | \begin{exampleblock}{Un très mauvais code} |
---|
| 453 | \listinginput{1}{nosegfault.c} |
---|
| 454 | Et ça ne plante pas ! |
---|
| 455 | \end{exampleblock} |
---|
| 456 | |
---|
| 457 | \begin{alertblock}{Explication} |
---|
| 458 | Le système n'alloue pas des octets mais des segments |
---|
| 459 | |
---|
| 460 | Le système n'intervient que si l'application sort du segment ! |
---|
| 461 | \end{alertblock} |
---|
| 462 | \end{frame} |
---|
| 463 | |
---|
| 464 | \end{document} |
---|