21.2. Einführung in die Bash

Auf der KDE-Taskleiste finden Sie ein Icon, das einen Monitor und eine Muschel (shell) darstellt. Wenn Sie mit der Maus auf dieses Symbol klicken, öffnet sich das Konsole-Fenster, in dem Sie Befehle eingeben können. Es handelt sich dabei standardmäßig um eine Bash (Bourne again shell). Die Bash wurde im Rahmen des GNU-Projekts entwickelt und ist das wohl verbreitetste Derivat der Bourne Shell (sh). Wenn Sie die Bash geöffnet haben, sehen Sie in der ersten Zeile den so genannten „Prompt“, der gewöhnlich aus dem Benutzer- und Rechnernamen sowie dem aktuellen Pfad besteht, aber auch individuell konfiguriert werden kann. Wenn der Cursor hinter diesem Prompt steht, können Sie direkt Befehle an Ihr Computersystem schicken.

21.2.1. Befehle

Befehle bestehen aus verschiedenen Bestandteilen. Zuerst kommt immer das Befehlswort und dann die Parameter oder Optionen. Jeder Befehl wird erst ausgeführt, wenn Sie Return drücken. Vorher können Sie problemlos die Kommandozeile editieren, Optionen einfügen oder Tippfehler korrigieren. Einer der am häufigsten gebrauchten Befehle ist ls, den Sie allein oder mit so genannten Argumenten verwenden können. Geben Sie in der Konsole nur ls ein, wird Ihnen der Inhalt des Verzeichnisses angezeigt, in dem Sie sich gerade befinden.

Optionen werden durch einen vorangestellten Bindestrich gekennzeichnet. Wenn Sie also ls -l eingeben, wird Ihnen der Inhalt desselben Verzeichnisses in detaillierter Form angezeigt. Sie sehen neben den Dateinamen das Erstellungsdatum der Datei, die Dateigröße in Bytes und weitere Angaben, auf die wir später eingehen werden. Eine der wichtigsten Optionen überhaupt, die es zu sehr vielen Befehlen gibt, ist die Option --help. Wenn Sie zum Beispiel ls --help eingeben, werden Ihnen alle Optionen zum Befehl ls angezeigt.

Mit ls können Sie sich aber auch andere Verzeichnisse ansehen. Dazu übergeben Sie das anzuzeigende Verzeichnis als Parameter. Zum Anzeigen des Inhaltes des Unterverzeichnisses Desktop zum Beispiel ls -l Desktop.

21.2.2. Dateien und Verzeichnisse

Um effektiv mit der Shell zu arbeiten, braucht man Kenntnisse über die Datei- und Verzeichnis-Struktur unter Linux. Verzeichnisse sind Ordner, in denen Dateien, Programme oder auch Unterverzeichnisse abgelegt werden können. Das Wurzelverzeichnis ist in der Hierarchie ganz oben und wird mit / angesprochen. Von hier aus gelangt man zu allen anderen Verzeichnissen.

Im Verzeichnis /home befinden sich die Verzeichnisse der einzelnen Benutzer, in denen sie ihre persönlichen Dateien ablegen werden. Die Abbildung 21.1. “Auszug aus einem Standard Verzeichnisbaum” zeigt den Standard-Verzeichnisbaum unter Linux mit den Home-Verzeichnissen der Beispielbenutzer yxz, linux und tux. Der Verzeichnisbaum Ihres Linux-Systems ist funktionell gegliedert (Filesystemstandard) und in der folgenden Liste erhalten Sie eine Kurzbeschreibung zu den Standardverzeichnissen unter Linux.

Abbildung 21.1. Auszug aus einem Standard Verzeichnisbaum

Auszug aus einem Standard Verzeichnisbaum
/

Das Wurzel-Verzeichnis (root directory), Beginn des Verzeichnisbaums.

/home

Die (privaten) Verzeichnisse der Benutzer.

/dev

Geräte­-Dateien (device files), die Hardwarekomponenten repräsentieren

/etc

Wichtige Dateien zur Systemkonfiguration

/etc/init.d

Enthält Bootskripte.

/usr/bin

Allgemein zugängliche Kommandos.

/bin

Kommandos, die bereits zum Hochfahren des Systems benötigt werden.

/usr/sbin

Kommandos, die dem Systemverwalter vorbehalten sind.

/sbin

Kommandos, die dem Systemverwalter vorbehalten sind und zum Hochfahren des Systems benötigt werden.

/usr/include

Header-Dateien für den C-Compiler

