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

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

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

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

IT-Handbuch für Fachinformatiker
Galileo Computing
ca. 1172 S., 5., aktualisierte und erweiterte Auflage, geb.
ca. 34,90 Euro, ISBN 978-3-8362-1744-6
Pfeil 7 Linux
Pfeil 7.1 Arbeiten mit der Shell
Pfeil 7.1.1 Booten und Login
Pfeil 7.1.2 Virtuelle Terminals
Pfeil 7.1.3 Grundfunktionen der Shell
Pfeil 7.1.4 Hilfefunktionen
Pfeil 7.1.5 Pipes und Ein-/Ausgabeumleitung
Pfeil 7.1.6 Die wichtigsten Systembefehle
Pfeil 7.2 Konfigurations- und Administrationsaufgaben
Pfeil 7.2.1 Syslog und Log-Dateien
Pfeil 7.2.2 Programme automatisch starten
Pfeil 7.2.3 Software installieren
Pfeil 7.3 Automatisierung
Pfeil 7.3.1 Shell-Skripte
Pfeil 7.3.2 Weitere Hilfsmittel
Pfeil 7.4 Editoren
Pfeil 7.4.1 vi
Pfeil 7.4.2 Emacs
Pfeil 7.5 Grafische Benutzeroberflächen
Pfeil 7.5.1 Der X-Server
Pfeil 7.5.2 Desktops
Pfeil 7.6 Netzwerkkonfiguration unter Linux
Pfeil 7.6.1 Grundeinstellungen
Pfeil 7.6.2 TCP/IP-Dienstprogramme
Pfeil 7.6.3 Datei- und Druckserver unter Linux
Pfeil 7.7 Zusammenfassung

Really, I’m not out to destroy Microsoft.
That will just be a completely unintentional side effect.
– Linus Torvalds[30]

7 LinuxZur nächsten Überschrift

Nachdem Sie im vorigen Kapitel das Wichtigste über Windows erfahren haben, geht es hier um eine andere gängige Systemplattform: Linux, inzwischen das am weitesten verbreitete System der Unix-Familie. Viele der Informationen in diesem Kapitel gelten auch für andere Unix-Varianten. Apples Betriebssystem Mac OS X, dessen Unterbau eine BSD-Unix-Version namens Darwin ist, wird im nächsten Kapitel vorgestellt.

