Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
Geleitwort des Fachgutachters
1 Einführung
2 Mathematische und technische Grundlagen
3 Hardware
4 Netzwerkgrundlagen
5 Betriebssystemgrundlagen
6 Windows
7 Linux und UNIX
8 Grundlagen der Programmierung
9 Konzepte der Programmierung
10 Software-Engineering
11 Datenbanken
12 Server für Webanwendungen
13 Weitere Internet-Serverdienste
14 XML
15 Weitere Datei- und Datenformate
16 Webseitenerstellung mit (X)HTML und CSS
17 Webserveranwendungen
18 JavaScript und Ajax
19 Computer- und Netzwerksicherheit
A Glossar
B Zweisprachige Wortliste
C Kommentiertes Literatur- und Linkverzeichnis
Stichwort

Download:
- ZIP, ca. 6,6 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
IT-Handbuch für Fachinformatiker von Sascha Kersken
Der Ausbildungsbegleiter
Buch: IT-Handbuch für Fachinformatiker

IT-Handbuch für Fachinformatiker
3., aktualisierte und erweiterte Auflage
1014 S., 34,90 Euro
Galileo Computing
ISBN 978-3-8362-1015-7
gp 7 Linux und UNIX
  gp 7.1 Arbeiten mit der Shell
    gp 7.1.1 Booten und Login
    gp 7.1.2 Virtuelle Terminals
    gp 7.1.3 Grundfunktionen der Shell
    gp 7.1.4 Hilfefunktionen
    gp 7.1.5 Pipes und Ein-/Ausgabeumleitung
    gp 7.1.6 Die wichtigsten Systembefehle
  gp 7.2 Konfigurations- und Administrationsaufgaben
    gp 7.2.1 Syslog und Logdateien
    gp 7.2.2 Programme automatisch starten
    gp 7.2.3 Software installieren
  gp 7.3 Automatisierung
    gp 7.3.1 Shell-Skripte
    gp 7.3.2 Weitere Hilfsmittel
  gp 7.4 Editoren
    gp 7.4.1 vi
    gp 7.4.2 Emacs
  gp 7.5 Grafische Benutzeroberflächen
    gp 7.5.1 Der X-Server
    gp 7.5.2 Desktops
  gp 7.6 Netzwerkkonfiguration unter Linux
    gp 7.6.1 Grundeinstellungen
    gp 7.6.2 TCP/IP-Dienstprogramme
    gp 7.6.3 Datei- und Druckserver unter Linux
  gp 7.7 Mac OS X
    gp 7.7.1 Mit Aqua arbeiten
    gp 7.7.2 Systemkonfiguration
    gp 7.7.3 Mac OS X-Netzwerkkonfiguration
    gp 7.7.4 Serverdienste unter Mac OS X
  gp 7.8 Zusammenfassung

Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect. – Linus Torvalds [Wirklich, ich habe nicht vor, Microsoft zu zerstören. Dies wird nur ein vollkommen unbeabsichtigter Nebeneffekt sein. ]

7 Linux und UNIX

Nachdem Sie im vorigen Kapitel das Wichtigste über Windows erfahren haben, geht es hier um die andere verbreitete Systemplattform: die diversen Systeme der UNIX-Familie. Den Schwerpunkt bildet das freie, mehr oder weniger UNIX-kompatible Linux (Näheres zu den Unterschieden siehe Kapitel 5, Betriebssystemgrundlagen). Im letzten Abschnitt wird kurz auf Mac OS X eingegangen, dessen Unterbau Darwin ein BSD-UNIX ist, während seine Benutzeroberfläche eine proprietäre Eigenentwicklung von Apple darstellt.

Das Betriebssystem Linux wird, wie bereits erwähnt, in verschiedenen Distributionen angeboten. Die wichtigsten sind:

  • SUSE Linux wurde von der Nürnberger Firma SUSE AG entwickelt, die inzwischen zu Novell gehört. Die Distribution wurde früher in zwei verschiedenen Versionen angeboten: der Personal Edition für Privatanwender, die vorzugsweise mit Desktop-Anwendungen ausgestattet war, und der Professional Edition für Entwickler, Systemadministratoren oder Unternehmen, die zahlreiche Netzwerkanwendungen, Server, Entwicklungswerkzeuge und andere professionelle Programme enthielt. Inzwischen wird die Distribution als Community-Projekt unter dem Namen openSUSE weitergepflegt. Auch die von SUSE bereitgestellten Installations- und Verwaltungsprogramme wurden dafür unter der GPL freigegeben. Zusätzlich gibt es kommerzielle Produkte von Novell, etwa den SUSE Linux Enterprise Server.
  • RedHat Linux stammt von dem gleichnamigen amerikanischen Unternehmen und ist die beliebteste Distribution in den USA. Die Entwicklung verlief schon vor einigen Jahren wie bei SUSE Linux: Ursprünglich wurden eine Personal Edition und eine Professional Edition angeboten. Aus der stark erweiterten Personal-Variante ging das freie Community-Projekt Fedora Linux (früher Fedora Core Linux) hervor, während Unternehmenslösungen weiterhin unter dem Namen RedHat verkauft werden.
  • 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 daher nicht zu empfehlen. Fortgeschrittene Anwender können diese Distribution dagegen am stärksten an eigene Bedürfnisse anpassen. Es gibt allerdings besonders einsteigerfreundliche Distributionen wie Ubuntu Linux, die wiederum auf Debian basieren. Auch das direkt von CD bootende Live-System Knoppix besitzt einen Debian-Unterbau.
  • Mandriva Linux ist aus dem Zusammenschluss des französischen Distributors Mandrake mit der brasilianischen Firma Conectiva entstanden und überzeugt ähnlich wie SUSE durch einen besonders großen Lieferumfang und ein gut durchdachtes Installationsprogramm.

