Tipps&Tricks: Kommandozeilenkniffe VII Veröffentlicht am: 10.07.2004 09:59:17 Auch mit wenig Kenntnissen über Shell-Befehle unter Linux kann man seine Freunde und Kollegen doch noch beeindrucken, indem man diese einfach geschickt ‚verbiegt’. Aber nicht nur zum Angeben eignen sich die nun erläuterten Umleitungen und Pipes, sondern ebenfalls für den root, der diese Einzeiler schnell und unkompliziert mit cron aufrufen will, ohne gleich ein aufwändiges Shellskript schreiben zu müssen. Unter Linux und Derivaten haben nahezu alle aufrufbaren Programme einen so genannten Standardinput (STDIN), Standardoutput (STDOUT), sowie einen Standarderror (STDERR). Während die STDIN primär auf die Tastatur geschaltet ist (Sie müssen ja schließlich Kommandos eintippen), landen die Ausgaben und etwaige Fehlermeldungen auf der Konsole. Und da wären wir auch schon bei den Beispielen fürs Umleiten angelangt: mit „sort < liste.txt“ holt sich das Sortiertool die Daten aus der besagten Textdatei – ohne, dass man sie eintippen müsste – und gibt die Zeilen alphabetisch sortiert wieder aus. Das ganze funktioniert aber nur, wenn die Programme auch Eingaben von der Tastatur erwarten! Das ist z.B. bei ‚ls’ nicht der Fall, aber wir können mit „ls –la > /tmp/liste.txt“ das aktuelle Verzeichnis als Langform in ein File ‚ausgeben’. Oder möchten Sie den Inhalt des /tmp-Ordners löschen? Dann verhindert ein „rm –r /tmp/* 2> /root/rmerr.log“, dass fehlgeschlagene Löschversuche (z.B. offene Dateien) auf der Konsole ausgegeben werden. Sie landen stattdessen im Home-Verzeichnis vom root. Natürlich können die drei Umleitungen in der Form „Befehl < Eingabe > Ausgabe 2> Fehler“ beliebig kombiniert werden. Was ich Ihnen bis jetzt verschwiegen habe, war, dass ein „… > /tmp/file“ die Datei mit der aktuellen Ausgabe immer wieder überschreibt. Wer ein gewisse ‚Historie’ haben will, ergänzt STDOUT und –ERR-Umleitungen auf „>>“ und der Pinguin hängt ab sofort nur noch hinten an. Achten Sie darauf, das nun immer größer werdende /tmp/file in regelmäßigen Abständen zu löschen. Noch etwas raffinierter ist das Verknüpfen mehrerer Kommandos miteinander. Betrachten wir hierfür „ls –la /etc | grep „xc | sort“ etwas genauer: zuerst wird der /etc-Ordnerinhalt aufgelistet, jedoch wird mittels ‚|’ (engl. pipe) STDOUT gleich weiter auf STDIN des grep-Kommandos geleitet, welches nun Zeilen mit der Zeichenfolge „xc“ raussucht und ausgibt. Da dies aber wiederum umgeleitet wird, bekommt der sort-Befehl nun die Arbeit zugeschanzt und sortiert das Ergebnis, welches danach in der Shell - für den User endlich sichtbar - angezeigt wird. Das letzte wichtige Metazeichen ist ‚&’ – als Parameter an eine Befehlssequenz angehängt, transportiert es selbigen für die gesamte Ausführungsdauer in den Hintergrund. D.h. Sie können den nächsten Befehl gleich eintippen und bekommen aber weiterhin die Ausgaben des vorherigen Befehls (sofern noch nicht fertig) auf der Konsole angezeigt. Idealerweise werden hiermit vor allem X-Anwendungen gestartet. Da Übung den Meister macht, betätigen Sie sich gleich einmal als ‚Rohrverleger’ und zeigen Linux, wo sie die Ein- und Ausgaben gerne hätten :-) Christian Sudec |