<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>Travaux Pratiques (Nouvelles commandes) - UNIX</title> <style type="text/css"> Q { font-style: italic; } TABLE { text-align: center; } .reponse { font-style: italic; } .solution { display: none; } </style> <script language="JavaScript1.2" type="text/javascript"> /* nom du fichier contenant le corrigé équivalent à celui de ce fichier */ var corrige='corrigesNewCommands.fre.html'; function Montrer(divId) { if(document.getElementById && document.styleSheets) { document.getElementById(divId).style.display='block'; document.getElementById("action"+divId).style.display='none'; } } function Cacher(divId) { if(document.getElementById && document.styleSheets) { document.getElementById(divId).style.display='none'; document.getElementById("action"+divId).style.display='block'; } } function EcrireBouton(divId) { if(document.getElementById && document.styleSheets) { document.writeln(' <div id="action'+divId+'" " style="font-size: smaller;">'); document.writeln(' <a href="javascript:Montrer(\''+divId+'\');">Voir la solution</a>'); document.writeln(' <p></p>'); document.writeln(' </div>'); } else { document.writeln(' <p style="font-size: smaller;"><a href="'+corrige+'#'+divId+'">Voir la solution</a></p>'); } } </script> <link rel="copyright" href="http://www.inist.fr/"><link rel="author" href="http://dilib.inist.fr/membres.html"><link rel="chapter" href="caracteristiques.fre.html" title="UNIX"><link rel="chapter" href="X.fre.html" title="X Window"><link rel="chapter" href="redirPipes.fre.html" title="Rappels"><link rel="chapter" href="newCommandsUser.fre.html" title="Commandes UNIX"><link rel="chapter" href="shellVars.fre.html" title="Shell"><link rel="chapter" href="sed.fre.html" title="Sed"><link rel="chapter" href="make.fre.html" title="Make"><link rel="index" href="http://dilib.inist.fr/dilib/v04Main/IndexSite/Server/FR.resource.index.html"><link rel="top" title="Accueil de DILIB" href="http://dilib.inist.fr/dilib/v04Main/"><link rel="alternate" title="English version" href="tpNewCommands.eng.html"><link rel="up" href="index.fre.html" title="Tutorial UNIX / Shell"> <link rel="section" href="newCommandsUser.fre.html" title="Commandes utilisateur"><link rel="section" href="rightsCommands.fre.html" title="Gestion des droits"><link rel="section" href="tarzipCommands.fre.html" title="Archives, compression, décompression"><link rel="section" href="processesCommands.fre.html" title="Gestion des processus"><link rel="section" href="tpNewCommands.fre.html" title="TP"> <link rel="first" href="caracteristiques.fre.html" title="Caractéristiques d'UNIX"> <link rel="previous" href="processesCommands.fre.html" title="Gestion des processus"> <link rel="next" href="shellVars.fre.html" title="Variables d'environnement"> <link rel="last" href="tpNewCommands.fre.html" title="Travaux Pratiques"> </head> <body> <h1>Travaux Pratiques<br>(Autres commandes Unix)</h1> <div id="navcontainer"> <ul id="navlist"> <li><a href="caracteristiques.fre.html">UNIX</a> </li> <li><a href="redirPipes.fre.html">Bases</a> </li> <li><a>Commandes</a> <ul id="subnavlist"> <li><a href="newCommandsUser.fre.html">Complémentaires</a></li> <li><a href="rightsCommands.fre.html">Droits</a></li> <li><a href="tarzipCommands.fre.html">Compression</a></li> <li><a href="processesCommands.fre.html">Processus</a></li> <li><a href="tpNewCommands.fre.html" id="subcurrent">TP</a></li> </ul> </li> <li><a href="shellVars.fre.html">Shell</a> </li> <li><a href="sed.fre.html">Sed</a> </li> <li><a href="make.fre.html">Make</a> </li> </ul> </div> <div class="content"> <p> Cette seconde série de travaux pratiques se décompose en 4 parties : commandes utilisateurs, gestion des droits, archivage et décompression, gestion des processus.</p> <h3>Commandes utilisateurs</h3> <ul> <li> Identifiez-vous : quels sont votre user id (uid) et votre groupe (gid) ? <script type="text/javascript"> EcrireBouton('uid'); </script> <div class="solution" id="uid"> <a href="javascript:Cacher('uid');" style="font-size: smaller;">Cacher la solution</a> <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> </div> </li> </ul> <h3>Gestion des droits</h3> <ul> <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 : <script type="text/javascript"> EcrireBouton('niv'); </script> <div class="solution" id="niv"> <a href="javascript:Cacher('niv');" style="font-size: smaller;">Cacher la solution</a> <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> </div> <ul> <li> quels sont les fichiers et répertoires présents ? <script type="text/javascript"> EcrireBouton('rep'); </script> <div class="solution" id="rep"> <a href="javascript:Cacher('rep');" style="font-size: smaller;">Cacher la solution</a> <table bgcolor="yellow" border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> Des répertoires comme : ./ ../ Formation/<br> Des fichiers comme : .profile </td></tr> </table><br> </div> </li> <li> lesquels sont cachés ? <script type="text/javascript"> EcrireBouton('caches'); </script> <div class="solution" id="caches"> <a href="javascript:Cacher('caches');" style="font-size: smaller;">Cacher la solution</a> <table border="1" class="commands" style="margin-left:0;"> <tr><td>Tous ceux qui commencent par un point comme .profile</td></tr> </table><br> </div> </li> <li> quels sont leurs propriétaires et groupes attachés ? <script type="text/javascript"> EcrireBouton('proprietaire'); </script> <div class="solution" id="proprietaire"> <a href="javascript:Cacher('proprietaire');" style="font-size: smaller;">Cacher la solution</a> <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 : le vôtre, éventuellement d'autres </td></tr> </table><br> </div> </li> <li> quels sont les droits afférants ? <script type="text/javascript"> EcrireBouton('droits'); </script> <div class="solution" id="droits"> <a href="javascript:Cacher('droits');" style="font-size: smaller;">Cacher la solution</a> <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> </div> </li> </ul> </li> <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 puis "Enregistrez la cible du lien sous" ou "Save link as"). Ses droits initiaux sont rwxrwxr-x. Quel est votre umask ? <script type="text/javascript"> EcrireBouton('umask'); </script> <div class="solution" id="umask"> <a href="javascript:Cacher('umask');" style="font-size: smaller;">Cacher la solution</a> <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> </div> </li> <li> Modifiez les droits de ce fichier <code>testUmask.txt</code> de deux façons pour obtenir ceux qui suivent, en séquence pour les trois cas de proche en proche : <ul> <li>rwx------</li> <li>rwxrwxrwx</li> <li>rwxr-xr--</li> </ul> La première façon de procéder utilisera un profil octal, la seconde des lettres. Contrôlez vos actions à chaque étape. <script type="text/javascript"> EcrireBouton('chmod'); </script> <div class="solution" id="chmod"> <a href="javascript:Cacher('chmod');" style="font-size: smaller;">Cacher la solution</a> <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> </div> </li> <li> Cherchez le chemin où se trouve votre fichier <code>.profile</code>, à partir de votre <code>home directory</code>, sans changer de répertoire. <script type="text/javascript"> EcrireBouton('find'); </script> <div class="solution" id="find"> <a href="javascript:Cacher('find');" style="font-size: smaller;">Cacher la solution</a> <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> find ~ -name .profile<br> </td></tr> </table><br> </div> </li> <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 un éditeur 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. <script type="text/javascript"> EcrireBouton('diff'); </script> <div class="solution" id="diff"> <a href="javascript:Cacher('diff');" style="font-size: smaller;">Cacher la solution</a> <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> </div> </li> </ul> <h3>Archivage et compression</h3> <ul> <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. <script type="text/javascript"> EcrireBouton('tarUnixShell'); </script> <div class="solution" id="tarUnixShell"> <a href="javascript:Cacher('tarUnixShell');" style="font-size: smaller;">Cacher la solution</a> <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>/ ... /Formation</em> <br>ll<br> <em>drwxrwxr-x 4 [uid] [gid] 1024 Apr 5 13:15 ./<br> drwxrwxr-x 16 [uid] [gid] 512 Apr 25 16:35 ../<br> drwxrwxr-x 4 [uid] [gid] 1024 Apr 25 10:03 UnixShell</em><br><br> tar -cvf Archives.tar UnixShell<br> ll<br> <em>drwxrwxr-x 4 [uid] [gid] 1024 Apr 5 13:15 ./<br> drwxrwxr-x 16 [uid] [gid] 512 Apr 25 16:35 ../<br> drwxrwxr-x 4 [uid] [gid] 1024 Apr 25 10:03 UnixShell<br> -rwxrwxr-x 1 [uid] [gid] 10240 May 5 14:23 Archives.tar</em><br><br> tar -tvf Archives.tar<br> <em>drwxrwxr-x [uid]/[gid] 0 2003-05-05 14:02 UnixShell/<br> -rwxrwxr-x [uid]/[gid] 212 2003-05-05 10:10 UnixShell/monHistorique.txt<br> -rwxrwxr-x [uid]/[gid] 261 2003-05-05 14:12 UnixShell/testDiff1.txt<br> -rwxrwxr-x [uid]/[gid] 249 2003-05-05 14:13 UnixShell/testDiff2.txt</em><br> </td></tr> </table><br> </div> </li> <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. <script type="text/javascript"> EcrireBouton('tarzip'); </script> <div class="solution" id="tarzip"> <a href="javascript:Cacher('tarzip');" style="font-size: smaller;">Cacher la solution</a> <table border="1" class="commands" style="margin-left:0;"> <tr><td style="text-align:left"> cd UnixShell<br> pwd<br> <em>/ ... /Formation/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] [gid] 512 May 5 15:25 ./<br> drwxrwxr-x 4 [uid] [gid] 1024 Apr 25 10:03 ../<br> drwxrwxr-x 4 [uid] [gid] 1024 May 5 14:23 UnixShell/<br> -rwxrwxr-x 1 [uid] [gid] 212 May 5 10:10 monHistorique.txt<br> drwxrwxr-x 2 [uid] [gid] 512 May 5 15:18 tarzip/<br> -rwxrwxr-x 1 [uid] [gid] 261 May 5 14:12 testDiff1.txt<br> -rwxrwxr-x 1 [uid] [gid] 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 endroits les plus adéquats ! </td></tr> </table><br> </div> </li> <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. <script type="text/javascript"> EcrireBouton('gzip'); </script> <div class="solution" id="gzip"> <a href="javascript:Cacher('gzip');" style="font-size: smaller;">Cacher la solution</a> <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] [gid] 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> </div> </li> <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. <script type="text/javascript"> EcrireBouton('gunzip'); </script> <div class="solution" id="gunzip"> <a href="javascript:Cacher('gunzip');" style="font-size: smaller;">Cacher la solution</a> <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] [gid] 10240 May 5 14:23 Archives.tar</em><br><br> gzip tarzip/Archives.tar<br> <em>-rwxrwxr-x 1 [uid] [gid] 612 May 5 16:48 Archives.tar.gz</em><br> </td></tr> </table><br> </div> </li> <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. <script type="text/javascript"> EcrireBouton('gzcat'); </script> <div class="solution" id="gzcat"> <a href="javascript:Cacher('gzcat');" style="font-size: smaller;">Cacher la solution</a> <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> </div> </li> </ul> <hr> <address><a href="mailto:philippe.houdry@inist.fr">Philippe.Houdry@inist.fr</a></address> </body> </html>