Sophie

Sophie

distrib > Mandriva > 10.0-com > i586 > by-pkgid > 664c05250964d29fcf1d0bb310959fbc > files > 100

mandrake-doc-fr-10.0-5.1.100mdk.noarch.rpm

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Redirections et tubes</title><meta name="generator" content="DocBook XSL Stylesheets V1.64.0"><link rel="home" href="index.html" title="Manuel de référence"><link rel="up" href="cmdline.html" title="Chapitre 3. Introduction à la ligne de commande"><link rel="previous" href="glob-regex.html" title="Motifs d'englobement du shell"><link rel="next" href="cmdline-completion.html" title="Le complètement (completion)
  dans les lignes de commande"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Redirections et tubes</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="glob-regex.html">Précédent</a> </td><th width="60%" align="center">Chapitre 3. Introduction à la ligne de commande</th><td width="20%" align="right"> <a accesskey="n" href="cmdline-completion.html">Suivant</a></td></tr></table><hr></div><div class="sect1" lang="fr"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="shell-pipes"></a>Redirections et tubes</h2></div></div><div></div></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="id2538479"></a>Encore un mot au sujet des processus</h3></div></div><div></div></div><p><a name="BId-cmdline-pa82"></a>Pour comprendre le
    principe des redirections et des tubes, ils nous faudra introduire
    ici une nouvelle notion qui concerne les processus. Chaque
    processus sous <span class="application">UNIX</span> (y compris les applications graphiques)
    utilise un minimum de trois descripteurs de fichiers :
    l'entrée standard, la sortie standard et le canal d'erreur
    standard.
    <a class="indexterm" name="BId-cmdline-it38"></a>
    
            <a class="indexterm" name="BId-cmdline-it39"></a>
    
            <a class="indexterm" name="BId-cmdline-it40"></a>
    Leurs numéros respectifs sont 0, 1 et 2. En général, ces trois
    descripteurs sont associés au <tt class="systemitem">Terminal</tt> depuis lequel le
    processus a été lancé, l'entrée standard étant lue depuis le
    clavier. Le but des redirections et des tubes est de rediriger ces
    descripteurs. Les exemples de cette section vous aideront à mieux
    comprendre.</p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="id2538584"></a>Redirections</h3></div></div><div></div></div><p><a name="BId-cmdline-pa83"></a>    Supposons, par exemple, que vous vouliez connaître la liste des
    fichiers se terminant par <tt class="filename">.png</tt>
            <sup>[<a name="id2538609" href="#ftn.id2538609">7</a>]</sup> dans le répertoire <tt class="filename">images</tt>, et que cette
     liste soit très longue : il serait donc pertinent de la
     stocker dans un fichier pour la consulter à loisir ensuite. Vous
     pouvez alors taper ceci :
   </p><a name="BId-cmdline-sc12"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">$ ls images/*.png 1&gt;liste_fichiers</pre></td></tr></table><p><a name="BId-cmdline-pa85"></a>    
            <a class="indexterm" name="BId-cmdline-it41"></a>Ce qui
    signifie que la sortie standard de cette commande (<tt class="literal">1</tt>)
    est redirigée (<tt class="literal">&gt;</tt>) vers le fichier qui a pour nom
    <tt class="filename">liste_fichiers</tt>. Le signe <tt class="literal">&gt;</tt> est
    l'opérateur de redirection de sortie. Dans le cas où le fichier de
    redirection n'existerait pas, il serait alors créé. Par contre, s'il
    existait précédemment, son ancien contenu serait écrasé. Cependant,
    par défaut, le descripteur redirigé par cet opérateur est la
    sortie standard, il n'est donc pas nécessaire de le spécifier sur
    la ligne de commande. Vous pouvez donc écrire plus
    simplement :
   </p><a name="BId-cmdline-sc13"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">$ ls images/*.png &gt;liste_fichiers</pre></td></tr></table><p><a name="BId-cmdline-pa86"></a>