Neben diesen häufigsten Distributionen werden unzählige weitere angeboten, jede von ihnen besitzt ihre besonderen Eigenschaften, Vor- und Nachteile. Die Unterschiede treten nicht so sehr beim normalen Arbeiten mit dem System zu Tage, sondern nur bei der Installation neuer Programme und bei Konfigurationsarbeiten.

Die meisten hier genannten Linux-Distributionen können Sie frei aus dem Internet herunterladen. Bei den Download-Dateien handelt es sich meist um die ISO-Images der Installations-DVDs oder -CDs. Jede handelsübliche Brennsoftware kann diese auf einen Datenträger brennen. In Tabelle 7.1 sehen Sie die URLs der wichtigsten Distributionen.


Tabelle 7.1    Wichtige Linux-Distributionen und ihre Websites
Distribution Website

openSUSE

http://de.opensuse.org/

Fedora Linux

http://fedoraproject.org/wiki/

Debian GNU/Linux

http://www.debian.org/

Ubuntu Linux

http://www.ubuntulinux.org/

Knoppix

http://www.knopper.net/knoppix/

Mandriva Linux

http://www.mandriva.com/


Eine andere Variante freier UNIX-Derivate bilden die verschiedenen BSD-Systeme. Hier die wichtigsten, jeweils mit ihrer Projekt-Website für Informationen und Downloads:

Eine weitere interessante kostenlose Alternative ist OpenSolaris, die Community-Variante von Sun Solaris. Sie können es unter http://www.opensolaris.org/ herunterladen.

Viele der hier genannten Distributionen und Systeme bieten übrigens Live-CDs oder Live-DVDs. Sie können die entsprechenden Images herunterladen, auf einen Datenträger brennen und direkt davon booten, um die Betriebssysteme risikolos auszuprobieren. Eine andere interessante Lösung besteht darin, sie in einer Virtualisierungssoftware wie Vmware oder XEN zu starten; in diesem Fall kann das Image sogar ohne Brennvorgang als virtueller Datenträger eingestellt werden.


Galileo Computing

7.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.


Galileo Computing

7.1.1 Booten und Login  downtop

Die meisten Linux- oder UNIX-Versionen verfügen über irgendeine Art von Bootmenü, das gleich nach dem Einschalten des Rechners und den BIOS-Meldungen angezeigt wird. Falls mehrere Betriebssysteme installiert sind, können Sie hier eines auswählen; ansonsten stehen nur verschiedene Optionen für das System selbst zur Verfügung. In Abbildung 7.1 sehen Sie als Beispiel den Startbildschirm des Bootmanagers von openSUSE 10.2. Wählen Sie in Ihrem entsprechenden Menü das gewünschte System aus oder warten Sie, bis die automatische Vorauswahl aktiv wird.

Abbildung 7.1    Das Bootmenü von openSUSE 10.2

Nach dem eigentlichen Booten gelangen Sie zu einem Anmeldebildschirm, sofern Sie kein automatisches Log-in eingestellt haben. Dieser Bildschirm kann entweder textbasiert sein wie in Abbildung 7.2 oder aber grafisch wie in Abbildung 7.3. In jedem Fall müssen Sie Ihren Benutzernamen und Ihr Passwort eingeben und anschließend Keyboard Return drücken. Bei einem textbasierten Log-in gibt die Passworteingabe übrigens keinerlei optisches Feedback, während bei den meisten grafischen Anmeldebildschirmen Sternchen (***) angezeigt werden.

Abbildung 7.2    Textbasierter Boot- und Log-in-Bildschirm von openSUSE 10.2

Abbildung 7.3    Grafisches Log-in (kdm) bei openSUSE 10.2

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, dessen Anmeldedaten auf traditionelle Weise lokal gespeichert werden, existiert ein Eintrag in der Datei /etc/passwd. Dieser Eintrag enthält verschiedene jeweils 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 (der Originalname des Feldes lautet GECOS [Der Name stammt von einem gleichnamigen Großrechner-Betriebssystem der 1960er-Jahre. ] ). 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 Log-in präsentiert wird – die verschiedenen Shells werden weiter unten genannt. Ein konkreter Eintrag könnte beispielsweise folgendermaßen aussehen:

user:x: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, sondern nur die Markierung x. Das eingesetzte Verschlüsselungsverfahren ist bei korrekter Implementierung so beschaffen, dass die Einträge nicht wieder entschlüsselt werden können (Einwegverschlüsselung). 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 Datei /etc/passwd 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 könnte. 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 zu merken, besteht darin, die Anfangsbuchstaben eines beliebigen Satzes als Passwort zu verwenden. Visuell passende Buchstaben können 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« [Seien Sie froh, wenn Sie den Satz nicht kennen – Er bildet oft den Auftakt zu den sinnlosen »Mein Betriebssystem ist besser als deins«-Debatten im Heise-Forum. ] 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 sie 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 den User root lesbar und nicht für alle Benutzer.


