Workshop Internet-Präsenz

Unix™-Dateisystem

  1. Anliegen dieses Aufsatzes
  2. Was ist Unix™?
  3. Grundlagen des Dateisystems
  4. Dateinamen
  5. Absolute und relative Adressierung
  6. Schutzmechanismen
  7. Berechtigungen
  8. Links und Referenzen
  9. Anmerkung: Warenzeichen

Anliegen dieses Aufsatzes

Web-Dateien werden zumeist auf Server-Rechner abgelegt (gehostet), die unter dem Betriebssystem Unix™ oder einem Derivat (z.B. Linux) arbeiten. Da sich dessen Dateisystem deutlich von denen auf Windows-Rechnern unterscheidet, soll hier ein kurzer Überblick zum Dateisystem gegeben werden, um ein Verständnis für die sich daraus ergebenden Dateinamenskonventionen zu entwickeln. Zum Schluss wird das System der Berechtigungen vorgestellt, um zu verstehen, warum auf Dateien zugegriffen werden kann oder nicht. Die Rechtevergabe geschieht zwar in der Regel ohne Zutun des Web-Autors, gelegentlich muss er aber z.B. im Falle von dynamisch generierten (ausführbaren) Web-Dateien eingreifen.

Was ist Unix™?

Unix ist ein Multitasking-, Multiuser- und netzwerkfähiges Betriebssystem. Es erlaubt den gleichzeitigen Betrieb mehrerer Programme (Multitasking), was technisch über die Zuordnung von Zeitscheiben realisiert wird. Multitasking ist die Voraussetzung dafür, dass mehrere Nutzer gleichzeitig an ein und demselben Rechner arbeiten können (Multiuser). Das setzt natürlich auch einige spezielle Vorkehrungen am Dateisystem voraus wie z.B. Nutzungsbeschränkungen von Verzeichnissen und Dateien und das gleichzeitige Bearbeiten ein und derselben Datei durch verschiedene Nutzer. Netzwerkfähigkeit ist die unbedingte Voraussetzung dafür, das der Rechner als Server in einem Netzwerk eingesetzt werden kann.

Die urpsrüngliche Bezeichnung für Unix war Unics, aber weder Unics, noch Unix oder UNIX sind Akronyme. Gelegentlich wird angegeben, Unix stünde für UNIplexed Information and Computing Service.

Unix wurde an den Bell Laboratories der AT&T von Dennis Ritchie, Ken Thompson, Doug McIlroy und Joseph Ossanna entwickelt. Die erste Version wurde 1969 auf einer DEC PDP-7 implementiert, geschrieben in der prozessoreigenen Maschinensprache. Um die Implementierung auf anderen Systemen zu vereinfachen, wurde die höhere Programmiersprache C entwickelt; 1972–1974 erfolgte die Reimplementierung von Unix in dieser Programmiersprache. Der Vorteil liegt darin, dass nur der Compiler der Programmiersprache C prozessorabhängigen Code erzeugen muss, der deutlich umfangreichere Quellcode des Betriebssystems kann (fast) prozessorunabhängig gestaltet werden.

In der Folgezeit sind verschiedene Abkömmlinge (Derivate) dieses Betriebssystems erstellt worden. Zu diesen Unix-Derivaten gehören z.B. Linux, HP-UX, AIX, IRIX, Solaris, Unixware und Sinix.

Linux stellt eines der wichtigsten Derivate dar, da es für fast alle Computerarchitekturen verfügbar ist; so auch für die weit verbreiteten PCs mit Intel-Prozessoren. Der erste Betriebssystemkernel (Version 0.01), dies ist der zentrale Bestandteil eines Betriebssystems, wurde 1991 vom finnischen Studenten Linus Benedict Torvalds geschrieben. Im folgenden Jahr wurde Linux (in der Version 0.12) erstmalig zusammen mit den passenden Entwicklungswerkzeugen von GNU im Internet veröffentlicht. Da das Betriebssystem aus markenrechtlichen Gründen nicht Unix heißen darf, wurde es nach seinem ersten Autor benannt. Das abschließende X steht für die im UNIX-Bereich eingesetzte Betriebssystemoberfläche X.