<a class="indexterm" name="BId-cmdline-it42"></a>
    et le résultat serait exactement le même. Vous pouvez ensuite
    consulter le fichier à l'aide d'un visualiseur de fichiers texte
    tel que <span><b class="command">less</b></span>.
   </p><p><a name="BId-cmdline-pa87"></a>
<a class="indexterm" name="BId-cmdline-it43"></a>
    Supposons maintenant que vous vouliez connaître le nombre exact de
    ces fichiers. Au lieu de compter manuellement, vous pouvez
    utiliser le bien nommé <span><b class="command">wc</b></span> (<span class="foreignphrase"><i class="foreignphrase">Word
    Count</i></span>, soit comptage des mots) avec l'option
    <tt class="option">-l</tt>, qui écrit sur la sortie standard le nombre de
    lignes du fichier. Pour obtenir le résultat désiré, une solution
    possible serait la suivante :
   </p><a name="BId-cmdline-sc14"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">wc -l 0&lt;liste_fichiers</pre></td></tr></table><p><a name="BId-cmdline-pa88"></a>    Le signe <tt class="literal">&lt;</tt> est l'opérateur de redirection d'entrée.
    Le descripteur redirigé par défaut est également celui de l'entrée
    standard, donc <tt class="literal">0</tt>. La ligne s'écrit alors
    simplement :
   </p><a name="BId-cmdline-sc15"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">wc -l &lt;liste_fichiers</pre></td></tr></table><p><a name="BId-cmdline-pa89"></a>
<a class="indexterm" name="BId-cmdline-it44"></a>
    Supposons maintenant que vous vouliez retirer de cette liste
    toutes les extensions des fichiers puis sauvegarder le
    résultat dans un autre fichier. L'outil dont vous avez besoin
    est <span><b class="command">sed</b></span>, pour <span class="foreignphrase"><i class="foreignphrase">Stream EDitor</i></span>
    (soit éditeur de flux). Il suffit de rediriger
    l'entrée standard de <span><b class="command">sed</b></span> vers le fichier
    <tt class="filename">liste_fichiers</tt> et de rediriger sa sortie vers le
    fichier résultat, par exemple <tt class="filename">la_liste</tt> :
   </p><a name="BId-cmdline-sc16"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">sed -e 's/\.png$//g' &lt;liste_fichiers &gt;la_liste</pre></td></tr></table><p><a name="BId-cmdline-pa90"></a>    Il vous sera également possible de consulter à loisir cette
    nouvelle liste avec un visualiseur.
   </p><p><a name="BId-cmdline-pa91"></a>    Il pourrait aussi s'avérer utile de rediriger l'erreur standard.
    Par exemple, vous voulez savoir quels répertoires dans
    <tt class="filename">/shared</tt> ne vous sont pas accessibles : une
    solution est de lister récursivement ce répertoire et de rediriger
    les erreurs vers un fichier, tout en n'affichant pas le canal de
    sortie standard :
   </p><a name="BId-cmdline-sc17"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">ls -R /shared &gt;/dev/null 2&gt;erreurs</pre></td></tr></table><p><a name="BId-cmdline-pa92"></a>    Ceci signifie que la sortie standard sera redirigée
    (<tt class="literal">&gt;</tt>) vers <tt class="filename">/dev/null</tt>, un fichier spécial
    dans lequel tout ce qu'on écrit est perdu (et aura comme effet
    secondaire que la sortie standard ne sera pas affichée) et que le
    canal d'erreur standard (<tt class="literal">2</tt>) sera redirigé
    (<tt class="literal">&gt;</tt>) vers le fichier <tt class="filename">erreurs</tt>.
   </p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="id2539054"></a>Tubes</h3></div></div><div></div></div><p><a name="BId-cmdline-pa93"></a>    
            <a class="indexterm" name="BId-cmdline-it45"></a>
    Les tubes (<span class="foreignphrase"><i class="foreignphrase">pipes</i></span> en anglais) sont en quelque
    sorte une combinaison des redirections d'entrée et de sortie. Leur
    principe mime en effet celui d'un tube : un processus envoie
    des données dans le tube par un bout et un autre processus lit les
    données par l'autre bout. L'opérateur tube est <tt class="literal">|</tt>.
    Reprenons l'exemple de la liste des fichiers <tt class="filename">.png</tt>
    ci-dessus. Supposons que vous vouliez seulement connaître le
    nombre de fichiers en question sans avoir à stocker la liste dans
    un fichier temporaire : utilisez alors la commande
    suivante :
   </p><a name="BId-cmdline-sc18"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">ls images/*.png | wc -l</pre></td></tr></table><p><a name="BId-cmdline-pa94"></a>  
    ce qui signifie que la sortie standard de la commande <span><b class="command">ls</b></span>
    (donc la liste des fichiers) est redirigée vers l'entrée standard
    de la commande <span><b class="command">wc</b></span>. Vous obtenez donc le résultat désiré.
   </p><p><a name="BId-cmdline-pa95"></a>    Vous pouvez de même construire directement la liste des fichiers
    « <span class="quote">sans les extensions</span> » avec la commande suivante :
   </p><a name="BId-cmdline-sc19"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">ls images/*.png | sed -e 's/\.png//g' &gt;la_liste</pre></td></tr></table><p><a name="BId-cmdline-pa96"></a> ou, si vous voulez simplement consulter
    la liste sans la stocker dans un fichier :</p><a name="BId-cmdline-sc20"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">ls images/*.png | sed -e 's/\.png//g' | less</pre></td></tr></table><p><a name="BId-cmdline-pa97"></a>
