Know-how für die Kommandozeile

Aus EasyLinux 02/2011

Know-how für die Kommandozeile

© sxc.hu

Shell-Tipps

Erfahrene Linux-Nutzer schwören auf flexible Kommandozeilentools, mit denen sich manche Aufgabe schneller bewältigen lässt als in grafischen Programmen. Wir stellen die wichtigsten Anwendungen vor, um auch Einsteiger zu einem Ausflug in die Shell zu ermutigen.

Tipp: Einheiten auf der Shell umrechnen

Wollten Sie schon immer wissen, wie viele Seemeilen 10 km sind? Wie man Meter in Fuß umrechnet oder Zentimeter in Inches (Zoll)? Sie lesen englische Kochrezepte und müssen schnell die Angabe “3 1/2 pounds potatoes, peeled and cut into 1/2-inch dice” in verständliche deutsche Einheiten umrechnen? Kein Problem – das Tool units aus dem gleichnamigen Paket steht Ihnen zur Seite. Sie können den Umrechner entweder interaktiv bedienen oder hinter dem units-Kommando die Einheiten definieren. Den interaktiven Modus starten Sie über Eingabe von units. Dann verrät das Tool, wie viele Einheiten es kennt, und zeigt einen eigenen Prompt an:

$ units
2411 units, 71 prefixes, 33 nonlinear units
You have:

Hinter You have: (“Sie haben:”) tippen Sie das, was Sie umrechnen möchten, also etwa 1.25 cups. Dabei reicht es, den Anfangsbuchstaben einer Einheit zu schreiben und dann zweimal [Tab] zu drücken. units zeigt dann mögliche Bezeichner an – so müssen Sie nicht mal raten, wie man diese schreibt.

Nachdem Sie die Eingabetaste gedrückt haben, fragt das Programm nach You want: (“Sie möchten:”). Jetzt geben Sie die Einheit an, in die Sie umrechnen möchten. Auch hier hilft units mit der Tab-Completion, die richtige Schreibweise zu finden. Nach einem Druck auf [Eingabe] sehen Sie das Ergebnis im Terminalfenster (Abbildung 1).

Abbildung 1: "units" ist ein praktischer Taschenrechner für die Konsole, der in Windeseile viele Einheiten umrechnet.

Abbildung 1: “units” ist ein praktischer Taschenrechner für die Konsole, der in Windeseile viele Einheiten umrechnet.

Die Zeile mit dem Sternchen (* 0.2957353) bedeutet, dass 1 1/4 cups circa 0,3 Liter sind. Sie beenden den praktischen Taschenrechner über die Tastenkombination [Strg]+[D].

Geben Sie nur Einheiten (ohne Zahlen) an, verraten Ihnen die beiden Ausgabezeilen, wie Sie multiplizieren oder dividieren müssen, um von der erste Einheit in die zweite umzurechnen; manchmal ist die Division leichter – Meter rechnet man z. B. mit einer Division durch 1000 in Kilometer um:

You have: m
You want: km
        * 0.001
        / 1000

Tipp: Einen Befehl über SSH verschicken

Um Programme auf entfernten Rechnern auszuführen, müssen Sie nicht zwingend den eigenen Arbeitsplatz verlassen und vor Ort sein. Dank der Secure Shell SSH [1] bietet Linux eine sichere Methode, Kommandos (auch grafische Anwendungen) über eine verschlüsselte Verbindung auszuführen. SSH bezeichnet das Protokoll selbst und gleichzeitig das Programm. Zur Erinnerung: Um sich auf einem entfernten Rechner anzumelden, tippen Sie beispielsweise

ssh benutzer@rechner.de

oder

ssh benutzer@192.168.1.1

Sie können die Gegenstelle hinter dem @-Zeichen also über den Hostnamen oder die IP-Adresse definieren. Ersteres ist nur dann möglich, wenn ein Nameserver (beispielsweise der Ihres Providers) die IP-Adressen in Namen auflöst oder diese Zuordnung in der lokalen Datei /etc/resolv.conf) zu finden ist. Die Angabe des Benutzernamens ist nur dann nötig, wenn der Account auf der Gegenseite anders heißt als der lokale.

Darüber hinaus ist es möglich, direkt an das ssh-Kommando einen Befehl anzuhängen. Um beispielsweise in Erfahrung zu bringen, welcher Begrüßungstext auf dem entfernten Rechner nach der Anmeldung erscheint (Datei /etc/issue), gehen Sie so vor:

