Hardcore Linux

Die Bash, das unbekannte Wesen

Dieser Teil der Serie über die Bash stellt die Grundlagen für die Arbeit mit mehreren und verketteten Befehlen auf der Bash zusammen.

Ein Überblick

Kleine Programme, die auf einer Shell ausgeführt werden, heißen "Befehle" ("Commands"). So unterschiedlich ihre Funktionen auch sind, weisen sie doch gewolltermaßen und prinzipiell viele Ähnlichkeiten auf. So verfügt jeder Befehl über drei Ein- und Ausgänge, die für bestimmte festgelegte Aufgaben eingesetzt werden, die Standardkanäle. Befehle können in den Befehlszeilen einzeln, zu mehreren oder in verketteter Form eingegeben werden. Alle Formen haben bestimmte Vorteile und Eigenheiten.

Befehle und Standardkanäle

Abbildung 1: Datenfluss und Standardkanäle

Einer der Befehlskanäle stellt dem Befehl ein Tor für Eingaben zur Verfügung. Über ihn liest ein Programm Daten aus einer Datei oder einer Pipe (siehe unten) ein. Dieser Kanal wird daher als "Standardeingabe" (standard input) bezeichnet. Analog gibt es einen Ausgabekanal, die "Standardausgabe" (standard output). Der dritte Kanal ("Standardfehlerausgabe" – standard error) hat eine besondere Funktion: über ihn werden Fehlermeldungen, die der Befehl generiert, ausgegeben. Diese Fehlermeldungen haben unter Linux eine wichtige Funktion, da sie oft Hinweise enthalten, wie ein Problem zu lösen ist. Ein Beispiel: Mit den Befehl grep werden Texte nach bestimmten Zeichenketten durchsucht. Der Befehl muss dazu die Textdaten aus den Dateien erhalten (via Standardeingabekanal). Zeilen, die den entsprechenden Text enthalten, werden ausgegeben (via Standardausgabekanal) und in Fällen, wo ein Problem auftritt – weil etwa eine nicht lesbare Datei angegeben wurde – muss der Befehl dies über die Standardfehlerausgabe melden. Abbildung 1 verdeutlicht die Zusammenhänge. Die Zahlen "0", "1" und "2" dienen zur Kennzeichnung dieser Kanäle und werden als Datei-Descriptoren bezeichnet. In der Befehlszeile sieht der Anwender nur wenig von diesen Zusammenhängen:

$> grep muster textdatei*
grep: textdatei: Ist ein Verzeichnis
textdatei1.tex: ein Beispiel "muster"
...

Dieses Beispiel zeigt verschiedene Aspekte auf: Zum einen verwenden viele Befehle (wie auch grep) einige Argumente in der Befehlszeile für Eingaben. Derartige Befehle verwenden meistens das Terminal zur Eingabe, wenn keine entsprechende Eingabedatei beim Befehlsaufruf angegeben wurde.

$> grep geh
Das Lesen vom Terminal[RETURN]
geht so!
geht so!
[Strg-d]

("geht" wird als Suchmuster interpretiert. Mit [Strg][d] wird das Dateiende gekennzeichnet und so die Eingabe beendet.)

Zum anderen wird in dem Beispiel oben das letzte Argument in der Befehlszeile (textdatei*) als Name der Eingabedatei interpretiert. Da der Dateiname ein Sternchen enthält, ersetzt die Shell ihn durch alle passenden Dateinamen (beispielsweise textdatei1.tex, textdatei2.tex, …). Da es auch ein Verzeichnis mit dem Namen "textdatei" gibt, versucht grep zunächst auf dieses zuzugreifen, ein Versuch, der zum Scheitern verurteilt ist und die in der ersten Ausgabezeile dargestellte Fehlermeldung verursacht. Im folgenden sieht man, dass die Textausgaben (also die Zeilen, auf die das angegebene Muster zutraf) auch auf dem Terminal erscheinen. Grund für dieses Verhalten ist die Tatsache, dass normalerweise sowohl Standardausgabe- als auch Standardfehlerkanal auf das Terminal geleitet werden. Das muss aber nicht so sein. Über die Datei-Descriptoren sind beide Kanäle getrennt zugänglich.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Die Bash, das unbekannte Wesen
    Es gibt neben den Pipes noch verschiedene andere Verfahren, um mehrere Shell-Befehle miteinander zu verbinden bzw. sie parallel auszuführen. Die wichtigsten Methoden werden in dieser Folge der Bash-Serie vorgestellt.
  • Datenbaustelle
    Die Linux-Kommandozeile zeigt ihre Stärken gerade beim Kombinieren vieler kleiner Tools – hier gilt der klassische Satz: Das Ganze ist mehr als die Summe seiner Teile. Umleitungen und Pipes sind oft mit am Werk, wenn Kommandos zusammenwirken.
  • Zu Befehl: Kanäle, Pipes und Tee
    Mit wenigen Handgriffen leiten Sie auf der Kommandozeile Ein- und Ausgaben von Befehlen um und kombinieren Kommandos. Wir stellen die benötigten Bash-Operatoren vor und zeigen, wie Sie mit dem Programm tee noch einen Zwischenschritt einlegen.
  • Am Fließband
    Mit Sed editieren Sie Textdaten ohne interaktive Benutzeroberfläche – auch in Pipes oder der Eingabeumlenkung. In einer einzigen Zeile lassen sich umfangreiche Editierkommandos absetzen.
  • The Answer Girl
    Solange man online ist, halten sich die Sprachprobleme in Grenzen: Web-Wörterbücher wie dict.leo.org helfen in meistens akzeptabler Geschwindigkeit über die Hürden des fehlenden (Englisch-) Wortschatzes hinweg. Doch wehe, man ist weder mit Standleitung noch Flatrate gesegnet: Schon ärgert man sich, das Regal mit den papiernen Wörterbüchern am anderen Ende des Raums aufgestellt zu haben.
Kommentare

Infos zur Publikation

LU 05/2017: Linux unterwegs

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Aktuelle Fragen

Linux open suse 2,8
Wolfgang Gerhard Zeidler, 18.04.2017 09:17, 2 Antworten
Hallo.bitte um Hilfe bei. Code fuer den Rescue-login open suse2.8 Mfg Yvo
grep und sed , gleicher Regulärer Ausdruck , sed mit falschem Ergebnis.
Josef Federl, 15.04.2017 00:23, 1 Antworten
Daten: dlfkjgkldgjldfgl55.55klsdjfl jfjfjfj8.22fdgddfg {"id":"1","name":"Phase L1","unit":"A",...
IP Cams aufzeichnen?
Bibliothek der Technischen Hochschule Mittelhessen / Giessen, 07.04.2017 09:25, 7 Antworten
Hallo, da nun des öfteren bei uns in der Nachbarschaft eingebrochen wird, würde ich gern mein...
WLAN lässt sich nicht einrichten
Werner Hahn, 21.03.2017 14:16, 2 Antworten
Dell Latitude E6510, Ubuntu 16.4, Kabelbox von Telecolumbus. Nach Anklicken des Doppelpfeiles (o...
"Mit Gwenview importieren" funktioniert seit openSuse 42.2 nicht mehr
Wimpy *, 20.03.2017 13:34, 2 Antworten
Bisher konnte ich von Digitalkamera oder SD-Karte oder USB-Stick Fotos mit Gwenview importieren....