Konsolen-Tipps

Terminal-Geflüster für die Linux-Konsole

12.05.2015 von David Wolski
Befehlseingaben und Befehlsausgaben: In den folgenden Tipps zur Befehlszeile geht es unter anderem darum, bereits eingetippte Kommandos schneller zu finden und Textausgaben übersichtlicher darzustellen.

Befehlsverlauf aufräumen: Verunglückte Befehle aus dem Verlauf werfen

Es passiert immer wieder, dass der eingegebene Befehl wegen einer kleinen Nachlässigkeit nicht sofort funktioniert, sondern erst nach einer oder mehreren Korrekturen. Es ist unvermeidlich, dass sich mit der Zeit im Befehlsverlauf der Shell zahlreiche fehlerhafte Kommandos tummeln.

Die Suchfunktion mit Strg-R zeigt immer den zuletzt ausgeführten Befehl an, auf den die eingegebene Zeichenkette zutrifft. Wenn Sie also ein neueres, korrigiertes Kommando eingeben, dann steht es im Befehlsverlauf vor den anderen Varianten des Kommandos. Ungünstig ist es aber, wenn sich ein gerade eingegebener und verunglückter Befehl an die erste Stelle in der Suche drängt.

Lästig sind auch versehentliche Eingaben, etwa ein unbeabsichtigtes Einfügen der Zwischenablage in einem Terminal-Fenster.

Damit im Befehlsverlauf die relevanten und korrekten Kommandos schneller auffindbar sind, ist ein gelegentliches Aussortieren des Verlaufs hilfreich. Dieser befindet sich bei jedem Benutzer in der versteckten Textdatei „.bash_history“ im Home-Verzeichnis. Zum Bearbeiten schließen Sie die geöffneten Terminal-Fenster und öffnen die Datei „.bash_history“ mit einem Texteditor wie Gedit, indem Sie im Ausführen-Dialog (Tastenkombination Alt und F2)

gedit .bash_history

eingeben. Diese Datei ist sehr einfach aufgebaut: Jedes Kommando im Verlauf ist in einer Zeile untergebracht, und das Löschen der Zeile entfernt das Kommando aus dem Gedächtnis der Shell.

SSH-Verbindungen: Veraltete SSH-Fingerabdrücke entfernen


Vor dem Aufbau einer SSH-Verbindung stellt sich nicht nur der Client mit Schlüssel oder Passwort zur Authentifizierung vor. Zunächst macht sich der Server mit seinem eindeutigen SSH-Fingerprint (Fingerabdruck) bekannt. Dies soll verhindern, dass ein anderer oder manipulierter Server unter der gleichen Adresse SSH-Verbindungen entgegennimmt. Im eigenen lokalen Netzwerk mit wechselnden IP-Adressen sind die häufiger auftretenden Warnhinweise von SSH aber eher lästig als hilfreich.

SSH verweigert die Verbindung: Hat sich der Server-Fingerabdruck wegen wechselnden IP-Adressen oder nach einer Neuinstallation geändert, dann löscht dieser Befehl den alten Fingerabdruck.

Bei der ersten Kontaktaufnahme zu einem SSH-Server müssen Sie auf dem Client den Fingerabdruck des Servers immer erst bestätigen, bevor der Verbindungsaufbau beginnt. Der Client speichert den Fingerabdruck für alle weiteren Verbindungen in der Datei „~/.ssh/known_hosts“, also im verstecken Unterordner „.ssh“ im Home-Verzeichnis. Wenn sich nun die IP-Adressen von SSH-Servern ändern, was im lokalen Netzwerk mit DHCP immer wieder mal vorkommen kann, oder wenn Sie ein Server-System neu installieren, dann wird sich SSH auf dem Client mit dem alarmierenden Warnhinweis „Warning: Remote host identification has changed!“ über einen geänderten Fingerabdruck des SSH-Servers beschweren. SSH verweigert die Verbindungsaufnahme, da es sich im einen Phishing-Angriff handeln könnte. Sofern Sie sich sicher sind, dass kein Angriff, sondern lediglich eine geänderte Adresse oder eine Neuinstallation des Servers für den Hinweis verantwortlich ist, dann können Sie den alten Fingerabdruck mit einem flinken Kommando löschen. Die Datei „~/.ssh/known_hosts“ brauchen Sie dazu nicht direkt zu bearbeiten. Geben Sie einfach

