Pipes: ce que vous devez savoir pour commencer à les utiliser dans GNU / Linux

tuyaux

Une tuyau ou pipe est en fait un pipeline disponible pour UNIX / Linux et très pratique. Mais pour bien comprendre ce qu'est un tube, vous devez savoir que dans un environnement * nix, il dispose de 3 flux de données intégrés. Cela, pour ceux qui ne le savent pas, signifie que les données peuvent voyager vers ou depuis trois points.

Alors vous comprendrez cela d'une meilleure manière, mais ce que je veux être clair pour vous maintenant, c'est qu'avec un tuyau ce que vous pouvez faire est de canaliser l'un de ces points vers d'autres. Cela permet de porter la sortie ou le résultat qu'un programme lance vers l'entrée d'un autre pour qu'il l'utilise, etc. Je vais essayer de l'expliquer avec quelques exemples pratiques qui vous aideront à très bien le comprendre.

Ces points dont je parlais ou flux de données, ils sont:

  • Stdin: correspond à 0 et est l'entrée standard. Généralement, l'entrée standard d'un système * nix est le clavier. Autrement dit, ce que vous tapez sera les informations utilisées. Elle a un périphérique spécial qui lui est associé qui est / dev / stdin.
  • Stdout: identifié par 1, c'est la sortie standard. Habituellement, cela correspond au moniteur ou à l'écran de votre ordinateur, où vous pouvez voir les informations. Par exemple, lorsque vous exécutez une commande ls, la liste des contenus s'affiche à l'écran, n'est-ce pas? Le périphérique associé est / dev / stdout.
  • stderr: identifié par 2, il s'agit de la sortie d'erreur standard, pour lorsqu'une erreur se produit dans un programme. Le périphérique associé est / dev / stderr.

Avec un pipeline, vous pouvez faire passer la sortie standard ou stdout d'une commande directement à l'entrée standard d'une autre. Autrement dit, vous pouvez faire en sorte qu'un programme en alimente un autre. Au lieu d'utiliser des paramètres saisis au clavier, un tube fournit les informations générées par la commande précédente via ce pipeline représenté par le |

Avec les exemples vous le comprendrez mieux. Supposons que vous souhaitiez lister le contenu d'un répertoire, mais que vous ne souhaitiez voir que les noms qui correspondent au mot doc. Vous pouvez donc utiliser un pipeline pour diriger la sortie de ls vers l'entrée du filtre grep pour lui dire de n'afficher que celles qui correspondent à ce modèle:

ls -l | grep doc

Donc au lieu de vous montrer tous les noms, il vous montre juste ceux qui vous intéressent vraiment. Vous pouvez faire de même avec le contenu d'un fichier. Imaginez que vous ne vouliez voir que les informations des processus nommés firefox et pas tous:

ps aux | grep firefox

Au lieu d'afficher toute la sortie du programme ps à l'écran (stdout), il le canalise vers l'entrée du filtre grep et ne montre dans la sortie que ce qui correspond au pattern firefox dans ce cas ...

Si vous le souhaitez, vous pouvez utiliser divers tuyaux pour amener la sortie d'une commande à l'entrée d'une autre seconde commande, et la sortie de cette seconde à l'entrée d'une troisième, et ainsi de suite. Par exemple:

cat libro | grep love | more

Comme tu vois, les possibilités sont nombreuses, tout ce que vous pouvez imaginer et que vous êtes autorisé. Même afficher uniquement la première et la dernière ligne d'un fichier, compter les lignes qui entrent dans wc qui proviennent de la liste, et même les trier:

cat listado | head
cat listado | tail
cat listado | wc -l
cat listado | sort

Vous pouvez également travailler avec erreurs avec | & et par exemple recherchez le mot alert dans la sortie d'un script en cas d'échec:

./miscript |& grep alerta 

Et enfin, il y a deux commandes étroitement liées aux tuyaux qui sont tee et xargs et qu'ils peuvent étendre encore les possibilités de ceux-ci. Dans le cas de tee, ce qu'il permettra, c'est d'afficher le résultat du programme précédent sur la sortie standard pour que vous puissiez le voir, et en plus de cela, il peut le diriger vers un autre fichier. Un exemple serait si vous listez le contenu d'un répertoire et que vous voulez voir la sortie de ls -l pour le moment et aussi l'avoir sauvegardé dans un fichier listing.txt:

ls -l | tee listado.txt

Si vous n'utilisez pas de tee, vous ne pourrez pas voir la sortie sur votre console ...

Y xarg c'est encore plus intéressant dans certains cas. Dans ce cas, il est capable de créer une commande à partir de l'entrée standard qu'il reçoit via le pipeline. En d'autres termes, il est capable de capturer tout ce qu'un programme précédent a lancé via sa sortie et qui atteint xargs via le pipeline pour le transmettre à son tour à une autre commande en tant qu'arguments.

Vous ne comprenez toujours pas? Vous le verrez beaucoup mieux avec un exemple. Imaginez que vous vouliez supprimer tous les fichus fichiers thumbs.db d'un répertoire, d'un disque ou d'une partition. S'il y en a beaucoup, il peut être impossible de passer un par un avec la commande rm pour les supprimer manuellement. Mais avec xargs, vous pouvez tout automatiser. Et vous pouvez le faire en utilisant find pour les localiser, envoyer la sortie via l'entrée de xargs et cela donnera à rm les noms comme arguments. Par conséquent, tous ceux qui sont localisés seront supprimés automatiquement:

find ./ -name "thumbs.db" | xargs rm

Par exemple, supposons que find localise /home/name/thumbs.db, /media/test/thumbs.db et /tmp/thumbs.db. Eh bien, xargs va les livrer à rm comme s'il s'agissait d'arguments. Autrement dit, comme si nous avions exécuté: rm /home/name/thumbs.db, puis rm /media/test/thumbs.db et puis rm /tmp/thumbs.db.


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données : AB Internet Networks 2008 SL
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.

  1.   Jose dit

    Excellent, cette information est très importante pour nous les utilisateurs de Linux

  2.   Daniel dit

    Quel bon article, maintenant que j'étudie la redirection d'E / S dans le livre The Linux Command Line. C'est plus clair pour moi sur les tuyaux (Pipeline) et les trois flux de données. La contribution est appréciée. Les salutations.

  3.   01101001b dit

    L'exemple avec xargs me convenait comme un gant. Exactement aujourd'hui, je traitais du détail celui d'une sortie multiple que je devais envoyer «par parties». xargs a marché une pinturita.
    Super reconnaissant!