$ ssh 192.168.2.7 cat /etc/issue
password: (Passwort)
Debian GNU/Linux 6.0 \n \l

Auch längere Kommandos und sogar mehrere hintereinander sind erlaubt. In diesem Fall schließen Sie die Befehle in einfache Hochkommata ein. Zwischen den einzelnen Kommandos steht zudem ein Semikolon:

$ ssh squeeze@192.168.2.7 'cd /etc ; cat debian_version'
squeeze@192.168.2.7's password: (Passwort)
6.0

Tipp: Ausführungszeit von Programmen messen (“time”)

Einige Befehle arbeitet Ihr Linux-Rechner ruckzuck ab, für andere muss er schon ein bisschen arbeiten. Durchforstet find beispielsweise eine größere Verzeichnisstruktur, kann das etwas dauern. Auch updatedb braucht öfter seine Zeit, da es das gesamte Dateisystem nach allen Dateien durchsucht und diese in eine Datenbank schreibt. Auf diese Informationen greift das locate-Kommando zu, mit dem Sie nach Dateinamen suchen – das geht in der Regel viel schneller als die Suche mit find.

Um nun die Ausführungszeit des updatedb-Kommandos zu messen, stellen Sie dem Befehl einen time-Aufruf voran:

# time updatedb
real    0m0.406s
user    0m0.212s
sys     0m0.192s

