Dr. Linux: Tricks auf der Kommandozeile

Besser kommandiert

Dass auf einer Kommandozeile Befehle eingegeben werden, ist normal. Aber mit der Linux-Standard-Shell Bash lassen sich auch Befehle anzeigen und verwalten, Ausgaben umleiten und Hilfe anfordern.

Dr. Linux

Komplizierte Organismen, wie Linux-Systeme es nun einmal sind, haben so ihre ganz eigenen Wehwehchen. Dr. Linux beobachtet die Patienten in den Linux-Newsgruppen, stellt an dieser Stelle Rezepte für aktuelle Probleme aus und alternative Heilmethoden vor.

Befehle verwalten

Dass ich mit den Cursor-Tasten Befehle auf der Kommandozeile zurückholen, verändern und mit [Enter] erneut abschicken kann, finde ich praktisch, besonders wenn's um schwierige Kommandos geht. Aber lassen sich auch Arbeitsabläufe anzeigen, die aus mehreren hintereinander ausgeführten Befehlen bestehen? Die möchte ich gern abspeichern, um mir bei Bedarf das umständliche "Durchblättern" der Befehls history zu ersparen.

Dr. Linux: Die Linux-Standard-Shell Bash bringt das Builtin fc (fix command) mit, das Befehle, die früher abgesetzt wurden, nachträglich anzeigt. Einzige Voraussetzung: Sie müssen sich in der .bash_history befinden.

perle@suse:~> type fc
fc is a shell builtin

Zusammen mit der Option -l (list) gibt fc die letzten 17 Befehle nummeriert aus. Die Ziffer am Zeilenanfang entspricht der laufenden Nummer, die das Kommando aktuell in der .bash_history trägt:

perle@suse:~> fc -l
483      fc -ln -5 >>test.txt
484      cat test.txt
[…]
496      minicom
497      exit
498      fc -ln -8
499      history

Eine bestimmte Anzahl alter Befehle, beispielsweise die letzten fünf, listet fc, wenn Sie die gewünschte Menge mit einem Minuszeichen versehen mit angeben:

perle@suse:~> fc -l -5
496      minicom
497      exit
498      fc -ln -8
499      history
500      fc -l

Auch Befehlsfolgen, die schon länger zurückliegen, können Sie sich anzeigen lassen. Als Argument werden dabei die Nummern des ersten und des letzten anzuzeigenden Kommandos eingegeben:

fc -l Erste_Befehlsnummer Letzte_Befehlsnummer

Das sieht zum Beispiel so aus:

perle@suse: ~> fc -l 311 312
311      test -e /tmp/test.txt
312      echo $?

Der Befehl Nummer 311 stellt fest, ob die Datei /tmp/test.txt existiert. Leider gibt das test-Kommando keine Rückmeldung auf der Kommandozeile. Ob die Datei nun wirklich vorhanden ist, finden Sie heraus, indem Sie den Rückgabewert des Befehls erfragen: 0 bedeutet, dass es das File gibt. Diese Abfrage übernimmt das Kommando echo $?, das Sie sicher nicht jedesmal im Buch nachschlagen wollen, wenn Sie es einmal aller Monate brauchen.

Stellt sich nur noch die Frage, woher Sie die für den Gebrauch von fc benötigten Befehlsnummern bekommen. Die gesamte gespeicherte History der Shell mitsamt den Zahlen listet der Befehl history (Abbildung 1).

In dessen Ausgabe lässt sich besser navigieren, wenn Sie sie mit history | less an das Programm less verfüttern. Mit dem Schrägstrich und nachfolgender Angabe eines Suchbegriffs können Sie die History so sogar durchsuchen. Die [q]-Taste schließt die Anzeige.

Abbildung 1: Der Befehl history zeigt alle Kommandozeilen-Eingaben durchnummeriert an

Wenn Ihnen die Nummern in der fc-Ausgabe lästig sind (Sie wollen sie im Falle der Weiterverarbeitung sowieso löschen), nutzen Sie neben der Option -l auch noch -n ("no numbers"):

perle@suse:~> fc -ln 311 312
         test -e /tmp/test.txt
         echo $?

Bleibt die Frage, wie Sie die Ausgaben von fc in eine Textdatei bekommen. Dafür sorgt die Option -e: Sie lädt das Ergebnis in einen Editor, und zwar standardmäßig in den vi. Wenn Sie lieber einen anderen hätten, erweitern Sie Ihren fc-Befehl nach folgendem Muster:

fc -e Editorname Erste_Befehlsnummer Letzte_Befehlsnummer

Leider hat diese nützliche Option einen entscheidenden Nachteil: Nach dem Beenden des Editors führt fc alle ausgegebenen Befehle direkt aus. Das passiert auch, wenn Sie fc ohne Optionen aufrufen. Hier wird die davor abgeschickte Befehlszeile in den Default-Editor vi geladen und nach dem Verlassen desselben ausgeführt.

