Galileo Computing < openbook >
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.


Kompendium der Informationstechnik
 von Sascha Kersken
EDV-Grundlagen, Programmierung, Mediengestaltung
Buch: Kompendium der Informationstechnik
gp Kapitel 4 Betriebssysteme
  gp 4.1 Entwicklung der Betriebssysteme
    gp 4.1.1 Die Geschichte von UNIX
    gp 4.1.2 PC-Betriebssysteme
  gp 4.2 Aufgaben und Konzepte
    gp 4.2.1 Allgemeiner Aufbau von Betriebssystemen
    gp 4.2.2 Prozessverwaltung
    gp 4.2.3 Speicherverwaltung
    gp 4.2.4 Dateisysteme
  gp 4.3 Linux
    gp 4.3.1 Arbeiten mit der Shell
    gp 4.3.2 Wichtige Systembefehle
    gp 4.3.3 Editoren
    gp 4.3.4 Grafische Benutzeroberflächen
    gp 4.3.5 Linux-Installation und -Konfiguration
  gp 4.4 Mac  OS X
    gp 4.4.1 Mit Aqua arbeiten
    gp 4.4.2 Systemkonfiguration
  gp 4.5 Mac  OS 9
    gp 4.5.1 Die Oberfläche von Mac  OS 9
    gp 4.5.2 Systemkonfiguration
  gp 4.6 Windows
    gp 4.6.1 Die verschiedenen Windows-Versionen
    gp 4.6.2 Die Windows-Benutzeroberfläche
    gp 4.6.3 Die Windows-Konsole
    gp 4.6.4 Windows-Konfiguration
  gp 4.7 Zusammenfassung

gp

Prüfungsfragen zu diesem Kapitel (extern)


Galileo Computing

4.3 Linux  downtop

Das Betriebssystem Linux ist ein voll ausgestattetes, POSIX-konformes UNIX-Betriebssystem, dessen Kernel allerdings von seinem Erfinder Linus Torvalds vollkommen neu entwickelt wurde. Seit seiner ursprünglichen Entwicklung im Jahr 1991 wurde der Linux-Kernel durch die Mitarbeit zahlloser Freiwilliger immer weiter ausgebaut. Heute unterstützt er beinahe jede erdenkliche Hardware und läuft nicht etwa nur auf der Intel-PC-Architektur, sondern wurde auf viele verschiedene Plattformen portiert, beispielsweise PowerPC, Alpha, Sun SPARC oder diverse IBM-Großrechner. In diesem Abschnitt wird allerdings vorzugsweise die PC-Version betrachtet.

Selbstverständlich besteht ein UNIX-System wie Linux aber nicht nur aus dem Kernel. Um damit arbeiten zu können, wird eine Benutzeroberfläche in Form einer Shell oder eines grafischen Desktops benötigt (alle aktuellen Linux-Distributionen bieten beides). Ein weiterer wichtiger Bestandteil eines UNIX-Systems sind die zahlreichen Systemprogramme. Die Linux-Versionen dieser Programme sind kompatibel zu den entsprechenden Befehlen kommerzieller UNIX-Versionen, entstammen aber größtenteils dem GNU-Projekt.

Dieses Projekt wurde 1984 von Richard Stallman ins Leben gerufen und setzte sich das Ziel, freie Versionen sämtlicher UNIX-Systemprogramme zu entwickeln. Als Linus Torvalds mit der Arbeit an Linux begann, existierte bereits ein C-Compiler (der GNU C Compiler oder GCC); auch die meisten Standardbefehle waren bereits verfügbar. Die meisten GNU-Varianten der UNIX-Programme sind inzwischen sogar leistungsfähiger als die ursprünglichen Versionen. Lediglich der lange geplante GNU-Kernel Hurd ist bis heute nicht endgültig erschienen, zumal er durch die Entwicklung von Linux im Grunde überflüssig wurde.

GNU steht übrigens für »GNU’s Not Unix«; es handelt sich um ein rekursives Akronym, in dem der erste Buchstabe immer wieder für den Namen des Ganzen steht – eine beliebte Form der Unterhaltung in der UNIX-Szene. Das GNU-Projekt wird von einer Organisation namens Free Software Foundation (FSF) gepflegt, deren Website Sie unter www.fsf.org erreichen.

Freie Software

Freie Software hat nicht nur etwas damit zu tun, dass die Programme kostenlos erhältlich sind, sondern auch damit, dass Sie den Quellcode erhalten und damit fast alles machen dürfen, was Sie möchten. Richard Stallman bringt es gern auf die folgende Formel: »It’s a matter of free speech, not free beer.« (»Es ist eine Frage von Redefreiheit, nicht von Freibier.«) – Kommerzielle Softwarelizenzen enthalten dagegen in der Regel eine Reihe von Einschränkungen und erlauben im Grunde nichts weiter, als die Software für ihren offiziellen Anwendungszweck einzusetzen. Die FSF hat dafür eine eigene Softwarelizenz ausgearbeitet, die vor allem verhindern soll, dass kommerzielle Softwareentwickler freie Softwareprojekte an sich binden und die ursprüngliche Freiheit beeinträchtigen. Unter dieser Lizenz, der GNU General Public License (GPL), wird übrigens auch Linux selbst verbreitet.

Zu Beginn seiner Entstehung war Linux vor allem im Kreis der Entwickler verbreitet, die daran arbeiteten. Es war schwierig, den Linux-Kernel zu installieren und die GNU-Versionen aller erforderlichen Systemprogramme zu beschaffen und miteinander zu koordinieren. In den ersten Jahren wurde Linux deshalb vornehmlich von Informatikern und interessierten Studenten weitergereicht, da die Universitäten bereits über Internetanbindungen verfügten, als der Rest der Welt noch nichts damit zu tun hatte.

Linux-Distributionen

Einige der Studenten, die mit Linux arbeiteten, begannen allmählich, den Kernel und die Systemprogramme zusammenzustellen und Installationsprogramme für diese Betriebssystempakete zu schreiben. Aus diesen ersten Bemühungen entstanden allmählich verschiedene Linux-Distributionen, die auf CD-ROMs verbreitet wurden, meist zusammen mit mehr oder weniger ausführlichen gedruckten Dokumentationen. Firmen wurden gegründet, die solche Distributionen erstellten und zu vergleichsweise günstigen Preisen verkauften.

Beachten Sie, dass der Kauf einer Distribution nichts mit dem Erwerb kommerzieller Software gemeinsam hat: Sie dürfen die Software, die Sie erhalten, auf beliebig vielen Rechnern installieren und an alle Ihre Bekannten weitergeben. Die Distributoren erhalten das Geld nicht für die Software selbst oder für ein Nutzungsrecht daran, sondern lediglich für ihre Arbeit an Installationsprogrammen und Dokumentation. Entsprechend können Sie die meisten Distributionen alternativ aus dem Internet herunterladen. Eine Distribution kann allerdings einzelne kommerzielle Programme enthalten, für die andere Bedingungen gelten – beachten Sie die Beschreibung, die der Distributor mitliefert.

Heute ist eine Reihe verschiedener Distributionen erhältlich, die sich bezüglich ihres Umfangs, ihres Anwendungsschwerpunkts und ihres Preises unterscheiden. Die wichtigsten Distributionen sind folgende:

gp  SuSE Linux von der Nürnberger Firma SuSE AG ist die verbreitetste Distribution in Europa. Sie wird in zwei verschiedenen Versionen angeboten: der Personal Edition für Privatanwender, die vorzugsweise mit Desktop-Anwendungen ausgestattet ist, und der Professional Edition für Entwickler, Systemadministratoren oder Unternehmen, die zahlreiche Netzwerkanwendungen, Server, Entwicklungswerkzeuge und andere professionelle Programme enthält.
gp  RedHat Linux stammt von dem gleichnamigen amerikanischen Unternehmen und ist die beliebteste Distribution in den USA. Wie bei SuSE Linux wird eine Personal und eine Professional Edition angeboten, der Lieferumfang ist in etwa vergleichbar. RedHat Linux ist etwas schwieriger zu installieren als SuSE Linux, nach der Installation ist der Unterschied allerdings recht klein.
gp  Debian GNU/Linux ist eine kleinere Distribution mit dem besonderen Vorteil, dass alle Bestandteile voll und ganz aus freier Software unter der GPL bestehen – auch das Installationsprogramm. Dafür ist die Installation komplizierter als bei den anderen Distributionen, für Linux-Einsteiger ist sie nicht zu empfehlen. Fortgeschrittene Anwender können diese Distribution dagegen am stärksten an eigene Bedürfnisse anpassen.
gp  Mandrake Linux stammt von einem französischen Distributor und ist beliebt wegen seines besonders großen Lieferumfangs und des gut durchdachten Installationsprogramms.

Neben diesen vier häufigsten Distributionen werden unzählige weitere angeboten, jede von ihnen besitzt ihre besonderen Eigenschaften, Vor- und Nachteile. Die meisten Informationen in diesem Kapitel gelten für alle Distributionen. Die Unterschiede treten nicht so sehr beim normalen Arbeiten mit dem System zu Tage, sondern nur bei der Installation neuer Programme und bei Konfigurationsarbeiten. Einige Konfigurationshinweise in diesem Abschnitt beziehen sich allerdings ausschließlich auf SuSE Linux.


Galileo Computing

4.3.1 Arbeiten mit der Shell  downtop

Auch wenn so gut wie alle Distributionen inzwischen schon bei der Installation eine grafische Benutzeroberfläche einrichten, sollten Sie sich den Umgang mit der Konsole angewöhnen. Die mächtigsten Funktionen des Systems werden nach wie vor über die Kommandozeile aufgerufen; erst allmählich stehen grafische Steuerprogramme dafür zur Verfügung.

Der Login

Nach dem Start erwartet Linux – wie alle UNIX-Systeme – eine persönliche Anmeldung (Login). Sie müssen dazu Ihren Benutzernamen und das zugehörige Passwort eingeben. Wenn die Anmeldung auf der Konsole erfolgt, ist die Passworteingabe völlig ohne Feedback auf dem Bildschirm – es werden nicht einmal Sternchen (***) angezeigt. Die meisten grafischen Logins zeigen dagegen für jedes eingetippte Zeichen ein Sternchen an.

root

In der Regel wird bei der Installation des Systems ein Passwort für den Superuser mit dem vorgegebenen Benutzernamen root eingerichtet. Sie sollten sich niemals als root anmelden, wenn Sie mit dem System nur normal arbeiten möchten, weil Sie als root wirklich alles dürfen und so versehentlich das gesamte System beschädigen könnten. Die Hauptaufgabe des Benutzers root ist die Systemadministration. Aus diesem Grund wird bei fast jeder Linux-Installation automatisch ein normaler Benutzer eingerichtet.

Für jeden Benutzer existiert ein Eintrag in der Datei /etc/passwd. Dieser Eintrag enthält verschiedene durch Doppelpunkt getrennte Informationen:

Username:Passwort:UID:GID:Info:Home:Shell

Username und Passwort erklären sich von selbst. Die UID ist die numerische User-ID des Benutzers, die GID entsprechend die Nummer der Gruppe, der er angehört. Info enthält eine Klartextinformation über den Benutzer wie den vollständigen Namen, eine Telefonnummer oder E-Mail-Adresse. Diese Informationen können über das Netzwerk mit einem Programm namens finger ermittelt werden. Home gibt das bereits weiter oben besprochene Home-Verzeichnis dieses Benutzers an (in der Regel /home/Username). Shell gibt schließlich an, welche Shell dem Benutzer nach dem Login präsentiert wird – die verschiedenen Shells werden weiter unten genannt. Ein konkreter Eintrag könnte beispielsweise folgendermaßen aussehen:

user::102:100:Irgendjemand:/home/user:/bin/bash

Der Username und das Passwort sind die wichtigsten Informationen. Nur eine korrekt eingegebene Kombination aus beiden ermöglicht die Anmeldung eines Benutzers. Das Passwort steht an dieser Stelle nicht etwa im Klartext (es ließe sich leicht von jedem Benutzer oder sogar von einem externen Angreifer stehlen), sondern verschlüsselt – aus weiter unten erläuterten Gründen ist im Beispieleintrag übrigens gar kein Passwort zu sehen. Das eingesetzte Verschlüsselungsverfahren ist so beschaffen, dass die Einträge nicht wieder entschlüsselt werden können. Das Passwort, das ein Benutzer eingibt, wird vielmehr auf dieselbe Art und Weise verschlüsselt wie die /etc/passwd-Einträge. Anschließend wird das Ergebnis mit dem gespeicherten, verschlüsselten Passwort verglichen – eine Übereinstimmung bedeutet, dass das Passwort wohl korrekt sein muss.

Da der Verschlüsselungsweg bekannt ist, könnte ein Angreifer, dem ein Diebstahl der /etc/passwd-Datei gelingt, einfach nacheinander eine Liste von Wörtern verschlüsseln und mit den gespeicherten Passwörtern vergleichen. Es gibt sogar ein Programm namens crack, das diesen Job automatisch durchführt, und die passenden Wortlisten für die verschiedensten Sprachen erhalten Sie leicht aus dem Internet. Die Schlussfolgerung sollte klar sein: Verwenden Sie als Passwort niemals ein Wort, das in einem Wörterbuch vorkommen kann. Eine beliebige Kombination aus Großbuchstaben, Kleinbuchstaben und Ziffern ist dagegen ziemlich sicher. Die Frage ist nur, wie Sie sich ein solches Passwort merken können – aus nahe liegenden Gründen sollten Sie es nirgendwo aufschreiben. Das wäre in etwa so klug, als würden Sie die Geheimzahl für Ihre EC-Karte mit einem Folienstift auf die Karte selbst schreiben.

Gute Passwörter

Eine einfache Methode, ein sicheres Passwort zu erfinden und es sich selbst zu merken, besteht darin, die Anfangsbuchstaben eines beliebigen Satzes als Passwort zu verwenden. Visuell passende Buchstaben könnten Sie durch Ziffern ersetzen (zum Beispiel 1 statt i); Groß- und Kleinschreibung ergeben sich in deutschen Sätzen automatisch. Beispielsweise würde aus dem Satz »Mit Linux wär’ das nicht passiert« die Buchstabenkombination MLwdnp, auf die niemand kommen kann. Allerdings ist es am sichersten, die acht Zeichen, die in UNIX-Passwörtern zulässig sind, auch auszunutzen. Eine Brute-Force-Attacke (englisch für rohe Gewalt), bei der ein Angreifer jede erdenkliche Zeichenkombination durchprobiert, würde dadurch nämlich so lange dauern, dass es sich nicht lohnt.

