Changeset 212
- Timestamp:
- 11/11/08 18:47:44 (15 years ago)
- Location:
- trunk/unix
- Files:
-
- 1 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/unix/Makefile
r208 r212 22 22 libsmall.h \ 23 23 small.c \ 24 tree.txt \ 24 25 25 26 unix_IMAGESJPG= \ -
trunk/unix/unix.tex
r208 r212 161 161 \begin{itemize} 162 162 \item Linux: le noyau lui même (\href{http://www.kernel.org}{kernel.org}) 163 \item des applis eparpillées sur internet163 \item des applis éparpillées sur internet 164 164 \end{itemize} 165 165 \end{block} … … 185 185 \includegraphics[height=40mm]{process} 186 186 \column{2.5in} 187 \begin{block}{R ole du kernel}187 \begin{block}{Rôle du kernel} 188 188 \begin{itemize} 189 189 \item gérer le matériel … … 198 198 \section{Les fichiers} 199 199 200 \subsection{Les fichiers}201 202 \begin{frame}[fragile]203 \frametitle{Nom de fichiers}204 205 \begin{block}{Accès aux fichiers}206 \begin{itemize}207 \item le séparateur est \verb+/+208 \item plusieurs \verb+/+ n'en font qu'un209 \item la longueur maximal d'un chemin est de 1024 (POSIX)210 \item tout les caractères sont permis sauf \verb+/+ et \emph{NULL}211 \end{itemize}212 \end{block}213 \vfill214 \begin{alertblock}{On évitera cependant}215 \begin{itemize}216 \item l'espace (qu'il faut échaper sur la ligne de commande)217 \item \verb+-+ (surtout en premier, option en ligne de commande)218 \item ce qui ne se tape pas au clavier219 \item les accents (problème d'encodage)220 \end{itemize}221 \end{alertblock}222 \end{frame}223 224 \begin{frame}[fragile]225 \frametitle{. et ..}226 \begin{block}{chaque dossier contient:}227 \begin{itemize}228 \item \verb+.+ le répertoire lui même229 \item \verb+..+ le parent230 \end{itemize}231 \end{block}232 \vfill233 \pause234 \begin{alertblock}{trop de ..}235 \verb+/..+ pointe sur \verb+/+236 237 \begin{verbatim}238 $ ls ../../../../../../etc/passwd239 ../../../../../../etc/passwd240 \end{verbatim}241 242 On rebondit sur \verb+/+ et on redescend dans \verb+/etc/passwd+.243 \end{alertblock}244 \end{frame}245 246 \begin{frame}[fragile]247 \frametitle{Fichiers temporaires}248 \begin{block}{Un fichier qu'on ne va pas garder, mais:}249 \begin{itemize}250 \item il ne doit pas exister251 \pause252 \item nom aléatoire (écrasement basé sur un lien symbolique)253 \pause254 \item le placer au bon endroit255 \end{itemize}256 \pause257 \vfill258 \textbf{en pratique}259 \begin{itemize}260 \item shell: mktemp261 \item C: mkstemp262 \item Perl: module File::Temp263 \end{itemize}264 \end{block}265 \pause266 \vfill267 \begin{exampleblock}{}268 \small269 \listinginput[1]{1}{temp.sh}270 \end{exampleblock}271 \end{frame}272 273 \begin{frame}[fragile]274 \frametitle{L'inode}275 276 \begin{exampleblock}{Le fichier est matérialisé par une inode}277 {\small\begin{verbatim}278 [olivier@andromede unix]$ ls -li unix.tex279 6160386 -rw-r--r-- 1 olivier olivier 3049 17:30 unix.tex280 \end{verbatim}281 }282 \end{exampleblock}283 284 \begin{block}{L'inode contient}285 \begin{itemize}286 \item un numéro (6160386)287 \item des métadata288 \begin{itemize}289 \item taille (3049)290 \item propriétaires / droits d'accès291 \item dates: d'accès (atime), création (ctime), modification (mtime)292 \end{itemize}293 \item éventuellement un contenu294 \end{itemize}295 \end{block}296 \pause297 \begin{alertblock}{}298 Créer un fichier créer l'inode\\299 Effacer un fichier efface l'inode (si plus référencée)300 \end{alertblock}301 \end{frame}302 303 \begin{frame}[fragile]304 \frametitle{existance d'un fichier}305 \begin{block}{un fichier existe tant que}306 \begin{itemize}307 \item l'inode est référencée par un nom (lien hard)308 \item l'inode est ouverte309 \end{itemize}310 \end{block}311 \pause312 \vfill313 \begin{exampleblock}{liens hard}314 {\small\begin{verbatim}315 [olivier@andromede unix]$ ln fichier1 fichier2316 [olivier@andromede unix]$ ls -li fichier*317 6160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier1318 6160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier2319 [olivier@andromede unix]$ rm -f fichier1320 [olivier@andromede unix]$ ls -li fichier*321 6160393 -rw-r--r-- 1 olivier olivier 1101 19:54 fichier2322 \end{verbatim}323 }324 \end{exampleblock}325 \end{frame}326 327 \begin{frame}[fragile]328 \begin{exampleblock}{deleteopen.pl}329 \frametitle{existance d'un fichier}330 \listinginput[2]{1}{deleteopen.pl}331 \end{exampleblock}332 \pause333 \begin{block}{Conséquences:}334 \begin{itemize}335 \item le fichier n'est accessible que par l'application336 \item si l'application quitte: l'espace disque est récupéré337 \item la fermeture du descripteur entraine l'effacement du fichier338 \end{itemize}339 \pause340 {\small\begin{verbatim}341 perl 23536 ol 3w REG 8,7 0 49065 /tmp/opened (deleted)342 \end{verbatim}343 }344 Utile pour les fichiers temporaires.345 \end{block}346 \end{frame}347 348 \begin{frame}[fragile]349 \begin{alertblock}{quand ctime dépasse mtime}350 Copie en préservant les métadata:351 {\small\begin{verbatim}352 [olivier@andromede unix]$ cp -a unix.tex unix2.tex353 \end{verbatim}354 }355 \pause356 Le fichier vient d'être créé:357 {\small\begin{verbatim}358 [olivier@andromede unix]$ ls -l --time=c unix2.tex359 -rw-r--r-- 1 olivier olivier 3049 18:47 unix2.tex360 \end{verbatim}361 }362 \pause363 Pourtant la date de modification est antérieur:364 {\small\begin{verbatim}365 [olivier@andromede unix]$ ls -l unix2.tex366 -rw-r--r-- 1 olivier olivier 3049 17:30 unix2.tex367 \end{verbatim}368 }369 \end{alertblock}370 \end{frame}371 372 \begin{frame}[fragile]373 \frametitle{les types de fichiers}374 \begin{exampleblock}{ls -l}375 - \emph{rw-r--r-- 1 olivier olivier 3049 17:30 unix2.tex}376 \end{exampleblock}377 378 \begin{block}{les différents types}379 \begin{itemize}380 \item les simples fichiers (-)381 \item les répertoires (d)382 \pause383 \item les liens symboliques (l)384 \pause385 \item les fichiers de périphérique (c ou b)386 \pause387 \item les fifo (tubes nommés, p)388 \pause389 \item les sockets (=)390 \end{itemize}391 \end{block}392 \end{frame}393 394 \begin{frame}[fragile]395 \frametitle{les fichiers à trous (sparse files)}396 \begin{block}{théorie}397 \begin{itemize}398 \item certaines données n'existent pas399 \item les trous ne prennent pas de place400 \item le système renvoient des 0 en cas de lecture401 \item le fichier peut être plus gros que le système de fichier402 \end{itemize}403 \end{block}404 \pause405 \vfill406 \begin{block}{utilisation ?}407 Chaque fois que des données seront allouées à emplacement dans le fichier:408 \begin{itemize}409 \item disque virtuel410 \item base de données411 \end{itemize}412 \end{block}413 \end{frame}414 415 \begin{frame}[fragile]416 \frametitle{fichiers à trous: exemple}417 \begin{exampleblock}{sparce.c}418 \begin{small}419 \listinginput{1}{sparse.c}420 421 \begin{verbatim}422 [olivier@andromede unix]$ ls -ls sparsed423 8 -rw-rw-r-- 1 olivier olivier 1048582 02:57 sparsed424 \end{verbatim}425 \end{small}426 \end{exampleblock}427 \end{frame}428 429 \begin{frame}[fragile]430 \frametitle{Fichier de périphérique}431 \begin{block}{2 types}432 \begin{itemize}433 \item block (b)434 \item caractères (c)435 \end{itemize}436 \end{block}437 \pause438 \begin{exampleblock}{Tout est fichier}439 \begin{verbatim}440 brw-rw---- 1 nanardon cdwriter 11, 0 12:26 /dev/sr0441 \end{verbatim}442 443 C'est le premier lecteur CDROM SCSI (SATA en réalité)444 445 \pause446 Je peux le lire comme un fichier:447 \begin{verbatim}448 $ dd if=/dev/sr0 bs=1024 count=20 | wc449 20+0 enregistrements lus450 20+0 enregistrements écrits451 20480 octets (20 kB) copiés, 0,803619 s, 25,5 kB/s452 0 0 20480453 \end{verbatim}454 \end{exampleblock}455 \end{frame}456 457 \begin{frame}[fragile]458 \frametitle{les fifos}459 \begin{exampleblock}{Première console:}460 \begin{verbatim}461 $ mkfifo /tmp/fifo462 $ cat /etc/passwd > /tmp/fifo463 \end{verbatim}464 \end{exampleblock}465 \pause466 \vfill467 \begin{exampleblock}{Deuxième console:}468 \begin{verbatim}469 $ grep root < /tmp/fifo470 root:x:0:0:root:/root:/bin/bash471 \end{verbatim}472 \end{exampleblock}473 \pause474 \vfill475 \begin{block}{Cet exemple simple revient à}476 \begin{verbatim}477 cat /etc/passwd | grep root478 \end{verbatim}479 \end{block}480 \end{frame}481 482 200 \subsection{Systèmes de fichiers} 483 201 484 202 \begin{frame}[fragile] 485 \frametitle{principe} 486 \begin{block}{le montage} 487 Le système de fichier est stocké sur un support (disque, fichier, cdrom, \ldots) 488 489 Le noyau le fait apparaitre dans un répertoire. 490 \end{block} 491 \vfill 492 \begin{exampleblock}{la commande mount} 493 \begin{verbatim} 494 [olivier@andromede unix]$ mount 495 /dev/sda3 on / type ext3 (rw,noatime) 496 /dev/sda8 on /home type ext3 (rw,noatime) 497 [...] 498 virgo:/home/data on /mnt/disk type nfs 499 (ro,addr=192.168.76.1) 500 \end{verbatim} 203 \frametitle{Vue globale} 204 \begin{exampleblock}{tree / -L 2 -d} 205 \tiny 206 \listinginput[5]{1}{tree.txt} 501 207 \end{exampleblock} 502 208 \end{frame} … … 506 212 \begin{block}{L'emplacement des fichiers} 507 213 \begin{tabular}{ll} 508 \verb+/ boot+&Bootloader et noyaux\\214 \verb+/home+&les données utilisateurs\\ 509 215 \verb+/etc+&fichiers de configuration\\ 510 216 \verb+/bin+, \verb+/usr/bin+&les executables utilisateur\\ … … 534 240 Le Filesystem Hierarchy Standard normalise l'empacement des fichiers 535 241 \end{alertblock} 242 \end{frame} 243 244 \begin{frame}[fragile] 245 \frametitle{principe} 246 \begin{block}{le montage} 247 Le système de fichiers est stocké sur un support (disque, fichier, cdrom, \ldots) 248 249 Le noyau le fait apparaitre dans un répertoire. 250 \end{block} 251 \vfill 252 \begin{exampleblock}{la commande mount} 253 \begin{verbatim} 254 [olivier@andromede unix]$ mount 255 /dev/sda3 on / type ext3 (rw,noatime) 256 /dev/sda8 on /home type ext3 (rw,noatime) 257 [...] 258 virgo:/home/data on /mnt/disk type nfs 259 (ro,addr=192.168.76.1) 260 \end{verbatim} 261 \end{exampleblock} 262 \end{frame} 263 264 \subsection{Les fichiers} 265 266 \begin{frame}[fragile] 267 \frametitle{Nom de fichiers} 268 269 \begin{block}{Accès aux fichiers} 270 \begin{itemize} 271 \item le séparateur est \verb+/+ 272 \item plusieurs \verb+/+ n'en font qu'un 273 \item la longueur maximale d'un chemin est de 1024 (POSIX) 274 \item tous les caractères sont permis sauf \verb+/+ et \emph{NULL} 275 \end{itemize} 276 \end{block} 277 \vfill 278 \begin{alertblock}{On évitera cependant} 279 \begin{itemize} 280 \item l'espace (qu'il faut échaper sur la ligne de commande) 281 \item \verb+-+ (surtout en premier, option en ligne de commande) 282 \item ce qui ne se tape pas au clavier 283 \item les accents (problème d'encodage) 284 \end{itemize} 285 \end{alertblock} 286 \end{frame} 287 288 \begin{block}{les différents types} 289 \begin{itemize} 290 \item les simples fichiers (-) 291 \item les répertoires (d) 292 \pause 293 \item les liens symboliques (l) 294 \pause 295 \item les fichiers de périphérique (c ou b) 296 \pause 297 \item les fifo (tubes nommés, p) 298 \pause 299 \item les sockets (=) 300 \end{itemize} 301 \end{block} 302 \end{frame} 303 304 \begin{frame}[fragile] 305 \frametitle{. et ..} 306 \begin{block}{chaque dossier contient:} 307 \begin{itemize} 308 \item \verb+.+ le répertoire lui même 309 \item \verb+..+ le parent 310 \end{itemize} 311 \end{block} 312 \vfill 313 \pause 314 \begin{alertblock}{trop de ..} 315 \verb+/..+ pointe sur \verb+/+ 316 317 \begin{verbatim} 318 $ ls ../../../../../../etc/passwd 319 ../../../../../../etc/passwd 320 \end{verbatim} 321 322 On rebondit sur \verb+/+ et on redescend dans \verb+/etc/passwd+. 323 \end{alertblock} 324 \end{frame} 325 326 \begin{frame}[fragile] 327 \frametitle{Fichiers temporaires} 328 \begin{block}{Un fichier qu'on ne va pas garder, mais:} 329 \begin{itemize} 330 \item il ne doit pas exister 331 \pause 332 \item nom aléatoire (écrasement basé sur un lien symbolique) 333 \pause 334 \item le placer au bon endroit 335 \end{itemize} 336 \pause 337 \vfill 338 \textbf{en pratique} 339 \begin{itemize} 340 \item shell: mktemp 341 \item C: mkstemp 342 \item Perl: module File::Temp 343 \end{itemize} 344 \end{block} 345 \pause 346 \vfill 347 \begin{exampleblock}{} 348 \small 349 \listinginput[1]{1}{temp.sh} 350 \end{exampleblock} 351 \end{frame} 352 353 \begin{frame}[fragile] 354 \frametitle{L'inode} 355 356 \begin{exampleblock}{Le fichier est matérialisé par une inode} 357 {\small\begin{verbatim} 358 [olivier@andromede unix]$ ls -li unix.tex 359 6160386 -rw-r--r-- 1 olivier olivier 3049 17:30 unix.tex 360 \end{verbatim} 361 } 362 \end{exampleblock} 363 364 \begin{block}{L'inode contient} 365 \begin{itemize} 366 \item un numéro (6160386) 367 \item des métadata 368 \begin{itemize} 369 \item taille (3049) 370 \item propriétaires / droits d'accès 371 \item dates: d'accès (atime), création (ctime), modification (mtime) 372 \end{itemize} 373 \item éventuellement un contenu 374 \end{itemize} 375 \end{block} 376 \pause 377 \begin{alertblock}{} 378 Créer un fichier créer l'inode\\ 379 Effacer un fichier efface l'inode (si plus référencée) 380 \end{alertblock} 381 \end{frame} 382 383 \begin{frame}[fragile] 384 \frametitle{existence d'un fichier} 385 \begin{block}{un fichier existe tant que} 386 \begin{itemize} 387 \item l'inode est référencée par un nom (lien hard) 388 \item l'inode est ouverte 389 \end{itemize} 390 \end{block} 391 \pause 392 \vfill 393 \begin{exampleblock}{liens hard} 394 {\small\begin{verbatim} 395 [olivier@andromede unix]$ ln fichier1 fichier2 396 [olivier@andromede unix]$ ls -li fichier* 397 6160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier1 398 6160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier2 399 [olivier@andromede unix]$ rm -f fichier1 400 [olivier@andromede unix]$ ls -li fichier* 401 6160393 -rw-r--r-- 1 olivier olivier 1101 19:54 fichier2 402 \end{verbatim} 403 } 404 \end{exampleblock} 405 \end{frame} 406 407 \begin{frame}[fragile] 408 \begin{exampleblock}{deleteopen.pl} 409 \frametitle{existance d'un fichier} 410 \listinginput[2]{1}{deleteopen.pl} 411 \end{exampleblock} 412 \pause 413 \begin{block}{Conséquences:} 414 \begin{itemize} 415 \item le fichier n'est accessible que par l'application 416 \item si l'application quitte: l'espace disque est récupéré 417 \item la fermeture du descripteur entraine l'effacement du fichier 418 \end{itemize} 419 \pause 420 {\small\begin{verbatim} 421 perl 23536 ol 3w REG 8,7 0 49065 /tmp/opened (deleted) 422 \end{verbatim} 423 } 424 Utile pour les fichiers temporaires. 425 \end{block} 426 \end{frame} 427 428 \begin{frame}[fragile] 429 \begin{alertblock}{quand ctime dépasse mtime} 430 Copie en préservant les métadata: 431 {\small\begin{verbatim} 432 [olivier@andromede unix]$ cp -a unix.tex unix2.tex 433 \end{verbatim} 434 } 435 \pause 436 Le fichier vient d'être créé: 437 {\small\begin{verbatim} 438 [olivier@andromede unix]$ ls -l --time=c unix2.tex 439 -rw-r--r-- 1 olivier olivier 3049 18:47 unix2.tex 440 \end{verbatim} 441 } 442 \pause 443 Pourtant la date de modification est antérieur: 444 {\small\begin{verbatim} 445 [olivier@andromede unix]$ ls -l unix2.tex 446 -rw-r--r-- 1 olivier olivier 3049 17:30 unix2.tex 447 \end{verbatim} 448 } 449 \end{alertblock} 450 \end{frame} 451 452 \begin{frame}[fragile] 453 \frametitle{les types de fichiers} 454 \begin{exampleblock}{ls -l} 455 - \emph{rw-r--r-- 1 olivier olivier 3049 17:30 unix2.tex} 456 \end{exampleblock} 457 458 \begin{frame}[fragile] 459 \frametitle{les fichiers à trous (sparse files)} 460 \begin{block}{théorie} 461 \begin{itemize} 462 \item certaines données n'existent pas 463 \item les trous ne prennent pas de place 464 \item le système renvoient des 0 en cas de lecture 465 \item le fichier peut être plus gros que le système de fichiers 466 \end{itemize} 467 \end{block} 468 \pause 469 \vfill 470 \begin{block}{utilisation ?} 471 Chaque fois que des données seront allouées à des emplacements dans le fichier: 472 \begin{itemize} 473 \item disques virtuels 474 \item bases de données 475 \end{itemize} 476 \end{block} 477 \end{frame} 478 479 \begin{frame}[fragile] 480 \frametitle{fichiers à trous: exemple} 481 \begin{exampleblock}{sparce.c} 482 \begin{small} 483 \listinginput{1}{sparse.c} 484 485 \begin{verbatim} 486 [olivier@andromede unix]$ ls -ls sparsed 487 8 -rw-rw-r-- 1 olivier olivier 1048582 02:57 sparsed 488 \end{verbatim} 489 \end{small} 490 \end{exampleblock} 491 \end{frame} 492 493 \begin{frame}[fragile] 494 \frametitle{Fichier de périphérique} 495 \begin{block}{2 types} 496 \begin{itemize} 497 \item block (b) 498 \item caractères (c) 499 \end{itemize} 500 \end{block} 501 \pause 502 \begin{exampleblock}{Tout est fichier} 503 \begin{verbatim} 504 brw-rw---- 1 nanardon cdwriter 11, 0 12:26 /dev/sr0 505 \end{verbatim} 506 507 C'est le premier lecteur CDROM SCSI (SATA en réalité) 508 509 \pause 510 Je peux le lire comme un fichier: 511 \begin{verbatim} 512 $ dd if=/dev/sr0 bs=1024 count=20 | wc 513 20+0 enregistrements lus 514 20+0 enregistrements écrits 515 20480 octets (20 kB) copiés, 0,803619 s, 25,5 kB/s 516 0 0 20480 517 \end{verbatim} 518 \end{exampleblock} 519 \end{frame} 520 521 \begin{frame}[fragile] 522 \frametitle{les fifos} 523 \begin{exampleblock}{Première console:} 524 \begin{verbatim} 525 $ mkfifo /tmp/fifo 526 $ cat /etc/passwd > /tmp/fifo 527 \end{verbatim} 528 \end{exampleblock} 529 \pause 530 \vfill 531 \begin{exampleblock}{Deuxième console:} 532 \begin{verbatim} 533 $ grep root < /tmp/fifo 534 root:x:0:0:root:/root:/bin/bash 535 \end{verbatim} 536 \end{exampleblock} 537 \pause 538 \vfill 539 \begin{block}{Cet exemple simple revient à} 540 \begin{verbatim} 541 cat /etc/passwd | grep root 542 \end{verbatim} 543 \end{block} 536 544 \end{frame} 537 545
Note: See TracChangeset
for help on using the changeset viewer.