Das Konzept von Linux

Linux unterscheidet sich in vielerlei Hinsicht von anderen (nicht UN*X) Betriebssystemen. Anders bedeutet aber nicht unbedingt - wie leider immer wieder behaupted - schwieriger. Bereitschaft zum Umdenken ist allerdings eine Voraussetzung, um erfolgreich mit Linux arbeiten zu können. Daher beschäftigt sich dieser Abschnitt mit den wichtigsten Grundzügen des Betriebssystems.

Kernel

Der Kernel stellt das eigentlich Betriebssystem dar. Die Aufgabe des Kernels besteht darin, Programmen eine einheitliche Schnittstelle zur Hardware zu bieten (Stichwort: "Treiber"), sowie die Resourcen des Computers (z.B. RAM, Festplattenplatz oder Rechenzeit) zu verwalten.

Multiuserfähigkeiten

Wie bereits erwähnt ist Linux ein Un*x Klon. Als die ersten Version von UN*X geschrieben wurden war es nicht üblich, daß jeder Benutzer über einen eigenen (vollwertigen) Computer verfügte, da Computer damals zum einem teuer und zum anderem zu groß waren, um auf einen Schreibtisch zu passen. Stattdessen gab es einen "Mainframe" Rechner, an den über serielle Schnittstellen sogenannte "Terminals" angeschlossen wurden. Ein Terminal war praktisch kaum mehr als ein (Text-) Bildschirm mit angeschlossener Tastatur. D.h. damals teilten sich effektiv mehrere Benutzer einen Computer. Diese Mehrbenutzerfähigkeit hat sich bis heute bewahrt. Obwohl sich die Hardware seit damals drastisch geändert hat, ist es immer noch möglich, daß (unter Linux) bis zu 256 Benutzer gleichzeitig auf einem Computer arbeiten können (Der PC ist hierbei Mainframe und Terminal zugleich).

Jede(r) Benutzer(in) verfügt hierbei über sein/ihr eigenes "Home Directory", ein Verzeichnis, für persöhnliche Daten und Konfigurationen. Jeder User kann sich somit seine Arbeitsumgebung weitesgehend auf seine persöhnlichen Bedürfnisse anpassen, ohne dabei die anderen User zu behindern.

Kommandozeile (Prompt)

Die Bedienung von Linux erfolgt primär Über die Eingabe von Textkommandos, am sogenanten Prompt. Ein Prompt hat typischerweise folgende Gestalt (Variationen sind selbstverständlich möglich und auch wahrscheinlich):

logname@hostname:verzeichnis >_

Dies mag ein kleinwenig altertümlich erscheinen, insbesondere, wenn man graphische Benutzerschnittstellen mit Mausbedienung gewöhnt ist. Bei näherer Betrachtung entpuppen sich (durchdachte) CLI's (=Command Line Interface) allerdings als wesentlich mächtigere und flexiblere Werkzeuge als es GUI's (=Graphical User Interface) jemals sein könnten (mehr dazu später).

Dateien

Eine Datei ist ein "Komplex von Informationen, die inhaltlich zusammengehörend auf einem Massespeicher gespeichert sind." (aus: "Fachbegriffe aus der Welt des Computers" Timelife 1989). Hiernach kann man sich einen solchen Datenbehälter also als einen Aktenordner oder ein Schulheft vorstellen. Unglücklicherweise ist diese Definition sehr stark an DOS angelehnt. Unter UN*X ist der Begriff der Datei wesentlich weiter gefasst. Nahezu alles, selbst Hardware und Benutzer (mehr dazu später) können als Datei betrachtet werden. Darüberhinaus ist eine Datei nicht einmal unbedingt an Speicherung auf auf einen Massespeicher wie z.B. eine Festplatte gebunden, noch muß sie in der Lage sein, überhaupt Daten speichern zu können.
Unter Un*x kann man sich eine Datei eher als eine Art benannte Pipeline vorstellen, an deren einem Ende sich die Daten befinden, am anderem Ende sitzt der Benutzer, der auf diesen Datenpool zugreifen will. Somit es es möglich, unter Angabe eines (Datei-) Namens auf Daten zuzugreifen, ohne sich um deren physikalische Respresentation kümmern zu müssen (dies ist Aufgabe des Betriebssystems). Das Dateikonzept bietet somit eine einheitliche Schnittstelle, über Daten verschiedenster Art und Herkunft abgerufen werden können.