Modernere UNIX-Systeme führen übrigens noch einen zusätzlichen Schutzmechanismus ein: Die eigentlichen Passwörter werden gar nicht mehr in der Datei /etc/passwd verwahrt, sondern in /etc/shadow. Diese Datei besitzt einen ähnlichen Aufbau wie /etc/passwd, ist aber nur für root lesbar und nicht für alle Benutzer.

Virtuelle Terminals

Falls Ihr System mit der grafischen Oberfläche startet, befinden Sie sich nach der Anmeldung auf dem Desktop, der Schreibtischoberfläche. Hier finden Sie verschiedene Symbole, Menüs und andere Bedienelemente, die weiter unten behandelt werden. Wechseln Sie an dieser Stelle zunächst in eine Textmodus-Konsole, indem Sie die Tastenkombination (STRG) + (ALT) + (F1) betätigen.

Jedes Linux-System bietet mehrere virtuelle Terminals zum Arbeiten an, in jedem von Ihnen können Sie sich unter einem beliebigen Benutzernamen anmelden und jeweils andere Programme ausführen. Standardmäßig sind sechs virtuelle Terminals eingerichtet, die über (STRG) + (F1) bis (STRG) + (F6) aufgerufen werden können. Mit (STRG) + (F7) wechseln Sie dagegen wieder zur grafischen Oberfläche, falls sie gestartet wurde. Aus der GUI heraus müssen Sie zusätzlich die (ALT)-Taste festhalten, um wieder in eins der Text-Terminals zu wechseln.

GUI-Terminalfenster

Alternativ können Sie auch innerhalb der grafischen Oberfläche ein Terminalfenster öffnen, beispielsweise das Programm xterm oder eine modernere, komfortablere Variante. Halten Sie einfach Ausschau nach einem Icon, das einen schwarzen Textbildschirm zeigt. Weiter unten erfahren Sie, wie Sie Terminalfenster in verschiedenen Desktop-Umgebungen öffnen.

Wenn Sie sich an der Konsole erfolgreich angemeldet haben, erhalten Sie eine Eingabeaufforderung (englisch prompt). Der Prompt kann je nach Konfiguration sehr unterschiedlich aussehen. In der Regel sehen Sie etwa Folgendes:

user@rechner: ~ $

Statt user wird der Benutzername angezeigt, unter dem Sie sich angemeldet haben; hinter dem @ steht der Name des Rechners, auf dem Sie gerade arbeiten. Auf diese Angaben folgt der Pfad des aktuellen Arbeitsverzeichnisses, im obigen Beispiel befindet sich der Benutzer in seinem Home-Verzeichnis (auf dieses Beispiel bezogen /home/user), das durch die Tilde gekennzeichnet wird. Das Dollarzeichen bildet schließlich den Abschluss; dahinter blinkt der Cursor für die Befehlseingabe. Statt des Dollarzeichens erscheint bei manchen Shells > oder ein anderes Zeichen.

Wenn Sie als root angemeldet sind, bekommen Sie einen etwas anderen Prompt zu sehen; beispielsweise folgenden:

rechner: ~ #