Das Betriebssystem Linux wird, wie bereits in Kapitel 5, »Betriebssysteme« erwähnt, in verschiedenen Distributionen angeboten. Die wichtigsten sind:

  • openSUSE, früher SUSE Linux genannt, wurde von der Nürnberger Firma SUSE AG entwickelt, die inzwischen zu Novell gehört. Novell wiederum wurde kürzlich von Attachmate aufgekauft; bisher wurde weitere Unterstützung für openSUSE zugesagt. Die Distribution wurde früher in zwei verschiedenen Versionen angeboten: der Personal Edition für Privatanwender, die vorzugsweise mit Desktopanwendungen 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.
  • Red Hat Linux stammt von dem gleichnamigen amerikanischen Unternehmen und ist die beliebteste Distribution in den USA. Die Entwicklung verlief schon vor einigen Jahren wie bei openSUSE: 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 Red Hat 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 diese Distribution daher nicht zu empfehlen. Fortgeschrittene Anwender können sie 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 zutage, 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:

  • FreeBSD (http://www.freebsd.org/)
  • OpenBSD (http://www.openbsd.org/)
  • NetBSD (http://www.netbsd.org/)

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 - Zum Seitenanfang

7.1 Arbeiten mit der ShellZur nächsten ÜberschriftZur vorigen Überschrift

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 - Zum Seitenanfang

7.1.1 Booten und LoginZur nächsten ÜberschriftZur vorigen Überschrift

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 11.0. Wählen Sie in Ihrem entsprechenden Menü das gewünschte System aus, oder warten Sie, bis die automatische Vorauswahl aktiv wird.

Abbildung

Abbildung 7.1 Das Bootmenü von openSUSE 11.0

Nach dem eigentlichen Booten gelangen Sie zu einem Anmeldebildschirm, sofern Sie keinen automatischen 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 ¢ 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

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

Abbildung

Abbildung 7.3 Grafischer Log-in (kdm) bei openSUSE 11.0

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[31]). 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 im Abschnitt »Grundfunktionen der Shell« auf Seite 371 besprochen. 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 naheliegenden 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«[32] die Buchstabenkombination MLwdnp, auf die niemand kommen kann. Allerdings ist es am sichersten, die acht Zeichen, die in klassischen Unix-Passwörtern zulässig sind, auch auszunutzen.[33] 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 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 - Zum Seitenanfang

7.1.2 Virtuelle TerminalsZur nächsten ÜberschriftZur vorigen Überschrift

Falls Ihr System mit einer grafischen Oberfläche startet, befinden Sie sich nach der Anmeldung auf dem Desktop, der Schreibtischoberfläche. Hier sehen Sie verschiedene Symbole, Menüs und andere Bedienelemente, die in »Desktops« ab Seite 423 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 diese gestartet wurde. Aus der GUI heraus müssen Sie zusätzlich die Alt-Taste festhalten, um wieder in eines der Textterminals 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.. In KDE heißt das zuständige Programm beispielsweise Konsole, in GNOME einfach Terminal. Zusätzlich gibt es Drittanbieter-Terminals wie Terminator, dessen Fläche in mehrere unabhängige Teile unterteilt werden kann.

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 folgenden 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 - Zum Seitenanfang

7.1.3 Grundfunktionen der ShellZur nächsten ÜberschriftZur vorigen Überschrift

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 beherrscht 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 vom USB-Stick oder sogar von der 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. 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. 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 Strg + 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 ¢ abgeschlossen und unmittelbar ausgeführt. Zu lange Eingaben können Sie aber durch einen Backslash (\) und ¢ 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 Abschnitt 7.3, »Automatisierung«)
  2. Shell-Built-ins, 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-Built-in 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, geben Sie Folgendes ein:

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

Der Befehl echo gibt sämtlichen folgenden Text in der nächsten Zeile aus. Das Dollarzeichen sorgt dafür, dass die Shell das folgende 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 ksh: export PATH=$PATH:.
  • 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 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.

Eingabevervollstän-digung

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 ÿ_-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 darunterliegende Verzeichnis dokumente wechseln:

user@rechner: ~ # cd do ÿ_
user@rechner: ~/dokumente #

Angenommen, in Ihrem Home-Verzeichnis befindet sich ein weiteres Verzeichnis namens dokumente2. In diesem Fall wird durch ÿ_ 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 ÿ_ 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 ¢ ausführen.

Neuere Versionen der bash speichern die History übrigens in einer Datei namens .bash_history in Ihrem Home-Verzeichnis, so dass 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:

  • æ oder Strg + B bewegt den Cursor ein Zeichen nach links; Æ oder Strg + F navigiert ein Zeichen nach rechts.
  • Alt + B wandert um ein Wort nach links und Alt + F eines nach rechts; als Grenze gilt jeweils ein Leerzeichen.
  • Mit Strg + A oder Pos1 gelangen Sie zum Zeilenanfang, mit Strg + E oder Ende zum letzten Zeichen der Zeile.
  • Entf oder Strg + D löscht das Zeichen unter dem Cursor, während æ_ oder Strg + H das links davon befindliche Zeichen entfernt.
  • Mit Strg + W entfernen Sie ein Wort.
  • Strg + K löscht den Text von der Cursorposition bis zum Zeilenende.
  • Strg + U entfernt den gesamten Inhalt der Zeile.
  • Strg + 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).
  • Strg + Bild½ beziehungsweise Strg + Bild¼ ermöglichen das Blättern im Puffer des Terminal(fenster)s.
  • Strg + L löscht den Bildschirm.

Maus im Terminal

In modernen Terminalemulationen 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 müssen Sie aber zwischendurch eine Konfigurationsaufgabe erledigen, 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 Strg + D erhalten Sie Ihre normale Shell zurück.


Galileo Computing - Zum Seitenanfang

7.1.4 HilfefunktionenZur nächsten ÜberschriftZur vorigen Überschrift

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

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 mit Hilfe der folgenden Tasten, die vom weiter unten angesprochenen Pager-Programm less bereitgestellt werden, darin blättern und navigieren:

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

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

  • 0: Include-Dateien für eigene C-Programme (siehe Kapitel 9, »Grundlagen der Programmierung«)
  • 1: Shell-Programme
  • 2: Systemaufrufe (Kerneldienste)
  • 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 benutzen 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:

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

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

Abbildung

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


Galileo Computing - Zum Seitenanfang

7.1.5 Pipes und Ein-/AusgabeumleitungZur nächsten ÜberschriftZur vorigen Überschrift

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 (unter Windows ist es beispielsweise genauso): Die Ein- und Ausgabeumleitung basiert auf einer Verknüpfung von stdin, stdout beziehungsweise stderr 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 existiert, 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 (sollte die Datei noch nicht existieren, wird sie dadurch dennoch angelegt):

$ 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

Für den Befehl grep ist diese Schreibweise eigentlich überflüssig, da auch grep Muster Dateiname unterstützt wird – im vorliegenden Beispiel also:

$ 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 Abschnitt 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«, »weniger ist mehr«).

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 die Tastenkombination Alt + 7.

Das Programm less kann auch den Inhalt einer Datei anzeigen und ist auf diese Weise ein komfortabler Ersatz für cat, das der Anzeige einer oder mehrerer Dateien im Terminal dient. 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 beginnt der zweite Befehl einer Pipe bereits 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 mit Hilfe 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

Sie können mehrere Kommandos auch durch ein Semikolon getrennt hintereinanderschreiben. 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 seine 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 - Zum Seitenanfang

7.1.6 Die wichtigsten SystembefehleZur nächsten ÜberschriftZur vorigen Überschrift

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 Abschnitt 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 »openSUSE 11.2« (3. Auflage, Bonn 2010, 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 hintereinandergeschrieben. 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 den nachfolgenden Zeichen in 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 (außer in der im vorigen Kapitel beschriebenen Windows PowerShell).

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 oder 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 mit Hilfe 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 legt im aktuellen Verzeichnis die ineinander verschachtelten Verzeichnisse neu, texte, briefe an:
$ 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 (change owner) 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 (change group) ä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 Abschnitt werden einige der wichtigsten Befehle vorgestellt, die Ihnen die Arbeit mit solchen Dateien ermöglichen.

  • Der bereits erwähnte Befehl echo gibt sämtlichen folgenden 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 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 ¢ 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 Log-Datei nach einem kürzlich aufgetretenen Fehler zu suchen. Hier ein Beispiel, das die letzten 20 Zeilen der Haupt-Log-Datei /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:

  • Die Leertaste blättert eine ganze Bildschirmseite weiter.
  • ¢ blättert nur eine einzelne Zeile weiter.
  • B blättert eine Bildschirmseite zurück.
  • Q beendet less.

Weitere Optionen finden Sie oben in der Beschreibung zu man, da es die Manpages mit Hilfe 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, RegExp). Diese mächtige Syntax für die Formulierung von Suchmustern wird in zahlreichen Programmiersprachen, Editoren und Tools verwendet. In Kapitel 10, »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 davorstehende Muster oder nicht
* das davorstehende Muster beliebig oft
+ das davorstehende Muster einmal oder öfter
{2} das davorstehende Muster genau zweimal
{2, 5} das davorstehende Muster mindestens zweimal, höchstens fünfmal
^[Aa] Am Zeilenbeginn (^) steht ein großes A oder ein 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 mit Hilfe 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 Abschnitt 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:

  • 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. Auch USB-Sticks und externe Festplatten besitzen meist sd*-Gerätenamen.
  • fd0 ist das Diskettenlaufwerk. Theoretisch steht fd1 für das zweite Laufwerk, allerdings benutzt kaum noch jemand zwei Diskettenlaufwerke (die meisten aktuellen Rechner haben gar keines mehr).

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. Moderne Linux-Distributionen mounten übrigens auch CDs, DVDs, USB-Sticks oder externe Festplatten beim Einlegen oder Anschließen automatisch, oft unter dem Pfad /media/Datenträgername.

  • 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 Datenträ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 darstellt.

  • 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 mit Hilfe der Option -t angegeben werden. Beispiele sind etwa das traditionelle Linux-Dateisystem ext2 sowie die neueren Typen ext3 oder ext4. 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 und 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 geben Sie hinter einem Pluszeichen ein Format an, in dem eine Reihe von Formatangaben für die einzelnen Komponenten von Datum und Uhrzeit steht. 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 (01 bis 12)
%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. April 2011, 16:40 Uhr:

$ date 040916402011
  • 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. 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 wird, 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 mit Hilfe 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.

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

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 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 deren Namen angezeigt, dafür aber in einem Baumdiagramm. Auf diese Weise können Sie die Hierarchie von Elternprozessen und ihren Kindern ermitteln.
Abbildung

Abbildung 7.6 Beispielausgabe von »ps aux«

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




Copyright © Galileo Press 2011
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


  Zum Katalog
Zum Katalog: IT-Handbuch für Fachinformatiker






IT-Handbuch für Fachinformatiker
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Java ist auch eine Insel






 Java ist auch
 eine Insel


Zum Katalog: Android 3






 Android 3


Zum Katalog: Linux






 Linux


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu
 GNU/Linux


Zum Katalog: Windows Server 2008 R2






 Windows Server
 2008 R2


Zum Katalog: PHP & MySQL






 PHP & MySQL


Zum Katalog: Visual C# 2010






 Visual C# 2010


Zum Katalog: C von A bis Z






 C von A bis Z


Zum Katalog: C++ von A bis Z






 C++ von A bis Z


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo