Dateisysteme

Das Dateisystem wird in der Regel vom Betriebssystem zur Verfügung gestellt und beinhaltet die Daten und Methoden, die für das Verwalten und Speichern auf Massenspeichergeräten erforderlich sind. Dazu gehören zumindest:

In diesem Kapitel werden die folgenden Dateisysteme näher beschrieben:

FAT (FAT16)

ist das Dateisystem des Betriebssystems DOS und wird auch noch heute von praktisch allen (Windows-) Betriebssystemen erkannt. Namensgebend ist die Verwendung einer Dateizuordnungestabelle (File Allocation Table), die auf der Platte statisch gespeichert ist. Die Dateizuordnungstabelle und ihre Sicherungskopie sind das organisatorische Hauptstück des Systems. Wird eine Datei angelegt, so wird ein Verzeichniseintrag in der FAT erstellt, der Dateinamen, Dateigröße, Datm, Uhrzeit, Startcluster als 16 Bit-Eintrag und Attribute (Versteckt, System, Archiv). Auch der Verzeichnisbaum ist in der FAT abgelegt, sodass beim Verschieben oder Kopieren innerhalb einer Partition lediglich auf die Dateizuordunungszabelle zugegriffen werden muss.

FAT verwendet ein Mindestmaß an Speicherplatz pro Datei, das Cluster genannt wird. Die Clustergröße ist dabei von der Größe der Partition abhängig. Unterstützt werden 216 = 65536 Cluster und eine maximale Partitionsgröße von 2 GB, womit auch die maximale Dateigröße 2 GB beträgt. Bei der maximalen Partitionsgröße muss dann aber die Clustergröße

2 GB / 216 = 2*230 / 216 = 215 Byte = 32 KB

betragen. In WindowsNT ist die Partition mit 4 GB beschränkt.