Grundlagen des Dateisystems

Das Dateisystem stellt die Rahmenstruktur dar, in der Verzeichnisse und Dateien abgelegt werden können. Verzeichnisse sorgen dafür, dass eine hierarchische Anordnung von Dateien und wiederum Verzeichnissen angelegt werden kann; man spricht von einer baumartigen Struktur.

Das zentrale Element von Unix, sein Betriebssystemkern (Kernel), verwaltet alleinig alle Gerätezugriffe und Prozesse (laufende Programme). Damit stellt es auch als einen wesentlichen Bestandteil das Dateisystem zur Verfügung. Sein Grundkonzept geht aber über die Konzepte anderer Betriebssysteme (z.B.) Windows hinaus, indem es alle Geräte des Computers im Dateisystem als verallgemeinerte Datei abbildet und somit für eine einheitliche Geräteschnittstelle für die verschiedensten Anwendungen sorgt. Zu diesen Geräten gehören Disketten- und CD-Laufwerke, weitere Festplatten des eigenen oder fremder Rechner, Terminals, Bandgeräte und andere „special files“.

Zusammengefasst lassen sich drei Dateitypen unterscheiden:

  1. Normale Dateien („normal files“). Dies sind Datendateien im üblichen Sinne: Text-, Bild-, Binär- und vergleichbare Dateien,
  2. Verzeichnisse („directories“). Diese Dateien dienen zur Strukturierung des Dateisystems, ermöglichen Zugriff auf normale Dateien auch über mehrere Namen (alias). Die Speicherung von Verzeichnisinformationen erfolgt in Datendateien; sie werden aber als Directory-Dateien gekennzeichnet.
  3. Spezialdateien („special files“) bilden die verschiedenen Ein- und/oder Ausgabegerät im Dateisystem ab. So bedeutet Drucken z.B. Kopieren einer Datei auf den Drucker.

Da alle Geräte in einem Dateisystem integriert sind, besitzt es als Ursprung nur ein Wurzelverzeichnis „/“, es ist die Wurzel („root“) des Hierarchiebaumes. Es gibt somit z.B. keine Laufwerksbuchstaben oder spezielle Gerätebezeichner, wie sie unter DOS und Windows üblich sind. Weitere Dateisysteme (z.B. weitere Festplatten bzw. Festplattenpartitionen) kann man an beliebigen Stellen in diese Struktur einhängen (mounten).

Unterhalb der Wurzel gibt es mehrere standardisierte Unterverzeichnisse. Das für den Anwender wichtigste Unterverzeichnis ist /home, das es die Nutzerdaten aller Nutzer enthält. Im Wurzelverzeichnissen sind nur Dateien enthalten, die beim Systemstart benötigt werden.

