next up previous contents index
Next: Zahlensysteme Up: Grundlagen Previous: Das Betriebssystem

Subsections


Die ersten Schritte

Anders als bei einem Einbenutzerbetriebssystem wie DOS können Sie bei Linux nicht einfach den Rechner einschalten und drauflosarbeiten. Die Vorteile der Mehrbenutzerfähigkeit werden durch eine etwas kompliziertere Bedienung erkauft: als Benutzer oder ``User'' brauchen Sie einen Benutzerbereich oder ``Account'' mit einem Usernamen und einem Paßwort. Mit dem Usernamen melden Sie sich jedesmal, wenn Sie beginnen mit Ihrem Linux-Rechner zu arbeiten, bei dem Betriebssystem an. Dieser Vorgang wird auch als ``Einloggen'' oder ``Login''  bezeichnet.[*] Diese Anmeldung ist notwendig, damit eine eindeutige Zuordnung von Dateien zu ihren Eigentümern hergestellt werden kann und um den unberechtigten Zugriff auf Dateien anderer Eigentümer zu verhindern. Nach der Meldung

login: _

müssen Sie Ihren Benutzernamen eingeben und mit der RETURN Taste abschließen. Die daraufhin erscheinende Frage nach dem

Password:

muß korrekt mit dem nur Ihnen bekannten Paßwort beantwortet werden. Bei der Eingabe des Paßwortes erscheinen die Zeichen nicht auf dem Bildschirm. Wenn das System die Anmeldung akzeptiert, wird eine sogenannte Session  eröffnet. Das bedeutet für Sie als interaktiver Benutzer, daß der Kommandozeileninterpreter (die Shell)  gestartet wird, so daß Sie über die Tastatur Kommandos eingeben und Programme aufrufen können.

Wenn die Shell bereit ist, Kommandos von der Tastatur zu lesen, gibt sie eine charakteristische Zeichenkette als Eingabeaufforderung aus, den sogenannten ``Prompt''.  Ähnlich wie das von DOS bekannte C:\> kann sich der Shellprompt unter Linux je nach Einstellung und aktueller Systemumgebung verändern. Beispielsweise kann der Rechnername, Ihr Benutzername oder das aktuelle Arbeitsverzeichnis angezeigt werden. Was genau der Prompt anzeigt, hängt von der Shell ab, die Sie benutzen und von der individuellen Einstellung, die Sie oder Ihre Systemverwalterin vorgenommen hat. Wie Sie die Prompts der bei den meisten Linux-Systemen als Standardshell installierten Bourne Again Shell (bash) verändern können ist hier beschrieben.

Die Kommandos werden zeilenweise von der Tastatur gelesen und anschließend von der Shell interpretiert, die die entsprechenden Befehle ausführt. Jede Kommandozeile wird durch die RETURN Taste abgeschlossen. Jedes Kommando besteht aus einem oder mehr Wörtern, die durch Leerzeichen voneinander getrennt werden. Das erste Wort ist immer der Kommandoname. Der Kommandoname entspricht exakt dem Namen der ausführbaren Datei.[*] Eine genauere, allerdings auch formalistischere Erklärung der Kommandozeile finden Sie in der Einleitung zu den Kommandobeschreibungen und in der genauen Beschreibung der Standardshell bash.

Verzeichnisse und Dateien

 

Die im Arbeitsspeicher (RAM) des Rechners gehaltenen Daten, seien es Programme, Texte, Bilder oder Zahlen, gehen alle mit dem Ausschalten der Stromversorgung verloren. Aus diesem Grund werden alle wichtigen Daten auf einem dauerhaften Speichermedium gehalten. Dieses Medium ist normalerweise die Festplatte, es kann aber auch ein Diskettenlaufwerk oder eine CD-ROM sein.

Um die Vielzahl der anfallenden Daten rationell und übersichtlich speichern zu können, bietet Linux, wie alle modernen Betriebssysteme, die Möglichkeit, die auf Festplatten, Disketten usw. gesicherten Daten in Verzeichnissen zu organisieren.

Das aktuelle Verzeichnis