Für Dateinamen gilt die 8.3 - Benennungskonvention, die für Dateinamen nur Zeichen des ASCII-Zeichensatzes (außer: . " \ / [ ] : ; , blank) zulässt und nur Kapitals speichert.

FAT32

ist eine Erweiterung von FAT16 und wurde mit Windows 95 OEM Service Release 2 eingeführt und von Windows 98 und Windows ME verwendet. Ältere Betriebssysteme, auch Windows NT 4.0 können es nicht lesen, außer über bein Netzwerk. Es enthält 32 Bit lange Adresseinträge in der Dateizuordnungstabelle, die nicht mehr statisch liegen muss und beliebig groß werden kann. Auch der Boot Record wurde erweitert. Adressierbar sind

232 = 4 294 967 296 Cluster

womit ebensoviele Dateien verwaltet werden können. Die maximale Dateigröße beträgt 4 GB, die maximale Partitionsgröße 127 GB, bei Windows 2000 lediglich 32 GB, die maximale Datenträgergröße 2 TB.

Besonders augenscheinlich ist die FAT32-Benennungskonvention. Datei- und Verzeichnisnamen können bis zu 255 Zeichen lang sein und beliebige Zeichen (außer: ? " \ / < > * | : ) enthalten. Groß- und Kleinschreibung von Namen wird auf der Oberfläche, nicht aber sensitiv unterschieden.

NTFS

Das Dateisystem NTFS (New Technologie File System) wird nur von WindowsNT - Betriebsystemen erkannt. Das System eignet sich - laut Microsoft - wegen des Platzaufwands für die Verwaltung (>4MB bei 100 MB Partition) am besten für Datenträger mit 400 MB oder mehr, weil die Systemleistung unter NTFS im Gegensatz zu FAT bei größeren Datenträgern nicht abnimmt.

Die Dateizuordnungstabelle heißt bie NTFS Master File Table (MFT) und wird wie bei FAT durch Anlegen von Kopien vor Datenverlust geschützt. NTFS ist ein wiederherstellbares Dateisystem, weil es die Transaktionen, die mit dem Dateisystem durchgeführt werden, protokolliert. Damit können Dateisystemfehler, die etwa durch beschädigte Sektoren der Festplatte entstehen, im laufenden Betrieb repariert werden. Zusätzlich wird Hot Fixing unterstützt.

NTFS verwendet auch das FAT-typische Cluster-Prinzip, wobei die Clustergröße einstellbar ist. Bei der Formatierung werden von WindowsXP folgende Standardwerte verwendet:

Laufwerkgröße Clustergröße Sektoren
512 MB oder weniger 512 Byte 1
513 MB - 1.024 MB (1 GB) 1.024 Byte (1 KB) 2
1.025 MB - 2.048 MB (2 GB) 2.048 Byte (2 KB) 4
2.049 MB und größer 4.096 Byte (4 KB) 8

Hot Fixing

Beim Hot-Fixing verschiebt das Dateisystem im Fall eines Fehlers aufgrund eines fehlerhaften Sektors die entsprechenden Daten in einen anderen Sektor und markiert den ursprünglichen Sektor als fehlerhaft. Dies alles geschieht transparent für alle Anwendungen, die Festplattenschreib- und -lesezugriffe ausführen. Das heißt, die Anwendung erfährt nicht, daß Probleme an der Festplatte vorliegen, auch Fehlermeldung an den Benutzer gibt es keine. Der Benutzer muss auch nie irgendwelche Hilfsprogramme zur Fehlerdiagnose oder Plattenreparatur ausführen.

Benennungskonventionen

Datei- und Verzeichnisnamen können bis zu 255 Zeichen lang sein (einschließlich Erweiterungen). Bei den Namen wird die Groß- und Kleinschreibung zwar beibehalten, bleibt jedoch ohne Wirkung. Das heißt, NTFS unterscheidet nicht auf der Basis von Groß- und Kleinschreibung zwischen den Dateinamen. Die Namen können jedes bleibige Zeichen mit Ausnahme der folgenden enthalten: ? " / \ < > * | :
Zur Zeit können von der Befehlszeile aus nur Dateinamen mit bis zu 253 Zeichen angelegt werden.

Attribute

NTFS speichert eine zusätzliche Zeitangabe aus der hervorgeht, wann zum letzten Mal auf die Datei zugegriffen wurde.

Zugriffsrechte und Besitz

Mit NTFS können sogenannte NTFS-Rechte für den Zugriff auf Dateien und Verzeichnisse an Benutzer, Benutzergruppen und Systemobjekte delegiert werden. Die Rechte umfassen grundsätzlich die Kategorien

wurden aber in den letzten Versionen erheblich verfeinert. Die NTFS-Rechte können innerhalb des Verzeichnisbaums vererbt werden.

Zusätzlich haben Dateien und Verzeichnisse ein Attribut Besitzer, das zunächst mit jenem Benutzer belegt wird, der das Objekt erstellt hat. Grundsätzlich ist es Berechtigten wie Administratoren auch möglich, den Besitz an Dateien oder Verzeichnissen zu übernehmen. Dem Ersteller-Besitzer können anonym NTFS-Rechte auf Dateisystemobjekten zugewiesen werden, womit sich Verzeichnisse schaffen lassen, auf die auch der Systemadministrator keinen Zugriff hat.

Feste Verknüpfungen

Eine feste Verknüpfung liegt vor, wenn zwei verschiedene Dateinamen in verschiedenen Verzeichnissen auf die gleichen Daten verweisen.

Einschränkungen

Die maximale Größe von Dateien und Datenträgern beträgt

264 Byte = 16 Exabyte = 18.446.744.073.709.551.616 Bytes

Grundlegende Hardwarebeschränkungen begrenzen möglicherweise die Partitionsgrösse eines Dateisystems zusätzlich. Insbesondere kann eine Bootpartition nur 7.8 GB gross sein, und in der Partitionstabelle besteht eine 2-Terabyte Begrenzung.

Verschlüsselung

Das NTFS 5.0-Dateisystem kann Daten in Dateien automatisch verschlüsseln und entschlüsseln, während sie auf die Festplatte geschrieben oder von dieser gelesen werden.

Datenträgerkontingente

Administratoren können die Menge an Festplattenspeicher, die Benutzer belegen dürfen, für jedes einzelne Volume festlegen und begrenzen.

Analysepunkte

Programme können ausstehende Operationen für Objekte im Dateisystem ermitteln und ihren Code ausführen, bevor Dateidaten zurückgemeldet werden. Dieses Feature kann eingesetzt werden, um Dateisystem-Features zu erweitern (wie zum Beispiel Bereitstellungspunkte), die Sie verwenden, um Daten umzuleiten, die von einem Ordner auf ein anderes Volume oder eine physische Festplatte gelesen oder geschrieben werden.

Dateien mit geringer Datendichte

Durch dieses Feature können Programme sehr große Dateien erstellen, dabei aber nur so viel Festplattenspeicher verbrauchen, wie unbedingt benötigt wird.

USN-Journal

Bei diesem Feature wird ein permanentes Protokoll aller Änderungen erstellt, die an Dateien auf dem Volume vorgenommen wurden. Dieses Feature ist einer von drei Gründen, aus denen Windows-Domänencontroller eine NTFS 5.0-Partition als Systemvolume verwenden müssen.

HPFS (High Performance File System)

Das HPFS-Dateisystem wurde im Zusammenhang mit OS/2 1.2 eingeführt mit dem Ziel, den Zugriff auf die größeren Festplattenlaufwerke zu verbessern, die seinerzeit auf den Markt kamen.

HPFS behält die Verzeichnisorganisation von FAT bei, bietet jedoch ergänzend die automatische Sortierung des Verzeichnisses auf der Basis der Dateinamen an. Die Dateinamen selbst können bis zu 254 Zeichen lang sein. Außerdem kann eine Datei bei HPFS aus Daten und speziellen Attributen bestehen, so daß mehr Flexibilität im Hinblick auf die Unterstützung anderer Benennungskonventionen und Sicherheitsfunktionen möglich ist. Als Zuordnungseinheit gelten auch nicht mehr Cluster, sondern physische Sektoren (512 Bytes), wodurch weniger Platz auf der Festplatte verschwendet wird.

Unter HPFS enthalten die Verzeichniseinträge mehr Informationen als unter FAT. Außer der Attributdatei gehören dazu Informationen zu Datum und Uhrzeit der letzten Änderung, der Erstellung und des letzten Zugriffs. Statt auf das erste Cluster der Datei verweisen die Verzeichniseinträge unter HPFS auf den

FNODE

Der FNODE kann die Daten der Datei oder aber Zeiger enthalten, die auf die Daten der Datei oder auf andere Strukturen verweisen, die ihrerseits letztlich auf die Daten der Datei verweisen.

Banding

HPFS organisiert ein Laufwerk als eine Serie von 8-MB-Bändern, und wenn möglich wird eine Datei in einem solchen Band untergebracht. Zwischen den Bändern befinden sich Zuweisungsbitmaps von 2 KB, in denen verzeichnet wird, welche Sektoren innerhalb eines Bands bereits zugewiesen sind und welche noch nicht. Die Bänder steigern die Systemleistung, da der Lesekopf nicht an die logische Spitze (in der Regel Zylinder 0) der Festplatte zurückzufahren braucht, sondern lediglich die nächste Bandzuweisungsbitmap ansteuern muß, um festzustellen, wo eine Datei gespeichert ist bzw. werden soll.

Einsatz

Die (schwindende) Bedeutung von HPFS liegt wohl darin, dass eine Version in WindowsNT (3.1 -3.51) - mit Ausnahme von Hotfixing - integriert ist.

Dateien und Verzeichnisse in UNIX und Linux

Jeder Datei wird ein Verzeichnis zugeordnet. (Im Folgenden wird der englische Begriff "File" für Datei verwendet. An Stelle von "Verzeichnis" verwendet man im Englischen zumeist einen der beiden Begriffe "Directory" oder "Folder".) Ein Directory ist ein spezielles File, das eine Liste aller Files in diesem Directory enthält. Leistungsfähig wird diese Organisation von Files dadurch, dass ein Directory selbst auch wieder Directories enthalten kann, d.h. ein Directory kann ein oder mehrere Files enthalten, die ihrerseits Directories sind. Solche Directories werden Subdirectories ("Unterverzeichnisse") genannt.

Man kann sich diese Struktur als Baum vorstellen, wobei der Ausgangspunkt (das in der Hierarchie am obersten stehende Verzeichnis) die Wurzel (root) des Filesystems darstellt; die weiteren Äste des Baums werden durch Directories und Subdirectories gebildet, die Blätter sind schließlich die einzelnen Files. Eine mögliche Baumstruktur eines Linux-Rechners könnte wie folgt aussehen:

/ - the root directory
|-- bin - programs considered necessary
|-- boot - Linux boot image
|-- dev - devices, like serial ports, printers, hard drives
|-- etc - configuration files for network, X11, mail, etc.
|-- home - where users live (including sysadmin)
|-- lib - software libraries
|-- lost+found - recovered files (from e2fsck)
|-- mnt - where you mount other filesystems
| |-- cdrom
| |-- dos
| |-- flash
| |-- floppy
|-- proc - kernel, device, process status files
|-- root - where the sysadmin works, but doesn’t live
|-- sbin - system binaries (many root-only)
|-- tmp - temp files stored, deleted from here
|-- usr - hosts much, much software, libraries
| |-- X11R6 - X Window System software
| |-- bin - more software
| |-- dict - dictionaries
| |-- doc - FAQs, HOW-TOs, software documentation
| |-- etc - software configuration files
| |-- games - fun, fun, fun!
| |-- i486-linuxaout
| |-- include - header files for programming
| |-- info - GNU information
| |-- lib - more software libraries
| |-- libexec
| |-- local - programs not on CD-ROM
| | |-- bin
| | |-- doc
| | |-- etc
| | |-- games
| | |-- info
| | |-- lib
| | |-- man
| | |-- sbin
| | |-- src - source code to programs
| |-- man - manual pages
| | |-- man1..9n
| |-- sbin
| |-- share
| |-- src - source for Linux!!!
| | |-- linux -> linux-2.0.30
| | |-- linux-2.0.30
| |-- tmp -> ../var/tmp
|-- var - system logs, compressed manual pages

Jeder Benutzer erhält ein Startverzeichnis (home directory; meist /home/benutzername oder /user/home/benutzername) und kann ausgehend von diesem Directory eigene Subdirectories und Sub-Subdirectories erstellen. Üblicherweise gibt es eine obere Grenze für die Tiefe von Subdirectories, zum Beispiel 35. Die baumartige Struktur von Files wurde von UNIX in den Siebzigerjahren des 20. Jhs. populär gemacht und wird seither von praktisch allen Filesystemen übernommen, so auch von MS DOS ab der Version 2 und damit auch von Windows. Daher gilt manches hier Gesagte auch für Windows, obwohl sich die internen Strukturen der Filesysteme unterscheiden.

Die Baumstruktur enthält eine Schwierigkeit bei der Identifikation von Files. Wie kann man beispielsweise zwischen einem File mit dem Namen otto.txt im eigenen Verzeichnis und einem File gleichen Names in einem anderen Verzeichnis unterscheiden? Dafür gibt es die folgende Regel: Wenn man nur den Filenamen angibt, ist das File im eigenen Verzeichnis (current working directory) gemeint. Man hat jedoch immer die Möglichkeit, die vollständige Pfadangabe (full pathname) zu verwenden. Das bedeutet, dass dem Filenamen alle Verzeichnisse, die zu dem File führen, vorangestellt werden:

File im eigenen Verzeichnis (current working directory) otto.txt
File in einem anderen Directory, vollständige Pfadangabe /user/home/meier/otto.txt

In den Filesystemen von UNIX und Linux hat der Punkt im Filenamen übrigens keine besondere Bedeutung; er trennt nicht den "eigentlichen" Filenamen von einem Filetyp. Die Benennung von Files kann mit (beliebig vielen) oder auch ohne Punkt erfolgen. Zur Unterscheidung von unterschiedlichen Files, die logisch miteinander etwas zu tun haben, wird jedoch auch in UNIX/Linux die Konvention benützt, dass der (letzte) Punkt den eigentlichen Filenamen von einer Art "Filetyp-Kennzeichnung" trennt.

Da viele Programme Dateien mit eigenen Filetyp-Kennungen erstellen, ist es oft wünschenswert, die Zuordnung von Filetyp (also die Zeichenfolge nach dem letzten Punkt im Filenamen) zu Programm zu kennen. Eine eigene Website leistet hier Hilfestellung. Die richtige Zuordnung ist auch dann von Bedeutung, wenn in einer grafischen Benutzeroberfläche eine Anwendung durch Doppelklick auf einen Filenamen gestartet werden soll. Lediglich das Macintosh-Filesystem speichert den Namen der richtigen Anwendung in der Datei selbst, alle anderen Systeme müssen die Anwendung über den Filetyp ermitteln.

Die vollständige Pfadangabe, wie z.B. /user/home/meier/otto.txt, beginnt immer mit einem Schrägstrich (slash), der für das Root-Verzeichnis steht. Die anderen Schrägstriche dienen zur Trennung der einzelnen Directory-Namen, also der Unterscheidung des Namens eines Directories vom Namen des nächsten (Sub-)Directories.

In der Liste der standardmäßig vorhandenen Subdirectories gibt es auch ein Verzeichnis /mnt oder /mount. An dieser Stelle können die Directories von weiteren Massenspeichern (Diskettenlaufwerke, CD-ROMs, zusätzliche Festplatten etc.) in das Filesystem eingebunden werden. Das muss nicht unbedingt an der Stelle /mnt oder mount geschehen, ist jedoch gängige Praxis. Interessant dabei ist, dass es sich bei den in den Verzeichnisbaum eingehängten Massenspeichern nicht um dasselbe Filesystem handeln muss: während in Linux üblicherweise das ext2-Filesystem verwendet wird, ist dies bei einer Diskette oder CD-ROM nicht unbedingt der Fall. Bei Disketten wird wohl meist ein FAT-Filesystem vorliegen, bei CD-ROMs das Filesystem ISO-9660.

Durch die elegante Einbindung von Massenspeichern in den UNIX-Dateibaum ist es zunächst unklar, wo sich die einzelnen Laufwerke nun wirklich befinden (es gibt keine Laufwerksbuchstaben in einem solchen Filesystem!). Die Einbindung von Massenspeichern erfolgt durch das Kommando mount. Ihm werden zwei Informationen mitgegeben:

Die Namen der Massenspeicher werden nicht durch einzelne Buchstaben sondern durch eine Buchstabenfolge symbolisiert. Sie beginnt immer mit der Zeichenkette /dev/, wodurch ein Massenspeichername wie eine Pfadangabe aussieht. Tatsächlich kann man den Massenspeicher auch über diese Pfadangabe ansprechen (mit speziellen Programmen, vorzugsweise nur lesend, weil beim Schreiben nicht auf die logische Struktur Rücksicht genommen wird und damit der Massenspeicher Byte für Byte überschrieben wird).

Es bleibt die Frage zu klären, wie die Konvention zur Benennung von Massenspeichern beim PC aussieht und wie die Zuordnung zu den (MS DOS–)Laufwerksbuchstaben erfolgt. Ein PC hat vier IDE-Kanäle für den Anschluss von bis zu vier Massenspeichern (Festplatten, optischen Laufwerken) zur Verfügung: Sie werden als Master und Slave des Primary Channel (1. IDE-Kanal) sowie Master und Slave des Secondary Channel (2. IDE-Kanal) bezeichnet. Die Massenspeicher erhalten folgende Namen:

/dev/hda Master — primary channel (meist erste IDE-Festplatte)
/dev/hdb Slave — primary channel
/dev/hdc Master — secondary channel (oft optisches Laufwerk)
/dev/hdd Slave — secondary channel
/dev/sda erstes SATA-Device
/dev sdb zweites SATA-Device
...  
/dev/fd0 erstes Diskettenlaufwerk
...  

Dadurch sind zwar die Benennungen der einzelnen Geräte (Devices) festgelegt; es bleibt aber noch die Frage zu klären, wie mehrere Partitionen innerhalb eines Massenspeichers unterschieden werden. In MS DOS bzw. Windows erfolgt dies ebenfalls über unterschiedliche Laufwerksbuchstaben. In einem UNIX-Dateibaum werden an die Bezeichnungen (hda, hdb usw.) Ziffern angefügt.

Pro Festplatte können im MBR (Master Boot Record) maximal vier primäre Partitionen festgelegt werden. Anstelle einer primären Partition darf eine so genannte erweiterte Partition eingerichtet werden. Innerhalb einer erweiterten Partition können beliebig viele logische Partitionen erstellt werden, die alle mit einem unterschiedlichen Laufwerksbuchstaben bzw. einer fortlaufenden Nummer gekennzeichnet werden. Die Nummerierung beginnt mit den vier primären (bzw. einer erweiterten und drei primären) Partitionen und setzt sich mit den logischen Partitionen fort:

/dev/sda erste SATA-Festplatte (an Port 1)
/dev/sda1

C: (erste primäre Partition)

/dev/sda2 D: (zweite primäre Partition oder erweiterte Partition)
/dev/sda3 dritte primäre Partition (sofern vorhanden)
/dev/sda4 vierte primäre Partition (sofern vorhanden)
/dev/sda5 E: (logische Partition innerhalb der erweiterten Partition)
/dev/sda6 F: (logische Partition innerhalb der erweiterten Partition)
...  
/dev/sdb zweite SATA-Festplatte (an Port 2)
/dev/hdb1 G: (primäre Partition)
/dev/hdb2 z.B. eine erweiterte Partition
/dev/hdb5 H: (logische Partition)
...  
/dev/hdc I: (z.B. optisches Laufwerk)

Die Reihenfolge der Laufwerksbuchstaben kann allerdings variieren. Einer erweiterten Partition wird kein eigener Laufwerksbuchstabe zugeordnet. Außerdem kann die Vergabe des Laufwerksbuchstabens händisch festgelegt werden.

Erstellung eines Files

Der Ablauf der Erstellung einer Datei in einem UNIX-Filesystem kann folgendermaßen beschrieben werden:

  1. Zunächst wird Platz auf einem Massenspeicher (Festplatte) für die benötigte Anzahl von Bytes reserviert. Der reservierte Bereich muss mindestens so groß sein wie die zu speichernde Zahl von Bytes, er enthält jedoch keine Information über Anfang oder Ende des Files oder den Filenamen.
  2. Ein Eintrag in der Inode-Tabelle wird erstellt. Für diese Tabelle wird ein eigener Bereich auf der Festplatte eingerichtet. Eine Eintragung in der Tabelle (eine Inode) enthält fast die ganze Information über das zu speichernde File, unter anderem der Ort auf der Festplatte, wo das File beginnt, die Größe des Files, der Zeitpunkt, wann das File zuletzt benutzt wurde, und die Zugriffsrechte auf das File. Die Zugriffsrechte regeln die Verfügungsgewalt über das File für die verschiedenen Gruppen von Benutzern (User = Eigner des Files; Group = Gruppe von Benutzern, in der der Eigner Mitglied ist; Others = alle anderen). Diese Informationen können zum Großteil mit dem UNIX-Kommando ls -l abgerufen werden. Jedes File bekommt eine eindeutige Inode-Nummer zugewiesen. UNIX greift über diese Zahl auf das File zu. Lediglich der Inhalt des Files sowie der Filenamen werden nicht in der Inode-Tabelle gespeichert.
  3. Eine Eintragung im zuständigen Directory erfolgt. Sie enthält lediglich zwei Informationen: Die Inode-Nummer und den Filenamen.

Zugriff auf ein File

Ein Zugriff auf das File erfolgt über die Angabe des Filenamens. Daher muss zunächst im betreffenden Directory der Filenamen gesucht werden. Im Directory ist jedem Filenamen eine Inode-Nummer zugeordnet. Über diese Inode-Nummer findet das Filesystem schließlich alle Informationen zu dem gesuchten File, unter anderem natürlich auch den Inhalt.

Ein UNIX-Filesystem unterscheidet nicht, welche Art von Information in einem File enthalten ist. Es ist gleichgültig, ob das File Text oder binäre Informationen enthält; in beiden Fällen besteht das File aus einer Aneinanderreihung von Bytes. Ihre Interpretation erfolgt erst durch das jeweilige Programm, das diesen Bytestrom verarbeitet.

Die Erlaubnis auf den Zugriff wird durch insgesamt neun Bits geregelt; diese neun Bits sind ebenfalls in der Inode-Tabelle enthalten. Zunächst wird der Zugriff auf ein File nach drei Kategorien unterschieden:

Wenn ein Benutzer ein Leserecht auf ein File besitzt, kann er den Inhalt des Files erkennen. Es hat aber deswegen noch nicht das Recht, das File zu ändern oder es zu löschen. Dafür müsste er auch ein Schreibrecht besitzen. Wenn das File ausführbare Maschinenbefehle enthält, muss der Benutzer das Recht "ausführen" besitzen, um das Programm, das im File abgespeichert ist, auch wirklich starten zu können.

Diesen drei Rechten sind drei Bits zugeordnet. Wenn sie gesetzt sind, gilt das Recht als erteilt. Nun können die Zugriffsrechte aber für drei verschiedene Benutzerkategorien unterschiedlich vergeben werden. Es sind dies:

Insgesamt sind also neun Bits erforderlich, um die Benutzerrechte festzulegen. Mit dem Kommando ls -l werden die Benutzerrechte der Files aufgelistet. Die Benutzerrechte werden durch eine Kombination der Zeichen r, w, x und - für die drei Benutzerkategorien ausgegeben. Ein Beispiel könnte wie folgt aussehen:

# ls -l book/*doc
-rw-r--r-- 1 bball bball 78073 Nov 16 19:58 book/24hr06or.doc
-rw-r--r-- 1 bball bball 52287 Nov 16 19:57 book/24hr11or.doc

Die Kombination rw-r--r-- bedeutet, dass der Eigner lesen und schreiben darf, die Gruppe des Eigners und alle anderen jedoch nur lesen. Keiner darf die Datei ausführen. Mit dem UNIX-Kommando chmod können die Zugriffsrechte geändert werden.

Es gibt eine Reihe spezieller Filetypen, die mit einem Buchstaben gekennzeichnet werden, der ganz links in der Ausgabezeile von ls -l (vor den 9 Zeichen für die Zugriffsrechte) zu finden ist. Im obigen Beispiel handelt es sich um keine speziellen Files, daher ist der Filetyp mit "-" gekennzeichnet. Die wichtigsten speziellen Filetypen sind:

Üblicherweise findet man Block und Character Devices im Directory /dev. Der Modem- und Printerausgang ist ein Character Device, während Massenspeicher wie Disketten- oder Festplattenlaufwerke Block Devices sind. Wenn es sich bei einem Filenamen um den Namen eines Directories handelt, beginnt die Ausgabezeile des Kommandos ls -l mit einem "d". Ein symbolischer Link ist ein Verweis auf eine Datei, d.h. eine Datei (oder ein Verzeichnis) kann unter einem weiteren Namen angesprochen werden, wenn ein symbolischer Link existiert. Ein Link kann mit dem Kommando ln erzeugt werden:

# ln -s file1 file2
# ls -l file2
lrwxrwxrwx 1 bball bball 5 Nov 23 11:14 file2 -> file1

Man erkennt, dass file2 ein Link auf das eigentliche File file1 darstellt. Natürlich kann der Link auch in einem anderen Directory existieren.

Arbeit mit Dateien, Pipes

Die meisten Programme benötigen eine oder mehrere (Input-)Dateien, um zu den Eingangsdaten zu gelangen. Die Rechenergebnisse müssen in ähnlicher Weise in eine oder mehrere Dateien abgelegt werden, um auch später auf diese Resultate Zugriff zu haben. Das bedeutet, dass ein Programm typischerweise Daten einlesen muss, bevor es mit seinen Berechnungen beginnen kann. Am Schluss werden andere Daten geschrieben.

Die Information, wo sich die Input-Daten befinden bzw. wohin die Output-Daten geschrieben werden sollen, erfolgt in der Regel durch Angabe von Filenamen (oder Pfadnamen), beispielsweise in der Kommandozeile, mit der das Programm gestartet wird. Dadurch kann vermieden werden, dass ein Programm immer mit Input-Files und Output-Files mit genau festgelegten und unveränderlichen Namen arbeiten muss.

In UNIX (und Linux und MS DOS sowie den "Eingabeaufforderungen" der verschiedenen Windows-Betriebssysteme) gibt es darüber hinaus aber noch einen weiteren Mechanismus, der in vielen Fällen sehr gute Dienste leistet: Bei manchen Arbeiten stellt nämlich der Output eines Programms gleichzeitig den Input für das nächste Programm dar. Auf diese Weise lassen sich mehrere Programme hintereinander ausführen, wobei die Ergebnisse eines Programms gleichzeitig als Input-Daten für das Folgeprogramm dienen. Man kann das in der Kommandozeile ohne Verwendung von Filenamen für die verschiedenen Output- und Input-Dateien durch so genannte Pipes realisieren:

# prog1 input-file | prog2 | prog3 >output-file

In dieser Kommandozeile befinden sich gleich mehrere für UNIX typische Elemente. (Es würde zwar in Windows und MS DOS ebenso funktionieren, doch sind die Programme meist nicht so aufgebaut, dass ihr Output ohne Editiermaßnahmen als Input für ein anderes Programm dienen könnte.)

Zunächst wird das Programm prog1 aufgerufen; ihm wird der Dateiname input-file über die Kommandozeile mitgegeben. Wir nehmen an, dass der Output von prog1 auf dem Bildschirm erscheinen würde. Anstelle einer Ausgabe auf dem Bildschirm wird dieser Output aber über eine Pipe (angegeben durch das Symbol |) an das Programm prog2 weiter geleitet. prog2 könnte seine Input-Daten über die Tastatur in Empfang nehmen; in diesem Fall erhält es aber den Input über die Pipe von prog1. Das Ganze wird beim nächsten Programm (prog3) wiederholt. prog3 würde ebenfalls den Output auf dem Bildschirm ausgeben, wenn nicht eine Redirection (>) angegeben worden wäre: In diesem Fall wird die Ausgabe von prog3 in die Datei output-file übertragen.


zurück
Inhalt
vor