claim.gif
Linux Magazin Linux User Easy Linux Ubuntu User International Linux Community
Erschienen in EasyLinux 09/2003

Dateiendungen unter Linux -- überflüssig, aber gern gesehen

Ende gut, alles gut

von Fred Andresen


Auf eine Datei zu klicken und der Rechner tut das richtige, ist eine feine Sache. Wenn eine PDF-Datei gleich im Acrobat Reader geöffnet wird, oder ein Brief im Textverarbeitungsprogramm der Wahl, liegt das an den Dateiendungen -- die es unter Linux gar nicht geben sollte.

Woher der Rechner weiß, welche Datei er mit welchem Programm öffnen muss, das unterscheidet sich bei Windows und bei Linux deutlich. Während unter Windows ein Zuordnungssystem einfach die Dateiendungen abfragt -- das sind die drei Buchstaben nach dem letzten Punkt des vollen Dateinamens -- und jeder Endung ein bestimmtes Programm fest zugeordnet ist, benutzt Linux ein ausgeklügelteres Sytem. Es schaut in die Datei hinein, und sieht nach, um was für einen Dateityp es sich wirklich handelt. Dazu liest es die ersten Zeichen einer Datei aus und prüft, aus welchen Zeichencodes und in welcher Anordnung die Bytes bestehen.

Wer bist du denn?

So lässt sich feststellen, ob eine Datei zum Beispiel eine Binärdatei, eine Textdatei oder ein Special-Device-File (eine Garätedatei) ist -- das genügt fürs Erste. Schließlich gibt es unter Linux fast nur, dafür aber die verschiedensten Dateien (siehe Kasten). Linux unterscheidet nach sieben Grundtypen.

*Reguläre Dateien (-) *Verzeichnisse (d) *Symbolische Links (l) *Zeichenorientierte Gerätedateien (c) *Blockorientierte Gerätedateien (b) *Lokale Domain-Sockets (s) *Benannte Pipes (p)

Die Buchstaben in Klammern hinter den Typen stehen für die Kürzel, die das Kommando ls -l ausgibt. Sie entsprechen den englischen Bezeichnungen Directory, Link, Char, Block, Socket und Pipe. Die einfache Datei trägt als Defaulttyp nur ein -. Egal, was auf Ihrem Linux-System existiert: es lässt sich immer einem dieser Typen zuordnen. Linux benötigt also keine Dateiendungen -- Vorteile bieten sie dennoch.

Passende Symbole unter KDE

Zum einen sind da die grafischen Benutzeroberflächen mit ihren Anwednungsprogrammen. Der Konqueror als Dateimanager zeigt aussagekräftige Symbole an (Abbildung 1), richtet sich aber dabei ausschließlich nach der Endung. Dazu benutzt er eine Zuordnungstabelle Endung-Anwendungsprogramm, die Sie über das Kontextmenü jeder Datei (Rechtsklick) und dem Menüpunkt Dateityp bearbeiten anpassen können. In dem aufscheinenden Fenster (Abbildung 2) können Sie die Endung in Form eines so genannten Regulären Ausdrucks angeben (*.cpp), das Anwendungsprogramm bestimmen, mit dem entsprechende Dateien geöffnet werden (hier das Textverarbeitungsprogramm KWrite) oder sogar ein beliebiges Symbol auswählen (Abbildung 3).

Abbildung 1: Der Konqueror zeigt Dateien und Verzeichnisse mit den passenden Symbolen an.
Abbildung 2: Über ein Untermenü können Sie Symbole, Endungen und Programme einander zuordnen.
Abbildung 3: Auf dem System befinden sich bereits etliche Symbole, die sie Ihren Programmen zuteilen können.

Aber Vorsicht: Ändern Sie eine Dateiendung, wird der Konqueror Sie künftig auch mit dem Programm öffnen, das zu der neuen Endung passt (Abbildungen 4 und 5).

Abbildung 4: Ändern Sie bei einer der beiden Textdateien...
Abbildung 5: ...die Endung, hält der Konqueror sie für etwas anderes, hier ein C++-Programm.

Endungen erleichtern die Übersicht

Zum anderen erleichtert eine passende Endung die Zuordnung für uns Menschen. Weil nicht nur Programmierer auf den ersten Blick erkennen möchten, in welcher Sprache eine Programmdatei geschrieben ist, gehört es zum guten Ton, seine Programme mit den aussagekräftigen Endungen .c, .cc, .py, .pl oder .sh zu versehen -- für die Programmiersprachen C, C++, Python, Perl oder die Shell. (Richtig: auch die Text-Benutzeroberfläche Bash auf Ihrem Rechner hat die Funktion einer Programmiersprache.)