Unterverzeichnis Bedeutung
/bin Systemverwaltungsprogramme, die nicht spezifisch für den Superuser (Administrator) sind
/boot (Linux) Dateien des Bootmanagers und die Kernel
/dev Gerätetreiberdateien der gesamten Hardware
Unterverzeichnis Bedeutung
/dev/null Leergerät, „Nirvana“
/dev/cdrom* CD-ROM-Laufwerk(e); das Sternchen kennzeichnet die Möglichkeit, mehrere funktionsgleiche Geräte z.B. über eine Zahl zu unterscheiden
/dev/fd* Diskettenlaufwerk(e)
/dev/hd* Festplattenlaufwerk(e)
/dev/lp* Parallele Schnittstelle(n)
/dev/sd* SCSI-Festplatten-Laufwerke
/dev/ttyS* serielle Schnittstellen
/etc Alle lokalen Konfigurationsdateien
/home Standardgemäßer Ort aller Heimatverzeichnisse der Nutzer
/lib Beim Systemstart benötigte Bibliotheken
/lost+found Aufnahmeort der bei einer Festplattenüberprüfung aufgefundenen „herrenlosen“ Dateien
/mnt Mountpunkt zusätzlicher Laufwerke wie CD-ROM (/mnt/cdrom) und Diskette (/mnt/floppy)
/opt Software, die nicht zum üblichen Installationsumfang von Unix-Systemen gehört
/root Home (Heimatverzeichnis) des Administrators
/sbin Wichtige, beim Systemstart benötigte Systemprogramme, Aufruf nur durch Administrator möglich
/tmp Ablage temporärer Dateien, jeder Nutzer ist dazu berechtigt
/usr User system ressources; weitere Hierarchieebene für System- und Anwendungsprogramme
Unterverzeichnis Bedeutung
/usr/bin Die meisten Nutzerprogramme
/usr/include Headerdateien für C-Programme
/usr/local Anwendungen, die nicht zum Standardumfang von Unix gehören
/usr/man Manuals (Online-Hilfe)
/usr/sbin (weniger wichtige) Systemprogramme, architekturunabhängig
/var Variable Daten, Aufnahmeort für Dateien, die ständiger Veränderung unterliegen (z.B. Protokollierungen, Druckerspooler-Dateien) oder nur kurze Zeit existieren.

Dateinamen