Als Benutzer eines interaktiven Computers ,,befinden`` Sie sich ständig in einem Verzeichnis. Dieses Verzeichnis, das aktuelle Verzeichnis,  oder Arbeitsverzeichnis ist der relative Bezugspunkt für all Ihre Aktionen. Jedes Kommando, das Sie aufrufen, ist mit diesem Verzeichnis verbunden. Wenn Sie nicht ausdrücklich etwas anderes bestimmen, werden Dateien zum Öffnen in diesem Verzeichnis gesucht oder neue Dateien hier angelegt.

Jedes Verzeichnis kann Dateien und weitere Verzeichnisse enthalten. Der Name des aktuellen Verzeichnisses wird mit dem Kommando pwd (print working directory) angezeigt: 

$ pwd
/usr/src/linux
$ _
Das aktuelle Verzeichnis ist eines unter vielen Verzeichnissen im System. Alle Verzeichnisse und die darin enthaltenen Dateien zusammen werden als Dateisystem bezeichnet. Das Dateisystem ist mit einem Baum zu vergleichen, dessen Äste und Zweige   die Verzeichnisse sind und dessen Blätter die Dateien (siehe Abbildung 1.1). Wenn Sie sich vorstellen, daß jeder Ast, jeder Zweig und jedes Blatt einen eigenen Namen haben, können Sie schnell und leicht nachvollziehbar jeden einzelnen Ort in dem Baum benennen, indem Sie den Weg oder ``Pfad'' von der Wurzel des Baumes ab beschreiben. Wenn Sie so einen Pfad aufschreiben, werden die einzelnen Namen für Verzeichnisse und Dateien, durch einen einfachen Schrägstrich `/' (Slash) voneinander getrennt. Das Wurzelverzeichnis oder Rootdirectory wird durch einen einzelnen Slash \fbox {/}
bezeichnet.

Abbildung Dateibaum
Abbildung: Dateibaum (Ausschnitt)

Anders als bei DOS, wo das Dateisystem in Laufwerke unterteilt ist, auf denen jeweils eigene Verzeichnisbäume existieren können, arbeiten Sie unter Linux mit einem einzigen Verzeichnisbaum. Sie brauchen sich als Benutzer nicht darum zu kümmern, wo sich eine bestimmte Datei physikalisch befindet, das Betriebssystem stellt alle verfügbaren Dateien und Verzeichnisse in einem einzigen logischen Baum zusammen.[*]

Namen und Pfade

Jede Datei hat einen Dateinamen, mit dem sie in (mindestens) einem Verzeichnis eingetragen ist. Natürlich kann jeder Dateiname in einem Verzeichnis nur einmal vergeben werden. Allerdings kann der gleiche Name in einem anderen Verzeichnis für eine andere Datei stehen. Wenn Sie mit einer Datei arbeiten wollen, die in einem anderen als dem aktuellen Verzeichnis liegt, reicht es deshalb nicht, einfach den Dateinamen anzugeben. Stattdessen muß die Datei mit ihrem eindeutigen Pfadnamen angesprochen werden.

Dieser Pfadname  enthält neben dem eigentlichen Dateinamen noch eine ``Wegbeschreibung'', in der durch ein Reihe von Verzeichnisnamen der genaue Ort der Datei im Verzeichnisbaum angegeben wird. Die Reihe der Verzeichnisnamen wird als Pfad bezeichnet. Die einzelnen Verzeichnisnamen werden alle durch `/' (Slash) Zeichen getrennt.

Um eine Datei in einem anderen Verzeichnis oder auch einfach nur das andere Verzeichnis anzusprechen, kann der Pfadname entweder relativ   zum aktuellen Verzeichnis oder als absoluter (Pfad-) Name vom Wurzelverzeichnis aus angegeben werden. Der absolute Pfad beginnt immer mit einem Slash, dem ``Namen'' des Wurzelverzeichnisses.

Der relative Pfad  beginnt im aktuellen Verzeichnis und gibt von dort aus den Weg zum Ziel im Verzeichnisbaum an. Weil jedes Kommando automatisch das aktuelle Verzeichnis als Bezugspunkt für seine Aktionen nimmt, braucht das Arbeitsverzeichnis selbst meistens nicht ausdrücklich angegeben zu werden. Für die Fälle, in denen das trotzdem nötig ist, hat jedes Verzeichnis einen Eintrag `.', der das Verzeichnis selbst bezeichnet.

Ein zweiter Eintrag, `. .', der auch in jedem Verzeichnis zu finden ist, bezeichnet das nächste Verzeichnis ``zurück'' in Richtung Wurzel. Um bei einem relativen Pfadnamen im Verzeichnisbaum in Richtung Wurzel zu gehen, muß anstelle eines regulären Verzeichnisnamens dieser ``Link'' zum nächsttieferen Verzeichnis `. .' angegeben werden.