Galileo Computing

7.1.2 Virtuelle Terminals  downtop

Falls Ihr System mit einer 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 Keyboard Strg + Keyboard Alt + Keyboard 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 Keyboard Strg + Keyboard F1 bis Keyboard Strg + Keyboard F6 aufgerufen werden können. Mit Keyboard Strg + Keyboard F7 wechseln Sie dagegen wieder zur grafischen Oberfläche, falls diese gestartet wurde. Aus der GUI heraus müssen Sie zusätzlich die Keyboard 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 (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 Benutzer root angemeldet sind, bekommen Sie einen etwas anderen Prompt zu sehen; beispielsweise folgenden:

rechner: ~ #

Es wird also kein Benutzername angezeigt, und 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.


Galileo Computing

7.1.3 Grundfunktionen der Shell  downtop

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:

  • sh oder bsh, die Bourne Shell, benannt nach ihrem Entwickler, war die ursprüngliche Shell des Bell-Labs-UNIX. Sie ist die kleinste gemeinsame Menge der Fähigkeiten aller anderen Shells.
  • csh, die C-Shell, und ihre Erweiterung tcsh enthalten eine Reihe spezieller Funktionen, die von der Programmiersprache C beeinflusst wurden und besonders den Bedürfnissen von C-Programmierern entgegenkommen.
  • 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.
  • ksh, die Korn Shell, ist der offizielle, bei AT&T entwickelte Nachfolger der bsh. Sie vereint einige Vorteile von Bourne- und C-Shell mit eigenen Erweiterungen. Die ksh selbst ist nicht frei verfügbar, es gibt aber eine freie Variante namens pdksh (Public Domain Korn Shell).
  • sash, die Stand-Alone Shell, ist ein nützliches Hilfsmittel zur Fehlerbehebung: Viele Standard-POSIX-Dienstprogramme sind direkt in die Shell selbst eingebaut und brauchen nicht zusätzlich bereitgestellt zu werden. Ihre Namen beginnen normalerweise mit einem Minuszeichen, um sie von der voll ausgestatteten GNU-Version dieser Tools zu unterscheiden. Für Rettungssysteme, die von USB-Stick oder sogar Diskette starten, ist die sash ideal.

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 die Funktionen der Systemprogramme durch intelligente Verknüpfungen erweitert werden können.

Umgebung

Die Konfiguration, mit der die Shell (und übrigens auch jedes andere Programm) ausgeführt wird, heißt Umgebung (environment). Sie besteht aus der User- und Group-ID, unter der das Programm läuft, aus dem aktuellen Arbeitsverzeichnis sowie aus einer Reihe von Umgebungsvariablen, die von dem Programm ausgelesen werden. Die Shell bezieht ihre Umgebung aus diversen Konfigurationsdateien, insbesondere aus:

  • /etc/profile: zentrale Konfigurationsdatei für alle Shells und alle User. Diese Datei sollte nicht editiert werden; ändern Sie stattdessen ~/.bashrc oder erstellen Sie eine benutzerspezifische ~/profile.local.
  • /etc/profile.d/*: zentrale Konfigurationsdateien für bestimmte Aspekte einzelner Shells
  • ~/.bashrc: bash-spezifische Einstellungen für einen einzelnen Benutzer in dessen Home-Verzeichnis

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 an. 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* & 
[1] 3125 
$

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

In eckigen Klammern wird eine Job-Nummer angezeigt; dahinter erscheint die PID. Statt 3125 werden Sie wahrscheinlich eine andere zu sehen bekommen. Mithilfe 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. Falls sich mehrere Prozesse im Hintergrund befinden, müssen Sie die Job-Nummer angeben. Beispiel:

$ fg 1

Ebenso können Sie ein bereits laufendes Programm nachträglich in den Hintergrund stellen, indem Sie die Tastenkombination Keyboard Strg + Keyboard Z betätigen. Auch in diesem Fall werden Job-Nummer und 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.

Anweisungen werden durch das Drücken von Keyboard Return abgeschlossen und unmittelbar ausgeführt. Zu lange Eingaben können Sie aber durch einen Backslash (\) und Keyboard Return auf mehrere Zeilen aufteilen. Hier ein Beispiel, das in allen Dateien des aktuellen Verzeichnisses und allen Unterverzeichnissen nach dem Text "in diesem Fall werden Job-Nummer und PID angezeigt" sucht:

$ grep -r \ 
> "in diesem Fall werden Job-Nummer und PID angezeigt" \ 
> *

Die Shell sucht nach der Eingabe eines Kommandos in der folgenden Reihenfolge nach einer Möglichkeit, es auszuführen:

1. alias-Definitionen (siehe den nächsten Abschnitt, Automatisierung)
       
2. Shell-Builtins, das heißt Kommandos, die in das Shell-Binary selbst eingebaut sind
       
3. Externe Programme – die in der Umgebungsvariablen PATH angegebenen Verzeichnisse werden der Reihe nach durchsucht.
       

Falls der eingegebene Befehl an keinem der genannten Orte gefunden wird, erhalten Sie eine Fehlermeldung. Falls Sie die bash verwenden und irrtümlich das Windows-Kommando cls zum Bildschirmlöschen eingeben, erhalten Sie beispielsweise diese Ausgabe:

bash: cls: command not found

Möchten Sie wissen, ob es sich bei einem Kommando um ein Alias, ein Shell-Builtin oder ein Programm handelt, können Sie type Kommando eingeben. Hier für jeden Typ ein Beispiel:

$ type ls 
ls is aliased to `/bin/ls $LS_OPTIONS' 
$ type alias 
alias is a shell builtin 
$ type mkdir 
mkdir is hashed (/bin/mkdir)

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. Möchten Sie diese Liste lesen, 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. Beachten Sie, dass UNIX-Systeme, anders als Windows, auch bei Variablennamen zwischen Groß- und Kleinschreibung unterscheiden und dass diese Variable PATH heißt, nicht etwa Path oder path.

Der Wert der Variablen PATH besteht aus einer Liste von absoluten Pfadangaben (mit / beginnend), die durch Doppelpunkte voneinander getrennt werden. In der Praxis ist die Liste meist erheblich länger als im obigen Beispiel.

Im Folgenden soll 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.

Falls 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:

  • sh, bsh, bash und kshexport PATH=$PATH:.
  • csh und tcshset 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 der Praxis sollten Sie sich gut überlegen, ob Sie diese Änderung durchführen möchten, da 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. Wird es nirgendwo gefunden, erscheint eine Fehlermeldung.

Eingabe- vervollstä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 Keyboard 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
    Keyboard Tab
   
user@rechner: ~/dokumente #

Angenommen, in Ihrem Home-Verzeichnis befindet sich ein weiteres Verzeichnis namens dokumente2. In diesem Fall wird durch Keyboard Tab zwar das Wort dokumente ergänzt, aber die Shell weiß noch nicht, ob Sie wirklich das Verzeichnis dokumente meinen oder dokumente2. Deshalb wird ein Warnton ausgegeben. Wenn Sie zweimal Keyboard Tab drücken, wird in den meisten modernen Shells eine Liste der möglichen Alternativen angezeigt.

Ä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 Keyboard Return ausführen.

Neuere Versionen der bash speichern die History übrigens in einer Datei namens .bash_history in Ihrem Home-Verzeichnis, sodass sie beim nächsten Log-in wieder zur Verfügung steht.

In der bash können Sie außerdem viele praktische Tastenkürzel verwenden. Es gibt zwei verschiedene Modi, die nach den weiter unten vorgestellten Texteditoren Emacs und vi benannt sind. Im standardmäßig eingestellten Emacs-Modus können Sie unter anderem folgende Tastenkombinationen verwenden:

  • Keyboard Pfeil links oder Keyboard Strg + Keyboard B bewegt den Cursor ein Zeichen nach links; Keyboard Pfeil rechts oder Keyboard Strg + Keyboard F navigiert ein Zeichen nach rechts.
  • Keyboard Alt + Keyboard B wandert um ein Wort nach links und Keyboard Alt + Keyboard F eines nach rechts; als Grenze gilt jeweils ein Leerzeichen.
  • Mit Keyboard Strg + Keyboard A oder Keyboard Pos1 gelangen Sie zum Zeilenanfang, mit Keyboard Strg + Keyboard E oder Keyboard Ende zum letzten Zeichen der Zeile.
  • Keyboard Entf oder Keyboard Strg + Keyboard D löscht das Zeichen unter dem Cursor, während Keyboard Backspace oder Keyboard Strg + Keyboard H das links davon befindliche Zeichen entfernt.
  • Mit Keyboard Strg + Keyboard W können Sie ein Wort löschen.
  • Keyboard Strg + Keyboard K löscht den Text von der Cursorposition bis zum Zeilenende.
  • Keyboard Strg + Keyboard U entfernt den gesamten Inhalt der Zeile.
  • Keyboard Strg + Keyboard R startet die inkrementelle Suche nach einem History-Eintrag (inkrementell bedeutet, dass die Eingabe eines Zeichens jeweils sofort zum ersten in Frage kommenden Text springt).
  • Keyboard Strg + Keyboard Bild Pfeil auf beziehungsweise Keyboard Strg + Keyboard Bild Pfeil ab ermöglichen das Blättern im Puffer des Terminal(fenster)s.
  • Keyboard Strg + Keyboard L löscht den Bildschirm.

Maus im Terminal

In modernen Terminal-Emulationen können Sie einen beliebigen Text durch Ziehen mit gedrückter linker Maustaste markieren. Ein Klick mit der mittleren Maustaste oder dem Scrollrad fügt diesen Text dann an der Textcursorposition wieder ein. Mäuse mit zwei Tasten lassen sich dabei so konfigurieren, dass ein Klick auf beide Tasten gleichzeitig die mittlere Taste emuliert.

Wie bereits erwähnt, sollten Sie nicht permanent als User 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 »substitute user« oder auch »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 oder Keyboard Strg + Keyboard D erhalten Sie Ihre normale Shell zurück.


Galileo Computing

7.1.4 Hilfefunktionen  downtop

Traditionell ist jedes UNIX-System mit einem eingebauten Hilfesystem ausgestattet, den im vorletzten Kapitel erwähnten Manpages (kurz für manual pages, also Handbuchseiten). Bei Linux-Systemen kommt ein neueres, komfortableres System namens GNU info hinzu. Bei den GNU-Tools, also praktisch allen Systemprogrammen, sind die info-Seiten in der Regel aktueller und ausführlicher als die Manpages.

Manpages

Eine Manpage liefert Informationen über einen bestimmten Befehl, ein Hilfsprogramm oder eine Konfigurationsdatei. Um sie anzuzeigen, wird das Programm man verwendet. Geben Sie beispielsweise Folgendes ein, falls Sie Hilfe zum Befehl ls benötigen, der Verzeichnisinhalte auflistet:

$ man ls

Abbildung 7.4    Die Manpage zum Befehl ls im GNOME-Terminal

Zuerst formatiert man die Hilfeseite, was eine Weile dauern kann. Danach wird die Seite angezeigt (siehe Abbildung 7.4), und Sie können mithilfe der folgenden Tasten, die vom weiter unten angesprochenen Pager-Programm less bereitgestellten werden, darin blättern und navigieren:

  • Keyboard E , Keyboard Return oder Keyboard Pfeil ab – eine Zeile weiter
  • Keyboard Y oder Keyboard Pfeil auf – eine Zeile zurück
  • Keyboard F , Keyboard Leertaste oder Keyboard Bild Pfeil ab – eine Fensterseite weiter
  • Keyboard B oder Keyboard Bild Pfeil auf – eine Fensterseite zurück
  • Keyboard Pos1 – zum Textanfang
  • Keyboard Ende – zum Textende
  • Keyboard / Suchbegriff Keyboard Return – vorwärts nach dem angegebenen Begriff suchen
  • Keyboard ? Suchbegriff Keyboard Return – rückwärts suchen
  • Keyboard N – nächstes Vorkommen des Suchbegriffs
  • Keyboard Shift + Keyboard N – nächstes Vorkommen des Suchbegriffs in der jeweils anderen Richtung
  • Keyboard H – Hilfeseite zur Bedienung von less
  • Keyboard Q – Programm beenden

Jede Manpage gehört zu einer bestimmten Kategorie, die durch eine der folgenden Nummern oder Buchstaben gekennzeichnet werden:

  • 0: Include-Dateien für eigene C-Programme (siehe Kapitel 8, Grundlagen der Programmierung)
  • 1: Shell-Programme
  • 2: Systemaufrufe (Kernel-Dienste)
  • 3: Bibliotheksfunktionen (C-Standardbibliothek etc.)
  • 4: Beschreibung der Gerätedateien (/dev/*) und anderer Spezialdateien
  • 5: Konfigurationsdatei-Formate
  • 6: Spiele
  • 7: Makros (Kombinierte Programme)
  • 8: Administrationsbefehle (in der Regel root vorbehalten)
  • 9: Kernelroutinen
  • n: »new«, neue Tools
  • l: »local« , lokale Tools
  • p: »public«, öffentliche Tools
  • o: »old«, veraltete Tools

Die Buchstaben-Sektionen sind veraltet und werden üblicherweise nicht mehr verwendet. Einige optionale Programme verwenden auch eigene Kategorien. Sie müssen die Kategorie immer dann angeben, wenn es mehrere Einträge mit dem gewünschten Namen gibt. In diesem Fall lautet die Syntax man Kategorie Eintrag. Beispiel:

$ man 1 passwd

Der Befehl whatis Eintrag oder man -f Eintrag zeigt sämtliche Manpages mit dem angegebenen Namen an; die Sektionen stehen in Klammern:

$ whatis passwd 
passwd (lssl)        – compute password hashes 
passwd (1)           – change user password 
passwd (5)           – password file

Die Option man -k String oder das gleichbedeutende Kommando apropos verwendet den eingegebenen Text dagegen als Teilstring:

$ apropos passwd 
htpasswd2 (1)  – Manage user files for basic authentication 
ldappasswd (1) – change the password of an LDAP entry 
passwd (1)     – change user password 
gpasswd (1)    – change group password 
[...]

GNU info

Das Hilfesystem GNU info wird durch den Befehl info aktiviert. Wenn Sie kein Stichwort eingeben, wird der Directory Node angezeigt, in dem Sie eine Übersicht über die verschiedenen Themen erhalten. Die Tastenkürzel, mit denen Sie in GNU info navigieren können, entsprechen im Großen und Ganzen dem weiter unten vorgestellten Editor GNU Emacs. Hier die wichtigsten im Überblick:

  • Keyboard Strg + Keyboard F (forward) – ein Zeichen weiter
  • Keyboard Strg + Keyboard B (backward) – ein Zeichen zurück
  • Keyboard Strg + Keyboard N (next) – eine Zeile weiter
  • Keyboard Strg + Keyboard P (previous) – eine Zeile zurück
  • Keyboard Strg + Keyboard A – zum Zeilenanfang
  • Keyboard Strg + Keyboard E – zum Zeilenende
  • Keyboard Leertaste – eine Bildschirmseite weiter
  • Keyboard Entf oder Keyboard Backspace – eine Bildschirmseite zurück
  • Keyboard M Thema Keyboard Return (menu) – ruft die info-Seite zum angegebenen Thema auf. Falls es zu dem Wort unter dem Cursor eine Seite gibt, wird diese automatisch eingetragen.
  • Keyboard N (next) – eine Seite im aktuellen Oberthema weiterblättern
  • Keyboard P (previous) – eine Seite zurückblättern
  • Keyboard U (up) – eine Ebene nach oben; die oberste Ebene ist der Directory Node
  • Keyboard L (last) – zurück zur vorher angezeigten Seite
  • Keyboard H (help) – Hilfe zu info selbst; zurück mit Keyboard L
  • Keyboard ? – tabellarische Kurzübersicht über info; zurück mit Keyboard L
  • Keyboard Qinfo beenden

In Abbildung 7.5 sehen Sie als Beispiel die GNU info-Seite zum Befehl ls.

Abbildung 7.5    Die GNU info-Seite zu ls im GNOME-Terminal


Galileo Computing

7.1.5 Pipes und Ein-/Ausgabeumleitung  downtop

Eine der praktischsten Eigenschaften der UNIX-Shells besteht in der Umleitung von Ein- und Ausgabe sowie deren 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.

Die Standard-I/O-Kanäle

Die Standardbibliothek der Programmiersprache C kennt drei Standardkanäle (streams) zur Ein- und Ausgabe (Input/Output oder kurz I/O):

  • stdin ist die Standardeingabe. Sie ist normalerweise mit der Tastatur verknüpft.
  • stdout, die Standardausgabe, wird per Voreinstellung auf die Konsole geleitet.
  • stderr schließlich ist die Standard-Fehlerausgabe. Auch sie landet für gewöhnlich auf der Konsole. Vorteil: Wenn Sie stdout in eine Datei umleiten, werden Fehlermeldungen noch immer angezeigt.

Da UNIX und andere Betriebssysteme in C geschrieben sind, besitzen auch sie diese Eigenschaften: Die Ein- und Ausgabeumleitung basiert auf einer Verknüpfung von stdin beziehungsweise stdout mit anderen Dateien oder Geräten.

Ausgabeumleitung

Der Befehl ls dient beispielsweise dazu, den Inhalt des aktuellen Verzeichnisses auszugeben. Möchten Sie diesen Inhalt lieber in eine andere Datei schreiben, 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. Falls 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 a enthalten:

% grep a <<ENDE 
> Hallo 
> liebe 
> Welt 
> ENDE

Die Ausgabe dieser eingegebenen Sequenz lautet folgendermaßen:

Hallo

Die Markierung ENDE bildet das Ende der Eingabe. Die grep-Suchmuster werden im nächsten Unterabschnitt behandelt.

Pipes

Eine weitere Variante der Ein- und Ausgabeumleitung ist die sogenannte Pipe (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 Keyboard AltGr + Keyboard < erzeugt; auf dem Mac ist es die Tastenkombination Keyboard Alt + Keyboard 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 bedeutende Vorteile gegenüber der Verwendung von einzelnen Befehlen: 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 Befehls erhält.

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

$ ls |grep txt

Hier noch ein Beispiel: Es reicht die Ausgabe von ls an das Kommando wc (Wortzähler) weiter; die Option -l sorgt dafür, dass nur Zeilen gezählt werden. Das Ergebnis ist somit die Anzahl der Einträge im aktuellen Verzeichnis:

$ ls |wc -l

Befehlsverkettungen

Sie können mehrere Kommandos auch durch ein Semikolon getrennt hintereinander schreiben. Dadurch werden sie einfach nacheinander ausgeführt. Das folgende Beispiel kommt sehr häufig vor. Die meisten Programme, die Sie selbst aus dem Sourcecode kompilieren können, verwenden diese Sequenz dafür:

# ./configure [Optionen]; make; make install

Ein Nachteil des Semikolons besteht darin, dass auch dann versucht wird, den nächsten Befehl auszuführen, wenn der vorherige fehlschlägt. Abhilfe schafft hier die Verknüpfung mittels && (logisches Und) – der zweite Befehl wird dann nur bei Erfolg des ersten ausgeführt. Schreiben Sie die Sequenz also am besten wie folgt, um ein Programm unbeaufsichtigt zu kompilieren:

# ./configure [Optionen] && make && make install

Das Gegenteil besorgt die Verknüpfung durch || (logisches Oder) – hier wird der zweite Befehl nur dann ausgeführt, wenn der erste fehlschlägt.

Eine letzte Möglichkeit besteht darin, ein Kommando in `Backticks` einzuschließen, um dessen Ausgabe in einem anderen Zusammenhang zu verwenden. Hier ein Beispiel, das die Ausgabe von whoami (Name des aktuell angemeldeten Benutzers) in einen ganzen Satz integriert:

$ echo "Zurzeit ist `whoami` angemeldet." 
Zurzeit ist sascha angemeldet.

Galileo Computing

7.1.6 Die wichtigsten Systembefehle  toptop

In Linux und andere UNIX-Varianten wurden Unmengen von Systemprogrammen eingebaut. Es ist vollkommen aussichtslos, an dieser Stelle auch nur die Hälfte hiervon 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 Linux- oder UNIX-Büchern behandelt, etwa in meinem Buch SUSE Linux 10.x (Bonn 2006, Galileo Press). Einige weitere empfehlenswerte Titel zu diesem Thema werden in Anhang C, Kommentiertes Literaturverzeichnis, genannt.

Bevor es losgeht, sollten Sie sich einige wichtige Fakten über die meisten UNIX-Systemprogramme merken:

  • Im Erfolgsfall erhalten Sie keinerlei Rückmeldung, sondern nur den nächsten Prompt.
  • Dateien werden standardmäßig gelöscht oder überschrieben, ohne zuvor nachzufragen.
  • Die meisten Kommandos können mit einer Vielzahl von Optionen aufgerufen werden, die in der Regel aus einem Minuszeichen und einem Buchstaben (mit Unterscheidung von Groß- und Kleinschreibung) bestehen. Die GNU-Versionen der Tools kennen auch Optionen im Langformat – zwei Minuszeichen, gefolgt von einem ganzen Wort (oder mehreren durch weitere Minuszeichen getrennten Wörtern).

Arbeiten mit Dateien und Verzeichnissen

Einige der grundlegenden 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 den Abschnitt Das virtuelle UNIX-Dateisystem in Kapitel 5, Betriebssystemgrundlagen.

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):

  • Das * ersetzt beliebig viele Zeichen. h*o steht beispielsweise für hallo, hello oder ho.
  • Das ? steht für genau ein Zeichen. Zum Beispiel bezeichnet te?t sowohl test als auch text.
  • 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.
  • 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.
  • 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.
  • 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, so 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:

  • cp (steht 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
  • 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 mehrere Dateien auf einmal nicht umbenennen, sondern nur verschieben.
  • 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.
  • 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. 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.
  • 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.
  • 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 Slash (/) 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 mithilfe einer absoluten Angabe von /home/user/dokumente nach /etc:
user@rechner: ~/dokumente $ cd /etc 
user@rechner: /etc $
  • 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
  • rmdir (remove directory) löscht Verzeichnisse, allerdings nur leere. Zum Löschen verschachtelter Verzeichnisbäume wird rm mit der Option -r verwendet.
  • 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 alle 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.
  • 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
  • chgrp ändert die Gruppe, zu der eine Datei gehört, und funktioniert genau wie chown.

Textanzeige und Textmanipulation

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.

  • Der bereits erwähnte Befehl echo gibt sämtlichen nachfolgenden Text auf der Konsole aus. Sie können den gesamten Text oder einen Teil davon in Anführungszeichen setzen, müssen es aber nicht. Wenn Sie "doppelte" oder gar keine Anführungszeichen verwenden, werden Variablen mit führendem Dollarzeichen durch ihren aktuellen Wert substituiert oder Befehle in Backticks ausgeführt. Beispiele:
$ echo Hallo, $USER! 
Hallo, sascha! 
$ echo Dateien im aktuellen Verzeichnis: `ls -m` 
Dateien im aktuellen Verzeichnis: test.txt, hallo.sh, ...
    • Die ls-Option -m gibt übrigens nur die Dateinamen durch Komma getrennt hintereinander aus.
    • Einfache Anführungszeichen verhindern dagegen die Substitution:
$ echo '`Backticks` liefern die Befehlsausgabe' 
`Backticks` liefern die Befehlsausgabe 
$ echo '$USER' ist zurzeit $USER 
$USER ist zurzeit sascha
    • Die Option -n verhindert den Zeilenumbruch nach der Ausgabe:
$ echo -n "Hier kommt der Prompt: " 
Hier kommt der Prompt: $
  • 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 zusammenzufassen. Die folgende Anweisung schreibt die Dateien teil1 und teil2 in eine neue Datei namens kapitel:
$ cat teil1 teil2 >kapitel
    • Sie können cat mithilfe 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 Keyboard Return nicht mehr ändern. Die folgende Anweisung startet die Eingabe der Datei neu.txt, der Befehl ENDE schließt sie ab:
$ cat > neu.txt << ENDE 
> Neuer Text 
> Noch mehr Text 
> ENDE
  • Der Befehl head Textdatei zeigt nur den Beginn einer Datei an; standardmäßig die ersten zehn Zeilen. Mit der Option -Anzahl können Sie die Zeilenzahl auch wählen. Das folgende Beispiel gibt die ersten sieben Zeilen der Datei test.txt aus:
$ head –7 test.txt
  • Das Kommando tail zeigt umgekehrt das Ende einer Datei an. Dies ist ideal, um in einer Logdatei nach einem kürzlich aufgetretenen Fehler zu suchen. Hier ein Beispiel, das die letzten 20 Zeilen der Haupt-Logdatei /var/log/messages ausgibt:
$ tail –20 /var/log/messages
    • Die Option -f zeigt die letzten zehn Zeilen an und hält danach die Ausgabe offen, um jede neu hinzukommende Zeile automatisch auszugeben.
  • 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:
    gp  Die Keyboard Leertaste blättert eine ganze Bildschirmseite weiter.
    gp  Keyboard Return blättert nur eine einzelne Zeile weiter.
    gp  Keyboard B blättert eine Bildschirmseite zurück.
    gp  Keyboard Q beendet less.
    • Weitere Optionen finden Sie oben in der Beschreibung zu man, da es die Manpages mithilfe von less anzeigt.
    • 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
  • 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 sogenannte 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 9, Konzepte der Programmierung, werden die RegExp-Optionen der Programmiersprachen Perl und Ruby 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
    • Die Option -r erlaubt die rekursive Suche im aktuellen Verzeichnis und allen Unterverzeichnissen. Dabei wird jeweils der Pfad der Datei angezeigt, in der das gesuchte Muster gefunden wird. Das folgende Beispiel sucht in allen Dateien des aktuellen Verzeichnisbaums nach dem Wort Linux:
$ grep -r Linux *
    • Alternativ wird grep häufig über eine Pipe als Filter eingesetzt. Möchten Sie zum Beispiel alle Dateien im aktuellen Verzeichnis angezeigt haben, deren Name mit a beginnt, können Sie Folgendes eingeben:
$ ls |grep ^a
    • Beachten Sie, dass es bei den Mustern größere Unterschiede zu den Dateimustern der meisten Befehle gibt; RegExp-Muster sind erheblich vielseitiger als Letztere. Tabelle 7.2 zeigt eine Übersicht der wichtigsten.

Tabelle 7.2    Die wichtigsten RegExp-Muster für grep
Muster (Beispiel) 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

^[Aa]

Am Zeilenbeginn (^) steht ein großes A oder kleines a.

[0-9]$

Am Zeilenende ($) steht eine Ziffer.


    • 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 (Zahlen 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 Zeichen oder Teilmuster 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. Dieses Suchmuster 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«).
  • diff vergleicht die Inhalte zweier Textinhalte miteinander. Als Argumente werden die Namen der beiden Dateien genannt; die Ausgabe besteht aus denjenigen 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 (einen sogenannten Patch) verbreiten. Mit dem Kommando patch kann ein Benutzer sie dann auf die alte Datei anwenden.
  • wc (word count) zählt die Zeichen, Wörter und Zeilen in einer Textdatei. Standardmäßig werden alle drei Werte angezeigt; alternativ kann die Ausgabe mithilfe der Optionen -c (characters), -w (words) oder -l (lines) auf einen von ihnen beschränkt werden. 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.

  • 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 [Dateisystemtyp] 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:
    gp  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).
    gp  cdrom ist eine alternative Methode, das CD-ROM-Laufwerk anzusprechen.
    gp  sda, sdb und so weiter sind die entsprechenden SCSI-Festplatten in der Reihenfolge ihrer SCSI-IDs.
    gp  fd0 ist das Diskettenlaufwerk. Theoretisch steht fd1 für das zweite Laufwerk, 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.
  • 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.
  • du (disk usage) gibt in Kilobyte an, wie viel Speicher in den angegebenen Verzeichnissen belegt ist.
    • 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.
  • 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 sogenannte 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.
  • mkfs (make file system) dient dem Formatieren eines Datenträgers mit einem bestimmten Dateisystem. Der gewünschte Typ des Dateisystems kann mithilfe 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-Images, die zum Brennen auf CD verwendet werden).
  • date dient der Ausgabe beziehungsweise der Änderung von Systemdatum und Systemuhrzeit. Wie Sie in Kapitel 3, 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 7.3 aufgelistet.

Tabelle 7.3    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.
    • Falls 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 2007, 16:40 Uhr:
$ date 050916402007
  • useradd erstellt ein neues Benutzerkonto unter Linux. Auf den meisten anderen UNIX-Systemen gibt es sehr ähnliche Kommandos, die manchmal anders heißen. Standardmäßig ist das Home-Verzeichnis dieses Benutzers /home/Username. Mithilfe 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 noch 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 mithilfe von -u UID. Falls 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.
    • Mithilfe 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 Log-in-Shell /bin/tcsh einrichten können:
# mkdir /home/neuer 
# useradd -g users -s /bin/tcsh neuer
  • userdel Benutzername entfernt den angegebenen Benutzer.
  • groupadd fügt unter Linux 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.
  • passwd dient zum Ändern von Passwörtern. Wenn Sie den Befehl ohne Argument aufrufen, dient er zum Ä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 dem User 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 dennoch.
  • ps gibt eine Tabelle aller laufenden Prozesse aus. Falls 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. Abbildung 7.6 zeigt ein Beispiel für die Ausgabe dieses Befehls.

Abbildung 7.6    Beispielausgabe von ps aux

    • 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 mithilfe 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 weiter unten beschriebene Protokoll-Daemon, der über die wichtigsten Ereignisse Buch führt.
  • 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.
  • 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. Viele Anwendungen, besonders Daemons, schreiben ihre aktuelle PID in eine PID-Datei, entweder unter /var/run/Programmname.pid oder in einem anwendungsspezifischen Verzeichnis wie /usr/local/Programmname/logs. Diese Datei können Sie auslesen und ihren Inhalt in `Backticks` an kill weiterreichen. Das folgende Beispiel beendet auf diese Weise einen unter /usr/local/apache2 installierten Apache-Webserver:
# kill -TERM `cat /usr/local/apache2/logs/httpd.pid`
    • 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.
  • 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:
    gp  als Uhrzeit im Format hh:mm, zum Beispiel 13:45
    gp  als Anzahl von Minuten in der Schreibweise +m, etwa +5
    gp  now (jetzt sofort)
    • Für den Befehl benötigen Sie root-Rechte. Das folgende Beispiel fährt den Rechner sofort herunter:
$ shutdown -h now


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






 <<   zurück
  
  Zum Katalog
Zum Katalog: IT-Handbuch für Fachinformatiker






IT-Handbuch für Fachinformatiker
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Linux






 Linux


Zum Katalog: Konzepte und Lösungen für Microsoft-Netzwerke






 Konzepte und
 Lösungen für
 Microsoft-Netzwerke


Zum Katalog: Webseiten programmieren und gestalten






 Webseiten
 programmieren
 und gestalten


Zum Katalog: C/C++






 C/C++


Zum Katalog: Java ist auch eine Insel






 Java ist auch
 eine Insel


Zum Katalog: Einstieg in SQL






 Einstieg in SQL


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2008
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, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de