Programme, die Dokumente erstellen oder bearbeiten, versehen ihren Output ebenfalls mit individuellen Endungen: .xwf oder .xdc der OpenOffice-Komponenten Writer und Calc sind Beispiele, ebenso die .fig-Endung des beliebten Vektorgrafikprogrammes Xfig oder die .mp3-Endung für Soundprogramme.

Die Programmierung mit Skriptsprachen unter Linux ist im Grunde vergleichbar mit der Batch-Programmierung unter Windows oder dem dort später eingeführten Windows Scripting Host. Es geht darum, die Anweisungen, die der Computer ausführen soll, im Klartext in eine Datei zu schreiben. Wird diese Datei dann "ausgeführt", werden die Anweisungen Zeile für Zeile, oder -- je komplexer die Programmiersprache -- auch in Schleifen oder anderer Struktur abgearbeitet.

Skripte werden interpretiert, das heißt, um Sie auszuführen, ist immer wieder noch ein (anderes) Programm nötig; nämlich das, das die Skriptdatei ausliest, und in eine für den Computer verständliche, ausführbere Folge von Anweisungen "übersetzt".

Compilierte Programme werden schon vorher, bei der Programmerstellung einmalig "übersetzt". Sie liegen als Binärdateien in Maschinensprache vor, also in einer Form, mit die der Computer ohne weiteres ausführen kann. Diese Programme tragen normalerweise auch keine Endung mehr (Vorstufen, etwa C- oder C++-Quelldateien (mit den Endungen .c oder .cc, die noch compiliert werden müssen, schon!).

Und woher weiß nun der Rechner, mit welchem Programm ein solches Skript ausgeführt werden muss, wenn die Endung nicht zwingend zum Inhalt passen muss? Wie schon zu Anfang gesagt: Linux schaut in die Datei hinein.

Magic Moments

Beginnt die erste Zeile einer Skript-Datei mit einer besonderen Zeichenfolge, nämlich "#!", gefolgt von dem Programm, mit dem das Skript ausgeführt werden soll (mit der vollständigen Pfadangabe), dann spricht man von einem so genannten "Shebang", auch "Magic Line" genannt -- zum Beispiel #!/bin/bash. Das ist eine besondere Form einer Kommentarzeile. Ein Kommentar in einem Skriptprogramm ist alles, was in einer Zeile nach einem Raute-Symbol (#) folgt. Er wird, wenn das Programm läuft, einfach ignoriert. Ein gut kommentiertes Programm ist leichter zu lesen und oft auch für Nichtprogrammierer verständlich. Jetzt, wo Sie wissen, woran sie ein Skript erkennen, können Sie auf Ihrem System suchen und das ein oder andere näher betrachten. Vielleicht ist es ja gut kommentiert und Sie erraten, was es kann.

Alles nur Datei

Unter Linux wird eigentlich alles nur wie eine einfache Datei behandelt. Während Windows deutlich zwischen Dateien und Verzeichnissen oder Geräten wie Laufwerken und Druckern unterscheidet, lässt sich unter Linux alles wie eine normale Datei ansprechen. Selbst die physikalischen Geräte, die Laufwerke, der Hauptspeicher, die Soundkarte oder das "schwarze Loch" /dev/null (siehe unsere FAQs auf Seite XXX) -- aus der Sicht des Betriebssystems sind das alles Dateien, in die man etwas schreiben oder aus denen man etwas lesen kann. Allerdings nur grundsätzlich, denn in einem geordneten Betrieb auf einem System, dass für mehrere Benutzer ausgelegt ist, soll natürlich nicht jeder Einzelne wahllos auf Systemressourcen zugreifen. Würden etwa mehrerer Benutzer gleichzeitig Daten auf den Drucker schreiben, kämen die Seiten der verschiedenen Druckjobs in einem bunten Durcheinander aus dem Gerät.

Dateitypen unter Linux

Ein für Anfänger eher schwer zu verstehendes Konzept ist die Maxime "Alles ist eine Datei". Unter Linux begegnen dem Anwender sieben verschiedene Typen, von denen die ersten drei auch Windows-Anwendern bekannt sein dürften.

  • Normale Dateien, auch regular files genannt. Diese Gruppe umfasst alle Dateien, mit denen der Anwender täglich arbeitet, also Textokumente, Bilder, Programme usw.
  • Verzeichnisse, die Container für normale Dateien und Unterverzeichnisse sind.
  • Links oder auch Verknüpfungen. Dabei handelt es sich nicht um eine richtige Datei, sondern um einen Verweis auf eine Datei oder ein Verzeichnis. Windows-Anwender kennen das Konzept aus dem dortigen Startmenü, in dem nicht die Programmdateien selbst, sondern nur Verweise darauf liegen. Löscht man eine solche Verknüpfung, hat das keinen Einfluss auf die Programmdatei.
  • Eine weitere Dateigruppe unter Linux stellen die so genannten Gerätedateien (device files) dar, die sich üblicherweise im Verzeichnis /dev befinden. Man unterscheidet zwischen block- und zeichenorientierten Gerätedateien. Diese Gerätedateien werden normalerweise vom Distributor angelegt, so dass der normale Benutzter sich nicht darum kümmern muss. Da unter Linux alles eine Datei ist, kann man auch diese Gerätedateien wie normale Dateien löschen. Passiert einem so etwas versehentlich, können Sie mit dem Befehl mknod neu angelegt werden. Da man für jedes der Geräte spezielle Kennummern angeben muss (diese Nummern stehen in der Datei devices.txt der Kenelquellen), liefern die Distributoren ein Skript oder Programm mit, dass alle benötigten Gerätedateien (oft sogar wesentlich mehr) automatisch anlegt.
  • Als blockorientierte Gerätedateien gelten alle, die blockweise beschrieben werden, also z. B. IDE- und SCSI-Festplatten. Ein ls -l /dev/hda zeigt als Ausgabe brw-rw---- 1 root disk 3, 0 Feb 2 02:04 /dev/hda. Das zu Anfang stehende b beinhaltet die Information, dass es sich bei der ersten IDE-Festplatte um ein so genanntes block device handelt.
  • Zeichenorientierte Gerätedateien hingegen werden zeichenweise beschrieben. Ein Beispiel dafür ist die parallele Schnittstelle Ihres Rechners (/dev/lp0), an der normalerweise der Drucker hängt. Der erste Buchstabe der Ausgabe von ls -l /dev/lp0 ist daher in diesem Fall kein b, sondern ein c (für character device).
  • Außerdem gibt es noch die so genannten Unix Domain Sockets, mit denen man zwar täglich zu tun hat, die man aber normalerweise nie zu Gesicht bekommt. Eine Suche im Internet fördert unzählige Treffer zur Socket-Programmierung unter Linux zu Tage, aber was es damit eigentlich auf sich hat, erfährt man fast niergends. Bei Sockets handelt es sich um Kontaktpunkte, über die Anwendungen miteinander kommunizieren. Ein Beispiel dafür ist der X-Server und Anwendungen mit grafischer Oberfläche. Das X-Window-System ist netzwerkfähig, so dass Sie über das Internet oder das lokale Netz grafische Anwendungen auf einem entfernten Rechner starten können. Die Kommunikation erfolgt dabei über das TCP/IP-Protokoll. Starten Sie jedoch auf Ihrem lokalen Rechner eine grafische Anwendung, kontaktiert diese den X-Server nicht über TCP/IP, sondern nutzt einen lokalen Kontaktpunkt, eine Socket-Datei. Diese Datei liegt im Verzeichnis /tmp/.X11-unix/ und wird jedesmal benutzt, wenn Sie ein grafisches Programm starten. Das Socket wird automatisch angelegt, sobald Sie die grafische Oberfläche starten. Löschen Sie es mit dem Befehl rm, können Sie zwar mit den bereits geöffneten Anwendungen weiterarbeiten, jedoch keine anderen grafischen Programme mehr starten, da diese keine Verbindung zum X-Server mehr bekommen.
  • Die siebte Gruppe an Dateitypen stellen die named pipes. Diese "benannten Röhren" dienen als Puffer für die Kommunikation zwischen zwei Prozessen, und am ehesten werden wohl Programmierer mit diesen Dateien, die man mit dem Befehl mknod röhrenname -p anlegen kann, in Kontakt kommen. Ein Programm A schreibt in diese Datei etwas herein, was Programm B in exakt dieser Form wieder lesen kann. Die Daten, die zuerst von A geschrieben werden, sind die ersten, die bei B ankommen, weshalb man named pipes auch als Fifo (First in first out) bezeichnet. Schreibt A schneller, als B lesen kann, werden die Daten in der named pipe zwischengespeichert. Schreibt A hingegen die Daten sehr langsam und ist der Puffer leer, wird B so lange gestoppt, bis neue Daten in der named pipe ankommen.

Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.

Druckerfreundliche Version | Feedback zu dieser Seite | Datenschutz | © 2012 Linux New Media AG | Last modified: 2007-01-25 16:27

[Linux-Magazin] [LinuxUser] [Linux-Community] [Admin-Magazin] [Ubuntu User] [Smart Developer] [Linux Events] [Linux Magazine] [Ubuntu User] [Admin Magazine] [Smart Developer] [Linux Magazine Poland] [Linux Community Poland] [Linux Magazine Brasil] [Linux Magazine Spain] [Linux Technical Review]