Neben dem Bild des Verzeichnisbaums gibt es noch das einer Hierarchie. Damit wird im Prinzip die gleiche Ordnung erzeugt, aber in genau umgekehrter Richtung. Wenn ein Verzeichnis beim Baum näher an der Wurzel, also tiefer ist, wird es in der Hierarchie höher eingeordnet. In diesem Buch verwenden wir in der Regel das Bild des Baumes und benutzen die damit verbundenen räumlichen Ordnungsrelationen.

Das Verzeichnis wechseln

  

Sie können das aktuelle Verzeichnis mit dem cd (change directory) Kommando wechseln. Zum Beispiel bringt Sie das Kommando

$ cd /
$ _
in das Wurzelverzeichnis. Das Kommando

$ cd /dev
$ _

wechselt in das Verzeichnis \fbox {dev}
. Der Schrägstrich (Slash) bezeichnet \fbox {dev}
vom Wurzelverzeichnis aus. Es können auch mehrere Verzeichnisnamen zu einem Pfadnamen verkettet werden. Um die einzelnen Namen voneinander zu trennen, werden weitere Slashes verwendet. Das Kommando

$ cd /usr/lib/emacs
$ _

bringt Sie in das Verzeichnis \fbox {emacs}
. Um von dort aus in das Verzeichnis \fbox {lib}
zu gelangen, können Sie entweder wieder den absoluten Pfad vom Wurzelverzeichnis aus angegeben

$ cd /usr/lib
$ _
oder Sie benutzen den relativen Pfad vom aktuellen Verzeichnis aus:

$ cd ./..
$ _