ssh-keygen -R [Host]

ein, wobei der Platzhalter „[Host]“ der Name oder die IP-Adresse des geänderten SSH-Servers ist.

Bei der nächsten Verbindungsaufnahme per SSH wird Ihnen dann der neue Fingerabdruck des Servers zur Bestätigung angeboten.

Webentwicklung und PHP: Dateien ohne Byte-Order-Mark


Wer im Zuge von Webentwicklungen Text- oder Script-Dateien zwischen unterschiedlichen Betriebssystemen und Texteditoren austauscht, wird oft auf die ominöse Zeichenkette „“ am Anfang der Dateien stoßen. Was zunächst wie ein Fehler aussieht, hat eine einfache Erklärung: Es handelt sich um das Byte-Order-Mark (BOM) von UTF-8/16/32-Dateien, das bei einer missglückten Konvertierung in den ISO-Zeichensatz 8859-1 oder 8859-15 zurückbleibt.

Byte-Order-Mark (BOM) entfernen: In der Shell können Sie mit grep Textdateien mit BOM finden und dann bei Bedarf mit sed in allen Dateien eines bestimmten Typs in einem Verzeichnis löschen.

Die Aufgabe von Byte-Order-Marks ist die Angabe der Byte-Reihenfolge, damit unterschiedliche Systeme unabhängig davon, ob die Architektur Big-Endian oder Little-Endian ist, eine Unicode-Textdatei richtig darstellen. In einer Text- oder Script-Datei nach ISO-Zeichensatz haben Byte-Order-Marks nichts verloren, die in UTF-Codierung eigentlich nur ein einziges Zeichen sind, aber bei einer misslungenen Umcodierung durch Editoren als drei Bytes (EF BB EF) interpretiert werden. Script-Dateien für PHP sollten ebenfalls kein BOM enthalten, egal wie die Datei kodiert ist. Eine irritierende Eigenschaft des Byte-Order-Marks ist, dass es viele Texteditoren wie etwa Gedit nicht anzeigen. Denn es gehört zu den nicht-druckbaren Zeichen. Die meisten Editoren, die mit UTF-8/16/32 umgehen können, filtern es deshalb heraus, egal wie die Datei tatsächlich kodiert ist. In den Dateien von Webprojekten kann die resultierende Zeichenfolge aber gerade bei PHP für lästige Fehler sorgen. Welche Dateien in aktuellen Ordnern und dessen Unterordnern ein BOM enthalten, zeigt im Terminal folgender Befehl an:

grep -Rl $'\xEF\xBB\xBF' *

Mit einem anderen Kommando bekommt man das deplatzierte Byte-Order-Mark aus Textdateien wieder heraus. So geht das beispielsweise für alle Dateien mit der Endung PHP im aktuellen Verzeichnis:

sed -i '1 s/^\xef\xbb\xbf//' *.php

Manuell kann man das Byte-Order-Mark auch mit dem Editor Vim entfernen. Öffnen Sie dazu die Datei mit vim [Dateiname], und geben Sie im Befehlsmodus die Vim-Befehle

:set nobomb

ein, bevor Sie die Datei dann mit :wqspeichern.

Befehlsausgaben darstellen: Eine Befehlsausgabe durchsuchen


Viele Kommandos zur Anzeige von Statusberichten, Hardware-Listen und Logs füllen das Terminal-Fenster seitenweise mit Textausgaben. Das Tool less teilt die Ausgabe in kleinere Portionen auf.

less kann mehr als more: Mit angehängtem less blättern Sie nicht nur eine Befehlsausgabe komfortabel durch, sondern suchen nach Zeichenketten und speichern alles als Textdatei.

Der Name „less“ ist ein Wortspiel, das sich auf das ältere Kommando „more“ bezieht, das zwar ebenfalls Textausgaben seitenweise anzeigt, dabei aber nur Vorblättern gestattet. Das Tool less ist heute auf jedem Linux-System vorhanden und stellt einen eigenen Puffer für die Textausgabe im Terminal bereit, wenn es nach dem Schema