/usr/include/g++

Header-Dateien für den C++-Compiler.

/usr/share/doc

Verschiedene Dokumentationsdateien.

/usr/share/man

Die Hilfe-Texte (Manual-Pages)

/usr/src

Quelltexte der Systemsoftware

/usr/src/linux

Die Kernel-Quellen

/tmp, /var/tmp

Für temporäre Dateien.

/usr

Beherbergt sämtliche Anwendungsprogramme

/var

Konfigurationsdateien (zum Beispiel von /usr gelinkt).

/var/log

Protokolldateien

/var/adm

Systemverwaltung

/lib

Shared Libraries (für dynamisch gelinkte Programme)

/proc

Das Prozessdateisystem

/usr/local

Lokale, von der Distribution unabhängige Erweiterungen.

/opt

Optionale Software, größere Systeme (zum Beispiel KDE, GNOME, Netscape).

21.2.3. Funktionen der Bash

Zwei wichtige Funktionen der Shell erleichtern Ihnen die Arbeit wesentlich:

  • Die History – Wenn Sie einen bereits eingegeben Befehl noch einmal aufrufen wollen, drücken Sie die Taste so oft, bis der gewünschte Befehl angezeigt wird; zum vorwärts Blättern drücken Sie die Taste . Zum Editieren der Befehlszeile bewegen Sie sich mit den Cursor-Tasten an die entsprechende Stelle und korrigieren Sie diese. Verwenden Sie Ctrl-R um in der History zu suchen.

  • Die Expansionsfunktion – Sie ergänzt einen Dateinamen, falls er bereits eindeutig identifiziert werden kann, nachdem Sie nur die ersten Buchstaben eingegeben haben. Drücken Sie dazu nach der Eingabe die Taste Tab. Wenn es mehrere Dateinamen mit den gleichen Anfangsbuchstaben gibt, erhalten Sie durch zweimaliges Drücken der Taste Tab eine Auswahlliste.

21.2.3.1. Beispiel: Der Umgang mit Dateien

Sie wissen, wie ein Befehl aussieht, welche Verzeichnisse es unter SUSE LINUX gibt und wie Sie sich in der Bash die Arbeit etwas erleichtern können. Nun werden Sie Ihre Kenntnisse mit einem kleinen Übungsbeispiel umsetzen:

  1. Öffnen Sie eine Konsole in KDE durch Klick auf das Monitor-Icon.

  2. Geben Sie ls ein und sehen Sie den Inhalt Ihres Home-Verzeichnisses.

  3. Legen Sie mit mkdir (make directory) ein neues Unterverzeichnis mit dem Namen test an, indem Sie mkdir test eingeben.

  4. Rufen Sie den Editor KEdit auf, indem Sie Alt-F2 drücken und in das Eingabefeld kedit eingeben. Es öffnet sich ein Fenster. Tippen Sie ein paar Zeichen ein und speichern Sie die Datei unter dem Namen Testdatei bitte mit großem T, da Linux zwischen Groß- und Kleinschreibung unterscheidet.

  5. Lassen Sie sich wieder den Inhalt Ihres Home-Verzeichnisses anzeigen. Statt der nochmaligen Eingabe von ls drücken Sie zweimal die Taste . Jetzt steht wieder ls am Prompt, und zum Ausführen des Befehls müssen Sie nur noch Return drücken. Sie sehen das neue Verzeichnis test in blauer Schrift und die Testdatei in schwarzer Schrift, denn Verzeichnisse werden immer blau dargestellt und Dateien immer schwarz.

  6. Unsere Testdatei soll nun mit dem Befehl mv (move) in das Unterverzeichnis test verschoben werden. Zur Erleichterung der Eingabe benutzen wir dazu die Expansionsfunktion: Geben Sie mv T ein und drücken Sie die Tab-Taste. Gibt es keine andere Datei mit diesem Buchstaben in dem Verzeichnis, ergänzt die Shell die Zeichenkette estdatei, ansonsten müssen Sie weitere Buchstaben eingeben und zwischendurch die Tab Taste betätigen. Setzen Sie hinter der ersetzten Zeichenkette ein Leerzeichen, schreiben test und drücken zum Verschieben noch Return.

  7. Wenn Sie den Befehl ls eingeben, wird die Testdatei nicht mehr angezeigt.

  8. Um zu sehen, ob das Verschieben erfolgreich war, wechseln Sie mit dem Befehl cd test in das Verzeichnis test. Geben Sie ls ein; Ihnen sollte jetzt die Testdatei angezeigt werden. Durch die Eingabe von cd (change directory) gelangen Sie immer wieder in Ihr Home-Verzeichnis.

  9. Sollten Sie eine Kopie der Datei benötigen, dann benutzen Sie den Befehl cp (copy). Geben Sie cp Testdatei Testsicherung ein, um die Testdatei in Testsicherung zu kopieren. Mit dem Aufruf von ls werden Ihnen beide Dateien angezeigt.