Links: Eine Sonderform der Dateien stellen die sogenannten Links dar. Ein Link stellt einen Querverweis im Dateisystem dar. Technisch gesehen bedeutet dies, daß mehrere Dateieinträge des Dateisystem auf ein und denselben Datenbereich verweisen. Links werden benötigt, wenn eine Datei unter mehr als einem Dateinamen zur Verfügung stehen, oder in mehr als einem Verzeichnis vorhanden sein soll.

Namenskonventionen für Dateinamen:

Suffix Bedeutung
.zip
.gz
Mit dem ZIP Algorithmus komprimierte Datei (Achtung: .gz und .zip sind nicht zueinander kompatibel)
.so Shared Object - Enthällt Programmroutinen, die von mehreren Programmen verwendet werden können.
.h Header Datei - Teil eines C Quellcodes
.c
.cpp
.cc
C bzw. C++ Quelltext
.o Object File - compilierter C (C++) Quellcode, kann mit anderen Object Files zu lauffähigen Programmen gelinkt werden.
.html Hypertext Markup Language - Die Seitenbeschreibungssprache mit der die Dokumente im WWW geschrieben werden
.db Datenbankdatei im DBASE Format
.sh Shellscript (selten verwandtes Suffix) - siehe "Die Shell"
.pl Perlscript (Interpretersprache), ähnlich dem Shellscript
.a Vorgänger der Shared Object's
.gif
.jpg
.tiff
.png
.xbm
.xpm
Verschiedene Bildformate
.au
.wav
.mp3
.mod
Verschiedene Audioformate
.rpm
.tar
.tgz
.deb
Verschiedene Packetformate. Packete enthalten per Packetmanager installierbare Software
.conf Konfigurationsdatei (selten verwendetes Suffix)
.ps Postscript - Eine Seitenbeschreibungssprache der Firma Adobe
.tex LaTeX Datei, LaTeX ist ein Textsatzsystem, zur Erzeugung professioneller (Print-)Dokumente
.dvi DeVice Independent - Übersetzte .tex Datei

Gerätedateien

Die Dateien im /dev Verzeichnis sind, wie bereits angedeutet "Pipelines" zur Hardware des Computers. Die meisten Dateien können (die entsprechenden Zugriffsrechte vorausgesetzt) sowohl ausgelesen als auch beschrieben werden. Einige, welche Statusinformationen über die Hardware liefern können selbstverständlich nur ausgelesen werden, während andere, welche die Hardware konfigurieren nur geschrieben werden können. D.h. auf die einzelnen Hardwarekomponenenten des Computers kann wie auf Dateien zugegriffen werden. Der Vorteil dieses Konzepts liegt klar auf der Hand: Auf diese Weise kann auf die Hardware zugegriffen werden (z.B. aus Shellscripten heraus), ohne daß spezielle Hilfsprogramme geschrieben werden müssen. Die folgende Tabelle enthällt eine Liste der wichtigsten Gerätedateien, samt Beschreibung (die komplette Liste liegt der Dokumentation des Kernels bei):

Gerätedatei Bedeutung
hda
hdb
hdc
hdd
erste
zweite
dritte
vierte
IDE Festplatte
hda1
hda2
hda3
hda4
erste
zweite
dritte
vierte
Festplattenpartition auf der ersten IDE Festplatte
sda siehe hda, nur für SCSI Festplatten
ttyS0
ttyS1
Erste und zweite serielle Schnittstelle (COM1 und COM2 unter DOS)
audio
dsp
sndstat
midi00
Zugriff auf die Soundblasterkarte
psaux Zugriff auf die PS/2 Schnittstelle
lp0
lp1
lp2
Zugriff auf die paralele Schnittstelle

Dies ist selbstverständlich nur eine kleine Zusammenstellung. Eine vollständige Liste findet sich unter :
/usr/src/linux/Documentation/devices.txt

Verzeichnisse

Verzeichnisse sind Behälter für Dateien (sozusagen Dateien, die Dateien enthalten). Ein Verzeichnis kann sowohl Dateien als auch weitere Verzeichnisse enthalten. Verzeichnisse werden hierrarchisch unter dem Wurzel (Root) Verzeichnis angeordnet. Das Rootverzeichniss wird durch den Slash repräsentiert (unter DOS ist es der Backslash). Anders als unter DOS gibt es unter Linux keine Laufwerksbuchstaben. Stattdessen werden "Laufwerke" in den Verzeichnissbaum eingehängt.

