Zum Inhalt springen

„Pipeline (Unix)“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
K Leerzeichen vor Link eingefügt, Halbgeviertstrich, deutsch, Links normiert
tk k
Zeile 1: Zeile 1:
{{Dieser Artikel| beschreibt die Verwendung der Pipeline in der Shell. Für Software-Pipelines im Allgemeinen siehe [[Pipe (Informatik)]]}}
{{Dieser Artikel| beschreibt die Verwendung der Pipeline in der Shell. Zu Software-Pipelines im Allgemeinen siehe [[Pipe (Informatik)]]}}
[[Datei:Pipeline.svg|mini|280px|Eine auf einem [[Terminal (Computer)|Text-Terminal]] laufende Pipeline bestehend aus drei Programmen mit [[Standard-Datenströme#Standardeingabe (stdin)|stdin]], [[Standard-Datenströme#Standardausgabe (stdout)|stdout]] und [[Standard-Datenströme#Standardfehlerausgabe (stderr)|stderr]]]]
[[Datei:Pipeline.svg|mini|280px|Eine auf einem [[Terminal (Computer)|Text-Terminal]] laufende Pipeline bestehend aus drei Programmen mit [[Standard-Datenströme#Standardeingabe (stdin)|stdin]], [[Standard-Datenströme#Standardausgabe (stdout)|stdout]] und [[Standard-Datenströme#Standardfehlerausgabe (stderr)|stderr]]]]


Eine '''Pipeline''' in [[Unixoides System|unixoiden]] [[Betriebssystem]]en besteht aus Programmen, die über ihre [[Standard-Datenströme]] miteinander verkettet sind. Dabei „empfängt“ ein Programm über die [[Standard-Datenströme#Standardeingabe (stdin)|Standardeingabe (stdin)]] die [[Standard-Datenströme#Standardausgabe (stdout)|Standardausgabe (stdout)]] des jeweils vorherigen Programms in der Kette. Die einzelnen Programme werden nacheinander durch das jeweils vorherige aufgerufen.<ref>{{Internetquelle |autor=DigitalOcean |url=https://www.digitalocean.com/community/tutorials/an-introduction-to-linux-i-o-redirection |titel=An Introduction to Linux I/O Redirection |zugriff=2018-09-14 |kommentar= Abschnitt Pipes}}</ref>
Eine '''Pipeline''' in [[Unixoides System|unixoiden]] [[Betriebssystem]]en besteht aus Programmen, die über ihre [[Standard-Datenströme]] miteinander verkettet sind. Dabei „empfängt“ ein Programm über die [[Standard-Datenströme#Standardeingabe (stdin)|Standardeingabe (stdin)]] die [[Standard-Datenströme#Standardausgabe (stdout)|Standardausgabe (stdout)]] des jeweils vorherigen Programms in der Kette. Die einzelnen Programme werden nacheinander durch das jeweils vorherige aufgerufen.<ref>{{Internetquelle |hrsg=DigitalOcean |url=https://www.digitalocean.com/community/tutorials/an-introduction-to-linux-i-o-redirection |titel=An Introduction to Linux I/O Redirection |zugriff=2018-09-14 |kommentar=Abschnitt Pipes}}</ref>


In der [[Shell (Betriebssystem)|Shell]]-[[Syntax]] wird ein [[Senkrechter Strich]] (<code>|</code>, im [[Unix]]-[[Jargon]] „Pipe“ oder „Pipe-Zeichen“ genannt) als Verkettungszeichen der einzelnen Programme verwendet:
In der [[Shell (Betriebssystem)|Shell]]-[[Syntax]] wird ein [[Senkrechter Strich]] (<code>|</code>, im [[Unix]]-[[Jargon]] „Pipe“ oder „Pipe-Zeichen“ genannt) als Verkettungszeichen der einzelnen Programme verwendet:
<source lang="bash">Programm1 | Programm2 | Programm3</source>
<syntaxhighlight lang="bash">
Programm1 | Programm2 | Programm3
</syntaxhighlight>


Das Betriebssystem nutzt hierbei das Prinzip der „[[Interprozesskommunikation#(Namenlose) Pipes|namenlosen Pipe]]“, die älteste und erste Technik der [[Interprozesskommunikation|Interprozess&shy;kommunikation]].<ref>Jürgen Wolf, Klaus-Jürgen Wolf: ''Linux-Unix-Programmierung. Das umfassende Handbuch.'' 2. Aufl., Rheinwerk Verlag: Bonn, 2006, Kapitel 9.1.1.</ref>
Das Betriebssystem nutzt hierbei das Prinzip der „[[Interprozesskommunikation#(Namenlose) Pipes|namenlosen Pipe]]“, die älteste und erste Technik der [[Interprozesskommunikation|Interprozess&shy;kommunikation]].<ref>Jürgen Wolf, Klaus-Jürgen Wolf: ''Linux-Unix-Programmierung. Das umfassende Handbuch.'' 2. Aufl., Rheinwerk Verlag: Bonn, 2006, Kapitel 9.1.1.</ref>
Zeile 13: Zeile 15:
# Reduziere die [[Ausgabe (Computer)|ausgegebene]] Liste mit <code>[[grep]] -v "failed"</code> um jene Zeilen, die die Zeichenkette „failed“ enthalten.
# Reduziere die [[Ausgabe (Computer)|ausgegebene]] Liste mit <code>[[grep]] -v "failed"</code> um jene Zeilen, die die Zeichenkette „failed“ enthalten.
# Gebe die resultierende Liste zum seitenweisen Betrachten mit [[Less (Unix)|less]] aus:
# Gebe die resultierende Liste zum seitenweisen Betrachten mit [[Less (Unix)|less]] aus:
<source lang="bash">ls -dl *key* | grep -v "failed" | less</source>
<syntaxhighlight lang="bash">
ls -dl *key* | grep -v "failed" | less
</syntaxhighlight>


== Standardfehlerausgabe ==
== Standardfehlerausgabe ==
Per [[Default]] sammelt die Pipeline die [[Standard-Datenströme#Standardfehlerausgabe (stderr)|Standardfehlerausgaben (stderr)]] ihrer einzelnen Kindprozesse und leitet sie am Ende an die [[Kommandozeile]] weiter. Die alternative Schreibweise "<code>|&</code>" der [[Unix-Shell#Die C-Shell|C-Shell]] führt jedoch die [[Standard-Datenströme#Standardausgabe (stdout)|Standardausgaben]] und die [[Standard-Datenströme#Standardfehlerausgabe (stderr)|Standardfehlerausgaben]] der jeweiligen Kindprozesse zusammen und übergibt diese als [[Standard-Datenströme#Standardausgabe (stdout)|Standardausgabe]] an den nächsten [[Prozess (Informatik)|Prozess]].<ref>{{Internetquelle |autor=Hamilton Laboratories |url=https://hamiltonlabs.com/Archives/1990-07-10-Hamilton-C-shell-Quick-Reference.pdf |titel=C-Shell Quick Reference |zugriff=2018-09-14}}</ref> Ergänzend dazu leitet die Pipeline in der [[Unix-Shell#Die Bourne-Shell|Bourne-Shell]] seit [[Bash (Shell)|Bash 4.0]] die
Per [[Default]] sammelt die Pipeline die [[Standard-Datenströme#Standardfehlerausgabe (stderr)|Standardfehlerausgaben (stderr)]] ihrer einzelnen Kindprozesse und leitet sie am Ende an die [[Kommandozeile]] weiter. Die alternative Schreibweise "<code>|&</code>" der [[Unix-Shell#Die C-Shell|C-Shell]] führt jedoch die [[Standard-Datenströme#Standardausgabe (stdout)|Standardausgaben]] und die [[Standard-Datenströme#Standardfehlerausgabe (stderr)|Standardfehlerausgaben]] der jeweiligen Kindprozesse zusammen und übergibt diese als [[Standard-Datenströme#Standardausgabe (stdout)|Standardausgabe]] an den nächsten [[Prozess (Informatik)|Prozess]].<ref>{{Internetquelle |hrsg=Hamilton Laboratories |url=https://hamiltonlabs.com/Archives/1990-07-10-Hamilton-C-shell-Quick-Reference.pdf |titel=C-Shell Quick Reference |zugriff=2018-09-14 |format=PDF}}</ref> Ergänzend dazu leitet die Pipeline in der [[Unix-Shell#Die Bourne-Shell|Bourne-Shell]] seit [[Bash (Shell)|Bash 4.0]] die
[[Standard-Datenströme#Standardfehlerausgabe (stderr)|Standardfehlerausgaben]] mit der Notation <code>2>&1</code> in eine Datei um.<ref>{{Internetquelle |autor=[[Case Western Reserve University]] |url=https://tiswww.case.edu/php/chet/bash/NEWS |titel=Bash release notes |zugriff=2018-09-14 |kommentar= Bash-3.2 release:1dd}}</ref>
[[Standard-Datenströme#Standardfehlerausgabe (stderr)|Standardfehlerausgaben]] mit der Notation <code>2>&1</code> in eine Datei um.<ref>{{Internetquelle |hrsg=[[Case Western Reserve University]] |url=https://tiswww.case.edu/php/chet/bash/NEWS |titel=Bash release notes |zugriff=2018-09-14 |kommentar=Bash-3.2 release:1dd}}</ref>


== Geschichte ==
== Geschichte ==
[[Douglas McIlroy]] stellte während seiner Zeit in den [[Bell Laboratories|Bell Labs]] (der Geburtsstätte von [[Unix]]) fest, dass sehr oft Benutzer die [[Ausgabe (Computer) |Ausgabe-Datei]] eines [[Computerprogramm|Programms]] als [[Eingabe (Computer)|Eingabe-Datei]] für ein anderes nutzten.<ref>{{Internetquelle |autor=[[Michael S. Mahoney]] |url=http://www.princeton.edu/~hos/Mahoney/expotape.htm |titel=The Unix Oral History Project: Release.0, The Beginning |zugriff=2018-09-14}}</ref> Er führte daher das Konzept der Pipe ein, welches [[Ken Thompson]] im Jahr 1973 in [[Unix|Version 3 Unix]] durch den Systemaufruf <code>pipe()</code> und für die [[Unix-Shell|Shell]] durch die Pipe erweiterte.<ref>{{Internetquelle |autor=[[Douglas McIlroy]] ([[Bell Labs]]) |titel= A Research Unix reader: annotated excerpts from the Programmer's Manual|url=http://www.cs.dartmouth.edu/~doug/reader.pdf |zugriff=2018-09-14 |werk=CSTR, nummer 139, 1971-1986}}</ref>
[[Douglas McIlroy]] stellte während seiner Zeit in den [[Bell Laboratories|Bell Labs]] (der Geburtsstätte von [[Unix]]) fest, dass sehr oft Benutzer die [[Ausgabe (Computer)|Ausgabe-Datei]] eines [[Computerprogramm|Programms]] als [[Eingabe (Computer)|Eingabe-Datei]] für ein anderes nutzten.<ref>{{Internetquelle |autor=[[Michael S. Mahoney]] |url=http://www.princeton.edu/~hos/Mahoney/expotape.htm |titel=The Unix Oral History Project: Release.0, The Beginning |zugriff=2018-09-14}}</ref> Er führte daher das Konzept der Pipe ein, welches [[Ken Thompson]] im Jahr 1973 in [[Unix|Version 3 Unix]] durch den Systemaufruf <code>pipe()</code> und für die [[Unix-Shell|Shell]] durch die Pipe erweiterte.<ref>{{Internetquelle |autor=[[Douglas McIlroy]] ([[Bell Labs]]) |titel=A Research Unix reader: annotated excerpts from the Programmer’s Manual |url=http://www.cs.dartmouth.edu/~doug/reader.pdf |zugriff=2018-09-14 |werk=CSTR, nummer 139, 1971-1986 |format=PDF}}</ref>


Ken Thompson führte außerdem die obige Notation ein, welche die Beschreibung der Pipe-Syntax in [[Unix|Version 4 Unix]] stark vereinfachte.<ref>{{Internetquelle |autor=The Linux Information Project (LINFO) |url=http://www.linfo.org/pipe.html |titel=Pipes: A Brief Introduction |zugriff=2018-09-14}}</ref>
Ken Thompson führte außerdem die obige Notation ein, welche die Beschreibung der Pipe-Syntax in [[Unix|Version 4 Unix]] stark vereinfachte.<ref>{{Internetquelle |hrsg=The Linux Information Project (LINFO) |url=http://www.linfo.org/pipe.html |titel=Pipes: A Brief Introduction |zugriff=2018-09-14}}</ref>


Viele [[Betriebssystem]]e wie [[PC-kompatibles DOS|DOS]], [[OS/2]], [[Microsoft Windows]], und [[BeOS]] implementierten später die Pipeline mit identischer Notation und [[Tony Hoare]] entwickelte das Konzept der Pipeline mit [[Communicating Sequential Processes|CSP]] weiter.<ref>{{Internetquelle |autor=Russ Cox |url=https://swtch.com/~rsc/thread/ |titel=Bell Labs and CSP Threads |zugriff=2018-09-14}}</ref>
Viele [[Betriebssystem]]e wie [[PC-kompatibles DOS|DOS]], [[OS/2]], [[Microsoft Windows]], und [[BeOS]] implementierten später die Pipeline mit identischer Notation und [[Tony Hoare]] entwickelte das Konzept der Pipeline mit [[Communicating Sequential Processes|CSP]] weiter.<ref>{{Internetquelle |autor=Russ Cox |url=https://swtch.com/~rsc/thread/ |titel=Bell Labs and CSP Threads |zugriff=2018-09-14}}</ref>
Zeile 38: Zeile 42:


== Weblinks ==
== Weblinks ==
*{{man|sh|pipe|posix}}
* {{man|sh|pipe|posix}}
*[http://doc.cat-v.org/unix/pipes/ Doug McIlroy’s original 1964 memo]
* [http://doc.cat-v.org/unix/pipes/ Doug McIlroy’s original 1964 memo]
*[http://www.linfo.org/pipe.html Pipes: A Brief Introduction]
* [http://www.linfo.org/pipe.html Pipes: A Brief Introduction]
*[http://www.softpanorama.org/Scripting/pipes.shtml Unix Pipes – powerful and elegant programming paradigm]
* [http://www.softpanorama.org/Scripting/pipes.shtml Unix Pipes – powerful and elegant programming paradigm]
*[http://en.wikibooks.org/w/index.php?title=Ad_Hoc_Data_Analysis_From_The_Unix_Command_Line Ad Hoc Data Analysis From The Unix Command Line] – einfacher Filter für komplexe Datenanalyse
* ''[[b:en:Ad Hoc Data Analysis From The Unix Command Line|Ad Hoc Data Analysis From The Unix Command Line]]'' – einfacher Filter für komplexe Datenanalyse ([[Wikibooks]])
*[http://www.debian-administration.org/articles/145 Use And Abuse Of Pipes With Audio Data] – mit netcat, nettee und fifos
* [http://www.debian-administration.org/articles/145 Use And Abuse Of Pipes With Audio Data] – mit netcat, nettee und fifos


== Einzelnachweise ==
== Einzelnachweise ==
<references/>
<references />


[[Kategorie:Unix]]
[[Kategorie:Unix]]

Version vom 19. Dezember 2018, 19:46 Uhr

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. An Introduction to Linux I/O Redirection. DigitalOcean, 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. C-Shell Quick Reference. (PDF) Hamilton Laboratories, abgerufen am 14. September 2018.
  4. Bash release notes. Case Western Reserve University, 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. (PDF) In: CSTR, nummer 139, 1971-1986. Abgerufen am 14. September 2018.
  7. Pipes: A Brief Introduction. The Linux Information Project (LINFO), abgerufen am 14. September 2018.
  8. Russ Cox: Bell Labs and CSP Threads. Abgerufen am 14. September 2018.