21.2.4. Pfadangaben

Zur Bearbeitung von Dateien oder Verzeichnissen muss immer der richtige Pfad angegeben werden. Dazu müssen Sie nicht den kompletten (absoluten) Pfad vom Wurzelverzeichnis zur entsprechenden Datei angeben, sondern können von Ihrem aktuellen Verzeichnis ausgehen. Zusätzlich können Sie Ihr Home-Verzeichnis direkt mit ~ ansprechen. Daher haben Sie zwei Möglichkeiten, die Datei Testdatei im Verzeichnis test aufzulisten: relativ durch die Eingabe von ls test/* oder absolut durch ls ~/test/*.

Zum Einsehen von Home-Verzeichnissen anderer Benutzer, geben Sie ls ~ und den Benutzernamen ein. In der schon erwähnten Verzeichnisstruktur wäre ein Beispielbenutzer tux. Der Befehl ls ~tux würde entsprechend den Inhalt des Home-Verzeichnisses von tux anzeigen.

Ihr aktuelles Verzeichnis können Sie durch einen Punkt darstellen, höhere Pfad­ebenen durch zwei Punkte. Mit der Eingabe von ls .. wird Ihnen der Inhalt des Mutterverzeichnisses zum aktuellen Verzeichnis angezeigt; durch ls ../.. der Inhalt des Verzeichnisses zwei Stufen in der Hierarchie höher.

21.2.4.1. Beispiel: Umgang mit Pfaden

Ein weiteres Beispiel soll Ihnen veranschaulichen, wie Sie sich in der Verzeichnisstruktur Ihres SUSE LINUX-Systems bewegen können.

  • Wechseln mit cd in Ihr Home-Verzeichnis. Legen Sie ein weiteres Unterverzeichnis test2 über den mkdir test2 an.

  • Wechseln Sie mit cd test2 nach test2 und legen Sie ein Verzeichnis namens Unterverzeichnis an. Nutzen Sie zum Wechseln die Expansionsfunktion, indem Sie nur cd Un eingeben und Tab drücken, um den Rest der Zeichenkette zu ergänzen.

  • Sie befinden sich im Unterverzeichnis und sollen ohne Wechsel des Verzeichnisses die zuvor angelegte Datei Testsicherung in das aktuelle Verzeichnis verschieben. Sie müssen dazu den relativen Pfad zu der benötigten Datei angeben. Vergessen Sie nicht den Punkt am Ende des Befehls mv ../../test/Testsicherung ., wodurch das aktuelle Verzeichnis als Ziel der Verschiebung festgelegt wird. Mit zwei Punkten gelangen Sie jeweils eine Verzeichnisebene höher, in unserem Beispiel in Ihr Home-Verzeichnis.

21.2.5. Wildcards

Weitere Vorteile der Shell sind die vier sog. „Wildcards“ oder Jokerzeichen:

?

Ersetzt genau ein beliebiges Zeichen.

*

Ersetzt beliebig viele Zeichen.

[set]

Ersetzt genau ein Zeichen aus den in eckigen Klammern angegebenen Zeichen (Zeichenkette set).

[!set]

Umfasst genau ein beliebiges Zeichen, außer den in set angegebenen.

Haben Sie in Ihrem Verzeichnis test die Dateien Testdatei, Testdatei1, Testdatei2 und dates und geben ls Testdatei? ein, dann erhalten Sie die Dateien Testdatei1 und Testdatei2. Mit ls Test* erhalten Sie zusätzlich die Datei Testdatei.

Der Befehl ls *dat* zeigt Ihnen alle Beispieldateien an, während Sie mit dem set-Joker speziell die Beispieldateien ansprechen können, die als letztes Zeichen eine Zahl haben: ls Testdatei[1-9].

Am mächtigsten ist immer der *-Joker: Durch seine Verwendung können Sie zum Beispiel Dateien eines Verzeichnisses in ein beliebiges Verzeichnis kopieren oder komplett löschen. Der Befehl rm *date* bspw. löscht alle Dateien in Ihrem Verzeichnis test, in deren Name die Zeichenfolge date vorkommt.

21.2.6. Mehr oder Weniger

Zwei kleine Programme ermöglichen es Ihnen, sich Textdateien direkt in der Shell anzusehen. Sie brauchen also nicht erst einen Editor starten. Zum Öffnen einer Datei Readme.txt geben Sie einfach less Readme.txt ein. Im Konsole-Fenster wird Ihnen nun der Text angezeigt. Mit der Leertaste kommen Sie immer eine Seite weiter, allerdings können Sie auch die Tasten Bild auf und Bild ab benutzen, um sich im Text vorwärts oder rückwärts zu bewegen. Zum Beenden des Programms less drücken Sie die Taste q.

Neben less gibt es auch das ältere Programm more, allerdings ist es weniger komfortabel, da Sie nicht vor- und zurückblättern können.

Das Programm less erhielt seinen Namen nach dem Motto Weniger ist mehr und kann nicht nur zum Lesen von Textdateien benutzt werden, sondern kann zum Beispiel auch die Ausgabe von Befehlen komfortabel anzeigen. Lesen Sie dazu den Abschnitt 21.2.7. “Umleitungen”.

21.2.7. Umleitungen

Normalerweise ist die Standardausgabe in der Shell Ihr Bildschirm bzw. das Konsole-Fenster, und die Standardeingabe erfolgt über die Tastatur. Wenn Sie die Ausgabe eines Befehls an ein Programm wie less übergeben wollen, müssen Sie dazu eine so genannte Pipeline (Rohrleitung) verwenden.

Um sich die Dateien im Verzeichnis test anzuschauen, geben Sie den Befehl ls test | less ein. Das Zeichen | erhalten Sie auf der deutschen Tastatur, indem Sie Alt Gr und gleichzeitig die Taste mit den Zeichen < und > drücken. Sie sehen nun in der Konsole den Inhalt des Verzeichnisses test mit less angezeigt. Dies macht nur Sinn, wenn die normale Ausgabe über ls zu unübersichtlich wird. Sehen Sie sich zum Beispiel das Verzeichnis dev mit ls /dev an, dann sehen Sie im Fenster nur einen kleinen Teil des Inhaltes, wobei Sie stattdessen mit ls /dev | less alle Dateien auflisten können.

Falls Sie die Ausgabe von Befehlen in einer Datei abspeichern wollen, würde der Befehl im obigen Beispiel so aussehen: ls test > Inhalt. Sie haben danach eine neue Datei mit Namen Inhalt, die die Dateien und Verzeichnisse in test enthält. Mit less Inhalt können Sie sich die Datei anschauen.

Umgekehrt können Sie eine Datei als Eingabe für einen Befehl verwenden. Lassen Sie zum Beispiel die Textzeilen in Ihrer selbst geschriebenen Testdatei alphabetisch sortieren über sort < Testdatei. Die Ausgabe des Befehls sort erfolgt auf dem Bildschirm. Sie sehen nun den Text, den Sie zuvor geschrieben haben, sortiert nach den Anfangsbuchstaben in jeder Zeile. Dies kann sehr nützlich sein, wenn Sie zum Beispiel eine unsortierte Namensliste sortieren möchten.

Wollen Sie eine neue Datei mit der sortierten Liste, dann müssen Sie die Ausgabe des sort-Befehls wiederum in eine Datei lenken. Wenn Sie das nachvollziehen möchten, erstellen Sie in einem Editor eine unsortierte Namensliste, und speichern Sie sie unter dem Namen liste im Verzeichnis test. Gehen Sie ins Verzeichnis test und rufen Sie den Befehl sort < liste > sortierteListe auf. Sehen Sie sich mit less die neue Liste an.

Die Standard-Fehlerausgabe ist ebenfalls der Bildschirm. Wenn Sie diese jedoch in eine Datei mit Namen Fehler umleiten möchten, geben Sie im Anschluss an den Befehl ein: 2> Fehler. Wenn Sie >& Ausgabe an einen Befehl anhängen, erfolgt in die Datei Ausgabe sowohl die Standardausgabe als auch die Fehlerausgabe. Wenn an Stelle von einmal > zweimal >> benutzt wird, wird die Ausgabe an eine vorhandene Datei angehängt.

21.2.8. Archive und Datenkompression

Nachdem Sie nun schon einige Dateien und Verzeichnisse angelegt haben, wenden wir uns dem Thema Archivierung und Datenkompression zu. Angenommen, Sie möchten das ganze Verzeichnis test in eine Datei zusammenpacken lassen, damit Sie diese auf Diskette als Sicherungskopie speichern oder per E-Mail verschicken können. Dazu benutzen Sie den Befehl tar tape archiver. Mit tar --help können Sie sich alle Optionen zu tar ansehen, die wichtigsten werden allerdings auch hier erklärt:

-c

create neues Archiv anlegen.

-t

table Inhalt eines Archives anzeigen.

-x

extract Archiv entpacken.

-v

verbose zeigt während des Einpackens alle Dateien auf dem Bildschirm an.

-f

file Damit können Sie einen Dateinamen für die Archivdatei wählen. Beim Packen muss diese Option immer als letztes angegeben werden.

Um nun das Verzeichnis test mit allen Dateien und Unterverzeichnissen in ein Archiv mit dem Namen test.tar zu packen, brauchen wir auf jeden Fall die Optionen: -c und -f. Da wir den Fortschritt beim Archivieren mitverfolgen wollen, geben wir auch die Option -v an, die sonst nicht notwendig wäre. Gehen Sie zuerst mit cd in Ihr Home-Verzeichnis, wo sich das Verzeichnis test befindet. Die Eingabe lautet nun: tar -cvf test.tar test. Schauen Sie sich danach den Inhalt der Archivdatei an: tar -tf test.tar. Übrigens bleibt das Verzeichnis test mit allen Dateien und Verzeichnissen unverändert auf Ihrer Festplatte. Um das Archiv wieder komplett auszupacken, müssen Sie tar -xvf test.tar eingeben. Tun Sie das bitte noch nicht, denn erst wollen wir noch die Archivdatei komprimieren, um Speicherplatz zu sparen.

Dazu empfiehlt sich das weit verbreitete Programm gzip. Geben Sie also ein: gzip test.tar. Wenn Sie nun ls eingeben, sehen Sie, dass die Datei test.tar verschwunden ist, und stattdessen eine Datei test.tar.gz existiert. Diese Datei ist viel kleiner und eignet sich daher besser zum Verschicken via E-Mail oder passt leichter auf eine Diskette.

Und nun sollen Sie das Archiv im Verzeichnis test2 auspacken. Kopieren Sie dazu zuerst die Archivdatei mit cp test.tar.gz test2 ins Verzeichnis test2 und wechseln Sie mit cd test2 das Verzeichnis. Zum Entzippen der gepackten Archivdatei mit der Endung .tar.gz wird der Befehl gunzip benutzt, so dass die Eingabe gunzip test.tar.gz lautet. Sie erhalten eine Datei test.tar, die noch mit tar -xvf test.tar aufgelöst werden muss. Zum Entzippen des gepackten Archives können Sie auch gleich zum tar-Befehl die Option -z hinzufügen und das Archiv mit tar -xvzf test.tar.gz auspacken. Durch Eingabe von ls sehen Sie, dass Sie ein neues Verzeichnis test mit dem gleichen Inhalt wie Ihr Verzeichnis test in Ihrem Home-Verzeichnis haben.

21.2.9. mtools

Die mtools sind ein Satz von Befehlen, mit denen man auf MS-DOS-Dateisystemen arbeiten kann. Das ist für die Arbeit mit Disketten-Laufwerken interessant. Das Laufwerk kann wie unter MS-DOS als a: angesprochen werden. Die Befehle ähneln denen unter MS-DOS, allerdings mit einem vorangestellten m:

mdir a:

zeigt den Inhalt der Diskette im Laufwerk a an.

mcopy Testdatei a:

kopiert die Datei Testdatei auf die Diskette.

mdel a:Testdatei

löscht Testdatei auf a:

mformat a:

formatiert Disketten im MS-DOS-Format (mit Hilfe des Befehls fdformat).

mcd a:

a: wird Ihr aktuelles Verzeichnis.

mmd a:test

erzeugt das Unterverzeichnis test auf der Diskette.

mrd a:test

löscht das Unterverzeichnis test auf der Diskette.

21.2.10. Aufräumen

Sie haben nun in diesem Crash-Kurs die wichtigsten Grundlagen im Umgang mit der Shell gelernt. Damit Ihr Heimat-Verzeichnis nicht zu unübersichtlich wird, sollten Sie die Testdateien und -verzeichnisse nun mit den Befehlen rm und rmdir wieder löschen. Im Anschluss an dieses Kapitel finden Sie eine Liste mit den wichtigsten Befehlen und entsprechender Kurzbeschreibung.


SUSE LINUX 9.2