[Befehl] | less

an ein Kommando angehängt wird. Mit den Cursor-Tasten können Sie dann die Ausgabe durchblättern, mit der Leertaste eine Seite überspringen und mit der Q-Taste abbrechen. Diese Fähigkeiten von less sind die bekannten Funktionen, aber das Programm kann mehr, etwa nach Zeichenketten suchen und diese hervorheben. Geben Sie dazu in der Anzeige von less einen Backslash (/) ein und dahinter die gesuchten Zeichen in der exakten Schreibweise, wobei die Groß- und Kleinschreibung von Bedeutung ist. Nach Druck auf Enter werden alle vorkommenden Begriffe dieser Art invers hinterlegt. Eventuell benötigen Sie die Ausgabe in less doch als Textdatei, um mit einem bequemen Texteditor Stellen zu kopieren, weiterzubearbeiten oder einfach um das Resultat eines Befehls aufzuheben. Auch das gelingt ganz einfach: Drücken Sie die Taste S, und geben Sie dann den gewünschten Dateinamen ein. Die Datei wird im aktuellen Verzeichnis gespeichert, sofern Sie zum Dateinamen keinen Pfad angegeben haben.

Befehlsverlauf organisieren: Befehle mit Schlüsselwörtern markieren


Lange Kommandos tippt niemand gerne, und bei wiederkehrenden Befehlen, die Sie immer wieder mal benötigen, ist das auch gar nicht nötig. Denn die Shell vergisst nichts und speichert eingegebene Befehle im Befehlsverlauf. Diesen können Sie mit den Cursor-Tasten Pfeil-Oben und Pfeil-Unten durchblättern oder mit der Tastenkombination Strg-R nach einer Zeichenkette durchsuchen. Ein Trick erweitert diese Suchfunktion mit Schlüsselwörtern.

Schnell wiederfinden dank Schlüsselwort: Hinter dem Mount-Befehl wurde nach dem Kommentarzeichen (#) der Suchbegriff „isomount“ ergänzt, der nun auch im Verlauf steht.

In Bash-Scripts leitet das #-Zeichen einen Kommentar ein: Alles was dahinter folgt, wird ignoriert. Und dies gilt nicht nur für Scripts, sondern auch in der Kommandozeile. Ein Kommentar, den Sie an einen häufig benötigten Befehl anhängen, landet ebenfalls im Befehlsverlauf. In der Befehlszeile sind Kommentare daher nützlich, um häufig benötigte Befehle zum leichteren Auffinden mit einem Schlüsselwort zu ergänzen. Das Schlüsselwort geben Sie nach dem Befehl wie folgt ein:

[Langer Befehl] # [Schlüsselwort]

Wenn Sie jetzt Strg-R drücken, müssen Sie nur das Schlüsselwort eingeben und brauchen nicht mehr die anderen Teile des Kommandos im Gedächtnis haben, um es wieder in die Shell zu holen. Dazu ein anschauliches Anwendungsbeispiel: Der Mount-Befehl kann mit einigen Zusatzoptionen ISO-Images als lesbares Dateisystem einhängen. Falls Sie den Befehl immer wieder mal benötigen, dann markieren Sie den Befehl bei der Eingabe mit einem Kommentar, an den Sie sich in diesem Zusammenhang leicht erinnern können:

sudo mount -t iso9660 -o ro ubuntu-14.04-desktop-amd64.iso / mnt/iso/ # isomount

Das gesamte Kommando finden Sie jetzt, indem Sie im Befehlsverlauf „isomount“ suchen. Das Beispiel zeigt auch den Vorteil dieser Methode gegenüber Alias-Definitionen. Während ein Alias gut für Befehle ist, die sich nie ändern sollen, ist der Befehlsverlauf nützlich, wenn Sie Kommandos vor dem Ausführen noch anpassen müssen. Denn nach der Suche mit Strg-R holen Sie den gefundenen Befehl mit der Pfeil-Links-Taste zur Bearbeitung in die Shell, ohne ihn sofort auszuführen.

(PC-Welt/ad)