Changeset 212


Ignore:
Timestamp:
11/11/08 18:47:44 (15 years ago)
Author:
nanardon
Message:
  • fix some typo, better order for files
Location:
trunk/unix
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/unix/Makefile

    r208 r212  
    2222        libsmall.h \ 
    2323        small.c \ 
     24        tree.txt \ 
    2425 
    2526unix_IMAGESJPG= \ 
  • trunk/unix/unix.tex

    r208 r212  
    161161\begin{itemize} 
    162162\item Linux: le noyau lui même (\href{http://www.kernel.org}{kernel.org}) 
    163 \item des applis eparpillées sur internet 
     163\item des applis éparpillées sur internet 
    164164\end{itemize} 
    165165\end{block} 
     
    185185\includegraphics[height=40mm]{process} 
    186186\column{2.5in} 
    187 \begin{block}{Role du kernel} 
     187\begin{block}{Rôle du kernel} 
    188188\begin{itemize} 
    189189\item gérer le matériel 
     
    198198\section{Les fichiers} 
    199199 
    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'un 
    209 \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 \vfill 
    214 \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 clavier 
    219 \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ême 
    229 \item \verb+..+ le parent 
    230 \end{itemize} 
    231 \end{block} 
    232 \vfill 
    233 \pause 
    234 \begin{alertblock}{trop de ..} 
    235 \verb+/..+ pointe sur \verb+/+ 
    236  
    237 \begin{verbatim} 
    238 $ ls ../../../../../../etc/passwd 
    239 ../../../../../../etc/passwd 
    240 \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 exister 
    251 \pause 
    252 \item nom aléatoire (écrasement basé sur un lien symbolique) 
    253 \pause 
    254 \item le placer au bon endroit 
    255 \end{itemize} 
    256 \pause 
    257 \vfill 
    258 \textbf{en pratique} 
    259 \begin{itemize} 
    260 \item shell: mktemp 
    261 \item C: mkstemp 
    262 \item Perl: module File::Temp 
    263 \end{itemize} 
    264 \end{block} 
    265 \pause 
    266 \vfill 
    267 \begin{exampleblock}{} 
    268 \small 
    269 \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.tex 
    279 6160386 -rw-r--r-- 1 olivier olivier 3049 17:30 unix.tex 
    280 \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étadata 
    288 \begin{itemize} 
    289 \item taille (3049) 
    290 \item propriétaires / droits d'accès 
    291 \item dates: d'accès (atime), création (ctime), modification (mtime) 
    292 \end{itemize} 
    293 \item éventuellement un contenu 
    294 \end{itemize} 
    295 \end{block} 
    296 \pause 
    297 \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 ouverte 
    309 \end{itemize} 
    310 \end{block} 
    311 \pause 
    312 \vfill 
    313 \begin{exampleblock}{liens hard} 
    314 {\small\begin{verbatim} 
    315 [olivier@andromede unix]$ ln fichier1 fichier2 
    316 [olivier@andromede unix]$ ls -li fichier* 
    317 6160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier1 
    318 6160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier2 
    319 [olivier@andromede unix]$ rm -f fichier1 
    320 [olivier@andromede unix]$ ls -li fichier* 
    321 6160393 -rw-r--r-- 1 olivier olivier 1101 19:54 fichier2 
    322 \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 \pause 
    333 \begin{block}{Conséquences:} 
    334 \begin{itemize} 
    335 \item le fichier n'est accessible que par l'application 
    336 \item si l'application quitte: l'espace disque est récupéré 
    337 \item la fermeture du descripteur entraine l'effacement du fichier 
    338 \end{itemize} 
    339 \pause 
    340 {\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.tex 
    353 \end{verbatim} 
    354 } 
    355 \pause 
    356 Le fichier vient d'être créé: 
    357 {\small\begin{verbatim} 
    358 [olivier@andromede unix]$ ls -l --time=c unix2.tex 
    359 -rw-r--r-- 1 olivier olivier 3049 18:47 unix2.tex 
    360 \end{verbatim} 
    361 } 
    362 \pause 
    363 Pourtant la date de modification est antérieur: 
    364 {\small\begin{verbatim} 
    365 [olivier@andromede unix]$ ls -l  unix2.tex 
    366 -rw-r--r-- 1 olivier olivier 3049 17:30 unix2.tex 
    367 \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 \pause 
    383 \item les liens symboliques (l) 
    384 \pause 
    385 \item les fichiers de périphérique (c ou b) 
    386 \pause 
    387 \item les fifo (tubes nommés, p) 
    388 \pause 
    389 \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 pas 
    399 \item les trous ne prennent pas de place 
    400 \item le système renvoient des 0 en cas de lecture 
    401 \item le fichier peut être plus gros que le système de fichier 
    402 \end{itemize} 
    403 \end{block} 
    404 \pause 
    405 \vfill 
    406 \begin{block}{utilisation ?} 
    407 Chaque fois que des données seront allouées à emplacement dans le fichier: 
    408 \begin{itemize} 
    409 \item disque virtuel 
    410 \item base de données 
    411 \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 sparsed 
    423 8 -rw-rw-r-- 1 olivier olivier 1048582 02:57 sparsed 
    424 \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 \pause 
    438 \begin{exampleblock}{Tout est fichier} 
    439 \begin{verbatim} 
    440 brw-rw---- 1 nanardon cdwriter 11, 0 12:26 /dev/sr0 
    441 \end{verbatim} 
    442  
    443 C'est le premier lecteur CDROM SCSI (SATA en réalité) 
    444  
    445 \pause 
    446 Je peux le lire comme un fichier: 
    447 \begin{verbatim} 
    448 $ dd if=/dev/sr0 bs=1024 count=20 | wc 
    449 20+0 enregistrements lus 
    450 20+0 enregistrements écrits 
    451 20480 octets (20 kB) copiés, 0,803619 s, 25,5 kB/s 
    452       0       0   20480 
    453 \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/fifo 
    462 $ cat /etc/passwd > /tmp/fifo 
    463 \end{verbatim} 
    464 \end{exampleblock} 
    465 \pause 
    466 \vfill 
    467 \begin{exampleblock}{Deuxième console:} 
    468 \begin{verbatim} 
    469 $ grep root < /tmp/fifo 
    470 root:x:0:0:root:/root:/bin/bash 
    471 \end{verbatim} 
    472 \end{exampleblock} 
    473 \pause 
    474 \vfill 
    475 \begin{block}{Cet exemple simple revient à} 
    476 \begin{verbatim} 
    477 cat /etc/passwd | grep root 
    478 \end{verbatim} 
    479 \end{block} 
    480 \end{frame} 
    481  
    482200\subsection{Systèmes de fichiers} 
    483201 
    484202\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} 
    501207\end{exampleblock} 
    502208\end{frame} 
     
    506212\begin{block}{L'emplacement des fichiers} 
    507213\begin{tabular}{ll} 
    508 \verb+/boot+&Bootloader et noyaux\\ 
     214\verb+/home+&les données utilisateurs\\ 
    509215\verb+/etc+&fichiers de configuration\\ 
    510216\verb+/bin+, \verb+/usr/bin+&les executables utilisateur\\ 
     
    534240Le Filesystem Hierarchy Standard normalise l'empacement des fichiers 
    535241\end{alertblock} 
     242\end{frame} 
     243 
     244\begin{frame}[fragile] 
     245\frametitle{principe} 
     246\begin{block}{le montage} 
     247Le système de fichiers est stocké sur un support (disque, fichier, cdrom, \ldots) 
     248 
     249Le 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[...] 
     258virgo:/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 
     322On 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 
     3596160386 -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}{} 
     378Créer un fichier créer l'inode\\ 
     379Effacer 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* 
     3976160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier1 
     3986160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier2 
     399[olivier@andromede unix]$ rm -f fichier1 
     400[olivier@andromede unix]$ ls -li fichier* 
     4016160393 -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} 
     421perl 23536 ol 3w REG  8,7  0  49065 /tmp/opened (deleted) 
     422\end{verbatim} 
     423} 
     424Utile pour les fichiers temporaires. 
     425\end{block} 
     426\end{frame} 
     427 
     428\begin{frame}[fragile] 
     429\begin{alertblock}{quand ctime dépasse mtime} 
     430Copie 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 
     436Le 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 
     443Pourtant 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 ?} 
     471Chaque 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 
     4878 -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} 
     504brw-rw---- 1 nanardon cdwriter 11, 0 12:26 /dev/sr0 
     505\end{verbatim} 
     506 
     507C'est le premier lecteur CDROM SCSI (SATA en réalité) 
     508 
     509\pause 
     510Je peux le lire comme un fichier: 
     511\begin{verbatim} 
     512$ dd if=/dev/sr0 bs=1024 count=20 | wc 
     51320+0 enregistrements lus 
     51420+0 enregistrements écrits 
     51520480 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 
     534root: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} 
     541cat /etc/passwd | grep root 
     542\end{verbatim} 
     543\end{block} 
    536544\end{frame} 
    537545 
Note: See TracChangeset for help on using the changeset viewer.