<a class="indexterm" name="BId-cmdline-it46"></a> Les tubes et les
redirections ne sont pas limités à du texte. Ainsi en est-il de la
commande suivante, lancée à partir d'un <tt class="systemitem">Terminal</tt> :
   </p><a name="BId-cmdline-sc21"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">xwd -root | convert - ~/mon_bureau.png</pre></td></tr></table><p><a name="BId-cmdline-pa98"></a>
    <a class="indexterm" name="BId-cmdline-it47"></a>ce qui effectuera
    une capture d'écran de votre bureau dans le fichier intitulé
    <tt class="filename">mon_bureau.png</tt> <sup>[<a name="id2539276" href="#ftn.id2539276">8</a>]</sup> dans votre répertoire personnel.
   </p></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id2538609" href="#id2538609">7</a>] </sup>Il peut
    vous paraître saugrenu de dire « <span class="quote">les fichiers se terminant
    par <tt class="filename">.png</tt>
                  </span> » plutôt que « <span class="quote">les images <span class="acronym">PNG</span></span> ».
    Mais, encore une fois, les fichiers sous <span class="application">UNIX</span> n'ont
    d'extension que par convention : une extension ne détermine
    en aucun cas le type d'un fichier. Un fichier dont le nom se termine par
    <tt class="filename">.png</tt> peut indifféremment être une image <span class="acronym">JPEG</span>, un
    exécutable, un fichier texte ou tout autre chose. Il en est de
    même sous <span class="application">Windows</span> !
      </p></div><div class="footnote"><p><sup>[<a name="ftn.id2539276" href="#id2539276">8</a>] </sup>Oui, ce sera bien une image <span class="acronym">PNG</span> ! (Le
    paquetage <tt class="filename">ImageMagick</tt> devra néanmoins être
    installé...)
      </p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="glob-regex.html">Précédent</a> </td><td width="20%" align="center"><a accesskey="u" href="cmdline.html">Niveau supérieur</a></td><td width="40%" align="right"> <a accesskey="n" href="cmdline-completion.html">Suivant</a></td></tr><tr><td width="40%" align="left" valign="top">Motifs d'englobement du shell </td><td width="20%" align="center"><a accesskey="h" href="index.html">Sommaire</a></td><td width="40%" align="right" valign="top"> Le complètement (completion)
  dans les lignes de commande</td></tr></table></div></body></html>