Da vi sich nicht gerade intuitiv erschließt, finden Sie im Kasten 1 eine Kurzanleitung für den Notfall.

Kasten 1: Notfallanleitung für den Umgang mit vi(m)

fc ist nicht der einzige Befehl, der den vi als Default-Editor einsetzt. Daher ist dieses Programm in jedem Fall mehr als einen Blick wert. Linux-User bekommen in der Regel nicht das Original, sondern einen vi-Klon wie vim zu sehen, der zusätzlich zur "normalen" vi-Funktion noch einiges mehr kann.

Wenn fc den vi öffnet, befinden Sie sich im sogenannten Befehlsmodus ("command mode"). Hier können Sie den Editor gleich wieder verlassen, indem Sie :q! eintippen. Der Befehl bedeutet für den vi: Beende dich ("quit") und verwirf die Änderungen ("!"). Dabei springt der Cursor beim Eingeben des Doppelpunkts in die letzte Bildschirmzeile.

Text eingeben oder verändern können Sie im Befehlsmodus nicht direkt, dafür aber mit den Cursor-Tasten hin- und herfahren. Unten links am Bildschirmrand zeigt der vi das Verzeichnis (/tmp/) und den Dateinamen (hier bash-fc-1987844619) der Datei an, die Sie gerade bearbeiten:

/tmp/bash-fc-1987844619: 1 lines, 14 characters.

Um diese temporäre Datei zu speichern ("write") (und anschließend im Lieblingseditor weiterzubearbeiten), sagen Sie :wq. Das q in diesem vi-Befehl sorgt dafür, dass sich der Editor anschließend beendet.

Um stattdessen Text einzufügen, tippen Sie auf Ihrer Tastatur i ("insert"). Damit wechselt der Editor in den Einfügemodus. Das Eintippen eines Doppelpunkts wird darin nicht als Befehl, sondern als Texteingabe behandelt.

Zum Speichern der neu erstellten Datei geht es mit der [Esc]-Taste zuerst zurück in den Befehlsmodus. Soll das File einen neuen Namen bekommen, sagen Sie :w Dateiname zum Speichern im aktuellen Arbeitsverzeichnis oder :w /Verzeichnis/Dateiname zum Ablegen in einem Verzeichnis Ihrer Wahl. Die Bestätigung gibt es wieder unten links am Bildschirmrand:

"/tmp/test.txt" [Neu] 1L, 18C geschrieben

Detaillierte Ausführungen zum vi bietet unter anderem http://www.openoffice.de/linux/buch/vi.html. http://www.linuxfibel.de/vi.htm beschreibt vim in aller Ausführlichkeit.

Wer sich das Ausführen der ausgegebenen Befehle sparen will, greift zur Ausgabeumlenkung der Shell: Wenn Sie die Ausgabe eines Befehls statt auf den Bildschirm (Standardverhalten) in eine Datei schreiben wollen, brauchen Sie einfach einen Pfeil (das "Größer-als-Zeichen" >) und einen Dateinamen. Die Bash erstellt dann eine neue Datei mit dem angegebenen Namen, in der die Ausgabe zu finden ist. Aber Vorsicht, wenn es bereits ein gleichnamiges File gibt, wird dessen Inhalt überschrieben. In diesem Fall ist es günstiger, das doppelte >> zu nutzen, das Ausgaben an eine bestehende Datei anhängt:

perle@suse:~> fc -ln 311 312 > Befehlslexikon.txt
perle@suse:~> fc -l 311 312 >> Befehlslexikon.txt
perle@suse:~> cat Befehlslexikon.txt
         test -e /tmp/test.txt
         echo $?
311      test -e /tmp/test.txt
312      echo $?

Im Beispiel erstellt die Shell die Datei Befehlslexikon.txt, die die Ausgabe von fc -ln 311 312 enthält. Anschließend wird die gleiche Ausgabe, zur Veranschaulichung diesmal mit der Nummerierung aus der History, angehängt. Der Befehl cat gibt die so erweiterte Textdatei Befehlslexikon.txt auf der Kommandozeile aus.

Genug ist nicht genug

In der History der Bash finde ich zwar die Befehle wieder, die ich eingegeben habe, aber nicht die Ausgaben, die diese Kommandos geliefert haben. Kann ich die auch irgendwo abrufen?

Dr. Linux: Ob Sie umfangreiche Arbeiten nachvollziehbar speichern oder einfach eine Gedächtnisstütze anlegen wollen – in jedem Fall bietet der Befehl script die Möglichkeit, Ihre Eingaben auf der Kommandozeile und die Ausgaben, die diese Befehle liefern, zu protokollieren. Geben Sie den Befehl script in einer Shell ein, erhalten Sie die freundliche Auskunft: Script wurde gestartet, die Datei ist typescript. Je nach System kommt diese Meldung eventuell in englischer Sprache daher (Abbildung 2).

