Newer
Older
cours-unix-shell / UnixShell_cours2018 / tpNewCommands.fre.html
<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&eacute; &eacute;quivalent &agrave; 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&eacute;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&eacute;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&eacute;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&eacute;rie de travaux pratiques se
      d&eacute;compose en 4 parties&thinsp;: commandes utilisateurs, gestion
      des droits, archivage et d&eacute;compression, gestion des
      processus.</p>

    <h3>Commandes utilisateurs</h3>

    <ul>
      <li>
	Identifiez-vous&thinsp;: quels sont votre user id (uid) et votre
	groupe (gid)&nbsp;?

	<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&eacute;pertoire de travail
	(<code>UnixShell</code>), listez compl&egrave;tement le
	contenu de votre <code>home directory</code>. D&eacute;crivez
	ce que vous y trouvez&thinsp;:

	<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 &agrave; 2 niveaux sous votre home directory&thinsp;:<br>
		  ll ../..
		</td></tr>
	  </table><br>

	</div>

	<ul>
	  <li>
	    quels sont les fichiers et r&eacute;pertoires
	    pr&eacute;sents&nbsp;?

	    <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&eacute;pertoires comme&thinsp;: ./  ../  Formation/<br>
		      Des fichiers comme&thinsp;: .profile
		    </td></tr>
	      </table><br>

	    </div>

	  </li>
	  <li>
	    lesquels sont cach&eacute;s&nbsp;?

	    <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&eacute;taires et groupes
	    attach&eacute;s&nbsp;?

	    <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&eacute;taires&thinsp;: surtout vous, &eacute;ventuellement l'utilisateur 
		      root<br>Groupes&thinsp;: le v&ocirc;tre, &eacute;ventuellement d'autres
		    </td></tr>
	      </table><br>
	    </div>

	  </li>
	  <li>
	    quels sont les droits aff&eacute;rants&nbsp;?

	    <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&eacute;pendant surtout de votre umask (voir la suite)
		    </td></tr>
	      </table><br>
	    </div>

	  </li>
	</ul>
      </li>
      <li>
	Copiez dans votre r&eacute;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&nbsp;?

	<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&eacute;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&eacute;sent&eacute;s plus haut : rwxrwxr-x<br>
		  user (u)&nbsp;&nbsp;: rwx,&nbsp;binaire 111&nbsp;octal 7<br>
		  group (g)&nbsp;: rwx,&nbsp;binaire 111&nbsp;octal 7<br>
		  other (o)&nbsp;: r-x,&nbsp;binaire 101&nbsp;octal 5<br>
		  Donc profil octal 775, d'o&ugrave; un umask de 002 (sa n&eacute;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&ccedil;ons pour
	obtenir ceux qui suivent, en s&eacute;quence pour les trois cas de
	proche en proche&thinsp;:
	<ul>
	  <li>rwx------</li>
	  <li>rwxrwxrwx</li>
	  <li>rwxr-xr--</li>
	</ul>
	La premi&egrave;re fa&ccedil;on de proc&eacute;der utilisera
	un profil octal, la seconde des lettres. Contr&ocirc;lez vos
	actions &agrave; chaque &eacute;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&ugrave; se trouve votre fichier
	<code>.profile</code>, &agrave; partir de votre <code>home
	directory</code>, sans changer de r&eacute;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&eacute;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 &eacute;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>
		    &gt; LIGNE AJOUTEE<br>
		    6d6<br>
		    &lt; LIGNE A SUPPRIMER<br>
		    9c9<br>
		    &lt; Modifiez-moi !!!<br>
		    ---<br>
		    &gt; Modifi&eacute;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&eacute;pertoire <code>UnixShell</code> (placez-vous
	au-dessus). Contr&ocirc;lez le fichier <code>.tar</code>
	r&eacute;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&eacute;placer dans le 
		  r&eacute;pertoire parent de <code>UnixShell</code> pour 
		  l'archiver&thinsp;:<br>
		  cd ..<br>
		  pwd<br>
		  <em>/ ... /Formation</em>
		  <br>ll<br>
		  <em>drwxrwxr-x&nbsp;&nbsp;4 [uid] [gid]&nbsp;&nbsp;1024 Apr&nbsp;&nbsp;5 13:15 ./<br>
		    drwxrwxr-x&nbsp;16 [uid] [gid]&nbsp;&nbsp;&nbsp;512 Apr&nbsp;25 16:35 ../<br>
		    drwxrwxr-x&nbsp;&nbsp;4 [uid] [gid]&nbsp;&nbsp;1024 Apr&nbsp;25 10:03 UnixShell</em><br><br>
		  tar -cvf Archives.tar UnixShell<br>
		  ll<br>
		  <em>drwxrwxr-x&nbsp;&nbsp;4 [uid] [gid]&nbsp;&nbsp;1024 Apr&nbsp;&nbsp;5 13:15 ./<br>
		    drwxrwxr-x&nbsp;16 [uid] [gid]&nbsp;&nbsp;&nbsp;512 Apr&nbsp;25 16:35 ../<br>
		    drwxrwxr-x&nbsp;&nbsp;4 [uid] [gid]&nbsp;&nbsp;1024 Apr&nbsp;25 10:03 UnixShell<br>
		    -rwxrwxr-x&nbsp;&nbsp;1 [uid] [gid]&nbsp;10240 May&nbsp;&nbsp;5 14:23 Archives.tar</em><br><br>
		  tar -tvf Archives.tar<br>
		  <em>drwxrwxr-x [uid]/[gid]&nbsp;&nbsp;&nbsp;0 2003-05-05 14:02 UnixShell/<br>
		    -rwxrwxr-x [uid]/[gid]&nbsp;212 2003-05-05 10:10 UnixShell/monHistorique.txt<br>
		    -rwxrwxr-x [uid]/[gid]&nbsp;261 2003-05-05 14:12 UnixShell/testDiff1.txt<br>
		    -rwxrwxr-x [uid]/[gid]&nbsp;249 2003-05-05 14:13 UnixShell/testDiff2.txt</em><br>
		</td></tr>
	  </table><br>

	</div>

      </li>
      <li>
	Cr&eacute;ez le sous-r&eacute;pertoire <code>tarzip</code>
	(sous <code>UnixShell</code> o&ugrave; vous revenez) et
	d&eacute;placez-y votre tarfile. Sans vous d&eacute;placer
	dans ce sous-r&eacute;pertoire, d&eacute;sarchivez le tarfile
	et contr&ocirc;lez le r&eacute;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]&nbsp;&nbsp;&nbsp;512 May&nbsp;&nbsp;5 15:25 ./<br>
		    drwxrwxr-x 4 [uid] [gid]&nbsp;&nbsp;1024 Apr&nbsp;25 10:03 ../<br>
		    drwxrwxr-x 4 [uid] [gid]&nbsp;&nbsp;1024 May&nbsp;&nbsp;5 14:23 UnixShell/<br>
		    -rwxrwxr-x 1 [uid] [gid]&nbsp;&nbsp;&nbsp;212 May&nbsp;&nbsp;5 10:10 monHistorique.txt<br>
		    drwxrwxr-x 2 [uid] [gid]&nbsp;&nbsp;&nbsp;512 May&nbsp;&nbsp;5 15:18 tarzip/<br>
		    -rwxrwxr-x 1 [uid] [gid]&nbsp;&nbsp;&nbsp;261 May&nbsp;&nbsp;5 14:12 testDiff1.txt<br>
		    -rwxrwxr-x 1 [uid] [gid]&nbsp;&nbsp;&nbsp;249 May&nbsp;&nbsp;5 14:13 testDiff2.txt</em><br><br>
		  
		  
		  Si vous avez travaill&eacute; comme cela, vous devez
		  constater que le r&eacute;pertoire
		  <code>UnixShell</code> s'est d&eacute;sarchiv&eacute;
		  sous lui-m&ecirc;me... C'est bien s&ucirc;r un exemple
		  se voulant surtout didactique. Dans une situation plus
		  concr&egrave;te, le d&eacute;sarchivage doit
		  s'op&eacute;rer aux endroits les plus ad&eacute;quats&nbsp;!
		</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&nbsp;&nbsp;1 [uid] [gid]&nbsp;612 May
		    &nbsp;&nbsp;5 16:23 Archives.tar.gz</em><br><br>
		  gzip -l tarzip/Archives.tar.gz<br>
		  <em>compressed uncompr. ratio uncompressed_name<br>
		    612&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
		    10240&nbsp;&nbsp;&nbsp;&nbsp;94.3% tarzip/Archives.tar</em><br>
		</td></tr>
	  </table><br>
	</div>

      </li>
      <li>
	Toujours en restant sous <code>UnixShell</code>,
	d&eacute;compressez le tarfile.gz sur le disque. Puis
	v&eacute;rifiez le r&eacute;sultat en listing
	complet. Recompressez le tarfile et contr&ocirc;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&nbsp;&nbsp;1 [uid] [gid]&nbsp;10240 May
		    &nbsp;&nbsp;5 14:23 Archives.tar</em><br><br>
		  
		  gzip tarzip/Archives.tar<br>
		  <em>-rwxrwxr-x&nbsp;&nbsp;1 [uid] [gid]&nbsp;612 May
		    &nbsp;&nbsp;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&eacute;compresser le tarfile.gz sur le disque, comptez le
	nombre de lignes non compress&eacute;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>