Folgende Verzeichnisse haben (laut Filesystemstandard) definierte Bedeutung:

Verzeichnis Bedeutung
/bin Enthält die wichtigsten Befehle zum Betrieb eines Linuxsystems. bin steht hier als Abkürzung für "binary". Unter UN*X ist es unüblich, Befehle direkt in die Shell einzubauen. Stattdessen werden sie typischerweise als externe Programme in Verzeichnisse gelegt, die bin genannt werden (es gibt mehrere solcher bin Verzeichnisse im System).
/boot Enthält alles was zum booten benötigt wird (Kernel, System.map, Bootblöcke, etc.)
/dev Enthält sämtliche Gerätedateien (devices).
/etc Enthält systemweite Konfigurationen, sowie die Passwortdatenbank
/home Unter /home liegen die persöhnlichen Verzeichnisse der Benutzer
/lib Enthällt die wichtigsten Systembibliotheken. Eine Bibliothek (Library) ist eine Sammlung von Routinen, die in einzelnen Programmen verwendet werden können. Durch dieses Auslagern von Programmteilen kann Speicherplatz gespart werden, da ein und diesselbe Routine nicht mehrfach (für jedes Programm einzeln) auf der Festplatte/im Speicher vorhanden sein muß.
/lost+found Bei einem Dateisystemcheck für beschädigt befundene Dateien werden hierhin verschoben (Dateien können z.B beschädigt werden, wenn das System unsachgemäß abgeschaltet wird).
/mnt Universeller "Mountpoint". Dient als unspezifisches Verzeichnis zum (temporären) einhängen von Dateisystemen.
/opt Komplette Programmpakete (z.B. Netscape, StarOffice oder KDE) werden hierhin installiert.
/proc Die Dateien in diesem Verzeichnis geben Aufschluss über das laufende System (laufende Prozesse, Art und Zustand der Hardware, etc). Unter /proc befinden sich nur "virtuelle" Dateien, d.h. keine der Dateien in diesem Verzeichnis existiert wirklich auf der Festplatte. Sie werden vielmehr bei Bedarf erzeugt. Demzufolge benötigt auch keine der hier befindlichen Dateien wirklich Festplattenplatz (auch dann nicht, wenn eine Dateigröße angegeben ist)
/sbin In diesem Verzeichnis befinden sich die wichtigsten Befehle, die der Administrator benötigt.
/tmp Für temporäre Daten
/usr Unter diesem Verzeichnis befindet sich fast alles, was das Basissystem zu einem "benutzbarem" System erweitert.
/var Unter diesem Verzeichnis befindet sich alles, was häufigen Änderungen unterliegt, wie z.B. die Logfiles und die Spoolverzeichnisse für email und news.
/usr/X11 Enthällt das X11 Windowsystem (mehr dazu im Abschnitt Das X Window System
/usr/doc Sammlung von Dokumentationen verschiedenster Art. Unter diesem Verzeichnis findet sich eine Fülle von Informationen verschiedenster Art.
/usr/include Header Dateien für C Bibliotheken. Das Entwicklungssystem ist sehr eng mit dem Betriebssystem verknüpft. Solange man sich nicht mit Programmentwicklung beschäftigt ist dieses Verzeichnis jedoch nur von beiläufigem Interesse
/usr/share Alle Arten von Daten, welche von verschiedenen Benutzern benötigen werden könnten, wie z.B. Audiodateien, Bilder, Wortlisten für die Rechtsschreibkorrektur, o.ä. befinden sich hier.
/usr/local Vorgesehen für lokal installierte, rechnerspezifische Software, die nicht über das Netzwerk verteilt werden kann (der Sinn dieses Verzeichnisses liegt in der Installation von Workstations, die über das Netzwerk booten).
/usr/man Hier befinden sich die Manualpages - Manualpages stellen die Onlineversion des Handbuchs dar.
Einige Verzeichnisse mit spezieller/symbolischer Bedeutung
~ repräsentiert das persöhnliche "Homedir"
/ repräsentiert das Wurzelverzeichnis
. repräsentiert das aktuelle Verzeichnis
.. repräsentiert das übergeordnete Verzeichnis (parentdir)