Zum Inhalt springen

Pipeline (Unix)

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 29. Oktober 2018 um 14:01 Uhr durch Artregor (Diskussion | Beiträge) (Geschichte: überschüssiges Leerzeichen & doppelte Verlinkungen). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Dieser Importartikel ist fälschlicherweise im Artikelnamensraum. Bitte verschiebe die Seite oder entferne diesen Baustein.
Dieser Artikel (Pipeline (Unix)) ist im Entstehen begriffen und noch nicht Bestandteil der freien Enzyklopädie Wikipedia.
Wenn du dies liest:
  • Der Text kann teilweise in einer Fremdsprache verfasst, unvollständig sein oder noch ungeprüfte Aussagen enthalten.
  • Wenn du Fragen zum Thema hast, nimm am besten Kontakt mit den Autoren auf.
Wenn du diesen Artikel überarbeitest:
  • Bitte denke daran, die Angaben im Artikel durch geeignete Quellen zu belegen und zu prüfen, ob er auch anderweitig den Richtlinien der Wikipedia entspricht (siehe Wikipedia:Artikel).
  • Nach erfolgter Übersetzung kannst du diese Vorlage entfernen und den Artikel in den Artikelnamensraum verschieben. Die entstehende Weiterleitung kannst du schnelllöschen lassen.
  • Importe inaktiver Accounts, die länger als drei Monate völlig unbearbeitet sind, werden gelöscht.
Eine auf einem Text-Terminal laufende Pipeline bestehend aus drei Programmen mit stdin, stdout und stderr

Eine Pipeline in unixoiden Betriebssystemen besteht aus Programmen, die über ihre Standard-Datenströme miteinander verkettet sind. Dabei „empfängt“ ein Programm über die Standardeingabe (stdin) die Standardausgabe (stdout) des jeweils vorherigen Programms in der Kette. Die einzelnen Programme werden nacheinander durch das jeweils vorherige aufgerufen.[1]

In der Shell-Syntax wird ein Senkrechter Strich (|, im Unix-Jargon „Pipe“ oder „Pipe-Zeichen“ genannt) als Verkettungszeichen der einzelnen Programme verwendet:

Programm1  |  Programm2  |  Programm3

Das Betriebssystem nutzt hierbei das Prinzip der „namenlosen Pipe“, die älteste und erste Technik der Interprozess­kommunikation.[2]

Beispiel

  1. Erzeuge mittels ls -dl *key* eine Liste aller Dateien im aktuellen Verzeichnis mit der Zeichenkette „key“ im Namen.
  2. Reduziere die ausgegebene Liste mit grep -v "failed" um jene Zeilen, die die Zeichenkette „failed“ enthalten.
  3. Gebe die resultierende Liste zum seitenweisen Betrachten mit less aus:
ls -dl *key*  |  grep -v "failed"  |  less

Standardfehlerausgabe

Per Default sammelt die Pipeline die Standardfehlerausgaben (stderr) ihrer einzelnen Kindprozesse und leitet sie am Ende an die Kommandozeile weiter. Die alternative Schreibweise "|&" der C-Shell führt jedoch die Standardausgaben und die Standardfehlerausgaben der jeweiligen Kindprozesse zusammen und übergibt diese als Standardausgabe an den nächsten Prozess.[3] Ergänzend dazu leitet die Pipeline in der Bourne-Shell seit Bash 4.0 die Standardfehlerausgaben mit der Notation 2>&1 in eine Datei um.[4]

Geschichte

Douglas McIlroy stellte während seiner Zeit in den Bell Labs (der Geburtsstätte von Unix) fest, dass sehr oft Benutzer die Ausgabe-Datei eines Programms als Eingabe-Datei für ein anderes nutzten.[5] Er führte daher das Konzept der Pipe ein, welches Ken Thompson im Jahr 1973 in Version 3 Unix durch den Systemaufruf pipe() und für die Shell durch die Pipe erweiterte.[6]

Ken Thompson führte außerdem die obige Notation ein, welche die Beschreibung der Pipe-Syntax in Version 4 Unix stark vereinfachte.[7]

Viele Betriebssysteme wie DOS, OS/2, Microsoft Windows, und BeOS implementierten später die Pipeline mit identischer Notation und Tony Hoare entwickelte das Konzept der Pipeline mit CSP weiter.[8]

Das Computerprogramm Automator von Apple verkettet auch sich wiederholende Befehle mit Pipelines. Das Roboter-Icon trägt daher als Hommage an das ursprüngliche Unix-Konzept ein Rohr (Pipe) in seinen Händen.

Siehe auch

  • Everything is a file – Grundpfeiler der Unix-Philosophie, Pipelines verarbeiten Dateien im Unix-Sinne
  • GStreamer – auf Pipelines basierendes Multimedia-Framework
  • GNU parallel - parallele Verarbeitung von mehreren Shells, auch mit Daten aus Pipes
  • Tee (Unix) – Unix-Kommando zum Abgreifen von Daten einer Pipeline
  • XML-Pipeline – Verarbeiten von XML-Dateien
  • xargs - Unix-Kommando um Standardausgaben via Pipe in andere Unix-Befehle umzuwandeln
  • netcat,socat Verbindung zu TCP/IP-Internet-Sockel mittels Pipes.

Einzelnachweise

  1. DigitalOcean: An Introduction to Linux I/O Redirection. Abgerufen am 14. September 2018 (Abschnitt Pipes).
  2. Jürgen Wolf, Klaus-Jürgen Wolf: Linux-Unix-Programmierung. Das umfassende Handbuch. 2. Aufl., Rheinwerk Verlag: Bonn, 2006, Kapitel 9.1.1.
  3. Hamilton Laboratories: C-Shell Quick Reference. Abgerufen am 14. September 2018.
  4. Case Western Reserve University: Bash release notes. Abgerufen am 14. September 2018 (Bash-3.2 release:1dd).
  5. Michael S. Mahoney: The Unix Oral History Project: Release.0, The Beginning. Abgerufen am 14. September 2018.
  6. Douglas McIlroy (Bell Labs): A Research Unix reader: annotated excerpts from the Programmer's Manual. In: CSTR, nummer 139, 1971-1986. Abgerufen am 14. September 2018.
  7. The Linux Information Project (LINFO): Pipes: A Brief Introduction. Abgerufen am 14. September 2018.
  8. Russ Cox: Bell Labs and CSP Threads. Abgerufen am 14. September 2018.


[[Kategorie:Unix]]