"Die Datei ist typescript" bedeutet schlicht und ergreifend, dass die nun folgenden Ein- und Ausgaben in der Datei typescript im aktuellen Arbeitsverzeichnis gespeichert werden. Damit script diese tatsächlich anlegen kann, ist es sinnvoll, den Befehl im Home-Verzeichnis zu starten und erst danach ggf. in andere Verzeichnisse zu wechseln. Auch das spätere Auffinden der Datei erleichtern Sie sich so. Existiert typescript bislang nicht, wird die Datei angelegt; existiert sie bereits, wird sie überschrieben. Danach merken Sie nichts mehr von script: Der Protokollant läuft still und leise im Hintergrund, und Sie können wie gewohnt in der Shell arbeiten.

Wenn Ihnen der Name der Protokolldatei nicht passt, geben Sie script Ihren Wunsch beim Start einfach mit auf den Weg:

script Name_der_Protokolldatei
Abbildung 2: Der Befehl cat zeigt den Inhalt der Datei typescript auf der Kommandozeile an

Um die Protokolliererei zu beenden, verwenden Sie die Tastenkombination [Strg-D] oder den Befehl exit. Auf der Kommandozeile erscheint daraufhin die Bestätigung Script wurde beendet, die Datei ist typescript.

Diese unter Umständen zu beträchtlicher Größe angewachsene Protokolldatei lässt sich mit dem Editor Ihrer Wahl zwar betrachten, aber Freude wird Ihnen das nicht bereiten: Sie enthält Steuerzeichen, die auf der Kommandozeile u. a. dazu dienen, Ein- und Ausgaben richtig darzustellen. Daher nutzen Sie zum Lesen der Datei ein Tool, das diese Steuerzeichen versteht, die Kommandozeile:

perle@suse:~> cat typescript
»Script« wurde gestartet: Wed Mar  5 14:53:47 2003
[…]
»Script« beendet: Wed Mar  5 14:53:55 2003

An Beginn und Ende des Files fügt script Datum und Uhrzeit ein. Wer dazwischen stöbert, merkt aber auch, dass manchmal etwas fehlt: die Ausgabe eines less-Kommandos zum Beispiel, die auch aus dem Kommandozeilenfenster verschwindet, sobald man less beendet. Sie zeigt less typescript zwar mit an, aber dann sind eben auch die Steuerzeichen wieder mit von der Partie…

LinuxCommunity kaufen

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

Deutschland

Ähnliche Artikel

  • Mit der Bash History Suggest Box Shell-Befehle schneller finden
    Mit den Pfeiltasten lässt sich der Bash-Verlauf schnell durchstöbern. Allerdings erweisen sich die Suchfunktionen der Bash als eng begrenzt. Hier springt die clevere Bash History Suggest Box in die Bresche.
  • Bash-Workshop
    Alle bereits einmal in einer Bash ausgeführten Befehlszeilen werden in einem Speicher – dem History-Buffer – gespeichert. Dieser Teil unserer Serie über die Bash beschäftigt sich mit diesem Speicher und zeigt den Zugriff auf die dort enthaltenen Informationen.
  • Dr. Linux
    Was sich hinter einem Befehl versteckt oder wer gerade eingeloggt ist; das alles lässt sich mit wenigen Eingaben auf der Tastatur herausfinden.
  • Bash-Kurs Teil 6
    Die elementaren Konfigurationsmöglichkeiten mit eingebauten Funktionen der Bash sind der Schwerpunkt dieses Teils. Im nächsten wird ein komfortables Tool zur Erzeugung von Konfigurationsdateien vorgestellt.
  • Tricks für die Bash
    Mit ein paar grundlegenden Kniffen bringen Sie Schwung und Farbe in die Arbeit auf der Kommandozeile.
Kommentare

Infos zur Publikation

LU 11/2017: Server für Daheim

Digitale Ausgabe: Preis € 8,50
(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!

Stellenmarkt

Aktuelle Fragen

Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 3 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...
Backup mit KUP unter Suse 42.3
Horst Schwarz, 24.09.2017 13:16, 3 Antworten
Ich möchte auch wieder unter Suse 42.3 mit Kup meine Backup durchführen. Eine Installationsmöglic...
kein foto, etc. upload möglich, wo liegt mein fehler?
kerstin brums, 17.09.2017 22:08, 5 Antworten
moin, zum erstellen einer einfachen wordpress website kann ich keine fotos uploaden. vom rechne...
Arch Linux Netzwerkkonfigurationen
Franziska Schley, 15.09.2017 18:04, 0 Antworten
Moin liebe Linux community, ich habe momentan Probleme mit der Einstellung des Lan/Wlan in Arc...