Pipes: Was Sie wissen müssen, um sie in GNU / Linux verwenden zu können

Rohre

Eine Rohr oder Rohre ist eigentlich eine Pipeline, die für UNIX / Linux verfügbar und sehr praktisch ist. Um jedoch vollständig zu verstehen, was eine Pipe ist, sollten Sie wissen, dass in einer * nix-Umgebung 3 Datenströme integriert sind. Für diejenigen, die es nicht wissen, bedeutet dies, dass die Daten zu oder von drei Punkten übertragen werden können.

Dann werden Sie das besser verstehenAber was ich Ihnen jetzt klar machen möchte, ist, dass Sie mit einer Pipeline von einem dieser Punkte zu anderen kanalisieren können. Dies ermöglicht es, die Ausgabe oder das Ergebnis, das ein Programm auf die Eingabe eines anderen wirft, für die Verwendung durch dieses Programm usw. zu verwenden. Ich werde versuchen, es mit einigen praktischen Beispielen zu erklären, die Ihnen helfen, es sehr gut zu verstehen.

Diese Punkte, über die ich gesprochen habe oder Datenströmesind:

  • Standard: entspricht 0 und ist die Standardeingabe. Im Allgemeinen ist die Standardeingabe für ein * nix-System die Tastatur. Das heißt, Sie geben die verwendeten Informationen ein. Sie hat ein spezielles Gerät, das / dev / stdin ist.
  • stdout: identifiziert mit 1, ist es die Standardausgabe. Normalerweise entspricht es dem Monitor oder Bildschirm Ihres Computers, auf dem Sie die Informationen sehen können. Wenn Sie beispielsweise einen ls-Befehl ausführen, wird das Inhaltsverzeichnis auf dem Bildschirm angezeigt, oder? Das zugehörige Gerät ist / dev / stdout.
  • stderr: mit 2 gekennzeichnet, ist dies die Standardfehlerausgabe, wenn in einem Programm ein Fehler auftritt. Das zugehörige Gerät ist / dev / stderr.

Mit einer Pipeline können Sie die Standardausgabe oder die Standardausgabe eines Befehls direkt an die Standardeingabe eines anderen Befehls übergeben. Das heißt, Sie können ein Programm dazu bringen, ein anderes zu füttern. Anstatt über die Tastatur eingegebene Parameter zu verwenden, liefert eine Pipe die vom vorherigen Befehl generierten Informationen über diese durch | dargestellte Pipeline

Mit die Beispiele du wirst es besser verstehen. Angenommen, Sie möchten den Inhalt eines Verzeichnisses auflisten, möchten aber nur die Namen sehen, die mit dem Wort doc übereinstimmen. Sie können also eine Pipeline verwenden, um die Ausgabe von ls in die Eingabe des Grep-Filters zu leiten, damit dieser nur diejenigen anzeigt, die diesem Muster entsprechen:

ls -l | grep doc

Anstatt Ihnen alle Namen zu zeigen, zeigt es Ihnen nur diejenigen, die dich wirklich interessieren. Sie können dasselbe mit dem Inhalt einer Datei tun. Stellen Sie sich vor, Sie möchten nur die Informationen der Prozesse mit dem Namen Firefox und nicht alle anzeigen:

ps aux | grep firefox

Anstatt die gesamte Ausgabe des ps-Programms auf dem Bildschirm anzuzeigen (stdout), wird es auf die Eingabe des Grep-Filters geleitet und zeigt in der Ausgabe nur an, was in diesem Fall dem Firefox-Muster entspricht ...

Wenn Sie möchten, können Sie verwenden verschiedene Rohre um die Ausgabe eines Befehls zur Eingabe eines anderen zweiten Befehls und die Ausgabe dieser Sekunde zur Eingabe eines dritten Befehls zu bringen, und so weiter. Beispielsweise:

cat libro | grep love | more

Wie Sie sehen, Die Möglichkeiten sind vielfältig, alles was du dir vorstellen kannst und erlaubt ist. Zeigen Sie sogar nur die erste und die letzte Zeile einer Datei an, zählen Sie die Zeilen, die wc eingeben und aus der Liste stammen, und sortieren Sie sie sogar:

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

Sie können auch mit arbeiten Fehler mit | & Suchen Sie beispielsweise in der Ausgabe eines Skripts nach dem Wort alert, wenn dies fehlschlägt:

./miscript |& grep alerta 

Und schließlich gibt es zwei Befehle, die eng mit Pipes verknüpft sind Tee und Xargs und dass sie die Möglichkeiten dieser weiter ausbauen können. Im Fall von tee können Sie das Ergebnis des vorherigen Programms in der Standardausgabe anzeigen, damit Sie es sehen können, und es kann zusätzlich zu einer anderen Datei weitergeleitet werden. Ein Beispiel wäre, wenn Sie den Inhalt eines Verzeichnisses auflisten und die Ausgabe von ls -l im Moment sehen und sie auch in einer Datei auflisten möchten.txt:

ls -l | tee listado.txt

Wenn Sie kein Tee verwenden, können Sie die Ausgabe auf Ihrer Konsole nicht sehen ...

Y xargs In einigen Fällen ist es sogar noch interessanter. In diesem Fall kann ein Befehl aus der Standardeingabe erstellt werden, die er über die Pipeline empfängt. Mit anderen Worten, es ist in der Lage, alles zu erfassen, was ein vorheriges Programm über seine Ausgabe gestartet hat und das xargs über die Pipeline erreicht, um es als Argumente an einen anderen Befehl zu übergeben.

Verstehst du es immer noch nicht? Sie werden es anhand eines Beispiels viel besser sehen. Stellen Sie sich vor, Sie möchten alle verdammten Dateien thumbs.db aus einem Verzeichnis, einer Festplatte oder einer Partition entfernen. Wenn es viele gibt, kann es unmöglich sein, sie einzeln mit dem Befehl rm zu löschen, um sie manuell zu löschen. Aber mit xargs können Sie alles automatisieren. Und Sie können dies tun, indem Sie find verwenden, um sie zu finden, die Ausgabe über die Eingabe von xargs zu senden, und dies wiederum gibt rm die Namen als Argumente. Daher werden alle gefundenen automatisch gelöscht:

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

Angenommen, Sie finden die Locates /home/name/thumbs.db, /media/test/thumbs.db und /tmp/thumbs.db. Nun, xargs wird sie an rm liefern, als wären sie Argumente. Das heißt, als hätten wir ausgeführt: rm /home/name/thumbs.db, dann rm /media/test/thumbs.db und dann rm /tmp/thumbs.db.


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: AB Internet Networks 2008 SL
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.

  1.   Jose sagte

    Hervorragend, diese Informationen sind für uns Linux-Benutzer sehr wichtig

  2.   Matthias sagte

    Was für ein guter Artikel, gerade jetzt, wo ich die E / A-Umleitung im Linux-Befehlszeilenbuch studiere. Mir sind die Pipes (Pipeline) und die drei Datenströme klarer. Der Beitrag wird geschätzt. Schöne Grüße.

  3.   01101001b sagte

    Das Beispiel mit xargs passte mir wie angegossen. Genau heute beschäftigte ich mich mit dem Detail eines Mehrfachausgangs, den ich "in Teilen" senden musste. Xargs ging eine Pinturita.
    Super dankbar!