<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <link REL="STYLESHEET" TYPE="text/css" TITLE="Style DILIB" HREF="../../dilib.css"> <title>CORRIGÉS TRAVAUX PRATIQUES (Nouvelles commandes) - UNIX</title> <style type="text/css"> Q { font-style: italic; } TABLE { text-align: center; } .reponse { font-style: italic; } </style> </head> <body> <h1>CORRIGÉS TRAVAUX PRATIQUES<br>(Nouvelles commandes)</h1> <h3>Commandes utilisateurs</h3> <ul><a name="passwd"></a> <li>Changez votre mot de passe. <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> <em>passwd: Changing password for [userid]<br> Enter login password : </em>truc<br> <em>New password : </em>machin<br> <em>New password : </em>machin </td></tr> </table><br> </li> <a name="uid"></a> <li> Identifiez-vous : quel sont votre user id (uid) et votre groupe (gid) ? <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left">whoami<br> <em>[votre username]</em><br> id<br><em>uid=[votre username] gid=users</em> </td></tr> </table><br> </li> </ul> <h3>Gestion des droits</h3> <ul><a name="niv"></a> <li> En restant dans votre répertoire de travail (<code>UnixShell</code>), listez complètement le contenu de votre <code>home directory</code>. Décrivez ce que vous y trouvez : <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> UnixShell est à 2 niveaux sous votre home directory :<br> ll ../.. </td></tr> </table><br> <ul><a name="rep"></a> <li> quels sont les fichiers et répertoires présents ? <table bgcolor="yellow" border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> Des répertoires comme : ./ ../ public_html/<br> Des fichiers comme : .profile </td></tr> </table><br> </li> <a name="caches"></a> <li> lesquels sont cachés ? <table border="1" class="commands" style="margin-left:0;"> <tr><td>Tous ceux qui commencent par un point comme .profile</td></tr> </table><br> </li> <a name="proprietaire"></a> <li> quels sont leurs propriétaires et groupes attachés ? <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> Propriétaires : surtout vous, éventuellement l'utilisateur root<br>Groupes : surtout users, éventuellement d'autres </td></tr> </table><br> </li> <a name="droits"></a> <li> quels sont les droits afférants ? <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> Possiblement variable, mais dépendant surtout de votre umask (voir la suite) </td></tr> </table><br> </li> </ul> </li> <a name="umask"></a> <li> Copiez dans votre répertoire <code>UnixShell</code> le fichier <a href="testUmask.txt"><code>testUmask.txt</code></a> (par un clic droit sur ce lien). Ses droits initiaux sont rwxrwxr-x. Quel est votre umask ? <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> Dépend de votre configuration, mais s'observe en faisant un ll pour afficher les droits pris par le fichier testUmask.txt lors de la copie sous votre compte. En prenant pour exemple les droits présentés plus haut : rwxrwxr-x<br> user (u) : rwx, binaire 111 octal 7<br> group (g) : rwx, binaire 111 octal 7<br> other (o) : r-x, binaire 101 octal 5<br> Donc profil octal 775, d'où un umask de 002 (sa négation en octal).</br> On peut aussi lancer <code>umask</code> comme commande en ligne...</td></tr> </table><br> </li> <a name="chmod"></a> <li> Modifiez les droits de ce fichier de deux façons pour obtenir ceux qui suivent et à traiter en séquence de proche en proche pour les trois cas. La première façon de procéder utilisera un profil octal <em>(pas de négation de celui-ci comme pour umask)</em>, la seconde des lettres. Contrôlez vos actions à chaque étape. <ul> <li>rwx------<br> <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> chmod 700 testUmask.txt<br> chmod go-rwx testUmask.txt<br> ll<br> <em>-rwx------ 1 [uid] users 36 May 5 13:04 testUmask.txt</em> </td></tr> </table> </li> <li>rwxrwxrwx<br> <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> chmod 777 testUmask.txt<br> chmod a+rwx testUmask.txt<br> ll<br> <em>-rwxrwxrwx 1 [uid] users 36 May 5 13:05 testUmask.txt</em> </td></tr> </table> </li> <li>rwxr-xr--<br> <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> chmod 754 testUmask.txt<br> chmod go-w,o-x testUmask.txt<br> ll<br> <em>-rwxr-xr-- 1 [uid] users 36 May 5 13:06 testUmask.txt</em> </td></tr> </table> </li> </ul><br> </li> <a name="find"></a> <li> Identifiez le chemin où se trouve votre fichier <code>.profile</code>, à partir de votre <code>home directory</code>. <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> find ../.. -name .profile<br> <em>/dps/users/[uid]/.profile</em> </td></tr> </table><br> </li> <a name="users"></a> <li> Affichez tous les fichiers du groupe <code>users</code> de votre répertoire <code>UnixShell</code>. Contrôlez ce résultat avec un listing complet de son contenu. <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> find /dps/users/[uid]/public_html/UnixShell -group users<br> <em>/dps/users/[uid]/public_html/UnixShell/monHistorique.txt<br> /dps/users/[uid]/public_html/UnixShell/testUmask.txt</em><br> ll<br> <em>drwxrwxr-x 4 [uid] users 1024 May 5 13:15 ./<br> drwxrwxr-x 16 [uid] users 512 Apr 25 16:35 ../<br> -rwxrwxr-x 1 [uid] users 212 May 5 10:10 monHistorique.txt<br> -rwxrwxr-x 1 [uid] users 25 Apr 5 13:01 testUmask.txt</em> </td></tr> </table><br> </li> <a name="diff"></a> <li> Copiez dans votre répertoire <code>UnixShell</code> le fichier <a href="testDiff1.txt"><code>testDiff1.txt</code></a> (par un clic droit sur ce lien). Ouvrez-le dans xemacs et modifiez-le selon les consignes qui s'y trouvent. Ensuite, sauvegardez-le comme <code>testDiff2.txt</code>. Comparez les deux fichiers, analysez le rapport obtenu en fonction de vos actions. <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> diff testDiff1.txt testDiff2.txt<br> <em>3a4<br> > LIGNE AJOUTEE<br> 6d6<br> < LIGNE A SUPPRIMER<br> 9c9<br> < Modifiez-moi !!!<br> ---<br> > Modifiée</em> </td></tr> </table><br> </li> </ul> <h3>Archivage et compression</h3> <ul><a name="tarUnixShell"></a> <li> Archivez en un seul tarfile tout le contenu de votre répertoire <code>UnixShell</code> (placez-vous au-dessus). Contrôlez le fichier <code>.tar</code> résultat. <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> Le plus simple est d'abord de vous déplacer dans le répertoire parent de <code>UnixShell</code> pour l'archiver :<br> cd ..<br> pwd<br> <em>/dps/users/[uid]/public_html</em> <br>ll<br> <em>drwxrwxr-x 4 [uid] users 1024 Apr 5 13:15 ./<br> drwxrwxr-x 16 [uid] users 512 Apr 25 16:35 ../<br> drwxrwxr-x 4 [uid] users 1024 Apr 25 10:03 UnixShell</em><br><br> tar -cvf Archives.tar UnixShell<br> ll<br> <em>drwxrwxr-x 4 [uid] users 1024 Apr 5 13:15 ./<br> drwxrwxr-x 16 [uid] users 512 Apr 25 16:35 ../<br> drwxrwxr-x 4 [uid] users 1024 Apr 25 10:03 UnixShell<br> -rwxrwxr-x 1 [uid] users 10240 May 5 14:23 Archives.tar</em><br><br> tar -tvf Archives.tar<br> <em>drwxrwxr-x [uid]/users 0 2003-05-05 14:02 UnixShell/<br> -rwxrwxr-x [uid]/users 212 2003-05-05 10:10 UnixShell/monHistorique.txt<br> -rwxrwxr-x [uid]/users 261 2003-05-05 14:12 UnixShell/testDiff1.txt<br> -rwxrwxr-x [uid]/users 249 2003-05-05 14:13 UnixShell/testDiff2.txt</em><br> </td></tr> </table><br> </li> <a name="tarzip"></a> <li> Créez le sous-répertoire <code>tarzip</code> (sous <code>UnixShell</code> où vous revenez) et déplacez-y votre tarfile. Sans vous déplacer dans ce sous-répertoire, désarchivez le tarfile et contrôlez le résultat. <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> cd UnixShell<br> pwd<br> <em>/dps/users/[uid]/public_html/UnixShell</em><br><br> mkdir tarzip<br> mv ../Archives.tar tarzip<br><br> tar -xvf tarzip/Archives.tar<br> <em>UnixShell/<br> UnixShell/monHistorique.txt<br> UnixShell/testDiff1.txt<br> UnixShell/testDiff2.txt<br></em><br> ll<br> <em>drwxrwxr-x 4 [uid] users 512 May 5 15:25 ./<br> drwxrwxr-x 4 [uid] users 1024 Apr 25 10:03 ../<br> drwxrwxr-x 4 [uid] users 1024 May 5 14:23 UnixShell/<br> -rwxrwxr-x 1 [uid] users 212 May 5 10:10 monHistorique.txt<br> drwxrwxr-x 2 [uid] users 512 May 5 15:18 tarzip/<br> -rwxrwxr-x 1 [uid] users 261 May 5 14:12 testDiff1.txt<br> -rwxrwxr-x 1 [uid] users 249 May 5 14:13 testDiff2.txt</em><br><br> Si vous avez travaillé comme cela, vous devez constater que le répertoire <code>UnixShell</code> s'est désarchivé sous lui-même... C'est bien sûr un exemple se voulant surtout didactique. Dans une situation plus concrète, le désarchivage doit s'opérer aux bons endroits ! </td></tr> </table><br> </li> <a name="gzip"></a> <li> Toujours en restant sous <code>UnixShell</code>, compressez le tarfile en <code>.gz</code>. Affichez ensuite les informations relatives aux tailles de fichiers et au ratio de compression.<br> <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> gzip tarzip/Archives.tar<br> ll tarzip<br> <em>-rwxrwxr-x 1 [uid] users 612 May 5 16:23 Archives.tar.gz</em><br><br> gzip -l tarzip/Archives.tar.gz<br> <em>compressed uncompr. ratio uncompressed_name<br> 612 10240 94.3% tarzip/Archives.tar</em><br> </td></tr> </table><br> </li> <a name="gunzip"></a> <li> Toujours en restant sous <code>UnixShell</code>, décompressez le tarfile.gz sur le disque. Puis vérifiez le résultat en listing complet. Recompressez le tarfile et contrôlez de nouveau. <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> gunzip tarzip/Archives.tar<br> ll tarzip<br> <em>-rwxrwxr-x 1 [uid] users 10240 May 5 14:23 Archives.tar</em><br><br> gzip tarzip/Archives.tar<br> <em>-rwxrwxr-x 1 [uid] users 612 May 5 16:48 Archives.tar.gz</em><br> </td></tr> </table><br> </li> <a name="gzcat"></a> <li> Toujours en restant sous <code>UnixShell</code>, et sans décompresser le tarfile.gz sur le disque, comptez le nombre de lignes non compressées qu'il renferme. <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> gunzip -c tarzip/Archives.tar | wc -l </td></tr> </table><br> </li> </ul> <h3>Gestion des processus</h3> <ul> <li>Activez plusieurs processus pour pouvoir travailler avec eux : <ul><a name="T1"></a> <li>Dans votre terminal courant, ouvrez un xemacs si ce n'est pas déjà fait. Avec TeraTerm, omettez ici le &. Ouvrez-y l'un de vos fichiers texte puis quittez xemacs, SANS FERMER, avec <code>control-z</code>. Vous récupérez la main en conservant xemacs ouvert. <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> Ce premier terminal sera appelé T1 par la suite. </td></tr> </table><br> </li> <a name="T2"></a> <li> Ouvrez un second terminal (où vous pouvez rester en <code>home directory</code>). <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> Ce second terminal sera appelé T2 par la suite. </td></tr> </table><br> </li> </ul> </li> <a name="ps"></a> <li>Affichez, dans chaque terminal, vos processus actifs. <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> Les numéros de processus qui suivent sont bien sûr donnés à titre indicatif. Les <code>PID</code> que vous aurez seront différents lors de vos TP.<br><br> <b>POUR T1 :</b><br> ps<br> <em> PID TTY TIME CMD<br> 14229 pts/19 0:01 xemacs-2<br> 13510 pts/19 0:00 ksh</em><br><br> <b>POUR T2 :</b><br> ps<br> <em> PID TTY TIME CMD<br> 13843 pts/20 0:00 ksh</em> </td></tr> </table><br> </li> <a name="top"></a> <li> Affichez, dans votre terminal principal, la liste de tous les processus du site (sans altération de priorité). Comparez avec les deux commandes précédentes. Qu'en déduire ? <table bgcolor="yellow" border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> <b>POUR T1 :</b><br> top<br><em> last pid: 16210; load averages: 0.05, 0.09, 0.11 11:01:28<br> 260 processes: 257 sleeping, 1 zombie, 1 stopped, 1 on cpu<br> CPU states: % idle, % user, % kernel, % iowait, % swap<br> Memory: 2048M real, 1301M free, 318M swap in use, 5201M swap free<br><br> PID USERNAME THR PRI NICE SIZE RES STATE TIME CPU COMMAND<br> 16210 [uid] 1 38 0 1896K 1232K cpu/1 0:00 0.46% top<br> 19380 vidal 1 46 4 16M 13M sleep 0:36 0.24% xemacs-21.4.10<br> 14977 haumont 1 58 0 8496K 5920K sleep 0:00 0.21% vim<br> 14229 [uid] 1 42 4 17M 14M sleep 0:35 0.17% xemacs-2<br> 12720 stan 4 28 10 4424K 1960K sleep 0:10 0.05% httpd<br> 14292 zasadzin 1 58 0 5000K 3608K sleep 0:00 0.04% textedit<br> 29591 root 23 0 0 53M 23M sleep 9:13 0.01% java<br> 13469 morelc 1 38 0 1824K 1192K sleep 0:00 0.01% ksh<br> 17942 haumont 1 58 0 2864K 2248K sleep 0:00 0.01% olwm<br> 19317 vidal 8 58 0 9880K 7920K sleep 0:01 0.01% dtwm<br> 12719 stan 4 28 10 4424K 1792K sleep 0:10 0.00% httpd<br> 12724 stan 4 28 10 4424K 2064K sleep 0:09 0.00% httpd<br> 16200 morelc 1 48 0 1176K 888K sleep 0:00 0.00% more<br> 16199 morelc 1 58 0 976K 640K sleep 0:00 0.00% DamCat<br> </em><br> <b>Que déduire :</b><br> <ul> <li> Tous vos processus ne sont pas nécessairement visibles avec un <code>top</code>. Ceci dépend des priorités qui leur sont affectées (col. PRI/NICE) </li> <li> Vos principaux processus sont repérables parmi l'ensemble de ceux du site. Cela permet de savoir s'il faut altérer la priorité de l'un (ou de plusieurs) de vos processus pour laisser de la CPU à d'autres processus plus importants </li> <li> La place prise en mémoire par vos processus vous permet d'en suivre l'exécution (en laissant un <code>top</code> actif pendant plusieurs secondes) </li> </ul> </td></tr> </table><br> </li> <a name="nice"></a> <li> La commande précédente étant toujours active : <ul> <li>Altérez sa priorité en la passant à 10. <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> renice 10 16210<br> <em>[...]<br> 16210 [uid] 1 38 10 2760K 1736K cpu/1 0:00 0.32% top<br> [...]</em> </td></tr> </table><br> </li> <a name="u"></a> <li>Affichez vos seuls processus. <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> u [uid]<br> <em>[...]<br> 16210 [uid] 1 58 0 2760K 1744K cpu/0 0:00 0.49% top<br> 13510 [uid] 1 48 0 1800K 1120K sleep 0:00 0.03% ksh<br> 14229 [uid] 1 55 0 14M 10M stop 0:00 0.00% xemacs-2<br> 13843 [uid] 1 48 0 1800K 1096K sleep 0:00 0.00% ksh<br> [...]<br></em> </td></tr> </table><br> </li> <a name="kill"></a> <li> Terminez le processus correspondant à xemacs en tâche de fond. <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> kill -9 14229 </td></tr> </table><br> </li> <a name="quit"></a> <li>Observez ce qui se passe et commentez-le. <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> Pensez à quitter <code>top</code>. </td></tr> </table><br> </li> </ul> </li> <a name="ps2"></a> <li> Affichez de nouveau, dans votre terminal principal, vos processus actifs. <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> Pour contrôler, faîtes un <code>ps</code> car vous ne voyiez peut-être pas ce processus par <code>top</code> précédemment. Le processus 14229 correspondant à xemacs a bien disparu.<br> Mais le processus 13510 correspondant au <code>ksh</code> du terminal T1 est lui toujours là (ce qu'est ce <code>ksh</code> sera vu dès le cours suivant). </td></tr> </table><br> </li> <a name="kill2"></a> <li> À partir de votre terminal principal, terminez le processus correspondant au second terminal. <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> Ces <code>ksh</code> sont donc liés aux terminaux ouverts. Au besoin, par un <code>ps</code>, vous pouvez vérifier le <code>PID</code> du <code>ksh</code> relié au terminal T2 (vu avant ici : 13843).<br><br> top<br> kill -9 13843<br> q<br><br> Cela a bien pour effet de fermer votre terminal T2. </td></tr> </table><br> </li> </ul> <hr> <address><a href="mailto:philippe.houdry@inist.fr">Philippe.Houdry@inist.fr</a></address> </body> </html>