Bei diesem Beispiel wird das aktuelle Verzeichnis `.' ausdrücklich angegeben. Das ist für das Wechseln des Arbeitsverzeichnisses eigentlich nicht notwendig, die folgende Variante des Beispiels erzielt das gleiche Ergebnis:

$ cd ..
$ _

Wenn Sie häufig in bestimmte Verzeichnisse wechseln müssen, können Sie dem in der bash enthaltenen cd-Kommando in der Umgebungsvariablen CDPATH eine Liste von absoluten Verzeichnisnamen angeben, in deren Unterverzeichnisse Sie dann durch Angabe des einfachen Verzeichnisnamen wechseln können.

Den Inhalt eines Verzeichnisses anzeigen

  

Um den Inhalt eines Verzeichnisses anzuzeigen, gibt es das Kommando ls (list) .

$ ls /bin
arch      compress  echo      gzip      ls        ps        su
bash      cp        ed        hostname  mkdir     pwd       sync
cat       date      false     kill      mknod     rm        tar
chgrp     dd        free      killall   mv        rmdir     true
chmod     df        ftp       ln        netstat   sh        uname
chown     du        gunzip    login     ping      stty      zcat
$ _
zeigt beispielsweise alle Dateien des \fbox {bin}
Verzeichnisses an. Das sind alles ausführbare Programmdateien.[*]

Durch Zusätze in der Kommandozeile können Sie das Ausgabeformat des ls Kommandos ändern. Solche Zusätze werden Optionen genannt. Die Optionen werden von einem Minuszeichen eingeleitet und bestehen (fast) immer aus einzelnen Buchstaben, die als Schalter bestimmte Eigenschaften des Programms verändern. Alle Optionen des ls Kommandos sind hier beschrieben. Für den Anfang sind die Optionen -l (long) für ein ausführliches Listing,[*] -a (all) für die Anzeige aller Dateien sowie -F (File) für zusätzliche Symbolisierung bestimmter Dateitypen besonders interessant. Sie können mehrere Optionen hinter einem einzigen Minuszeichen zusammenfassen.

$ ls -l /
total 302
drwxr-xr-x   2 ruth     bin          2048 Jun 10 12:39 bin
drwxr-xr-x   2 ruth     ruth         1024 Dec  2 16:46 boot
drwxr-xr-x   2 ruth     ruth         3072 Jul 23 12:33 dev
drwxr-xr-x   8 ruth     bin          2048 Jun 15 12:18 etc
....
-rw-r--r--   1 ruth     ruth       281092 Dec  2 16:54 vmlinuz
$ _

Eigentum und Zugriffsrechte

 

Als echtes Mehrbenutzerbetriebssystem schützt Linux Ihre privaten Dateien vor dem Zugriff anderer Systembenutzer. Um die Zugriffe auf Dateien und Verzeichnisse zu regulieren werden diesen Eigentümer zugeordnet, die allein über die Zugriffsrechte (Permissions) der anderen Benutzer bestimmen können.

Zur flexibleren Gestaltung dieser Regelung existieren neben dem Eigentümer noch zwei Kategorien für jede Datei: eine Benutzergruppe und die übrigen Anwender.

Jeder Systembenutzer gehört mindestens einer Gruppe an und kann gleichzeitig Mitglied mehrerer Benutzergruppen sein. Indem der Eigentümer die Zugriffsrechte für eine Gruppe und für die übrigen Anwender festlegt, kann er den Kreis der berechtigten Personen für jede Datei und für jedes Verzeichnis individuell bestimmen. Für die Durchsetzung der eingestellten Regeln garantiert das Betriebssystem.


Abbildung
Zugriffsrechte
Abbildung: Zugriffsrechte für Datei und Verzeichnis

Die Rechte werden bei einem langen Listing mit ls -l (wie im Beispiel oben) im ersten Feld angezeigt. Die erste Stelle gibt den Dateityp an. Der Rest des Feldes besteht aus drei Gruppen zu je drei Stellen. Hier bedeuten:

r
(read) Leseberechtigung (bei Verzeichnissen das Recht, den Inhalt des Verzeichnisses anzuzeigen)
w
(write) Schreibberechtigung (bei Verzeichnissen das Recht, eine Datei oder ein Unterverzeichnis anzulegen)
x
(execute) Ausführberechtigung (bei Verzeichnissen die Möglichkeit, in dieses Verzeichnis zu wechseln)
Die Abbildungen oben zeigen typische Einträge für ein Verzeichnis und eine normale Datei.

Ein Verzeichnis ist durch den Typ d gekennzeichnet. In dem Beispiel hat der Eigentümer das Recht, in das Verzeichnis zu schreiben (das heißt Dateien darin anzulegen oder zu löschen), das Verzeichnis aufzulisten und auf die Dateien in dem Verzeichnis zuzugreifen. Die Gruppe und die anderen Systembenutzer können den Inhalt des Verzeichnisses anzeigen und mit cd dorthin wechseln, sie können aber keine Datei in dem Verzeichnis anlegen oder eine Datei aus dem Verzeichnis löschen.

Die Datei in dem Beispiel kann von dem Eigentümer und der Gruppe gelesen und beschrieben (verändert) werden, während die anderen Benutzer die Datei nur lesen können.

Verzeichnisse erstellen und löschen

  

Mit dem mkdir (make directory) Kommando können Sie ein neues Verzeichnis anlegen, vorausgesetzt, Sie haben Schreibberechtigung für das Verzeichnis, in dem das neue Verzeichnis erstellt werden soll. Der Eigentümer des neuen Verzeichnisses sind automatisch Sie selbst.

Das rmdir  (remove directory) Kommando ist dazu da, Verzeichnisse zu löschen. Es können nur leere Verzeichnisse gelöscht werden.

Dateien erstellen, verschieben und löschen

 

Eine Datei wird von einem Programm als Resultat eines bestimmten Prozesses erstellt. Beispielsweise werden die Programme selbst vom C-Compiler gemacht. Textdateien können Sie einfach mit einem Editor wie zum Beispiel vi, joe oder emacs erzeugen oder erweitern.

Es gibt aber auch andere Methoden, Dateien zu erzeugen. Beispielsweise können Sie die Kopie einer existierenden Datei mit dem   Befehl cp (copy) anfertigen.

Vorausgesetzt, im aktuellen Verzeichnis existiert eine Datei namens Adressen und Sie haben Leserecht für die Datei und Schreibberechtigung für das Verzeichnis, erzeugt der Befehl

$ cp Adressen Telefonliste
$ _

eine genaue Kopie der Datei Adressen mit dem Namen Telefonliste. Die neue Datei Telefonliste ist genauso groß wie Adressen und enthält exakt die gleichen Zeichen. Sie belegt zusätzlichen Platz auf der Festplatte, und Veränderungen an der einen Datei sind in der anderen nicht zu sehen.

Das ist nicht selbstverständlich. Mit dem ln (link)  Kommando können Sie eine andere Art Kopie erzeugen, bei der dieselbe Datei ,,nur`` einen zusätzlichen Namen erhält. Zum Beispiel

$ ln Adressen Adressliste
$ _

erzeugt einen neuen Eintrag Adressliste im aktuellen Verzeichnis. Das Listing des Verzeichnisses zeigt beide Dateien mit der gleichen Größe, mit den gleichen Zugriffsrechten und mit der gleichen Zeitmarke an. Es ist dieselbe Datei, die einfach einen zweiten Namen bekommen hat. Wenn Sie auf die Daten zugreifen wollen, sei es zum Lesen oder Schreiben, macht es keinen Unterschied, unter welchem Namen Sie die Datei aufrufen. Veränderungen so einer Datei sind automatisch auch unter dem zweiten Namen sichtbar, sobald sie unter dem ersten Namen abgespeichert wurden.

Um eine Datei umzubenennen, können Sie den mv (move) Befehl   benutzen. Dieser Befehl verändert den Inhalt der Datei nicht. Es wird nur der Name im Verzeichnis geändert.

Zum Löschen von Dateien gibt es das rm (remove)   Kommando. Eine einmal gelöschte Datei ist verloren. Es gibt keinen Weg, wieder an die Daten gelöschter Dateien heranzukommen.[*] Deshalb ist beim Umgang mit rm immer größte Sorgfalt geboten.

Für das Löschen einer Datei ist übrigens keine Schreibberechtigung für die Datei selbst notwendig. Die Schreibberechtigung auf das Verzeichnis ist hier das entscheidende Kriterium, denn die Löschfunktion (wie auch die zum Umbenennen oder Linken) greift nicht auf die Datei zu, sondern ,,nur`` auf den Eintrag im Verzeichnis.

Dateien anzeigen

 

In der Praxis werden Sie sich häufig Textdateien ansehen wollen. Wenn Sie vorhaben, die Datei zu verändern, werden Sie einen Editor, beispielsweise elvis, aufrufen. Um die Datei einfach nur zu lesen, ist ein Editor nicht besonders geeignet. Erstens sind die Editoren zum bloßen Lesen von Textdateien einfach zu aufwendig und zu langsam und zweitens besteht immer die Gefahr der versehentlichen Veränderung einer Textdatei.

Aus diesem Grund gibt es kleine, schnelle Programme, die allein den Inhalt einer Datei anzeigen. Die wichtigsten Programme dieser Gattung sind more und   less, sogenannte Pager, mit denen Sie in einer Textdatei ,,blättern`` können. Das Vorwärtsblättern wird bei beiden Programmen durch ein Leerzeichen (Space) ausgelöst, das Zurückblättern durch den Buchstaben B (back). Das less-Programm muß ausdrücklich durch Drücken der Taste Q beendet werden, während more automatisch beendet, wenn das Dateiende erreicht wird.

Um eine kurze Datei auf den Bildschirm zu schreiben, kann auch das Programm cat  verwendet werden.

$ cat Adressen
LunetIX   Donaustr. 16           12043 Berlin  030/6235787
FSF       675 Mass Ave           Cambridge,   MA 02139 USA
XeroxParc 3333 Coyote Hill Raod  Palo Alto,   CA 94304 USA
MIT       545 Technology Square  Cambridge,   MA 02139 USA
O'Reilly  632 Petaluma Avenue    Sebastopol,  CA 95472 USA
$ _

schreibt beispielsweise die Datei Adressen auf den Bildschirm. Wenn die Datei nicht auf einen Bildschirm paßt, werden die Zeilen einfach nach oben aus dem Bild geschoben, bis das Dateiende erreicht ist. Sie können den Bildschirm ein Stück zurück- und anschließend wieder vorblättern, indem Sie die BILDHOCH beziehungsweise BILDRUNTER Taste gleichzeitig mit der Shifttaste betätigen.

Datenströme

 

Das Verhalten des Programms cat  zeigt eine Eigenart der Datenverarbeitung unter Linux auf:

Dateien können als eingefrorene ,,Datenströme`` betrachtet werden. Jeder Druck auf die Tastatur erzeugt ein Zeichen im Datenstrom. Normalerweise wird jedes eingegebene Zeichen auf dem Bildschirm dargestellt, der so ein Echo dieses Eingabedatenstroms ist.

Das cat-Kommando öffnet im obigen Beispiel die Datei Adressen und leitet die darin enthaltenen Daten als kontinuierlichen Strom auf den Bildschirm.

Passend zum Bild der Datenströme können Sie sich verschiedene Kanäle vorstellen, in denen diese Ströme wie Wasser fließen. Linux bietet sehr flexible Möglichkeiten, diese Ströme zu steuern. Damit nicht jeder Strom ausdrücklich gesteuert werden muß, gibt es einige Standardkanäle: die Standardeingabe, die Standardausgabe und die Standardfehlerausgabe.    

Die Standarddatenkanäle sind immer offen. Normalerweise ist der Bildschirm die Standardausgabe und gleichzeitig auch die Standardfehlerausgabe.[*] Die Standardeingabe ist, wie zu erwarten war, normalerweise die Tastatur. Die drei Standardkanäle sind numeriert: die Standardeingabe hat die Nummer Null, die Standardausgabe und die Standardfehlerausgabe haben die Nummern Eins und Zwei. 

Das cat-Kommando schreibt normalerweise auf die Standardausgabe. Durch die Operatoren > und < im Kommandozeileninterpreter (der Shell) können die Datenströme aber auch umgelenkt werden. Zum Beispiel 

$ cat Adressen > Telefonliste
$ _

leitet den Datenstrom, den cat aus der Datei Adressen liest und in die Standardausgabe schreibt, in die Datei Telefonliste um. Die Telefonliste speichert den Datenstrom wieder; es entsteht also eine Kopie der Datei Adressen. Das gleiche Ergebnis hätten Sie natürlich auch mit dem cp-Kommando erzielen können.

Umgekehrt kann auch der Eingabekanal umgelenkt werden:  

$ sort < Adressen
FSF       675 Mass Ave           Cambridge,   MA 02139 USA
LunetIX   Donaustr. 16           12043 Berlin  030/6235787
MIT       545 Technology Square  Cambridge,   MA 02139 USA
O'Reilly  632 Petaluma Avenue    Sebastopol,  CA 95472 USA
XeroxParc 3333 Coyote Hill Raod  Palo Alto,   CA 94304 USA
$ _

gibt beispielsweise die Adressen alphabetisch sortiert auf dem Bildschirm aus.

Verknüpfung mehrerer Kommandos: Pipelines

 

Um in der Bilderwelt von Datenströmen zu bleiben, bietet Linux zu den offenen Kanälen noch Röhren, sogenannte Pipelines. Damit wird der Ausgabekanal eines Kommandos direkt in den Eingabekanal eines anderen Kommandos geleitet.

Der Operator für diese Pipeline ist der senkrechte Strich |.

Auf der deutschen Tastatur wird er durch gemeinsames Drücken der rechten ALT mit der < Taste (links unten neben der Leertaste und der linken ALT Taste) erzeugt.

$ sort Adressen | uniq | less
[Ausgabe von less]
$ _

ist so eine Pipeline aus gleich drei Kommandos. Das sort Kommando liest die Datei Adressen (die Eingabeumleitung aus dem früheren Beispiel ist nicht notwendig) und sortiert deren Inhalt zeilenweise. Die sortierten Zeilen werden von der Standardausgabe in eine Pipeline gespeist und so dem Programm uniq  zugeführt, das die Zeilen vergleicht und alle Zeilen entfernt, die doppelt vorkommen. Die Ausgabe von uniq wird wiederum in die zweite Pipeline gespeist und schließlich dem less-Programm zugeführt, das die sortierte und von den Doppeln befreite Adreßdatei bildschirmweise anzeigt.

Mit diesen Röhren lassen sich mit den vielseitigen Kommandos des Linux-Basissystems auf einfache Weise auch komplizierte Aufgaben schnell und zweckmäßig lösen. Die kleinen hochspezialisierten Programme aus der ``Werkzeugkiste'' (Toolbox), die als Glieder in einer Kette von Pipelines verwendet werden können, werden auch als Filter  bezeichnet.

Eingabehilfen von der Shell

Der Kommandozeileninterpreter, die Shell, ist die Benutzeroberfläche von Linux. Es gibt auch eine ausgezeichnete grafische Benutzeroberfläche - das X Window System - aber auch hier hat die normale Shell eine herausragende Bedeutung. 

Dem DOS-geschädigten Anwender mag das seltsam anachronistisch vorkommen, gibt es dort doch schon seit Jahren erfolgreiche Tools und Commanders, die die Berührung mit dem ,,rohen`` Kommandozeileninterpreter vermeiden helfen. Da scheint Linux mit seinen Shells reichlich veraltet.

Wenn Sie aber den Umgang mit einer Shell wie der bash, der tcsh oder der zsh einmal gelernt und sich an die vielfältigen Hilfen und Möglichkeiten gewöhnt haben, werden auch Sie diese großen Shells den Kommandeuren und ihren Artgenossen vorziehen.

Zum Beispiel bieten alle modernen Shells einen Kommandozeilenspeicher. In der bash, der Standardshell der meisten Linux-Distributionen, können Sie mit den Cursortasten HOCH und RUNTER in der eigenen Computergeschichte nach Wiederverwendbarem herumstöbern. Hier stehen die letzten hundert[*] Kommandozeilen zur Auswahl. Auch die gezielte Suche nach einer bestimmten Kommandozeile ist möglich, wenn Sie ein eindeutiges Wort aus dieser Zeile erinnern: Mit der Tastenkombination CONTROL-R[*] erscheint bei der bash anstelle des bekannten Promptes die Aufforderung, den Suchbegriff einzugeben. Mit jedem eingegebenen Zeichen wird weiter rückwärts im Kommandozeilenspeicher nach einem passenden Begriff gesucht und die erste passende Zeile sofort angezeigt. Wenn die gewünschte Zeile auf diesem Weg gefunden wurde, können Sie mit den übrigen Editorfunktionen (siehe unten) die Zeile nochmal bearbeiten und schließlich mit einem Zeilenende RETURN abschließen. 

Zu dem Kommandozeilenspeicher bieten die modernen Shells regelrechte Kommandozeileneditoren, mit denen eine Kommandozeile auf vielfältige Weise bearbeitet werden kann. Mit den Cursortasten kann die Einfügemarke an eine beliebige Stelle gebracht werden, die BACKSPACE und DELETE Tasten löschen jeweils ein Zeichen. Die weiteren Editorbefehle sind an die Befehlssätze von den Standardeditoren vi oder emacs angelehnt.

Eine der mächtigsten Funktionen ist die automatische Ergänzung einzelner Wörter durch die Shell. Mit der Tabulatortaste wird diese Funktion bei der bash ausgelöst. Die Shell versucht, das bis dahin eingegebene Wort zu ergänzen, indem sie das erste Wort einer Kommandozeile mit allen möglichen Kommandos, die folgenden Wörter mit Datei- und Verzeichnisnamen vergleicht und die längste eindeutige Lösung in die Kommandozeile schreibt. Bei geschickter Benennung Ihrer Dateien reicht es häufig aus, wenn Sie zwei oder drei Buchstaben eines Dateinamens eingeben, der Rest wird von der Shell automatisch ergänzt.

Eine weitere Hilfe, die die Shell beim Eingeben von Dateinamen anbietet, sind die sogenannten ,,Jokerzeichen``, ,,Wildcards`` oder ,,regulären Ausdrücke``, mit denen mehrere Dateien mit gleichen Namensteilen in einem einzigen Ausdruck angegeben werden können. Beispielsweise  

$ ls -l /bin/m*
-rwxr-xr-x   1 ruth     other        4104 Sep  4  1992 /bin/mkdir
-rwx--x--x   1 ruth     ruth         5212 Sep  5 17:27 /bin/mkfs
-rwxr-xr-x   1 ruth     other        3336 Sep  4  1992 /bin/mknod
-rwx--x--x   1 ruth     ruth        12220 Apr 17  1993 /bin/mount
-rwxr-xr-x   1 ruth     other        6724 Sep  4  1992 /bin/mv
$ _

gibt ein ausführliches Listing aller Kommandos im Verzeichnis /bin aus, deren Name mit dem Buchstaben m beginnt.

Weitere Informationen zur bash finden Sie hier.

Virtuelle Terminals und Hintergrundprozesse

Damit Sie die Multitaskingfähigkeit von Linux auch als einzelner Benutzer ausschöpfen können, bietet Linux verschiedene Möglichkeiten, mehrere Programme nebeneinander laufen zu lassen.

Die erste dieser Möglichkeiten wird durch die sogenannten virtuellen Terminals realisiert.  Obwohl Sie nur eine einzige Bildschirm- Tastaturkombination, die sogenannte Console, an Ihrem PC angeschlossen haben, können Sie mit Linux arbeiten als säßen Sie an mehreren Rechnern gleichzeitig. Die reale Console wird durch Linux zu mehreren logischen Terminals, zwischen denen durch die Tastenkombination ALT-F1 bis ALT-F8 umgeschaltet werden kann. Auf einigen dieser virtuellen Terminals wird ein eigener Loginprompt ausgegeben.[*] Damit erhalten Sie die Möglichkeit, sich gleichzeitig mehrfach einzuloggen, eventuell sogar unter verschiedenen Benutzernamen (wenn Ihnen mehrere Accounts auf dem Rechner gehören).

Auf jedem virtuellen Terminal können Programme gestartet werden, die auch weiterlaufen, wenn auf ein anderes Terminal umgeschaltet wird. Die Tastatureingabe wird immer nur an das aktuelle Terminal ``im Vordergrund'' weitergegeben. Die Bildschirmausgabe der einzelnen Terminals wird erst sichtbar, wenn dorthin umgeschaltet wurde. Nur die Statusmeldungen und Fehlerausgaben des Kernels werden nicht auf ein virtuelles Terminal, sondern auf die Console direkt ausgegeben und erscheinen dadurch immer auf dem Bildschirm.

Die zweite Möglichkeit, die Multitaskingfähigkeit von Linux zu nutzen, besteht darin, Prozesse auf einem Terminal in der aktuellen Shell im Hintergrund zu starten.  Das geschieht, indem Sie am Ende des Kommandos ein Ampersand `&' eingeben. So ein Kommando wird ganz normal gestartet, die Shell wartet aber nicht auf dessen Beendigung, sondern gibt sofort wieder den Prompt aus und wartet auf Ihre nächste Eingabe. Je nachdem, wie das Terminal eingestellt ist (siehe stty), erscheinen die Meldungen des Hintergrundprogramms auf dem Bildschirm, oder das Hintergrundprogramm wird für die Ausgabe angehalten, bis es wieder in den Vordergrund geholt wird. Durch Umleitung des Standardausgabekanals in eine Datei kann die Ausgabe eines Hintergrundprogramms auch für spätere Bearbeitung gespeichert werden.