Das traditionelle Dateisystem unter UNIX unterscheidet Groß- und Kleinschreibung, der Dateiname darf 1 bis 255 Zeichen lang sein. In frühen Versionen waren nur 1 bis 14 Zeichen erlaubt. Es dürfen alle Zeichen außer dem Schrägstrich „/“ und dem Nullzeichen (hexadezimal #00) verwendet werden.

Allerdings sollte auf Leerzeichen, Zeilentrenner, so genannten Wildcards „*“ bzw. „?“ generell und auf den Punkt als erstem Zeichen verzichtet werden. Sie bringen häufig Probleme bei der Eingabe und der Auswertung in Skripten mit sich. Dateien, deren Namen mit einem Punkt beginnen, werden üblicherweise als „versteckte“ Dateien behandelt und nicht angezeigt.

Dateinamen-Erweiterungen, wie sie z.B. von DOS und Windows bekannt sind, besitzen unter Unix keine spezielle Bedeutung, dürfen aber der Übersichtlichkeit halber mitgeschrieben werden. .html bezeichnet so auch Web-Dateien. Auch ausführbare Programme enthalten keine Dateinamen-Erweiterung. Ausführbare Dateien werden über eine spezielle Berechtigung als solche gekennzeichnet.

Ein Dateiname kann keinen oder mehrere Pfadnamen (Verzeichnisnamen) enthalten, die Pfade werden jeweils durch einen „normalen“ Schrägstrich „/“ getrennt. Der letzte Name kennzeichnet dann die eigentliche Datei. Pfade dürfen auch symbolische Links auf Verzeichnisse und Dateien sein.

Beispiel:

/home/gruppe1/nutzer1/projekt1/datei1
datei1
../datei1

Es gibt auch spezielle Dateinamen: Der Dateiname „.“ (Punkt) bezeichnet das aktuell benutzte Verzeichnis, der Dateiname „..“ (zwei Punkte) verweist auf das übergeordnete Verzeichnis.

Absolute und relative Adressierung

Unter Unix kann ein Dateiname absolut (bezogen auf das Wurzelverzeichnis) bzw. relativ (bezogen auf das aktuell verwendete Verzeichnis) angegeben werden. Relative Angaben bieten sich an, wenn die absolute Angabe nicht bekannt ist, zu umständlich ist oder eine Verlagerung ganzer Verzeichnisteile zukünftig vorgesehen ist. Innerhalb der verlagerten Verzeichnisstruktur bleiben relative Dateinamen gültig.

Ein absoluter Dateiname beginnt immer mit dem Schrägstrich „/“ des Wurzelverzeichnisses (root), er muss also alle Pfadnamen enthalten. Beispiel:

/home/gruppe1/nutzer1/projekt1/datei1

Ein relativer Dateiname darf in keinem Fall mit einem Schrägstrich beginnen; das Aufsuchen der Datei beginnt im aktuellen Verzeichnis. Es dürfen aber die speziellen Pfadnamen „.“ und „..“ verwendet werden. Beispiele:

datei1
nutzer1/projekt1/datei1
./nutzer1/projekt1/datei1
../../datei2

Die Angaben „nutzer1/projekt1/datei1“ und „./nutzer1/projekt1/datei1“ sind identisch; im Terminalbetrieb muss aber häufig „./“ zusätzlich mit angegeben werden. „..“ bedeutet, dass, vom aktuellen Verzeichnis beginnend, in das übergeordnete Verzeichnis gewechselt wird.

Schutzmechanismen

Jede Datei besitzt drei Angaben, die einen Schutz gegenüber anderen Nutzern als dem Ersteller-Nutzer ermöglichen:

  1. Jede Datei hat einen Eigentümer, der über seine Nutzerkennung (user id, kurz: uid) kenntlich ist.
  2. Jede Datei besitzt eine Gruppenzugehörigkeit, die über ihre Gruppenkennung (Group id, kurz: uid) kenntlich ist. Üblicherweise gehört der Eigentümer dieser Gruppe an.
  3. Jede Datei besitzt zwölf voneinander unabhängige Schutzbits, die wichtigsten neun werden nachfolgend beschrieben.

Bei der Erstellung einer Datei werden o.g. Angaben automatisch mit Standardwerten befüllt, dies sind u.a. der aktuelle Nutzer und seine primäre Nutzergruppe. Eine Datei lässt sich vom Besitzer oder dem Administrator auch einem anderen Nutzer übertragen.

Berechtigungen

Jeder Datei bzw. Verzeichnisdatei besitzt zwölf voneinander unabhängige Schutzbits, die wichtigsten neun beschreiben die Rechte der drei Nutzergruppen Eigentümer (Owner), Gruppe (Group) und andere (Other). Für alle Nutzergruppen kann der Zugriff lesend, schreibend oder ausführend gewährt werden. Kombinationen sind beliebig möglich. In der Dateiübersicht werden diese Rechte in der genannten Reihenfolge mit den Buchstaben r (readable), w (writable) und x (executable) gekennzeichnet. Ein fehlendes Recht erhält ein Bindestrich „-“.

Owner Group Other
r w x r w x r w x

Die Rechte haben aber, in Abhängikeit davon, ob es sich um eine Datendatei oder eine Verzeichnisdatei handelt, etwas andere Bedeutung:

Recht Datendatei Verzeichnisdatei
r Recht, den Inhalt der Datei zu lesen Recht, die Dateinamen im jeweiligen Verzeichnis angezeigt zu bekommen
w Recht, den Inhalt der Datei zu verändern Recht, die Dateinamen im jeweiligen Verzeichnis zu ändern bzw. Dateien zu löschen oder anlegen. In einigen Fällen ist das zusätzliche Setzen des x-Rechtes notwendig (teilweise in jedem Verzeichnis entlang des Pfadnamens).
x Recht, die Datei auszuführen Recht, das Verzeichnis zu betreten

Links und Referenzen

Anmerkung: Warenzeichen

Unix (AT&T), HP-UX (Hewlett-Packard), AIX (IBM), IRIX (SGI), Solaris (Sun Microsystems), Unixware (Novell, SCO) und Sinix (Siemens) sind eingetragene Warenzeichen. Linux ist eine notorisch bekannte Marke von Linus Torvalds.