Es wird also kein Benutzername angezeigt, sondern hinter der Pfadangabe folgt eine Raute (#) statt des Dollarzeichens. Auch root befindet sich in diesem Beispiel in seinem Home-Verzeichnis, standardmäßig /root.

In den nachfolgenden Beispielen wird der Prompt einfach als Dollarzeichen dargestellt. Wenn für einen Befehl root-Rechte erforderlich sind, wird dagegen die Raute verwendet. Benutzereingaben sind in den Beispielen jeweils fett gesetzt, um sie vom Prompt und von der Ausgabe des Systems abzusetzen.

Grundfunktionen der Shell

Das Programm, das Ihre Befehle entgegennimmt und zu interpretieren versucht, wird Shell genannt. Es gibt nicht die Linux-Shell, sondern eine Reihe verschiedener Shell-Programme, die sich bis zu einem gewissen Grad voneinander unterscheiden. Höchstwahrscheinlich läuft in Ihrem System eine Shell, die als bash bezeichnet wird. Geben Sie den folgenden Befehl ein, um herauszufinden, welche Shell Sie ausführen:

$ echo $0

$0 ist eine spezielle Variable, die jeweils den Namen des zurzeit laufenden Programms enthält. Die Ausgabe dürfte zum Beispiel /bin/bash oder /bin/sh lauten. Die gängigsten Shells werden in der folgenden Liste aufgeführt:

gp  sh oder bsh, die Bourne Shell, benannt nach ihrem Entwickler, war die ursprüngliche Shell des Bell-Labs-UNIX. Sie ist der kleinste gemeinsame Nenner der Fähigkeiten aller anderen Shells.
gp  csh, die C-Shell, und ihre Erweiterung tcsh enthalten eine Reihe spezieller Funktionen, die besonders den Bedürfnissen von C-Programmierern entgegenkommen.
gp  bash, die Bourne Again Shell (ein nettes Wortspiel) ist die GNU-Weiterentwicklung der ursprünglichen Bourne Shell mit vielen interessanten Zusatzfunktionen. Diese Shell ist in allen Linux-Distributionen als Standard voreingestellt. Trotzdem werden alle hier Genannten und meist noch weitere mitgeliefert.
gp  ksh, die Korn Shell, ist die eigenwilligste unter den bekannten UNIX-Shells und wird gerade deshalb von vielen Anwendern bevorzugt.

Um Missverständnissen vorzubeugen, sollten Sie zunächst verstehen, dass über 90 Prozent der Eingaben, die Sie an der Kommandozeile vornehmen, unter allen Shells identisch sind – es handelt sich nämlich bei diesen Eingaben überhaupt nicht um Shell-Kommandos. Die meisten »UNIX-Befehle« sind separate Systemprogramme, die sich für gewöhnlich im Verzeichnis /bin befinden und mit der Shell nichts zu tun haben. Die Shells unterscheiden sich insbesondere in der Art und Weise, wie Sie die Funktionen der Systemprogramme durch intelligente Verknüpfungen erweitern können.

Hintergrundprozesse

Beispielsweise wurde erst in der csh die Möglichkeit eingeführt, Programme im Hintergrund zu starten – wenn Sie ein &-Zeichen an einen Befehl anhängen, gelangt dessen Ausgabe nicht auf den Bildschirm und Sie können sofort den nächsten Befehl eingeben. Es wird beim Aufruf des Befehls lediglich dessen Prozess-ID ausgegeben. Inzwischen bieten fast alle Shells diese Option. Hier sehen Sie ein einfaches Beispiel, in dem die Suche nach Dateien, deren Name mit einem a beginnt, in den Hintergrund verbannt wird:

$ find . -name a* &
[3125]
$

Die Funktion des Befehls find wird weiter unten genauer erläutert.

Statt 3125 werden Sie natürlich eine andere PID zu sehen bekommen. Mit Hilfe des Befehls fg (für Foreground – nicht etwa fat grin, wie in Chats und Foren üblich) können Sie die Ausgabe des Befehls im Vordergrund fortsetzen:

$ fg 3125
...

Ebenso können Sie ein bereits laufendes Programm nachträglich in den Hintergrund stellen, indem Sie die Tastenkombination (STRG) + (Z) betätigen. Auch in diesem Fall wird die PID angezeigt, und Sie können das Programm mit fg zurückholen.

In der Regel bestehen die Befehle, die Sie eingeben, aus dem Namen des gewünschten Systemprogramms und einer durch Leerzeichen getrennten Liste von Parametern. Einige der Parameter sind Optionen, die bei den meisten Befehlen mit einem Minuszeichen beginnen, andere geben dagegen konkrete Werte wie Pfad- oder Dateinamen, Bezeichnungen und Ähnliches an.

Die Systemvariable path

Wenn Sie den Namen eines Programms eingeben, sucht die Shell in ganz bestimmten Verzeichnissen nach diesem Programm. Diese Verzeichnisse sind in einer Umgebungsvariablen namens path festgelegt. Wenn Sie diese Liste lesen möchten, können Sie Folgendes eingeben:

$ echo $path
/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/share/bin

Der Befehl echo gibt sämtlichen nachfolgenden Text in der nächsten Zeile aus. Das Dollarzeichen sorgt dafür, dass die Shell das nachfolgende Wort als den Namen einer Variablen auffasst, deren Wert ausgegeben werden soll.

Der Wert der Variablen path besteht aus einer Liste von absoluten Pfadangaben (mit / beginnend), die durch Doppelpunkte voneinander getrennt werden. Normalerweise ist die Liste erheblich länger.

Als Beispiel soll im Folgenden ein Verweis auf das aktuelle Verzeichnis hinzugefügt werden – üblicherweise wird ein Programm nämlich nicht einfach ausgeführt, wenn Sie sich in seinem Verzeichnis befinden, sondern nur, wenn dieses Verzeichnis auch in path steht. Um dies zu ändern, können Sie die spezielle Verzeichnisangabe . (einen einzelnen Punkt) hinzufügen, da dieser Punkt jeweils das aktuelle Verzeichnis repräsentiert.

Wenn Sie den Inhalt der Variablen ändern möchten, funktioniert das in den verschiedenen Shells unterschiedlich. Hier sehen Sie Beispiele für die oben genannten Shells:

gp  sh, bsh, bash und ksh – path=$path:.
gp  csh und tcsh – set path=$path:.

Der Wert, der path in den beiden Beispielen zugewiesen wird, nämlich $path:. bedeutet: bisheriger Wert von path, Doppelpunkt, anschließender Punkt. Die vollständige Pfadliste aus dem obigen Beispiel sähe nach dieser Änderung folgendermaßen aus:

/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/share/bin:.

In Wirklichkeit sollten Sie sich gut überlegen, ob Sie diese Änderung durchführen möchten, weil sie ein gewisses Sicherheitsrisiko darstellt. Wenn Sie den Punkt angeben möchten, gehört er auf jeden Fall ans Ende von path, weil Ihnen ein Angreifer ansonsten ein Programm unterjubeln könnte, das denselben Namen trägt wie ein Systemprogramm und deshalb statt diesem ausgeführt würde, falls Sie sich im entsprechenden Verzeichnis befinden. Die Verzeichnisse in path werden nämlich der Reihe nach durchprobiert, bis ein Programm mit dem angeforderten Namen gefunden wird. Wenn es nirgendwo gefunden wird, erscheint eine Fehlermeldung.

Eingabevervollständigung

Alle modernen UNIX-Shells beherrschen die sehr bequeme Funktion der Eingabevervollständigung: Wenn Sie einen Befehl oder den Pfad einer Datei eintippen, können Sie zwischenzeitlich die (TAB)-Taste betätigen. Wenn der Befehl oder Pfad zu diesem Zeitpunkt bereits eindeutig ist, also nur noch eine Interpretation zulässt, wird er komplett ausgeschrieben. Bei Zweideutigkeiten wird er nur zum Teil ergänzt, und es ertönt ein Warnton. Das folgende Beispiel zeigt, wie Sie aus Ihrem Home-Verzeichnis schnell in das darunter liegende Verzeichnis dokumente wechseln können:

user@rechner: ~ # cd do(TAB)
user@rechner: ~/dokumente #

Angenommen, in Ihrem Home-Verzeichnis befindet sich ein weiteres Verzeichnis namens dokumente2. In diesem Fall wird durch (TAB) zwar das Wort dokumente ergänzt, aber die Shell weiß noch nicht, ob Sie wirklich das Verzeichnis dokumente meinten oder dokumente2. Deshalb wird der Warnton ausgegeben. Die csh geht sogar noch einen Schritt weiter: Sie zeigt eine Liste der möglichen Alternativen an und wiederholt darunter Ihre bisherige Eingabe.

Ähnlich komfortabel ist die History aller bereits eingegebenen Befehle. Mit den Pfeiltasten auf der Tastatur können Sie darin nach oben oder nach unten blättern; die früheren beziehungsweise späteren Befehle werden dadurch wieder angezeigt. Wenn der gewünschte Befehl erscheint, können Sie ihn ändern und anschließend mittels (Enter) ausführen.

Wie bereits erwähnt, sollten Sie nicht permanent als root arbeiten. Mitunter kann es aber vorkommen, dass Sie zwischendurch eine Konfigurationsaufgabe erledigen müssen, die nur dem Superuser gestattet ist. Es ist sicherlich keine sehr bequeme Lösung, sich mittels logout abzumelden und als root wieder anzumelden. Angenehmer ist zu diesem Zweck der Befehl su, der für »Superuser« steht: Wenn Sie als gewöhnlicher Benutzer su eingeben, werden Sie nach dem root-Passwort gefragt. Falls Sie es korrekt eingeben, können Sie nun einzelne Befehle als root ausführen. Mit exit erhalten Sie Ihre normale Shell zurück.

Pipes und Ein-/Ausgabeumleitung

Eine der praktischsten Eigenschaften der UNIX-Shells (die in abgespeckter Form auch unter Windows zur Verfügung steht) besteht in der Umleitung von Ein- und Ausgabe sowie ihrer Verkettung. Mit der Ausgabe eines Befehls können Sie mehr tun, als sie einfach auf dem Bildschirm darzustellen, und die Eingabe muss nicht unbedingt von der Tastatur stammen: Sie können die Eingabe für einen Befehl aus einer Datei holen, die Ausgabe in eine Datei schreiben und schließlich die Ausgabe des einen Befehls als Eingabe für den nächsten verwenden. Auf diese Weise können Sie die einfachen Bausteine der Systembefehle zur Erledigung komplexer Aufgaben einsetzen.

Ausgabeumleitung

Der Befehl ls dient beispielsweise dazu, den Inhalt des aktuellen Verzeichnisses auszugeben. Wenn Sie diesen Inhalt lieber in eine andere Datei schreiben möchten, können Sie folgendermaßen vorgehen:

$ ls > inhalt.txt

In diesem einfachen Beispiel wird der Inhalt des aktuellen Verzeichnisses nicht auf den Bildschirm geschrieben, sondern in die Datei inhalt.txt. Diese Datei wird automatisch neu angelegt, falls sie noch nicht existierte, ansonsten wird sie überschrieben. Wenn Sie die Ausgabe eines Befehls lieber an eine bestehende Datei anhängen möchten, können Sie statt des einen >-Zeichens zwei verwenden:

$ ls >> inhalt.txt

Eingabeumleitung

Auf ähnliche Weise können Sie die Eingabe für einen Befehl aus einer Datei lesen. Zum Beispiel gibt der Befehl grep alle Zeilen eines eingegebenen Textes zurück, in dem ein Suchmuster vorkommt. Wenn Sie alle Zeilen der Datei inhalt.txt suchen möchten, die mindestens ein a enthalten, funktioniert das folgendermaßen:

$ grep a < inhalt.txt

Eine interessante Variante der Eingabeumleitung ist das HIER-Dokument. Diese Art der Eingabe stammt nicht aus einer Datei, sondern nimmt alle eingegebenen Zeilen bis zu einer speziellen Markierung entgegen. Das folgende Beispiel sucht mittels grep nach allen Zeilen in der Eingabe, die mindestens ein Leerzeichen enthalten:

% grep \s << ENDE
> Keins
> Ein Leerzeichen
> Zwei  Leerzeichen
> ENDE

Die Ausgabe dieser eingegebenen Sequenz lautet folgendermaßen:

Ein Leerzeichen
Zwei  Leerzeichen

Die Markierung ENDE bildet das Ende der Eingabe. Das Muster \s steht übrigens für beliebigen Whitespace (Leerzeichen, Tabulatoren und Zeilenumbrüche). Die grep-Suchmuster werden im nächsten Unterabschnitt behandelt.

Pipes

Eine weitere Variante der Ein- und Ausgabeumleitung ist die so genannte Pipe (englisch für Röhre). Es geht darum, die Ausgabe eines Befehls als Eingabe für den nächsten zu verwenden. Eine der gängigsten Kombinationen ist die Weiterleitung der umfangreichen Ausgabe bestimmter Befehle an einen Pager – ein Programm, das Inhalte seitenweise ausgibt. Der ursprüngliche UNIX-Pager wird more genannt, die erheblich mächtigere Open-Source-Alternative heißt less (Anspielung auf »less is more«).

Angenommen, der Inhalt des aktuellen Verzeichnisses ist länger als die Anzahl der Zeilen Ihres Terminals. In diesem Fall können Sie diesen Inhalt an less weiterleiten:

$ ls |less

Das Pipe-Zeichen | wird auf einem PC mit der Tastenkombination (ALTGR) + (<) erzeugt; auf dem Mac ist es (ALT) + (7).

Das Programm less kann auch den Inhalt einer Datei anzeigen und ist auf diese Weise ein komfortabler Ersatz für cat. Im Grunde ist ls |less also eine Kurzfassung für die beiden folgenden Einzelbefehle:

$ ls > temp.txt
$ less temp.txt

Auf ähnliche Weise lässt sich jede Pipe durch zwei Einzelbefehle ersetzen, wobei der zweite Befehl oft nicht direkt mit einem Dateinamen als Argument aufgerufen wird, sondern mit einer Eingabeumleitung.

Eine Pipe hat allerdings zwei wichtige Vorteile gegenüber der Verwendung von Einzelbefehlen: Erstens muss keine Zwischendatei erzeugt werden, und zweitens fängt der zweite Befehl einer Pipe bereits an zu arbeiten, wenn er die erste Zeile aus der Ausgabe des ersten erhält.

Eine weitere verbreitete Anwendung für Pipes besteht in der unmittelbaren Filterung einer Ausgabe mit Hilfe von grep. Das folgende Beispiel gibt nur diejenigen Dateien im aktuellen Verzeichnis aus, die die Zeichenfolge txt enthalten:

$ ls |grep txt

Galileo Computing

4.3.2 Wichtige Systembefehle  downtop

In Linux und andere UNIX-Varianten wurden Unmengen von Systemprogrammen eingebaut. Es ist vollkommen aussichtslos, an dieser Stelle auch nur die Hälfte zu behandeln. In diesem Unterabschnitt lernen Sie stattdessen die wichtigsten Kommandos mit ihren gängigsten Optionen kennen. Weitere Linux- beziehungsweise UNIX-Befehle werden in reinen UNIX-Büchern behandelt. Einige empfehlenswerte Titel zu diesem Thema werden in Anhang B, Kommentiertes Literaturverzeichnis, genannt.

Arbeiten mit Dateien und Verzeichnissen

Einige der grundlegendsten Befehle in einem Betriebssystem dienen der Manipulation von Dateien und Verzeichnissen. Wenn Sie eine Übersicht über die Grundbegriffe eines Linux-Dateisystems benötigen, lesen Sie bitte weiter oben den Unterabschnitt Das virtuelle UNIX-Dateisystem.

Dateinamenmuster

Alle UNIX-Shells bieten die Möglichkeit, Datei- und Verzeichnisnamen in vielen Befehlen durch Muster anzugeben, die auf mehrere Dateien passen. In diesen Mustern gibt es die folgenden wichtigen Sonderzeichen (die in Dateinamen verboten oder zumindest problematisch sind):

gp  Das * ersetzt beliebig viele Zeichen. h*o steht beispielsweise für hallo, hello oder ho.
gp  Das ? steht für genau ein Zeichen. Zum Beispiel bezeichnet te?t sowohl test als auch text.
gp  Mehrere Zeichen in eckigen Klammern wie [abc] bedeuten, dass genau eines dieser Zeichen gemeint ist. Durch einen Bindestrich können Bereiche wie a-z gebildet werden; mehrere Listen werden einfach hintereinander geschrieben. Beispielsweise bedeutet die Liste [a-zA-Z0-9], dass alle Kleinbuchstaben, alle Großbuchstaben und alle Ziffern zulässig sind.
gp  Ein Ausrufezeichen vor der Liste in den eckigen Klammern bedeutet, dass jedes Zeichen außer dieser Liste zulässig ist. [!Bb] bedeutet etwa, dass auf keinen Fall ein B erlaubt ist – weder ein groß- noch ein kleingeschriebenes.
gp  Eine durch Kommata getrennte Liste von Zeichenketten in geschweiften Klammern bedeutet, dass eine dieser Zeichenketten erwartet wird. Zum Beispiel bedeutet {info,hinweis,hilfe}.txt, dass eine der drei Dateien info.txt, hilfe.txt oder hinweis.txt gesucht wird.
gp  Durch ein Pipe-Zeichen (|) können Sie schließlich mehrere Muster angeben, die durch »Oder« verknüpft werden – trifft eines dieser Muster auf eine Datei zu, dann passt sie zum Gesamtmuster. Der Ausdruck b*|info* bedeutet beispielsweise: alle Dateien die mit »b« oder mit »info« beginnen.

Beachten Sie bitte, dass die »Dateierweiterung« (die Abkürzung hinter dem letzten Punkt wie etwa txt) unter UNIX ein normaler Bestandteil des Dateinamens ist, falls Sie die Dateimuster unter Windows kennen sollten. In einem UNIX-Befehl steht * für alle Dateien. Unter Windows ist ein * dagegen nur der Platzhalter für Dateien ohne Erweiterung, während *.* dort für alle Dateien steht.

Diese einfachen Suchmuster für Dateien werden übrigens nicht mit dem bereits erwähnten Befehl grep verwendet. Die dort zulässigen Muster bieten noch erheblich mehr Möglichkeiten.

Die folgende Übersicht zeigt die gängigsten Linux-Datei- und Verzeichnisbefehle mit ihren wichtigsten Optionen:

gp  cp (Kurzfassung für copy) kopiert eine oder mehrere Dateien an den angegebenen Ort. Die Syntax ist grundsätzlich folgende:
cp Quelle Ziel
    Die Quelle kann eine einzelne Datei oder ein Muster sein, Sie können alternativ auch einen Pfad angeben. Das Ziel ist entweder ein einzelner Dateiname (falls Sie nur eine Datei kopieren) oder ein Verzeichnis, falls im Zielordner bereits ein Verzeichnis mit diesem Namen existiert oder falls Sie als Quelle keine einzelne Datei, sondern ein Muster angegeben haben. Das folgende Beispiel kopiert die Datei hallo.txt in eine neue Datei namens hi.txt:
       
cp hallo.txt hi.txt
    Das nächste Beispiel kopiert alle Dateien aus dem Verzeichnis briefe in das Verzeichnis dokumente, das im gleichen Verzeichnis liegt wie briefe:
       
$ cp briefe/* dokumente
gp  mv (move) dient dazu, Dateien umzubenennen oder in ein anderes Verzeichnis zu verschieben. Die Syntax lautet folgendermaßen:
mv Quelle Ziel
    Die Quelle ist wieder eine einzelne Datei beziehungsweise ein Muster, das Ziel ist ein völlig neuer Name oder der Name eines bestehenden Verzeichnisses.
       
    Die folgende Anweisung benennt die Datei vorher.txt in nachher.txt um:
       
$ mv vorher.txt nachher.txt
    Wenn Sie als Quelle ein Muster statt einer einzelnen Datei angeben, muss das Ziel ein bestehendes Verzeichnis sein – Sie können nicht mehrere Dateien auf einmal umbenennen, sondern nur verschieben.
       
gp  rm (remove) löscht die angegebene Datei, und zwar endgültig. Eine Einrichtung wie der Windows- oder Mac-Papierkorb ist nicht vorgesehen – lediglich einzelne Desktop-Manager wie KDE oder GNOME sind damit ausgestattet.
    Das folgende Beispiel löscht alle Dateien aus dem aktuellen Verzeichnis, deren Name nicht mit a beginnt:
       
$ rm [!a]*
    rm löscht Dateien nur im aktuellen Verzeichnis, aber nicht in dessen Unterverzeichnissen. Wenn Sie auch die Inhalte der Unterverzeichnisse löschen möchten, müssen Sie die Option -r (recurse) einsetzen. Noch effizienter (und gefährlicher!) ist die zusätzliche Option -f (force), die das Löschen schreibgeschützter Dateien erzwingt. Der folgende Befehl löscht alle Dateien im aktuellen Verzeichnis und alle Unterverzeichnisse und sollte nur mit äußerster Vorsicht eingesetzt werden:
       
$ rm -rf *
    Wie hier können Sie übrigens auch bei den meisten anderen Befehlen mehrere Optionen hinter einem einzelnen Minuszeichen platzieren.
       
    Beachten Sie, dass es sich beim Löschen, Umbenennen oder Verschieben um Schreibzugriffe handelt, die Sie nur ausführen dürfen, wenn Sie Schreibrechte für die jeweiligen Verzeichnisse und Dateien besitzen.
       
gp  ls (list) zeigt den Inhalt des aktuellen oder des angegebenen Verzeichnisses an, das heißt alle enthaltenen Dateien und Unterverzeichnisse. Wenn Sie ein Muster angeben, wird es als Filter verwendet. Existieren Dateien, deren Namen zu diesem Muster passen, dann werden nur diese angezeigt. Andernfalls werden zusätzlich zum aktuellen Verzeichnis auch die Inhalte der Unterverzeichnisse angezeigt, auf deren Namen das Muster passt.
    Die folgende Anweisung zeigt beispielsweise alle Dateien an, die mit b beginnen – falls es keine gibt, werden alternativ die Inhalte aller Verzeichnisse angezeigt, die mit b anfangen:
       
$ ls b*
    Eine wichtige Option dieses Befehls ist -l (long), die statt der einfachen Namen ausführliche Informationen über jeden Verzeichniseintrag ausgibt (siehe Unterabschnitt Das virtuelle UNIX-Dateisystem). Auch -a (all) wird relativ häufig verwendet, weil es versteckte Dateien und Verzeichnisse einblendet, das heißt diejenigen, deren Namen mit einem Punkt beginnen.
       
gp  pwd (print working directory) gibt den vollständigen Pfad des aktuellen Arbeitsverzeichnisses an. Dies ist beispielsweise nützlich, um den tatsächlichen Pfad des eigenen Home-Verzeichnisses zu ermitteln, der im Prompt durch ~ abgekürzt wird.
gp  cd (change directory) wechselt in das angegebene Arbeitsverzeichnis. Sie können den gewünschten Pfad entweder relativ zum aktuellen Arbeitsverzeichnis oder absolut durch einen vorangestellten / angeben. Die folgende Anweisung wechselt beispielsweise aus /home/user/dokumente in das Verzeichnis /home/user/briefe:
user@rechner: ~/dokumente $ cd ../briefe
user@rechner: ~/briefe $
    Das folgende Beispiel wechselt dagegen mit Hilfe einer absoluten Angabe von /home/user/dokumente nach /etc:
       
user@rechner: ~/dokumente $ cd /etc
user@rechner: /etc $
gp  mkdir legt ein neues Verzeichnis mit dem angegebenen Pfad an. So richtet etwa die folgende Anweisung unterhalb des aktuellen Verzeichnisses das neue Verzeichnis test ein:
$ mkdir test
    Beachten Sie, dass bei der Angabe eines mehrgliedrigen Pfads alle Verzeichnisse außer dem hintersten bereits existieren müssen. Die Option -p (parents) erzeugt dagegen auch verschachtelte Pfade. Das folgende Beispiel erzeugt im aktuellen Verzeichnis die ineinander verschachtelten Verzeichnisse neu, texte, briefe:
       
$ mkdir -p neu/texte/briefe
gp  rmdir (remove directory) löscht Verzeichnisse, allerdings nur leere. Zum Löschen verschachtelter Verzeichnisbäume wird rm mit der Option -r verwendet.
gp  chmod (change mode) ändert die Zugriffsrechte für Dateien und Verzeichnisse. Das Konzept der Dateizugriffsrechte wurde bereits weiter oben angesprochen. Es gibt grundsätzlich zwei Möglichkeiten, Rechte für die gewünschten Dateien oder Verzeichnisse anzugeben: symbolisch oder numerisch.
    Die symbolische Schreibweise verwendet zunächst einen Buchstaben für die Benutzerart, für die ein Recht geändert werden soll: u für den Eigentümer (user), g für die Gruppe (group), o für andere Benutzer (others) und a für alle genannten auf einmal. Darauf folgt ein +, um ein bestimmtes Recht einzuräumen, ein –, um es zu entfernen, oder ein =, um die angegebenen Rechte zu setzen und die anderen zu entfernen. Zum Schluss werden die eigentlichen Rechte selbst angegeben: r für Lesen (read), w für Schreiben (write) und x für Ausführen (execute).
       
    Die folgende Anweisung erlaubt beispielsweise allen Benutzern das Lesen der Datei inhalt.txt:
       
$ chmod a+r inhalt.txt
    Numerische Angaben setzen dagegen den gesamten Rechteblock für die Datei auf einmal: Die Stellen einer dreistelligen Oktalzahl (gekennzeichnet durch eine vorangestellte Null) geben von links nach rechts die Zugriffsrechte für den Besitzer, die Gruppe und die anderen an. Der Wert jeder Stelle ist dabei die Summe der Rechte, die gewährt werden: 4 für Lesen, 2 für Schreiben und 1 für Ausführen.
       
    Das folgende Beispiel erlaubt dem Eigentümer das Lesen, Schreiben und Ausführen, allen anderen nur das Lesen und Ausführen des Verzeichnisses test:
       
 $ chmod 0755 test
    Die Option -R (großgeschrieben!) führt die gewünschte Änderung nicht nur im aktuellen Verzeichnis durch, sondern auch in allen Unterverzeichnissen.
       
gp  chown weist der angegebenen Datei einen neuen Eigentümer zu. Die Syntax des Befehls ist folgende:
chown User Datei(-muster)
    Der User muss ein existierender Benutzer sein; außerdem können Sie diese Änderung nur durchführen, wenn Sie selbst Schreibrechte an dieser Datei haben. Das folgende Beispiel teilt die Datei info dem Benutzer user zu:
       
$ chown user info
gp  chgrp ändert die Gruppe, zu der eine Datei gehört, und funktioniert genau wie chown.

Textanzeige und -manipulation

Viele der Arbeiten, die Sie im Betriebssystem durchführen, haben in irgendeiner Weise mit der Manipulation von Textdateien zu tun. In diesem Unterabschnitt werden einige der wichtigsten Befehle vorgestellt, die Ihnen die Arbeit mit solchen Dateien ermöglichen.

gp  cat (catalog) ist der wichtigste aller Textdatei-Befehle: Er zeigt einfach den Inhalt der Datei an. Wenn Sie durch Leerzeichen getrennt eine Liste von Dateien angeben (oder ein Muster), werden die Inhalte aller genannten Dateien hintereinander angezeigt. Dies ist übrigens eine einfache Möglichkeit, mehrere Textdateien in eine einzige zusammenzukopieren. Die folgende Anweisung schreibt die Dateien teil1 und teil2 in eine neue Datei namens kapitel:
$ cat teil1 teil2 > kapitel
    Sie können cat mit Hilfe der Ausgabeumleitung und mit einem HIER-Dokument sogar als einfachen Editor für eine neue Textdatei verwenden – allerdings können Sie die einzelnen Zeilen nach dem Abschluss durch (Enter) nicht mehr ändern. Die folgende Anweisung startet die Eingabe der Datei neu.txt, ENDE schließt sie ab:
       
$ cat > neu.txt << ENDE
> Neuer Text
> Noch mehr Text
> ENDE
gp  less ist die erweiterte GNU-Version des UNIX-Pagers more. Das Programm gibt seine Eingabedaten bildschirmseitenweise aus. Das folgende Beispiel gibt die Datei roman auf diese Weise aus:
$ less roman
    Wenn das untere Ende des Bildschirms beziehungsweise des Terminalfensters erreicht ist, erscheint ein entsprechender Hinweis. An dieser Stelle haben Sie verschiedene Möglichkeiten, unter anderem folgende:
       
Die (Leertaste) blättert eine ganze Bildschirmseite weiter. (Enter) blättert nur eine einzige Zeile weiter. (B) blättert eine Bildschirmseite zurück. (Q) beendet less.
    Statt eine oder mehrere Dateien als Parameter anzugeben, wird less auch häufig über eine Pipe zur seitenweisen Ausgabe der Ergebnisse anderer Befehle eingesetzt. Das folgende Beispiel gibt den Inhalt der ausführlichen Verzeichnisanzeige ls -l seitenweise aus:
       
$ ls -l |less
gp  grep (general regular expression print) sucht in Dateien oder in seiner Eingabe nach Mustern und gibt nur diejenigen Zeilen aus, die das entsprechende Muster enthalten. Bei den verwendeten Mustern handelt es sich um so genannte reguläre Ausdrücke (regular expressions). Diese mächtige Syntax für die Formulierung von Suchmustern wird in zahlreichen Programmiersprachen, Editoren und Tools verwendet. In Kapitel 6, Konzepte der Programmierung, werden die RegExp-Optionen der Programmiersprache Perl ausführlich vorgestellt.
    Wenn Sie beispielsweise in der Datei test nach Zeilen suchen möchten, die das Wort hallo enthalten, funktioniert dies folgendermaßen:
       
$ grep hallo test
    Alternativ wird grep häufig über eine Pipe als Filter eingesetzt. Wenn Sie zum Beispiel alle Dateien im aktuellen Verzeichnis angezeigt haben möchten, deren Name mit a beginnt, können Sie Folgendes eingeben:
       
$ ls |grep ^a
    Beachten Sie, dass es bei den Mustern gewisse Unterschiede zu den Dateimustern der meisten Befehle gibt: RegExp-Muster sind erheblich vielseitiger als Letztere. Tabelle 4.1 zeigt eine Übersicht über die wichtigsten von ihnen.
       

Tabelle 4.1   Die wichtigsten RegExp-Muster für grep

Muster Erläuterung
abc der Text abc
[abc] Eines der Zeichen a, b oder c
[a-z] Eines der Zeichen von a bis z
[a-mz0-9] Eines der Zeichen von a bis m oder z oder eine der Ziffern 0 bis 9
[^abc] Keines der angegebenen Zeichen
. Ein beliebiges Zeichen
? Das davor stehende Muster oder nicht
* Das davor stehende Muster beliebig oft
+ Das davor stehende Muster einmal oder öfter
{2} Das davor stehende Muster genau zweimal
{2, 5} Das davor stehende Muster mindestens zweimal, höchstens fünfmal
^ Zeilenanfang
$ Zeilenende

    Wenn Sie irgendeins der Zeichen aus der Tabelle als Literal benötigen, also als tatsächliches Zeichen in einem Text, müssen Sie ihm einen Backslash (\) voranstellen. \+ steht beispielsweise für ein Pluszeichen. Derartige Konstrukte werden in der Shell und in vielen Programmiersprachen als Escape-Sequenzen bezeichnet.
       
    Angenommen, Sie suchen in einem Text nach deutschen Postleitzahlen. Das passende Muster lautet [0-9]{5}, weil genau fünf Ziffern (Zeichen zwischen 0 und 9) benötigt werden. Wenn Sie sicher sind, dass die Postleitzahl jeweils am Anfang der Zeile steht, können Sie präziser ^[0-9]{5} schreiben.
       
    Wichtig ist, dass * und ? nicht dasselbe bedeuten wie bei den Dateimustern: Sie beziehen sich stets auf das links daneben stehende Muster und geben an, wie oft es vorkommen darf. Das folgende Beispiel zeigt, wie Sie in der Datei adressen.txt nach Personen suchen können, die »Meier« heißen, und zwar in allen erdenklichen Schreibweisen:
       
grep M[ae][iy]e?r adressen.txt
    Der reguläre Ausdruck bedeutet: Zuerst kommt ein M, dann ein a oder e, anschließend ein i oder y, dann ein e oder auch nicht und zum Schluss ein r. Dies findet die Varianten »Maier«, »Mayer«, »Mayr«, »Meier« und »Meyer« sowie drei weitere, die aber wohl nicht häufig in einer Adressliste auftauchen (»Mair«, »Meir« und »Meyr«).
       
gp  diff vergleicht die Inhalte zweier Textinhalte miteinander. Als Argumente werden die Namen der beiden Dateien genannt; die Ausgabe besteht aus den Zeilen, die in den beiden Dateien unterschiedlich sind. Dies ermöglicht die Analyse der Unterschiede zwischen verschiedenen Versionen eines Dokuments. Außerdem können Sie eine diff-Datei als Update für eine Datei auf eine neuere Version verbreiten. Mit dem Kommando patch kann ein Benutzer sie dann auf die alte Datei anwenden.
gp  wc (word count) zählt die Zeichen, Wörter und Zeilen in einer Textdatei. Sie können den Befehl auch über eine Pipe auf eine beliebige Ausgabe anwenden.

Befehle zur Systemverwaltung

Die Befehle in diesem Unterabschnitt sind wichtig für die Wartung und Verwaltung des Betriebssystems.

gp  mount wurde bereits weiter oben angesprochen. Der Befehl hängt einen Datenträger in den Verzeichnisbaum ein. Anders können Datenträger nicht verwendet werden. Die grundlegende Syntax lautet folgendermaßen:
mount Gerätedatei Verzeichnis
    Das angegebene Verzeichnis muss existieren und leer sein – notfalls müssen Sie mittels mkdir ein neues erzeugen. Die wichtigsten Gerätedateien – alle im Verzeichnis /dev – sind folgende:
       
hda bis hdd sind die vier EIDE-Geräte in der Reihenfolge Primary Master, Primary Slave, Secondary Master und Secondary Slave. Falls es sich um Festplatten handelt, muss zusätzlich die Nummer der gewünschten Partition angegeben werden (hda1 ist beispielsweise die erste Partition der ersten Festplatte). cdrom ist eine alternative Methode, das CD-ROM-Laufwerk anzusprechen. sda, sdb und so weiter sind die entsprechenden SCSI-Festplatten in der Reihenfolge ihrer SCSI-IDs. fd0 ist das Diskettenlaufwerk. Theoretisch steht fd1 für das zweite, allerdings benutzt kaum noch jemand zwei Diskettenlaufwerke.
    Das folgende Beispiel bindet die aktuell im Diskettenlaufwerk befindliche Diskette als Verzeichnis /disk in das Dateisystem ein:
       
$ mount /dev/fd0 /disk
    Die Datei /etc/fstab enthält übrigens eine Liste derjenigen Laufwerke, die beim Systemstart automatisch gemountet werden.
       
gp  umount entfernt die Verknüpfung mit einem bestimmten Laufwerk wieder. Vorher wird noch dafür gesorgt, dass alle Daten geschrieben werden, die eigentlich auf dieses Laufwerk gehören, sich aber zurzeit im RAM-Cache befinden. Vor dem Entfernen von Wechseldatenträgern sollten Sie umount auf jeden Fall aufrufen.
    Als Argument für den Befehl kann sowohl das Verzeichnis angegeben werden, in dem der gewünschte Dateinträger gemountet ist, als auch die Gerätedatei selbst.
       
gp  du (»disk usage«) gibt in Kilobyte an, wie viel Speicher in den angegebenen Verzeichnissen noch verfügbar ist. Das hängt natürlich jeweils davon ab, auf welchen physikalischen Laufwerken sich die einzelnen Verzeichnisse befinden.
    Die Option -c gibt zusätzlich eine Gesamtsumme für die verschiedenen Verzeichnisse aus, während -h (»human-readable«) das Ganze in angenehmerer Form angibt.
       
gp  fsck (file system check) überprüft den angegebenen Datenträger auf Fehler. Als Argument muss eine Gerätedatei angegeben werden. Vor jedem Reparaturversuch wird nachgefragt.
    Beim Systemstart wird fsck in regelmäßigen Abständen (zum Beispiel jedes zwanzigste Mal) aufgerufen, um eine gelegentliche Prüfung zu gewährleisten. Außerdem wird es auf jeden Fall nach einem Systemabsturz gestartet.
       
    Moderne Linux-Dateisysteme wie ext3 (das Extended File System 3) oder die Alternative reiserfs besitzen eine so genannte Journaling-Funktionalität: Es wird ständig über Änderungen an Dateien und Verzeichnissen Buch geführt; nach einem Absturz kann daraus der letzte Zustand des Dateisystems rekonstruiert werden.
       
gp  mkfs (make file system) dient dem Formatieren eines Datenträgers mit einem bestimmten Dateisystem. Der gewünschte Dateisystemtyp kann mit Hilfe der Option -t angegeben werden. Beispiele sind etwa das traditionelle Linux-Dateisystem ext2 sowie die neueren Typen ext3 oder reiserfs. Der Datenträger wird als Gerätedatei oder über sein Mount-Verzeichnis angegeben.
    Im Grunde handelt es sich um einen Starter für die konkreten Formatierprogramme der einzelnen Dateisysteme wie mke2fs, mke3fs, mkreiserfs oder mkisofs (Letzteres erzeugt ISO-9660-Dateisysteme, die für CD-ROMs verwendet werden).
       
gp  date dient der Ausgabe beziehungsweise der Änderung von Systemdatum und –uhrzeit. Wie Sie in Kapitel 3, Die Hardware, erfahren haben, enthalten PC-Mainboards eine batteriegepufferte Uhr.
    Wenn Sie Datum und Uhrzeit einfach lesen möchten, genügt die Eingabe von date. Alternativ können Sie hinter einem Pluszeichen ein Format angeben, in dem eine Reihe von Formatangaben für die einzelnen Komponenten von Datum und Uhrzeit stehen – alle diese Angaben beginnen mit einem Prozentzeichen. Die wichtigsten sind in Tabelle 4.2 aufgelistet.
       

Tabelle 4.2   Die wichtigsten Formatangaben für den date-Befehl

Formatangabe Bedeutung
%d Tag im Monat (01 bis 31)
%m numerischer Monat
%y zweistellige Jahreszahl
%Y vierstellige Jahreszahl
%a Kurzfassung des Wochentags (zum Beispiel Tue)
%A Ausgeschriebener Wochentag (etwa Tuesday)
%H Stunden im 24-Stunden-Format
%I Stunden im 12-Stunden-Format
%p AM und PM für das Zwölf-Stunden-Format
%M Minuten
%S Sekunden

    Sehen Sie sich als Beispiel den folgenden Befehl an:
       
$ date +"Es ist jetzt %H:%M:%S Uhr."
    Die Ausgabe sieht etwa folgendermaßen aus:
       
Es ist jetzt 17:52:31.
    Sie können die Bestandteile von Datum und Uhrzeit also in einem beliebigen Ausgabetext verwenden.
       
    Wenn Sie Datum und Uhrzeit ändern möchten, müssen Sie statt des Formats eine Zeitangabe hinzufügen. Eine solche Angabe hat das folgende Format:
       
MMDDhhmm[YY]YY[.ss]
    Es werden also nacheinander der zweistellige Monat, der zweistellige Tag, die zweistellige Stunde im 24-Stunden-Format, die zweistellige Minute, das zwei- oder vierstellige Jahr und optional die durch einen Punkt abgetrennten zweistelligen Sekunden angegeben. Das folgende Beispiel setzt Datum und Uhrzeit auf den 09. Mai 2003, 16:40 Uhr:
       
$ date 050916402003
gp  useradd erstellt ein neues Benutzerkonto. Standardmäßig ist das Home-Verzeichnis dieses Benutzers /home/Username. Mit Hilfe der Option -d Pfad können Sie ein anderes Verzeichnis angeben. In jedem Fall sorgt die Option -m dafür, dass das Home-Verzeichnis neu angelegt ist, falls es nicht existiert.
    Die numerische User-ID wird standardmäßig automatisch eingestellt; es wird der erste freie Wert größer oder gleich 100 gewählt. UIDs unter 100 sind für Systemkonten vorgesehen, das heißt für Benutzerkonten, die für die Ausführung von System- und Serverdiensten verwendet werden; die 0 steht für root. Wenn Sie die UID manuell angeben möchten, funktioniert das mit Hilfe von -u UID. Wenn die angegebene User-ID bereits existiert, erscheint eine Fehlermeldung, es sei denn, Sie geben zusätzlich die Option -o an, die den bisherigen User mit dieser UID überschreibt.
       
    Mit Hilfe der Option -g Gruppe wird die Gruppe angegeben, der der Benutzer standardmäßig angehören soll – ohne Angabe wird automatisch users eingestellt. Mittels -G Gruppe1,Gruppe2,... können Sie eine durch Kommata getrennte Liste weiterer Gruppen angeben, denen der Benutzer zusätzlich angehören soll. Diese Liste darf keine Leerzeichen enthalten.
       
    Die Option -s Pfad gibt die Shell an, die dem User präsentiert werden soll; der Standardwert ist /bin/bash.
       
    Das folgende Beispiel zeigt, wie das Verzeichnis /home/neuer angelegt wird, und wie Sie anschließend den Benutzer neuer mit der Login-Shell /bin/tcsh einrichten können:
       
# mkdir /home/neuer
# useradd -g users -s /bin/tcsh neuer
    Es gibt übrigens keinen Befehl, um einen Benutzer wieder zu löschen. Dazu ist das manuelle Löschen der entsprechenden Zeile aus der Datei /etc/passwd erforderlich.
       
gp  groupadd fügt eine neue Gruppe hinzu. Die einzige Option ist -g GID, mit deren Hilfe Sie die (ansonsten automatisch vergebene) Group-ID manuell einstellen können. Wie bei useradd dient in diesem Zusammenhang die Option -o dazu, eine eventuell bestehende Gruppe mit derselben Group-ID zu überschreiben.
gp  passwd dient zum Ändern von Passwörtern. Wenn Sie den Befehl ohne Argument aufrufen, dient er dem Ändern Ihres eigenen Passworts: Sie müssen zunächst Ihr altes und anschließend zweimal hintereinander das neue Passwort eingeben. Die Eingabe wird jeweils nicht angezeigt.
    Eine weitere Möglichkeit, die root vorbehalten ist, besteht darin, passwd Username aufzurufen, um das Passwort eines anderen Benutzers zu ändern. Sie müssen das alte Passwort dieses Users nicht kennen, sondern werden nur aufgefordert, zweimal ein neues einzugeben.
       
    Beachten Sie die weiter oben gegebenen Informationen über sichere Passwörter. Der Befehl passwd gibt zwar bei vielen zu einfachen Passwörtern die Warnmeldung »Bad Password. Too simple« aus, akzeptiert das Passwort aber trotzdem.
       
gp  ps gibt eine Tabelle aller laufenden Prozesse aus. Wenn Sie keine Parameter angeben, werden nur die Prozesse des aktuellen Terminals angezeigt. Für eine vollständige Liste aller Prozesse müssen Sie ps aux verwenden. Ein Beispiel der Ausgabe dieses Befehls sehen Sie in Abbildung 4.1.

Abbildung 4.1   Die Ausgabe von ps aux auf dem Linux-Rechner »Extreme«.

Abbildung
Hier klicken, um das Bild zu Vergrößern


    Die wichtigste Information, die Sie der Tabelle entnehmen können, sind die PIDs der einzelnen Prozesse, weil Sie sie verwenden können, um einem Prozess mit Hilfe des Befehls kill ein Signal zu senden.
       
    Die meisten Prozesse, die Sie in der Liste sehen, sind keine Programme, die Sie manuell gestartet haben. Viele von ihnen laufen unbemerkt im Hintergrund und stellen ihre Dienste bestimmten Anwendungen zur Verfügung. Diese Prozesse werden Daemons genannt, ihre Dateinamen enden meist auf d: Beispielsweise ist syslogd der Protokoll-Daemon, der über die wichtigsten Ereignisse Buch führt.
       
    Viele der Meldungen des Syslog-Daemons werden in verschiedene Dateien im Verzeichnis /var/log geschrieben, die wichtigste Logdatei ist /var/log/messages. Das Verhalten von Syslog ist individuell konfigurierbar: Sie können die verschiedenen Meldungen je nach Bedarf ignorieren, in Dateien schreiben lassen oder aber eine automatische Benachrichtigung per E-Mail veranlassen.
       
    Eine interessante Variante von ps ist pstree: Statt ausführlicher Informationen über die einzelnen Prozesse werden nur ihre Namen angezeigt, dafür aber in einem Baumdiagramm. Auf diese Weise können Sie die Hierarchie von Elternprozessen und ihren Kindern ermitteln.
       
gp  kill dient dazu, einem Prozess ein Signal zu senden. Das gewünschte Signal wird dabei hinter der Option -s angegeben; entweder numerisch oder mit seinem Namen. Wichtige Signale sind beispielsweise TERM zum regulären Beenden, KILL für einen erzwungenen Abbruch oder INT für eine Unterbrechung (Interrupt). Wenn Sie kein Signal angeben, wird automatisch TERM gesendet. Der Befehl kill -l gibt eine Liste sämtlicher Signale aus, die Ihre Version von kill unterstützt.
    Der Prozess wird durch seine numerische PID angegeben, wie sie von ps zurückgegeben wurde. Als gewöhnlicher Benutzer können Sie nur Prozesse beenden, die unter Ihrer User-ID laufen, für alle anderen benötigen Sie root-Rechte.
       
gp  shutdown fährt das Betriebssystem herunter oder startet es neu. Für das Herunterfahren wird die Option -h (halt) verwendet, für einen Neustart -r (restart). Dahinter wird angegeben, wann die Aktion durchgeführt werden soll. Dafür stehen drei mögliche Optionen zur Verfügung:
als Uhrzeit im Format hh:mm, zum Beispiel 13:45 als Anzahl von Minuten in der Schreibweise +m, etwa +5 now (jetzt sofort)
    Für den Befehl benötigen Sie übrigens root-Rechte. Das folgende Beispiel fährt den Rechner sofort herunter:
       
$ shutdown -h now

Shell-Skripte

Eine besondere Eigenschaft von UNIX-Shells sind die eingebauten Befehle, mit deren Hilfe sich bestimmte Aufgaben automatisieren lassen. Im Grunde ist dieser Unterabschnitt ein Vorgriff auf das Thema des nächsten Kapitels, die Programmierung. Dennoch sollen hier einige Worte zum Shell-Scripting gesagt werden. Wenn Sie noch nie programmiert haben, sollten Sie sich allerdings zuerst Kapitel 5, Grundlagen der Programmierung, vornehmen. Konzepte, die an dieser Stelle nur ganz kurz und knapp angesprochen werden können, werden dort ausführlich erläutert.

Formale Shell–Skript-Eigenschaften

Ein Shell-Skript ist im Grunde eine einfache Textdatei, die eine Abfolge von Shell- und Systembefehlen enthält. Diese Befehle werden bei Aufruf dieses Skripts nacheinander abgearbeitet. Für gewöhnlich erhalten Shell-Skripte die Dateiendung .sh. Der Name spielt aber eigentlich keine Rolle, wichtig ist, dass Sie das Skript mittels chmod ausführbar machen.

Wie jedes Konsolenprogramm kann ein Shell-Skript Kommandozeilenparameter entgegennehmen. Hinter dem Namen des Skripts kann also beim Aufruf eine durch Leerzeichen getrennte Liste von Zeichenfolgen stehen, die das Skript verarbeiten kann.

Die erste Zeile eines Shell-Skripts enthält die so genannte Shebang-Angabe – ein Kurzwort für die Zeichen # (sharp) und ! (bang), mit denen sie beginnt. An dieser Stelle steht, welche Shell dieses Skript ausführen soll, da sich verschiedene Shells in ihrer Skript-Syntax voneinander unterscheiden. Hier sehen Sie ein Beispiel für eine Shebang-Zeile, das zugehörige Skript wurde für die bash geschrieben:

#!/bin/bash

Nach dieser Zeile können Sie einen Befehl nach dem anderen untereinander schreiben. Alle bisher besprochenen Systembefehle sind zulässig, darüber hinaus werden einige spezielle programmiertechnische Erweiterungen verwendet.

Die wichtigsten zusätzlichen Befehle und Elemente für Shell-Skripte sind folgende:

gp  Fallentscheidungen. Anweisungen, die zwischen if Bedingung then und fi stehen, werden nur ausgeführt, wenn die Bedingung zutrifft. In der Regel besteht die Bedingung aus dem Vergleich zwischen einer Variablen oder einem Dateinamen und einem bestimmten Wert – ein solcher Ausdruck steht bei Textvergleichen in eckigen Klamern; bei numerischen Vergleichen werden doppelte runde Klammern verwendet: ((...)). Alternativ kann auch ein Befehl verwendet werden. Befehle werden mit einem Exit-Code beendet, 0 bedeutet in der Regel, dass alles in Ordnung ist, andere Werte deuten auf Fehler hin. Die Anweisungen werden bearbeitet, wenn der Befehl korrekt ausgeführt wird, weil der Exit-Code 0 als wahr gilt und jeder andere Wert als falsch.
    Hinter else können Sie alternative Anweisungen definieren, die ausgeführt werden sollen, wenn die Bedingung nicht zutrifft, mit elif (Abkürzung für else if) kann sogar eine verschachtelte Bedingung eingesetzt werden.
       
gp  Einzelfallentscheidungen. Zwischen case und esac können Sie verschiedene Muster aufführen, denen eine angegebene Variable oder ein String mit Variablen entsprechen könnte. Die vollständige Schreibweise ist case String in. Hinter jedem regulären Ausdruck, der überprüft wird, steht eine schließende Klammer – ) –, darauf folgen beliebig viele Anweisungen, die nur ausgeführt werden, wenn das angegebene Muster auf den überprüften String passt. Vor dem nächsten Muster muss eine Befehlssequenz durch ;; abgeschlossen werden.
gp  Schleifen. Mitunter müssen bestimmte Anweisungen mehrfach ausgeführt werden. Dafür sind Schleifen zuständig. Die bash definiert verschiedene Arten von Schleifen; die wichtigsten sind die for-Schleife und die while-Schleife.
    Eine for-Schleife geht automatisch alle Kommandozeilenparameter durch, die Parameter werden nacheinander der angegebenen Schleifenvariablen zugewiesen. Alternativ können Sie mittels for ... in ein Dateimuster angeben, die Variable nimmt dann nacheinander den Namen jeder Datei an, auf die dieses Muster passt.
       
    Die while-Schleife verwendet dagegen eine Bedingung wie if, mit der Ausnahme, dass die Anweisungen mehrmals ausgeführt werden, solange die Bedingung noch zutrifft.
       
    Die Anweisungen, die in jedem Durchlauf der Schleife ausgeführt werden sollen, stehen in beiden Fällen zwischen do und done.
       
gp  Variablen. Mit Hilfe der Anweisung var = Wert wird einer Variablen innerhalb eines Shell-Skripts ein Wert zugewiesen. Es kann sich dabei sowohl um eine der Umgebungsvariablen wie PATH handeln als auch um beliebige temporäre Variablen, die nur innerhalb des Skripts verwendet werden, um Ihnen die Arbeit zu erleichtern.
    Innerhalb von Befehlen, die Sie in einem Shell-Skript aufrufen, wird eine Variable durch ein vorangestelltes $-Zeichen vor der Ausführung des Befehls durch ihren aktuellen Wert ersetzt (substituiert). Innerhalb eines komplexen Ausdrucks steht der Variablenname hinter dem Dollarzeichen zusätzlich in geschweiften Klammern {...}.
       
    Spezielle Variablen sind $0 bis $9 für die einzelnen Kommandozeilenparameter, $* für die gesamte Liste dieser Parameter zur Verwendung in einer Schleife und $# für die Anzahl der übergebenen Parameter.
       

Das folgende kurze Beispiel zeigt die praktische Verwendung solcher Anweisungen. Es definiert ein Skript namens backup, das alle Dateien, die auf ein angegebenes Dateimuster passen, in Dateien mit der zusätzlichen Endung .tmp sichert:

#!/bin/bash
if (( $# < 1 )); then
   echo "Verwendung: backup Dateimuster\n"
   exit 1
fi
for i in $1
do
   cp $i ${i}.tmp
done

Wenn kein Dateimuster angegeben wird, erscheint eine Warnmeldung, und das Skript wird mit einem Fehlercode beendet. Andernfalls werden alle Dateien, die zum angegebenen Dateimuster passen, in einer Schleife nacheinander in entsprechenden .tmp-Dateien gesichert. Der folgende Aufruf sichert alle Dateien mit der Endung .txt im aktuellen Verzeichnis:

backup *.txt

Im nächsten Kapitel wird übrigens die Programmiersprache Perl vorgestellt, die mit einer eingängigeren Syntax und erheblich weitergehenden Möglichkeiten mehr als einen guten Ersatz für Shell-Skripte bietet.


Galileo Computing

4.3.3 Editoren  downtop

Weiter oben wurden bereits einige Programme vorgestellt, mit deren Hilfe sich Textdateiein manipulieren lassen. Allerdings wurde bisher noch keine Möglichkeit gezeigt, solche Dateien einzugeben oder zu bearbeiten. Die grafischen Oberflächen für Linux sind inzwischen mit mausgesteuerten, fensterbasierten Editoren ausgestattet. Dennoch ist es nützlich, den Umgang mit einem klassischen Kommandozeileneditor zu beherrschen.

In diesem Unterabschnitt werden die entscheidenden Funktionen der beiden wichtigsten Editoren vorgestellt. Der vi (gesprochen: wie Ei) ist der ursprüngliche UNIX-Editor und steht deshalb in jeder beliebigen UNIX-Umgebung zur Verfügung. Emacs wurde ursprünglich von Richard Stallman geschrieben und verfügt über eine Reihe komfortabler Fähigkeiten.

vi

Der eigentliche vi-Texteditor wurde von Bill Joy an der UC Berkeley programmiert. Es gibt eine Reihe mehr oder weniger kompatibler Editoren, die die Funktionalität des ursprünglichen vi verbessern – unter Linux kommt beispielsweise häufig vim (Vi Improved) zum Einsatz.

Der vi-Texteditor wird durch die Eingabe von vi beziehungsweise vi Dateiname gestartet. Wenn Sie einen Dateinamen angeben, wird diese Datei zum Bearbeiten geöffnet beziehungsweise neu angelegt.

Befehls- und Editiermodus

Nachdem der vi gestartet wurde, befindet er sich im Befehlsmodus. Hier können Sie in der untersten Zeile Befehle eingeben, die in der Regel aus einem oder zwei Buchstaben bestehen. Einige dieser Befehle wechseln in den Editiermodus, in dem Sie Text eingeben oder ändern können, andere dienen dem Verschieben, dem Löschen oder dem Kopieren von Text. Mit (ESC) wechseln Sie aus dem Editiermodus wieder zurück in den Befehlsmodus.

Anders als bei den meisten anderen Editoren werden Befehle also nicht durch spezielle Tastenkombinationen mit der (STRG)- oder (ALT)-Taste gegeben, sondern durch normale Tasten, solange Sie sich im Befehlsmodus befinden.

Im Folgenden werden jeweils genau die Tasten angegeben, die Sie auf der Tastatur drücken müssen – beispielsweise bedeutet (A) nicht, dass Sie ein großes A eingeben sollen, sondern dass die Taste (A) gedrückt werden soll. Ein großes A würde dagegen als (Shift) + (A) angegeben. Wenn mehrere Tasten nacheinander gedrückt werden müssen, werden diese einfach der Reihe nach angegeben. Lediglich einige ganz eindeutige Sonderzeichen werden so aufgeführt, als seien sie einzelne Tasten – (») bedeutet beispielsweise, dass Sie (Shift) + (2) drücken müssen.

Bei einigen selteneren Sonderzeichen wird außerdem einmal erklärt, wie Sie sie eingeben können. Da der vi auch bei Mac  OS X (siehe nächsten Abschnitt) mitgeliefert wird, und es darüber hinaus auch Linux-Versionen für den Macintosh gibt, finden Sie die Tastenkombinationen für PC und Mac, wenn sie sich unterscheiden.

Die wichtigste Taste im Befehlsmodus ist (I) – sie wechselt in den Einfügemodus, in dem Sie Text eingeben können. In diesem Modus können Sie sich grundsätzlich mit den Pfeiltasten durch den Text bewegen. Die Löschtasten funktionieren dagegen je nach Terminal nicht immer. Statt mit (I) gelangen Sie auch noch mit anderen Tasten in den Eingabemodus, wobei Sie jeweils unterschiedliche Änderungsmöglichkeiten haben: (O) fügt an der Cursorposition zunächst eine neue Zeile ein, (C) (W) ändert nur das nächste Wort und (C) (C) die aktuelle Zeile.

Navigation im Text

Im Befehlsmodus können Sie sich mit folgenden Tasten schrittweise durch den Text bewegen: (H) nach links, (J) nach unten, (K) nach oben und (L) nach rechts. Wie Sie sehen, liegen diese vier Tasten nebeneinander, was ihre Verwendung sehr bequem macht. Den meisten Befehlen können Sie eine Zahl voranstellen, um sie mehrmals auszuführen. Beispielsweise geht (3) (H) um drei Schritte nach links und (4) (J) um drei Zeilen nach unten.

(W) bewegt den Cursor um ein Wort nach rechts; (B) um ein Wort nach links. Auch diese Tasten lassen sich mit einer Zahl kombinieren, um mehrere Wörter weiter beziehungsweise zurück zu gehen.

(0) (Null) springt zum Zeilenanfang; ($) ((Shift) + (4)) zum Zeilenende. Runde Klammern dienen dem Bewegen zwischen Sätzen: («) beziehungsweise (Shift) + (8) bewegt sich zum Anfang des vorigen Satzes, (») oder (Shift) + (9) zum nächsten. Geschweifte Klammern – ({) und (}) – springen) zum Anfang des nächsten beziehungsweise des vorigen Absatzes. Auf einem PC werden sie mit Hilfe der Tastenkombinationen (ALTGR) + (7) beziehungsweise (ALTGR) + (9) erzeugt, auf dem Mac mittels (ALT) + (8) beziehungsweise (ALT) + (9).

Eine Zahl mit einem Pipe-Zeichen (|) (PC: (ALTGR) + (<), Mac: (ALT) + (7)) dahinter springt zum angegebenen Zeichen in der aktuellen Zeile: (7) (|) bewegt sich beispielsweise zur Position 7. Hat eine Zeile weniger Zeichen als der Wert, den Sie angeben, dann bewegt sich der Cursor zum letzten.

(-) bewegt den Cursor zum Anfang der vorigen Zeile, während (+) oder (Enter) zum ersten Nicht-Leerzeichen in der nächsten Zeile springen.

Suchfunktionen

Besonders angenehm sind die eingebauten Suchfunktionen, die Sie im Befehlsmodus durchführen können: (/) leitet einen regulären Ausdruck im grep-Format ein. Wenn Sie (Enter) drücken, wird vorwärts danach gesucht. Der Cursor bewegt sich auf das erste Zeichen der Fundstelle. (/) (Enter) sucht erneut nach dem gleichen Muster. (?) sucht dagegen rückwärts nach dem angegebenen beziehungsweise vorigen Muster.

Beispielsweise sucht (/)[0-9](Enter) vorwärts nach der nächsten Ziffer; (/) (Enter) sucht erneut danach. (?)[a-z](Enter) sucht rückwärts nach dem nächstgelegenen Kleinbuchstaben, ein anschließendes (?) (Enter) sucht wiederum den vorherigen.

Löschen und Kopieren

Für das Löschen im Befehlsmodus sind die folgenden Tasten beziehungsweise Tastenfolgen definiert: (X) löscht das aktuelle Zeichen, (Shift) + (X) das Zeichen vor dem Cursor. (D) (W) löscht das ganze Wort, während (D) (D) die gesamte aktuelle Zeile entfernt. Wenn Sie beispielsweise drei Wörter löschen möchten, müssen Sie (D) (3) (W) eingeben, für vier Zeilen lautet die Eingabe dagegen (D) (4) (D). (Shift) + (D) löscht den Text bis zum Ende der Zeile. (P) beziehungsweise (Shift) + (P) setzen den zuletzt gelöschten Text hinter beziehungsweise vor dem Cursor wieder ein. Der jeweilige Löschvorgang stellt den gelöschten Text nacheinander in nummerierte Löschpuffer. Mit («) (1) (P) können Sie zum Beispiel den Text aus dem Löschpuffer Nummer 1 – dem ältesten – einfügen. Insgesamt existieren 9 nummerierte Löschpuffer.

Wenn Sie Text kopieren möchten, können Sie (Y) (W) für ein Wort oder (Y) (Y) für die gesamte Zeile verwenden. Der Text landet – genau wie beim Löschen – nacheinander in den nummerierten Puffern 1 bis 9 und kann durch die entsprechenden (P)-Sequenzen wieder eingefügt werden. Wenn Sie (») drücken, dann einen Buchstaben von (A) bis (Z) und schließlich zweimal (Shift) + (Y), wird die aktuelle Zeile dagegen in einen von 26 benannten Puffern kopiert. Wird der Name des Puffers mit (Shift) kombiniert (Großbuchstabe), dann wird der Inhalt des Puffers nicht überschrieben, sondern um die neu kopierte Zeile ergänzt. Mit («), dem Buchstaben eines benannten Puffers, und (P) können Sie den Text des entsprechenden Puffers wieder einfügen.

Die Taste (U) macht den letzten Lösch-, Einfüge- oder Änderungsbefehl rückgängig. Beachten Sie, dass nur ein Schritt rückgängig gemacht werden kann. (Shift) + (U) stellt die gesamte zuletzt modifizierte Zeile wieder her. (.) wiederholt den letzten Editierbefehl beliebig oft.

Dateioperationen

Wichtig sind zu guter Letzt die Dateioperationen. Sie beginnen größtenteils mit einem (:), weil es sich um Befehle des Zeileneditors ex handelt, auf dem vi basiert. Alle ex-Befehle werden mit (Enter) abgeschlossen, deshalb ist es im Folgenden nicht aufgeführt. Geben Sie (:) (W) Dateiname ein, um die aktuell bearbeitete Datei unter einem neuen Namen zu speichern. (:) (W) (!) speichert sie nach erfolgten Änderungen erneut unter diesem Namen – das (!) dient jeweils dem Umgehen von Schutzmaßnahmen. (:) (R) Dateiname öffnet die angegebene Datei und fügt ihren Inhalt an der aktuellen Cursorposition ein. (:) (Q) beendet vi, aber nur, wenn die aktuelle Datei gespeichert wurde. (:) (Q) (!) erzwingt das Beenden und verwirft Änderungen. (:) (X) ist eine Kurzfassung für (:) (W) (Q): Beide bedeuten, dass vi zuerst speichern und anschließend beendet werden soll.

Diese kurze Übersicht ermöglicht es Ihnen, sich grundsätzlich im vi zurechtzufinden und effizient Texte zu bearbeiten. In Wirklichkeit verfügt er über Unmengen weiterer Befehle, immerhin gibt es ganze Bücher über die Arbeit mit diesem Editor. Aber ob Sie nun mit der vorliegenden kurzen Anleitung oder mit einem umfangreichen Tutorial arbeiten – Geläufigkeit erreichen Sie nur, wenn Sie ständig üben.

Emacs

Der Name »Emacs« steht für »Editor Macros«, weil er ursprünglich als Satz von Makrobefehlen für einen älteren Editor entworfen wurde. Inzwischen ist er ein eigenständiger Editor, der in vielen verschiedenen Varianten für etliche Plattformen verfügbar ist – nicht nur für alle erdenklichen UNIX-Arten, sondern beispielsweise auch für Windows. Die Hauptentwicklungslinie ist der GNU Emacs, den Sie von der Homepage des GNU-Projekts (www.gnu.org) oder den zahlreichen weltweiten Mirror-Sites herunterladen können. Die aktuelle Version ist 21.x, was Ihnen einen Eindruck davon vermitteln mag, wie lange diese Software bereits existiert – das Programm ist ausgereift und sehr stabil.

Emacs verfügt über einen erheblich größeren Befehlsumfang als vi; es handelt sich letzten Endes nicht nur um einen Editor, sondern um einen vollwertigen Shell-Ersatz mit zusätzlichen Funktionen wie E-Mail, unzähligen Betriebsmodi für diverse Textsorten und sogar Spielen.

Die meisten Emacs-Befehle werden durch Tastenkombinationen mit (STRG) (auf englischen PC-Tastaturen und auf dem Mac (CTRL)) oder (Meta) gebildet. Wenn Sie auf Ihre Tastatur schauen, werden Sie feststellen, dass Sie gar keine (Meta)-Taste haben; die gibt es nur an einigen alten Terminals und verschiedenen UNIX-Workstations. In den meisten Terminalprogrammen oder in der GUI-Version von Emacs kann die (ALT)-Taste dafür verwendet werden. Einige Terminal-Emulationen bestehen dagegen darauf, dass Sie (Meta)-Tastenkombinationen durch Drücken der Taste (ESC) und anschließendes Betätigen der entsprechenden Kombinationstaste eingeben.

Schreibweise für Tastenkürzel

Die Emacs-Dokumentation verwendet eine etwas eigenwillige Schreibweise für die Tastenkombinationen. Diese Schreibweise wird hier kurz erläutert und anschließend verwendet, damit Sie sich nicht umzugewöhnen brauchen, wenn Sie die zahlreichen Hilfeseiten im Emacs selbst lesen. (STRG)-Tastenkombinationen werden durch C-Zeichen angegeben, beispielsweise steht C-x für (STRG) + (X). (Meta)-Tastenkürzel werden dagegen mit vorangestelltem M- angegeben. M-x bedeutet also je nach Umgebung, in der Sie arbeiten, entweder (ALT) + (X) oder (ESC) (X). Letzteres funktioniert übrigens immer.

Der Emacs wird durch Eingabe von emacs oder emacs Dateiname gestartet. Sie können mehrere Dateien auf einmal bearbeiten; die einzelnen Arbeitsbereiche für Dateien werden als Buffer bezeichnet. Wenn Sie keinen Dateinamen angegeben haben, befinden Sie sich zunächst im Scratch-Buffer (Notizblock), der für ungespeicherte Notizen vorgesehen ist. Wenn Sie eine speicherbare Datei editieren möchten, müssen Sie diese zunächst mit C-x C-f Dateiname »besuchen« (die Original-Emacs-Dokumentation verwendet den Ausdruck »visit«). Falls diese Datei bereits existiert, wird sie geöffnet, ansonsten neu angelegt.

Buffer und Fenster wechseln

Wenn mehrere Buffer geöffnet sind, können Sie mit Hilfe der Tastenkombination C-x b Buffername (Enter) zum Buffer mit dem angegebenen Namen wechseln (ohne Angabe eines Buffers wird reihum zum jeweils nächsten gewechselt). Eine Liste aller verfügbaren Buffer erhalten Sie mit C-x C-b in einem abgetrennten Bereich, der als Fenster bezeichnet wird. Mit C-x 2 können Sie ein solches Fenster selbst erzeugen; C-x 4 f Dateiname (Enter) öffnet eine neue Datei in einem separaten Fenster. Sie können mit C–x o zwischen den beiden Fenstern hin- und herwechseln. Mit M-C-v können Sie den Inhalt des Fensters scrollen, in dem Sie zurzeit nicht arbeiten. C-x 1 schließt das nicht aktive Fenster und behält nur das aktuelle.

Je nach Dateityp (den Emacs, ähnlich wie Windows, an der Dateiendung erkennt) befinden Sie sich in einem der verschiedenen Emacs-Arbeitsmodi, die vor allem Programmierern das Leben erleichtern. Einige der wichtigsten Modi sind Fundamental (der grundlegende Modus für einfachen Text), C (für die gleichnamige Programmiersprache) oder HTML (zum Editieren von Webseiten). Jeder dieser Modi verfügt über besondere Funktionen wie automatische Einrückung, Anzeigen der korrespondierenden Klammer beim Schließen oder Ähnliches.

Sie können den Modus auch manuell über M-x Modusname wechseln: M-x fundamental wechselt beispielsweise in den Fundamental Mode, M-x c-mode in den C-Modus oder M-x html-mode in den HTML-Modus. M-x Schlüsselwort dient allgemein der Eingabe eines Befehls in der Langform und muss jeweils mit (Enter) abgeschlossen werden. Wenn Sie einfach M-x (Enter) eingeben, wird eine Liste aller möglichen Befehle angeboten; alternativ können Sie auch einen oder mehrere Anfangsbuchstaben eines Befehls eintippen und erhalten eine Liste der passenden Befehle.

Der einzeilige Bereich am unteren Bildschirm- beziehungsweise Fensterrand, in den Sie mit M-x gelangen, wird Minibuffer genannt. Sie können ihn durch dreimaliges Drücken von (ESC) wieder verlassen.

Navigation im Text

Zeichenweise durch den Text navigieren können Sie mit den Pfeiltasten oder alternativ mit C-f (nach rechts, forward), C-b (nach links, backward), C-p (nach oben, previous line) beziehungsweise C-n (nach unten, next line). C-a bewegt den Cursor zum Zeilenbeginn und C-e zum Zeilenende. C-v scrollt um einen ganzen Bildschirm nach unten, M-v nach oben. M-f wandert um ein Wort nach rechts, M-b nach links. M-< springt zum Anfang der gesamten Datei, M-> ((ALT) + (Shift) + (<)) zu ihrem Ende.

C-d löscht das Zeichen unter dem Cursor, während (æ_) das vorherige Zeichen löscht. M-d löscht das folgende Wort, M-(æ_) das vorige. C-k löscht den Bereich vom Cursor bis zum Ende der Zeile.

C-(Leertaste) setzt eine Markierung. Der markierte Bereich reicht automatisch von der gesetzten Markierung bis zur aktuellen Cursorposition. Um den gesamten Bereich zu löschen, genauer gesagt auszuschneiden, wird die Tastenkombination C-w verwendet. M-w kopiert den Bereich dagegen zum späteren Einfügen. In beiden Fällen können Sie ihn mit Hilfe von C-y wieder einfügen.

C-s leitet eine inkrementelle Suche ein – während der Eingabe des Suchbegriffs springt der Cursor zur jeweils nächstgelegenen Stelle, die diesem Begriff entspricht. Entsprechend sucht C-s rückwärts. C-s C-s wiederholt die letzte Suche. (Enter) verlässt das Suchprogramm vollständig. M-C-s sucht nach einem regulären Ausdruck statt einer einfachen Zeichenfolge. Die Syntax der regulären Ausdrücke entspricht grep.

M-% ist der Befehl zum Suchen und Ersetzen. Zunächst wird nach der zu ersetzenden Zeichenfolge gefragt, anschließend nach dem Ersetzungstext. Die Eingabe beider Zeichenfolgen muss mit (Enter) abgeschlossen werden. An jeder einzelnen Fundstelle werden Sie gefragt, ob Sie die Ersetzung durchführen möchten. (Y) oder (Leertaste) bedeutet ja, (N) oder (Entf) steht für nein und (!) heißt, dass alle künftigen Fundstellen ohne weitere Rückfrage ersetzt werden sollen.

Wenn Sie Ihre aktuelle Arbeit speichern möchten, wird dazu der Befehl C-x C-s verwendet. C-x s speichert alle geänderten Buffer auf einmal. C-x C-w Dateiname (Enter) speichert die Datei dagegen unter dem angegebenen neuen Namen. Mit C-x C-c können Sie Emacs beenden. Vorher werden Sie gefragt, ob Sie die modifizierten Buffer speichern möchten.

Erweiterte Funktionen

Was bereits über den vi gesagt wurde, gilt für Emacs erst recht: Es gibt Unmengen weiterer Befehle, für die in diesem Buch leider kein Platz ist. Mit dem hier gebotenen Ausschnitt aus der Funktionsvielfalt von Emacs können Sie beliebige Textdateien bearbeiten. Mit etwas Übung werden Sie damit irgendwann schneller arbeiten können als mit einem grafisch orientierten Editor, in dem Sie oft zur Maus greifen müssen, um spezielle Befehle zu verwenden. Nichtsdestotrotz ist auch der Emacs mit einem umfangreichen Menü ausgestattet, solange er in einer GUI läuft. Da die Tastenkürzel jeweils neben den einzelnen Menübefehlen stehen, können Sie mit Hilfe des Menüs leicht neue Befehle erlernen.

Abgesehen davon können Sie diesen Editor völlig frei konfigurieren. Zum einen können Sie die Tastenkürzel selbst frei belegen, zum anderen ist der Emacs beliebig erweiterbar: Er ist mit einer eigenen Variante der Programmiersprache Lisp ausgestattet. Diese Sprache könnte Programmierer durch ihren eigenwilligen Ansatz abschrecken, sie ist aber speziell an die Funktionen von Emacs angepasst und erleichtert so das Programmieren von Zusatzfunktionen.


Galileo Computing

4.3.4 Grafische Benutzeroberflächen  downtop

Neben der bis jetzt behandelten Konsole sind alle modernen Linux-Distributionen auch mit einer grafischen Benutzeroberfläche ausgestattet. Diese Oberfläche besteht aus zwei verschiedenen Bestandteilen, die aufeinander aufbauen: dem X-Window-Server oder kurz X-Server und dem Window-Manager.

Der X-Server

Ein X-Server ist das grundlegende Programm, das die allgemeinen Zeichenfunktionen zur Verfügung stellt. Er kann mit anderen Worten die verschiedensten Grafikobjekte wie Rechtecke, Linien oder Bilddateien auf den Bildschirm zeichnen, außerdem verarbeitet er die grundlegende Steuerung mit der Maus. Dem X-Server ist es übrigens egal, ob die Anwendung, die er anzeigt und für die er Befehle entgegennimmt – der X–Client –, auf demselben Rechner läuft oder irgendwo im Netzwerk.

Der traditionelle X-Server für kommerzielle UNIX-Varianten heißt X11; die derzeitige Version ist X11R6. Da dieses Produkt kommerziell ist, wurde schon vor längerer Zeit eine freie Alternative begründet: Das XFree86-Projekt stellt freie X-Server zur Verfügung, inzwischen sogar für die verschiedensten Plattformen (obwohl die 86 für Intels x86-Prozessor-Baureihe steht).

Erst der Window-Manager, der auf den X-Server aufsetzt, stellt die eigentliche Arbeitsumgebung mit Fenstern, Menüs und Icons zur Verfügung. Es gibt inzwischen mehr verschiedene Window-Manager als UNIX-Versionen. Einige traditionelle Window-Manager sind CDE von Sun oder fvwm2, der traditionelle Linux-Window-Manager. Die viel versprechendsten Projekte sind zurzeit die freien Desktop-Umgebungen KDE und GNOME. Beide bieten – im Gegensatz zu den spartanisch ausgestatteten alten Modellen – den gesamten Bedienkomfort von Benutzeroberflächen wie Windows oder Mac  OS (oft sogar noch mehr als das) und werden inzwischen durch zahlreiche Anwenderprogramme unterstützt. Genau diese beiden Desktop-Varianten werden in diesem Unterabschnitt kurz vorgestellt.

Den X-Server auswählen und konfigurieren

Heutzutage ist es ein Leichtes, den richtigen X-Server auszuwählen, weil es in vielen Fällen automatisch geschieht. Bereits bei der Installation analysieren die meisten Linux-Distributionen Ihre Hardware und starten meistens den korrekten X-Server, der zu Ihrer Grafikkarte passt.

In einigen wenigen Fällen funktioniert die Installation des richtigen X-Servers allerdings nicht; möglicherweise erhalten Sie lediglich den VGA-X-Server mit 640 x 480 Pixeln und 256 Farben, vielleicht sogar gar keinen. Im letzteren Fall müssen Sie Linux zunächst im Textmodus installieren und X11 später manuell konfigurieren.

Wenn der X-Server falsch konfiguriert oder gar nicht installiert wurde, wird das wahrscheinlich daran liegen, dass Ihre Grafikkarte entweder zu alt oder zu neu ist. Sehr alte Grafikkarten werden mitunter nicht unterstützt, wenn sie nicht besonders weit verbreitet waren, mit neueren arbeiten die X-Server dagegen oft erst einige Zeit nach der Einführung zusammen. Das Problem ist, dass zunächst einmal Treiber für neue Grafikkarten entwickelt werden müssen, falls der Hersteller das nicht selbst tut.

Bei SuSE Linux wird ein praktisches Hilfsprogramm namens SaX (SuSE Advanced X Configuration Utility) mitgeliefert. In einem nützlichen Dialog können Sie die Parameter Ihrer Maus, Ihrer Tastatur, Ihrer Grafikkarte und Ihres Monitors eingeben. SaX bemüht sich, Ihre Konfiguration automatisch zu ermitteln; nur in wenigen Fällen müssen Sie selbst eingreifen. Auf jeden Fall sollten Sie die Handbücher Ihres Monitors und Ihrer Grafikkarte bereithalten, weil Sie eventuell Werte wie den RAMDAC der Grafikkarte oder die Zeilenfrequenz des Monitors manuell eingeben müssen. Geben Sie sax2 ein, um die aktuelle Version zu starten.

Die meisten anderen Linux-Distributionen besitzen inzwischen ähnliche Hilfsprogramme, bei RedHat gibt es beispielsweise den XConfigurator. Nur in wenigen Fällen müssen Sie die Konfigurationsdatei XF86Config manuell bearbeiten. In der Regel liegt sie unter /etc/X11/XFree86Config. Bei RedHat- und Mandrake-Linux heißt sie allerdings XFree86Config-4, wenn Sie die aktuelle Version 4.0 von XFree86 verwenden (was wahrscheinlich der Fall ist).

In der Regel ist Ihr Linux so konfiguriert, dass X-Server und Window-Manager automatisch gestartet werden. Falls das nicht der Fall ist, können Sie den X-Server folgendermaßen nachträglich starten:

$ startx

Der automatische Start der grafischen Oberfläche lässt sich dagegen am einfachsten im Systemverwaltungsprogramm einstellen, das je nach Distribution unterschiedlich ist – bei SuSE Linux zum Beispiel das Programm yast.

KDE

Das K Desktop Environment (KDE) ist eine moderne grafische Benutzeroberfläche für Linux und andere UNIX-Systeme. Es handelt sich um ein Open-Source-Projekt, das von einer großen Entwicklergemeinde gepflegt wird. Neben dem eigentlichen Desktop bietet das KDE-Projekt eine Vielzahl nützlicher Anwendungsprogramme, beispielsweise den Webbrowser Konqueror, auf dem auch der eingebaute Datei-Manager basiert, und das Office-Programmpaket KOffice.

SuSE Linux wird bei der Installation standardmäßig mit dem KDE-Desktop ausgestattet, auch die gängigsten KDE-Anwendungen und -Tools werden mitinstalliert.

KDE basiert auf der Grafikbibliothek Qt, die von der norwegischen Firma Trolltech entwickelt wurde. Angenehmerweise laufen Qt-Anwendungen nicht nur unter Linux, sondern lassen sich auch unter allen anderen X11-Implementierungen, Windows und Mac  OS X kompilieren.

Die Leiste am Fuß des Bildschirms heißt Panel, ist mit der Windows-Taskleiste vergleichbar und bietet die Möglichkeit, schnell auf die häufigsten Anwendungen und Tools zuzugreifen. Der K-Button ganz links öffnet ein umfangreiches, verschachteltes Menü, in dem fast alle Programme zu finden sind, die unter KDE oder allgemein unter X11 laufen. Daneben finden Sie unter anderem Schaltflächen für ein Terminal, für Ihr Home-Verzeichnis, für das KDE-Kontrollzentrum (die Steuerzentrale für Ihre persönlichen Einstellungen) und so weiter.

Weiter rechts finden Sie eine Schaltfläche für jedes geöffnete Programm oder Fenster; durch Anklicken dieser Schaltflächen können Sie schnell zwischen den Fenstern wechseln.

Desktop-Verknüpfungen

Wenn Sie auf bestimmte Programme oder Daten, die Sie häufig verwenden, besonders schnell zugreifen möchten, können Sie eine Verknüpfung auf dem Desktop anlegen. Am schnellsten erstellen Sie eine solche Verknüpfung, wenn Sie mit der rechten Maustaste eine leere Stelle auf dem Desktop anklicken und aus dem Kontextmenü den Befehl Neu erstellen • Verknüpfung mit Programm auswählen. Im erscheinenden Dialog können Sie die Eigenschaften der Verknüpfung bequem einstellen. Abgespeichert werden diese Informationen schließlich in einer Textdatei mit der Endung .desktop im Verzeichnis KDesktop in Ihrem Home-Verzeichnis.

Vom Desktop können Sie eine Verknüpfung in das Panel ziehen, um sie dort dauerhaft für den Schnellstart abzulegen – hier kommen Sie auch dann an eine Anwendung heran, wenn der gesamte Desktop mit offenen Fenstern übersät ist.

Die Funktion des Konquerors ist im Grunde genommen selbsterklärend – er verhält sich als Datei-Manager ähnlich wie die Pendants in anderen Betriebssystemen und ist als Browser mit einigen der modernsten Fähigkeiten ausgestattet. Standardmäßig brauchen Sie Dateisymbole nicht doppelt zu klicken, sondern es genügt ein einfacher Klick wie bei Hyperlinks auf Webseiten.

Im KDE-Kontrollzentrum finden Sie Unmengen von Einstellungsmöglichkeiten, mit denen Sie den Desktop und die verschiedenen KDE-Komponenten Ihren Bedürfnissen und Wünschen anpassen können. Beispiele für solche Einstellungen sind der Desktop-Hintergrund, die automatische Anordnung von Icons, die zu benutzenden Schriften, die Sprache oder die Browser-Konfiguration. Da KDE mit einer umfangreichen HTML-basierten Hilfe ausgestattet ist, die alle Optionen genau erklärt, müssen diese Einstellmöglichkeiten hier nicht näher behandelt werden.

GNOME

Das GNU Object Model Environment (GNOME) ist ebenfalls ein Open-Source-Projekt, das auf der Grafikbibliothek GtK+ basiert. Anders als KDE wird zwischen der Desktop-Verwaltung und dem X-Server ein herkömmlicher Window-Manager für die grundlegende Bereitstellung der Fenster und Menüs eingesetzt. Der Standard-Window-Manager ist Sawfish, andere GNOME-kompatible Window-Manager sind Enlightenment, AfterStep oder WindowMaker.

GNOME ist der Standard-Desktop der Linux-Distributionen RedHat und Debian. Außerdem wird er inzwischen von Sun für dessen kommerzielle UNIX-Variante Solaris eingesetzt, um den in die Jahre gekommenen Window-Manager CDE abzulösen.

Eine besondere Option von GNOME ist der Desk Guide: Die GNOME-Oberfläche ist in mehrere virtuelle Desktops aufgeteilt, zwischen denen Sie per Klick auf die Buttons des Desk Guides hin- und herwechseln können. Eine Taskliste ist ebenfalls enthalten; sie enthält für jedes geöffnete Fenster einen Button.

Der Button mit dem GNOME-Logo öffnet das Hauptmenü des GNOME-Desktops. Hier finden Sie eine Reihe von Einträgen, beispielsweise Programme (Verknüpfungen mit den wichtigsten GNOME- und X-Anwendungen), Favoriten (eine anfangs leere Liste Ihrer bevorzugten Dateien, Ordner oder Internet-Ressourcen) und Desktop (Sperren des Desktops bei Abwesenheit, Abmelden).

Desktop- und Panel-Verknüpfungen

Auch bei GNOME können Sie den Desktop mit Verknüpfungs-Icons versehen. Wählen Sie dazu aus dem Kontextmenü des Desktops (rechte Maustaste) die Option Neu • Starter. Es erscheint ein Dialog für die Einstellung aller Eigenschaften der Verknüpfung.

Wenn Sie eine Verknüpfung zum Panel hinzufügen möchten, klicken Sie mit der rechten Maustaste auf das Panel, wählen Sie Panel • Zum Panel hinzufügen • Starter. Die möglichen Einstellungen sind dieselben wie bei einem Desktop-Starter.

Alle zentralen Einstellungen für das Erscheinungsbild und das Verhalten des GNOME-Desktops werden im GNOME-Kontrollzentrum vorgenommen. Wie bei KDE können Sie hier beispielsweise Hintergrundbilder, Farben, Schriften oder Bildschirmschoner einstellen. Zusätzlich wird an dieser Stelle der zugrunde liegende Window-Manager ausgewählt und konfiguriert.


Galileo Computing

4.3.5 Linux-Installation und -Konfiguration  toptop

In diesem Unterabschnitt soll zu guter Letzt kurz darauf eingegangen werden, wie Sie Linux auf Ihrem PC installieren und wichtige Grundeinstellungen vornehmen können. Der Schwerpunkt liegt auf SuSE Linux; in anderen Linux-Varianten funktioniert die Installation ähnlich.

SuSE Linux installieren

Legen Sie die erste SuSE-Installations-CD ein und booten Sie den Rechner von ihr – wenn Sie ein DVD-Laufwerk besitzen, funktioniert es über die DVD noch komfortabler, weil sie die Inhalte aller CDs enthält, sodass Sie zwischendurch nicht wechseln müssen. Eventuell müssen Sie zuvor im BIOS-Setup das Booten vom CD-ROM-Laufwerk aktiveren (siehe Kapitel 3, Die Hardware). Für die wenigen ganz alten Systeme, die nicht nach dem El-Torito-Standard von CD starten können, liegen dem Softwarepaket zusätzlich Boot-Disketten bei.

Die Ausführungen in diesem Abschnitt beziehen sich auf SuSE Linux 8.1; bestimmte beschriebene Inkompatibilitäten oder Defizite könnten in der Version 8.2, die mir noch nicht vorliegt, inzwischen beigelegt sein.

Hardware-Kompatibilitäts-datenbank

Bevor Sie die Installation von SuSE Linux in Betracht ziehen, müssen Sie überprüfen, ob Ihre Hardware unterstützt wird. Falls es für einzelne Geräte keine Treiber gibt, können Sie diese unter Linux nicht einsetzen. Bei einigen exotischeren Geräten ist das nicht so wichtig – möglicherweise setzen Sie diese ohnehin nur mit spezieller Software unter Windows ein. Wird allerdings ein zentrales Gerät wie die Grafikkarte nicht unterstützt, dann haben Sie schlechte Karten. Unter cdb.suse.de finden Sie eine umfangreiche Datenbank aller Geräte, die von dieser Betriebssystemdistribution unterstützt werden.

Anschließend müssen Sie sich die Frage stellen, ob Sie nur Linux installieren möchten oder ob sich auch andere Betriebssysteme auf Ihrem Computer befinden oder später befinden werden. Wenn ein älteres Privatkunden-Windows (bis Windows Me) auf dem Rechner installiert ist, nimmt der SuSE-Installer automatisch die folgenden Konfigurationsschritte vor:

gp  Automatische Verkleinerung einer FAT-Partition.
gp  Erstellen einer neuen Partition für Linux, in der Regel mit dem Dateisystem ext3, bei besonders kleinen Partitionen mit reiserfs, weil es den Platz effizienter ausnutzen kann.
gp  Auswahl einer möglichst idealen Paketkonfiguration, damit Sie die Software erhalten, die Sie für Ihre speziellen Bedürfnisse benötigen. Sie können neben dem Grundsystem verschiedene Sammlungen auswählen, um Ihren Rechner beispielsweise als Office-Station, als Multimedia-Maschine, als Entwicklungswerkzeug oder als Netzwerkserver zu betreiben. Sie können die Pakete für jede Kategorie auch einzeln auswählen, falls Sie ganz genau wissen, was Sie (nicht) wollen.
gp  Automatische Installation des Boot-Managers Lilo in den Master Boot Record der ersten Festplatte, sodass Sie zwischen Linux und Windows wählen können. Beim Systemstart sehen Sie künftig die folgende Meldung:
lilo boot:
    Wenn Sie einfach (Enter) drücken oder einige Sekunden warten, wird automatisch Linux gestartet; die sofortige Eingabe von win startet dagegen Windows. Die Lilo-Konfiguration wird während der Installation automatisch abgefragt.
       
gp  Automatischer Start und Installation eines zu Ihrer Grafikkarte passenden XFree86-Servers. Als Standard-Desktop wird KDE eingerichtet.

Dual-Boot mit NT-Systemen

Ein etwas größeres Problem besteht, wenn eine Windows-Version aus der NT-Familie auf Ihrem Rechner installiert ist. Diese Betriebssysteme bestehen darauf, dass ihr eigener Boot-Manager ntldr im MBR der ersten Festplatte installiert wird. Außerdem kann der eingebaute Partitionsverkleinerer von SuSE-Linux nur FAT-, aber keine NTFS-Partitionen modifizieren. Wenn Sie also NTFS verwenden, müssen Sie eine komplette Partition für Linux freiräumen – löschen kann der SuSE-Installer sie nämlich ohne Probleme. Eine Alternative besteht darin, die Partition vor der Linux-Installation mit einem kommerziellen Partitions-Manager wie PartitionMagic zu verkleinern.

Nach der Installation von Linux als Zweitsystem auf einem Windows-NT-, 2000- oder XP-Rechner müssen Sie den ntldr dazu bringen, Linux zu booten. Erfreulicherweise kann er nämlich nicht nur Partitionen zum Booten auswählen, sondern Sie können ihm auch ein Image des Bootsektors der gewünschten Partition zur Verfügung stellen.

Angenommen, Sie haben Linux in der zweiten Partition der ersten Festplatte installiert (/dev/hda2). In diesem Fall müssen Sie zunächst Lilo in diese Partition installieren (siehe unten), anschließend müssen Sie den Bootsektor dieser Partition in eine Datei schreiben und dem ntldr zur Verfügung stellen. Dies funktioniert unter Linux – das Sie bis dahin nur von der Installations-CD (Option »Installiertes System booten«) oder Boot-Diskette starten können – mit Hilfe der folgenden Anweisung:

# dd if=/dev/hda2 of=/disk/liloimage bs=512 count=1

Die Anweisung dd kopiert Sektoren von Datenträgern unmittelbar in eine Datei. if und of bezeichnen Quelle und Ziel der Operation – die Quelle ist die Gerätedatei des Laufwerks, nicht etwa dessen Mount Point. bs steht für »block size« in Byte – bei Festplattensektoren sind es 512. count gibt die Anzahl der Sektoren an. In diesem Fall handelt es sich um eine Datei auf einer Diskette, die nach /disk gemountet wurde. Wenn sich auf einer Ihrer Festplatten eine FAT-Partition befindet, können Sie diese ebenfalls mounten und die Datei dorthin schreiben. (Auf NTFS-Partitionen kann Linux bis heute von Hause aus nur lesend zugreifen.)

Diese Image-Datei müssen Sie unter Windows irgendwohin kopieren, wo der ntldr sie lesen kann (in diesem Beispiel einfach direkt nach C:\). Anschließend wird die Konfigurationsdatei des ntldr, boot.ini um den folgenden Eintrag ergänzt:

C:\liloimage="Linux"

Wollen Sie den ntldr sogar so einrichten, dass er automatisch Linux startet, dann muss die Zeile default=... durch die folgende Fassung ersetzt werden:

default=C:\liloimage

Wenn Sie alle in diesem Unterabschnitt beschriebenen Schritte durchgeführt (und womöglich mehrere Male die Installations-CD gewechselt) haben, steht Ihnen nun ein Rechner zur Verfügung, auf dem Sie bei jedem Start zwischen Windows und Linux wählen können. Dies ist erheblich nützlicher als ein PC, auf dem nur eines der beiden Systeme installiert ist. Viele Anwendungsprogramme – von denen etliche in diesem Buch vorgestellt werden – sind nämlich leider nicht für Linux, sondern nur für Windows verfügbar.

SuSE Linux konfigurieren

Fast alle Systemeinstellungen der SuSE-Distribution werden mit Hilfe eines Programms namens yast (Yet Another Setup Tool) durchgeführt. Es gibt zwei Versionen dieses Programms: Version 1 läuft als Vollbildanwendung in der Konsole, während Version 2 GUI-basiert ist. In der Regel werden Sie es in einem modernen System also mit yast2 zu tun haben, das Sie aus KDE oder GNOME über einen einfachen Shortcut aufrufen können.

In diesem Utility werden viele verschiedene Einstellungen vorgenommen. Vor allen Dingen können Sie die gesamte Hardware einrichten, die bei der Installation nicht automatisch erkannt wurde, oder nachträglich ihre Parameter ändern. Auch weiter oben besprochene Konfigurationsaufgaben wie die Benutzer- und Gruppenverwaltung lassen sich über yast leichter bewerkstelligen.

Die meisten Einstellmöglichkeiten werden in der Online-Hilfe von yast genau erläutert, sodass das Programm hier nicht näher behandelt werden muss. Einige Einzelheiten zur Linux-Netzwerkkonfiguration mit yast erfahren Sie in Kapitel 14, Netzwerkanwendung.

Software installieren

Wenn Sie Softwarepakete von den CDs Ihrer Distribution installieren möchten, funktioniert dies mit Hilfe des Paketmanagers. Der verbreitetste Linux-Paketmanager ist rpm (der RedHat Packet Manager, der unter anderem auch von SuSE übernommen wurde). Sie installieren ein solches Paket mit Hilfe der folgenden Anweisung:

# rpm -i Paketname.rpm

Entsprechende Pakete erkennen Sie an der Dateiendung .rpm. Manchmal werden sie auch zum Download angeboten. Häufiger wird heruntergeladene Software allerdings als Quellcode-Archiv mit der Dateiendung .tar.gz verbreitet. Dabei handelt es sich um eine Archivdatei (tar für tape archive), die mit GNU Zip (gzip) komprimiert wurde. Ein solches Paket wird sinnvollerweise in einen leeren Ordner kopiert und anschließend folgendermaßen entpackt und installiert:

# gunzip paket.tar.gz
# tar -xf paket.tar
# ./configure
# make
# make install

Das Programm make dient allgemein dazu, automatische Kompilier- und Installationsanweisungen auszuführen: Da die meisten größeren Programmierprojekte aus vielen einzelnen Quelldateien bestehen, muss ein Makefile angeben, wie sie jeweils kompiliert und zusammengestellt werden sollen.

Einen Kernel kompilieren

Mit Hilfe verschiedener make-Anweisungen können Sie sich übrigens auch Ihren eigenen Linux-Kernel kompilieren, falls der allgemeine Kernel, den der Distributor mitliefert, Ihre spezielle Hard- oder Software nicht unterstützt. Dies geschieht in mehreren Schritten. Als Erstes müssen Sie das Konfigurationsprogramm für die Kernel-Anpassung aufrufen:

# cd /usr/src/linux
# make xconfig

In einem komfortablen GUI-Programm können Sie sich nun eine Kernel-Konfiguration zusammenstellen. Es gibt eine Reihe von Kategorien wie Optimierung für bestimmte Prozessortypen, Netzwerk oder SCSI-Unterstützung. Falls xconfig in Ihrer Distribution nicht enthalten ist, geben Sie make menuconfig ein – es öffnet sich ein ähnliches Programm auf der Konsole.

Im Konfigurationsprogramm können Sie sich bei den meisten Gerätetreibern entscheiden, ob Sie sie fest in den Kernel einkompilieren oder als Module hinzufügen möchten. Letzteres ist für Hardware nützlich, die nicht permanent benötigt wird.

Nachdem die Konfiguration fertig gestellt ist, können Sie an der Konsole (noch immer im Verzeichnis /usr/src/linux) nacheinander die folgenden Befehle eingeben:

# make dep
# make clean
# make modules
# make modules_install
# make zImage

Damit werden nacheinander Abhängigkeiten zwischen verschiedenen Teilen des Kernelcodes überprüft, die Konfiguration »sauber« eingerichtet, die Module kompiliert und installiert und zu guter Letzt der eigentliche Kernel erzeugt. Falls Sie beim letzten Schritt die Meldung erhalten, der Kernel sei zu groß, müssen Sie die Variante make bzImage verwenden. Nach der Fertigstellung befindet sich der Kernel im Verzeichnis /usr/src/linux/arch/i386/boot und heißt zImage beziehungsweise bzImage. Er muss nun an die Stelle des bisherigen Kernels kopiert werden, normalerweise in die Datei /boot/vmlinux.

Beachten Sie, dass Sie danach – noch vor dem ersten Start mit dem neuen Kernel – die weiter oben beschriebene Boot-Konfiguration erneut durchführen müssen.






  

Einstieg in PHP 5

Einstieg in Java

C von A bis Z

Einstieg in C++

Einstieg in Linux

Einstieg in XML

Apache 2




Copyright © Galileo Press GmbH 2004
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de