$ sort Adressen | uniq > Adressliste &
[1] 19365
$ _
bearbeitet beispielsweise die Adreßdatei wie im Beispiel oben, schreibt die sortierte Liste aber in eine Datei, anstatt sie auf dem Bildschirm auszugeben. Die Zahlen, die nach dem Abschluß der Kommandozeile erscheinen, werden von der Shell ausgegeben und teilen Ihnen erstens die Jobnummer und zweitens die Prozeßnummer des gerade im Hintergrund gestarteten Prozesses mit.

Es gibt noch eine dritte Möglichkeit, Prozesse in den Hintergrund zu bringen. Mit der Tastenkombination CONTROL-Z können Sie ein im Vordergrund laufendes Programm anhalten. Die Shell zeigt wie oben die Jobnummer und zusätzlich den Status (Stopped) und den Namen des angehaltenen Prozesses an und gibt schließlich wieder eine Eingabeaufforderung aus. Mit den sogenannten Jobcontrol Funktionen der Shell können Sie ein angehaltenes Kommando im Hintergrund oder im Vordergrund weiterlaufen lassen.

Wenn beispielsweise die laufende sort Pipeline mit CONTROL-Z angehalten wird, kann sie mit dem bg-Kommando im Hintergrund (background) fortgesetzt werden...

$ sort Adressen  | uniq >Adressliste

[1]+  Stopped                 sort Adressen | uniq >Adressliste
$ bg %1
[1]+ sort Adressen | uniq >Adressliste  &
$ _

...das Shellkommando fg setzt den gleichen Job im Vordergrund fort.

$ fg %1
sort Adressen | uniq >Adressliste
$ _


next up previous contents index
Next: Zahlensysteme Up: Grundlagen Previous: Das Betriebssystem

Das Linux Anwenderhandbuch
(C) 1997 LunetIX