(Das Programm updatedb benötigt Root-Rechte, erkennbar am #-Prompt.) Die Ausgabe von time im Terminalfenster verrät Ihnen Folgendes: Hinter real steht die gesamte Ausführungszeit, hinter user die Zeit, in der die CPU tatsächlich den (Benutzer-)Code des Programms ausführt, und hinter sys die Zeit, in der die CPU mit Ausführung von Kernel-Code für die Anwendung beschäftigt ist.

Kommt Ihnen die Performance Ihres Rechners also etwas schwach vor, ermitteln Sie doch einfach mal, wie viel Zeit er für eine bestimmte Aufgabe wirklich braucht. Um Vergleichswerte von anderen Computern zu erhalten, können Sie einfach auf den EasyLinux-Mailinglisten [2] jemand bitten, mit time nachzumessen. Der updatedb-Befehl ist für einen solchen Vergleich allerdings kein gutes Beispiel, weil in der Regel jeder Rechner unterschiedlich viele Dateien enthält.

Tipp: Dateien mit Wget herunterladen

Dieses kleine Programm lädt Dateien von einem WWW- oder FTP-Server auf den eigenen Computer herunter. Schon beim Aufruf definieren Sie, ob Sie eine einzelne Datei oder gleich eine ganze Verzeichnisstruktur aus dem Netz ziehen. Um beispielsweise das Titelbild der letzten EasyLinux-Ausgabe zu holen, tippen Sie einfach den Befehl gefolgt von der URL (siehe Listing 1).

Listing 1

Einfacher

wget

-Aufruf

$ wget http://www.easylinux.de/2011/01/title_2011_01.png
--2011-02-11 17:38:24--
...
Resolving www.easylinux.de... 80.237.227.187
Connecting to www.easylinux.de|80.237.227.187|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 726243 (709K) [image/png]
Saving to: `title_2011_01.png'
10% [=======>          ] 168,323,560 28.6M/s
...
2011-02-11 17:38:24 (3.19 MB/s) - `title_2011_01.png' saved [726243/726243]

Wget zeigt im Terminal an, was im Hintergrund passiert. Im Listing baut das Tool eine Verbindung zum Webserver auf, erhält von diesem eine positive Antwort und berichtet dann, wie groß die Datei ist und unter welchem Namen es diese speichert. Während des Downloads sehen Sie eine Art Fortschrittsbalken und wissen daher genau Bescheid, wie weit Wget gekommen ist. Eine abschließende Meldung bestätigt, mit welcher Durchschnittsgeschwindigkeit die Datei auf der Platte gelandet ist.

Tipp: Mit Wget rekursiv spiegeln

Wenn Sie den vorigen Tipp gelesen haben, wissen Sie, was Wget tut und wie die Arbeit damit grundsätzlich funktioniert. Jetzt werden Sie sicher zurecht sagen: Einfach eine Grafik aus dem Netz holen, das mach ich per Webbrowser schneller und komfortabler über Grafik speichern unter. Stimmt – aber außer dieser rudimentären Funktionsweise hat Wget noch allerhand mehr auf dem Kasten und hilft beispielsweise dabei, einen kompletten Spiegel einer Webseite mit all ihren Unterverzeichnissen anzulegen.

Dazu rufen Sie wget -r (rekursiv) zusammen mit der URL auf. Vorsicht: Das Tool räumt nun bis in den letzten Winkel ab; für einen Testlauf ist es daher sinnvoll, zunächst den Level der Rekursion mit anzugeben. Dazu nehmen Sie die Aufrufoption -l (level) zu Hilfe und setzen beispielsweise die 1, um neben index.html alle dort eingebetteten Links (wie z. B. Bilder oder weitere HTML-Seiten) zu erwischen:

wget -r -l 1 www.easylinux.de

Alternativ definieren Sie die Leveltiefe -l 2, und Wget folgt den eingebetteten Links noch eine weitere Stufe. Auf der eigenen Platte sehen Sie nun das neue Verzeichnis www.easylinux.de und darin die heruntergeladenen Dateien. Für jede Webseite legt Wget einen eigenen Ordner an. Um alles direkt ins aktuelle Verzeichnis zu spiegeln, geben Sie zusätzlich -nH (“no host”) an.

Arbeiten Sie ohne Level-Angabe (-l ...), gibt es noch einen anderen Weg, die Download-Menge zu begrenzen: Über die Option -np (no parent) verhindern Sie, dass Wget Dateien zieht, die sich auf dem Webserver “weiter oben” in der Verzeichnishierarchie befinden. So ziehen Sie z. B. mit

wget -r -np http://www.easylinux.de/ausgabe/2009

alle Dateien, die auf dem Server unterhalb von /ausgabe/2009/ liegen (und über Links von dort erreichbar sind); die Links, die auf die Startseite und damit auf den gesamten Webseiteninhalt zurückverweisen, ignoriert Wget dann.

Tipp: Wget: Abgebrochenen Download fortsetzen

Der praktische Downloadmanager für die Shell hat noch ein weiteres tolles Feature im Gepäck. Über die Option -c (continue = fortsetzen) setzen Sie einen unterbrochenen Downloadvorgang fort. Da Wget dazu die Teile auf Ihrer Festplatte mit dem Original vergleicht und dann einfach anknüpft, spielt es keine Rolle, ob Sie die Fragmente mit Wget oder einem anderen Programm heruntergeladen haben. Dass Wget einen Download wirklich fortsetzt, erkennen Sie an der praktischen Fortschrittsanzeige: Diese beginnt mit einer Prozentzahl, die dem Teil entspricht, der schon auf Ihrer Platte ist. Außerdem sehen Sie für schon vorhandene Dateiteile ein Pluszeichen am Pfeil, danach folgt im Balken wieder das Gleichheitszeichen:

24% [+++++++=======> ] 168,323,560 28.6M/s

Versuchen Sie, einen Download fortzusetzen, wenn die Datei schon komplett heruntergewandert ist, meldet das Tool übrigens: Download der Datei schon vollständig; kein Download notwendig.

Auch wenn Sie die Option -c einmal vergessen, verhält Wget sich kooperativ. Es überschreibt vorhandene Dateien nicht einfach, sondern speichert in eine neue Datei. Bei wiederholten Downloads erhalten die Dateinamen Nummern als zusätzliche Dateiendung, also beispielsweise title_2011_01.png.1, title_2011_01.png.2 usw.

Tipp: Benutzer vor und nach Login begrüßen

Wechseln Sie auf einem Ubuntu-System auf eine der virtuellen Konsolen ([Strg]+[Alt]+[F1],[Strg]+[Alt]+[F2] usw.), erfahren Sie noch vor der Anmeldung ein paar interessante Dinge über das System. Auf unserem Testrechner steht beispielsweise:

Ubuntu 10.10 zwerg tty1
zwerg login:

Auch die neue Debian-Distribution “Squeeze” präsentiert sich ähnlich und verrät ihren Namen, die Versionsnummer, den Hostnamen und den Namen des Terminals. tty1 im Beispiel steht für die erste virtuelle Konsole, die zweite heißt tty2, usw. Verantwortlich für diese Anzeige ist die Datei /etc/issue; was in dieser steht, betrachten Sie schnell mit dem folgenden Kommando:

$ cat /etc/issue
Ubuntu 10.10 \n \l

Neben einer normalen Zeichenkette dürfen hier auch bestimmte Steuersequenzen stehen: Das System ersetzt \n durch den Hostnamen und \l durch den Namen des aktuellen Terminals. Weitere Platzhalter stehen bereit, mit denen Sie die Meldungen vor der Login-Aufforderung ganz nach Ihrem Geschmack gestalten. So steht etwa \d für den aktuellen Tag, \m für die Rechnerarchitektur, \t für die aktuelle Zeit, \v für die Betriebssystemversion (inklusive Übersetzungszeit des Kernels) und \r für die reine Kernel-Version.

Mit einem Texteditor gestalten Sie also schnell eine neue Begrüßungsmeldung für die virtuellen Konsolen. Um die Datei /etc/issue zu verändern, benötigen Sie Root-Rechte. Starten Sie den Editor also beispielsweise durch Eingabe von sudo gedit /etc/issue in ein mit [Alt]+[F2] und konsole geöffnetes Terminalfenster (KDE; unter Gnome ersetzen Sie konsole durch gnome-terminal). Schreiben Sie anschließend etwa die folgenden zwei Zeilen in die Datei:

Willkommen auf \n, Ubuntu 10.10, \l
\t, \r

Die Meldung auf der Konsole sieht danach so aus:

Willkommen auf zwerg, Ubuntu 10.10, tty1
09:43:01, 2.6.35-24-generic

Ganz ähnlich arbeitet die Datei /etc/issue.net. Sie folgt demselben Aufbau und versteht auch dieselben Steuerzeichen. Als Benutzer sehen Sie deren Inhalt, nachdem Sie sich per SSH von einem entfernten Rechner aus angemeldet haben. In der Voreinstellung stehen hier lediglich der Name und die Versionsnummer der Distribution.

Last but not least gibt das Linux-System den Inhalt der Datei /etc/motd (motd = message of the day, Nachricht des Tages) nach dem erfolgreichen Login aus. Dabei ist es egal, ob die Anmeldung auf der Konsole oder über SSH stattfindet. Früher trug der Administrator hier meist eigene Meldungen ein und informierte so zum Beispiel alle Benutzer darüber, dass er den Server in zwei Tagen neu booten wollte oder dass es ein neues Feature gab. Inzwischen schreiben viele Distributionen die Datei selbst über diverse Bootskripte und informieren hier über eventuelle Sicherheitsaktualisierungen oder neue Pakete (Abbildung 2). Wer zusätzlich eigene Nachrichten absetzen möchte, erstellt über einen Texteditor mit Root-Rechten eine Datei namens /etc/motd.tail. Diese hängt das System, wie der Name vermuten lässt, an die Ausgabe von /etc/motd an.

Abbildung 2: Über die Nachricht des Tages ("message of the day") erreichen Sie alle Benutzer, die sich per SSH oder auf der Konsole anmelden.

Abbildung 2: Über die Nachricht des Tages (“message of the day”) erreichen Sie alle Benutzer, die sich per SSH oder auf der Konsole anmelden.

Tipp: Vim: Dateibrowser gleich mit dabei

Wenn Sie den Texteditor über den einfachen Aufruf von vim starten, sehen Sie den Begrüßungstext. Wechseln Sie über die Taste [I] in den Einfügemodus, können Sie lostippen und eine neue Datei erstellen. Um eine bestehende Datei zu bearbeiten, geben Sie deren Namen beim Aufruf direkt mit an, zum Beispiel:

vim /etc/issue

Rufen Sie den Editor stattdessen mit einem Verzeichnisnamen als Argument auf (vim /etc), sehen Sie am unteren Bildschirmrand zwar die Meldung “Unzulässiger Dateiname”, im Fenster selbst aber den Inhalt des Ordners. Alternativ starten Sie den Editor und tippen :Exp, um in diesen “Explore”-Modus zu wechseln.

Mit der Maus blättern Sie nun durch die einzelnen Dateien und Verzeichnisse durch; drücken Sie [Eingabe], um in ein Unterverzeichnis hineinzuwechseln, [-], um wieder eine Ebene höher zu gelangen. Befinden Sie sich mit dem Cursor über einer Datei und drücken [Eingabe], bearbeiten Sie die entsprechende Datei. Im Explore-Modus können Sie die üblichen Funktionen zum Suchen verwenden (/ sucht vorwärts, ? rückwärts) und praktischerweise über wiederholtes Drücken von [S] die Anzeige verändern und beispielsweise nach Name, Größe oder Zeitstempel sortieren.

Infos

[1] Guru-Training zu SSH: Heike Jurzik, “Auf Nummer Sicher”, EasyLinux 10/2005, S. 84 ff., http://www.easylinux.de/2005/10/084-guru-ssh/

[2] EasyLinux-Mailinglisten: http://www.easylinux.de/Kontakt/Mailinglisten

EasyLinux 02/2011 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben