[Next] [Previous] [Top]

UNIX-Lehrtext

5. Das Filesystem


5.1 Struktur

Unix betrachtet eine Datei (File) als kontinuierlichen Informationsfluss, also im wesentlichen als eine Sequenz von Bytes. Ein Byte definiert eine kleine Informationseinheit (auf vielen Systemen ist ein Byte die Grösse des Speicherplatzes, den ein einzelner Buchstabe benötigt). Jede Datei hat einen Namen. Eine spezielle Datei, die die Namen anderer Dateien enthält, wird Verzeichnis oder Directory genannt. Verzeichnisse werden zur Strukturierung der Dateien auf einem System verwendet. Auch die voreingestellten Eingabe- und Ausgabe-Kanäle sind spezielle Dateien.

Die Filestruktur unter Unix ist hierarchisch. Ausgangspunkt ist das root-Directory. Von dort aus entwickelt sich das Filesystem baumartig. Die Abb. zeigt einen kleinen Ausschnitt eines solchen Datei-Baums, in dem als Beispiel auch das Homedirectory des fiktiven Benutzers "arthur" gezeigt wird.
FILESYSTEM

Abbildung: Das Unix-Filesystem

"/home/arthur" ist das Homedirectory des Benutzers arthur, in dem er sich nach dem Einloggen wiederfindet. Auf den meisten Systemen können in csh, tcsh und ksh die Homedirectories mit der Abkürzung "~loginname", also in unserem Beispiel mit

	~arthur 
angesprochen werden. Das eigene Homedirectory wird dann einfach mit "~" bezeichnet.

Es gibt keine Beschränkung für die Zahl der Unterverzeichnisse. Deswegen sollte man Unterverzeichnisse intensiv als Mittel zur Strukturierung des Homedirectories verwenden. So ist es praktisch, ein Subverzeichnis für C-Programme anzulegen und dieses Verzeichnis wieder durch Unterverzeichnisse für jedes Projekt zu untergliedern. Ein Subdirectory namens bin wird oft verwendet, um Binärdateien (ausführbare Programme) abzulegen. Folgende Kommandos braucht man für den Umgang mit Directories:

mkdir <dirname>
lege das neue Subdirectory <dirname> an
rmdir <dirname>
entferne das (leere!) Verzeichnis <dirname>
cd <dirname>
gehe in das Verzeichnis <dirname>
cd ..
gehe im Dateibaum ein Verzeichnis nach oben (Elternverzeichnis)
cd
gehe ins Homedirectory
ls
liste die Dateien im Arbeitsverzeichnis
ls -l
ausführliche Liste des aktuellen Verzeichnisses
pwd
zeige den Namen des aktuellen Verzeichnisses
Das aktuelle Verzeichnis, auch Arbeitsverzeichnis genannt, wird durch einen einzelnen Punkt repräsentiert, das Elternverzeichnis durch zwei Punkte.

Beispiel:
	$ pwd 
	/home/arthur
	$ mkdir test
	$ cd test
	$ pwd
	/home/arthur/test
	$ cd ../work
	$ pwd
	/home/arthur/work
	$ cd
	$ pwd
	/home/arthur
	$

5.2 Dateinamen

Unix stellt keine besonderen Ansprüche an Dateinamen und erlaubt im Prinzip alle Zeichen in Dateinamen. Will man allerdings auf Nummer Sicher gehen, so sollte man sich auf folgende Zeichen in Dateinamen beschränken:

Andere Zeichen können von der Shell missinterpretiert werden. Bei der Verwendung von Gross- und Kleinbuchstaben sollte man daran denken, dass Unix diese unterscheidet. Dateinamen dürfen bis zu 253 Zeichen lang sein. Einige ältere SYSTEM-V-Maschinen lassen allerdings höchstens 14 Zeichen lange Dateinamen zu.

Im Gegensatz zu MS-DOS verwendet Unix keine Extensions (das sind in DOS Teile des Dateinamens, die durch einen Punkt abgetrennt sind und eine spezielle Bedeutung für das Betriebssystem haben). Daher kann man in Unix so viele Punkte in einem Dateinamen verwenden, wie man mag, denn der Punkt hat keine spezielle Bedeutung. Die Feststellung, ob eine Datei ausführbar ist etc. erfolgt in Unix über andere Mechanismen, während dies in DOS über Extensions gesteuert wird. Allerdings verwenden unter Unix einige Anwendungen, z.B. Compiler, die letzten Buchstaben in einem Dateinamen, die durch einen Punkt abgetrennt wurden, zur Einordnung der Dateien. Einige übliche Endungen sind:

.sps
SPSS-Eingabedatei (für statistische Auswertungen)
.ps
PostScript-Datei (PostScript ist eine Graphiksprache)
.eps
einzelne Abbildung im PostScript-Format
.tex
TeX -Quellcode
.dvi
übersetztes TeX
.tar
Archiv-Datei
.Z
mittels compress komprimierte Datei
.gz
mittels gzip komprimierte Datei
.c
C-Quellcode
.f
FORTRAN-Quellcode
Es gibt noch eine Vielzahl solcher Endungen. Die wichtigsten Endungen, die Compiler verwenden, werden im Kapitel über Compiler ab Seite 36 erklärt.

Dateinamen, die mit einem Punkt beginnen, sind "unsichtbar", d.h. ls zeigt diese Dateien nicht an. So beginnen alle Startup-Dateien mit einem Punkt, da man diese nicht bei jedem ls sehen will. "ls -a" zeigt auch unsichtbare Dateien an.

Um eine Datei anzusprechen, kann man entweder den absoluten oder den relativen Pfadnamen verwenden. Der absolute Pfadname besteht aus dem kompletten Pfad vom root-Verzeichnis "/" aus bis zu dem Verzeichnis, in dem sich die Datei befindet. Daher beginnen absolute Pfadnamen immer mit einem "/".

	/home/arthur/plots/plot1.ps
ist z.B. so ein absoluter Pfadname.

Ein relativer Pfadname bezeichnet den Pfad bezüglich des aktuellen Arbeitsverzeichnisses. Folgende relative Pfadnamen beziehen sich auf dieselbe Datei (s. Abb. "Das Unix-Filesystem").

relativer Pfadname
ausgehend vom Arbeitsverzeichnis
plot1.ps von /home/arthur/plots
plots/plot1.ps von /home/arthur
../plots/plot1.ps von /home/arthur/C
Wenn wir im folgenden nur den einfachen Dateinamen ohne jeden Pfad bezeichnen wollen, werden wir "Basis-Dateiname" o.ä. verwenden.

5.3 Automatische Ergänzung von Dateinamen

Manchmal muss man mehrere Dateien ansprechen, will aber nicht jeden Namen einzeln eingeben, oder man will einen langen Dateinamen abkürzen. Die Shell kann Dateinamen automatisch vervollständigen (Filename Expansion oder File Globbing genannt). Die wesentlichen Mechanismen sind:

Sonderzeichen, die für eine Gruppe von Zeichen stehen, werden oft Wildcards oder Jokerzeichen genannt. Speziell ksh und tcsh bieten umfangreichere Werkzeuge zur Dateinamen-Ergänzung an. Siehe auch Anhang: Einfache reguläre Ausdrücke, ab Seite 70.

5.4 Löschen und Umbenennen von Dateien

mv <fname1> <fname2>
nenne Datei <fname1> jetzt <fname2>; eine bereits existierende Datei <fname2> wird dabei gelöscht.
mv <fname> <dir>
verschiebe die Datei <fname> in das Verzeichnis <dir>; die Datei hat nachher denselben Basis-Dateinamen, aber einen anderen Pfadnamen. Wenn <dir> bereits eine Datei desselben Basis-Dateinamens enthält, wird diese überschrieben.
mv <dir1> <dir2>
schiebe das gesamte Verzeichnis <dir1> mit allen Unterverzeichnissen in das Verzeichnis <dir2>. Falls <dir2> schon existiert, wird <dir1> Unterverzeichnis von <dir2>. Falls es noch nicht existiert, wird <dir2> neu erzeugt und ist mit dem alten <dir1> identisch. Auf älteren SYSTEM V-Maschinen kann diese Spielart von mv nicht verwendet werden.
cp <fname1> <fname2>
kopiere die Datei <fname1> nach <fname2>; eine bereits existierende Datei <fname2> wird dabei überschrieben.
cp <fname1> <dir>
kopiere die Datei <fname1> in das Verzeichnis <dir> und behalte dabei denselben Basis-Dateinamen.
cp -r <dir1> <dir2>
kopiere alle Dateien in <dir1> sowie die Unterverzeichnisse rekursiv nach <dir2>, so dass die Datei/Verzeichnis-Struktur erhalten bleibt. Auf älteren SYSTEM V-Maschinen ist dies nicht möglich.
rm <fname>
Lösche die Datei <fname>. Im Gegensatz zu MS-DOS ist dieses Kommando unter Unix unwiderruflich!

5.5 Zugriffsrechte

Das Kommando "ls -l index.html" in /home/arthur/public_html könnte folgende Ausgabe liefern:

	-rwxr-xr--  1 arthur     3451 Jul 25 13.15 index.html
Das Minuszeichen am Anfang bedeutet, dass es sich bei index.html um eine einfache Datei (also kein Verzeichnis etc.) handelt. Bei einem Verzeichnis wäre ein "d" zu sehen. Die nächsten 9 Zeichen erklären die Zugriffsrechte für diese Datei. Nach der Ziffer 1 für die Zahl der Links (Links sind zusätzliche Namen, unter denen eine Datei angesprochen werden kann) steht der Besitzer der Datei, dann die Grösse in Bytes und das Datum der letzten Aenderung. Die letzte Spalte ist der Dateiname.

Drei Dinge kann man mit einer Datei tun: lesen, darauf schreiben und ausführen. Die Zugriffsrechte legen nun fest, wer was mit dieser Datei tun darf. Dabei werden drei Arten von Benutzern unterschieden: der Besitzer u (user), die Gruppe g (group) und der Rest der Welt o (others). Die ersten drei Zeichen der Zugriffsrechte zeigen, dass der Besitzer der Datei diese lesen r (read), schreiben w (write) und ausführen x (execute) darf. Die nächsten drei Zeichen geben die Rechte für die Gruppe an. Die Mitglieder der Gruppe dürfen das File lesen und ausführen, aber nicht darauf schreiben. Falls man sich nicht sicher ist, zu welcher Gruppe eine Datei gehört, kann man diese Information mithilfe von "ls -lg" erhalten, auf AIX genügt "ls -l". Die letzten drei Zeichen bedeuten, dass die Datei von allen Benutzern, die weder Besitzer noch Gruppenangehörige sind, zwar gelesen, aber weder beschrieben noch ausgeführt werden darf.

Zugriffsrechte können mittels des Kommandos chmod geändert werden. Dabei gibt man an, für wen die Rechte geändert werden sollen, nämlich für den Besitzer (u), die Gruppe (g), alle anderen (o) oder alle drei zusammen (a für all). Ein Plus- bzw. Minuszeichen dient der Angabe, ob ein bestimmtes Recht für diese Benutzer hinzugefügt oder entfernt werden soll. Die Rechte selbst werden durch r, w und x bezeichnet. Mit einem "=" wird ein Recht komplett neu gesetzt.

	$ chmod u-x index.html
macht die Datei für den Besitzer arthur nicht-ausführbar:

	$ ls -l index.html
	-rw-r-xr--  1 arthur     3451 Jul 25 13.15 index.html
Das folgende Kommando sorgt dafür, dass die Gruppe die Datei nur noch lesen kann:

	$ chmod g=r index.html
	$ ls -l index.html
	-rw-r--r--  1 arthur     3451 Jul 25 13.15 index.html
Man kann die Zugriffsrechte auch über einen Zahlencode angeben. Dabei werden den Buchstaben r, w, x folgende Werte zugeordnet:

	r 4, w 2, x 1 
Den korrekten Zahlencode erhält man durch Addieren der Werte der Rechte jeder Benutzergruppe, d.h. der Code ist eine dreistellige Zahl, bei der jede Ziffer zwischen 0 und 7 liegt. "-rw-r--r--" kann somit durch 644 beschrieben --> --werden. Das zuletzt angeführte Kommando chmod kann daher durch
	chmod 644 index.html
ersetzt werden.

Zusammenfassung

Benutzerklasse:
u
(user) Eigentümer
g
(group) Gruppe
o
(other) alle andern
a
(all) alle drei Benutzerkategorien
Operatoren:
+
Zugriffsrecht wird erteilt
-
Zugriffsrecht wird entzogen
=
genau die nachfolgenden Zugriffsrechte werden vergeben
Zugriffsrechte:
r
(read) lesen
w
(write) schreiben
x
(execute) ausführen

5.6 Datensicherung und tar

Im Falle der Beschädigung einer Festplatte können die Dateien auf dieser Platte verloren gehen. Deswegen ist es unbedingt notwendig, von Dateien von Zeit zu Zeit eine Sicherungskopie anzulegen, so dass das Versagen einer Festplatte nicht zum Datenverlust führt.

Das Zentrum Informatikdienste zieht Sicherungskopien aller Dateien. Um aber ganz sicher zu sein, kann man von wichtigen Dateien eigene Sicherungskopien (Backups) anlegen. Dies kann etwa via FTP auf eine Diskette auf Ihrem PC erfolgen.

Um den Backup bequem erledigen zu können, ist es günstig, sich des tar-Kommandos zu bedienen, das unten beschrieben ist. Dieses Kommando kann komplette Verzeichnisse, einschliesslich aller Unterverzeichnisse, zu einer Archiv-Datei zusammenfassen.

Um Speicherplatz zu sparen, können die resultierenden tar-Dateien komprimiert werden, bevor sie auf das externe Speichermedium transportiert werden. Gebräuchlich ist compress. Allerdings sollten Sie sich darüber im Klaren sein, dass eine komprimierte Datei nur dann wieder in Klartext umgewandelt werden kann, wenn die Information vollständig ist. Das bedeutet: schreiben Sie einen Backup mit tar und anschliessender Kompression auf eine Diskette, so können Sie diese Daten nur im Fall völliger Datenintegrität wieder erhalten. Hat die Diskette im Lauf der Zeit auch nur einen kleinen Fehler bekommen, sind Ihre Daten verloren. Ohne Kompression hätten Sie hingegen eine gute Chance, dass sich der Datenverlust nur auf ein oder zwei Dateien beschränkt.

Die Syntax von tar:

	tar <Key> <Optionen> <Datei-Liste>
erzeugt eine Archiv-Datei oder restauriert Dateien einer Archiv-Datei. Der Key entscheidet, ob ein Archiv angelegt oder von einem Archiv gelesen werden soll:

c
erzeuge eine Archiv-Datei
x
extrahiere Dateien aus einer Archiv-Datei
t
liste den Inhalt der Archiv-Datei
Die wichtigsten Optionen sind:

v
geschwätzig; listet die bearbeiteten Dateien auf
f
gibt an, dass das nächste Argument der Name einer Datei ist, von der gelesen oder auf die geschrieben werden soll (je nachdem, was zum Key passt); wird anstelle eines Dateinamens ein Minuszeichen angegeben, so wird stdin bzw. stdout verwendet.
h
folge bei der Erzeugung einer Archivdatei auch symbolischen Verweisen und füge diese Dateien mit in das Archiv ein.
Um ein Archiv Ihres C-Unterverzeichnisses in Ihrem Homedirectory zu erzeugen, würden Sie das folgende Kommando verwenden:

	tar -cvf C.tar C
Dies liefert eine Archivdatei namens C.tar. Mit Hilfe des Kommandos

	tar -xvf C.tar
wird der Inhalt des Archives wieder in seiner ursprünglichen Form restauriert.

5.7 Ueberblick: Kommandos für das File-Handling

Die wichtigsten Kommandi im Zusammenhang mit dem File-Handling sind:

ls -l ... list long-form (Datei-Namen)

ls -a ... list hidden files

cat ... list content (Datei-Inhalt)

head/tail ... list content (Anfang, Schluss)

more ... display content (am Bildschirm)

cp ... copy file (kopieren)

mv ... rename file (umbenennen)

rm ... remove file (löschen)

pwd ... print working directory (aktuelles Directory)

cd ... change directory (Directory wechseln)

mkdir ... make directory (Directory erzeugen)

rmdir ... remove dir (Directory löschen)

chown ... change owner

chgrp ... change group

chmod +[rwx] ... change mode (Zugriffsberechtigung ändern)

Nähere Angaben zu einzelnen Kommandi und deren Syntax finden Sie mit

	man <Kommando>

Und hier noch zwei zusätzliche Kommandi:

find ... find file (File suchen)

ln -s ... make symbolic link (zusätzlicher Name)

Die Syntax von find:

	find <Verzeichnis-Liste> <Ausdruck>
sucht Dateien, die sich in einem Verzeichnis der <Verzeichnis-Liste> befinden und die Anforderungen von <Ausdruck> erfüllen. <Ausdruck> kann dabei auch Kommandos enthalten, die auf gefundene Dateien angewendet werden sollen. find hat eine ziemlich komplexe Syntax, so dass wir hier nicht näher darauf eingehen. Zudem kann es ein sehr zeitaufwendiges Kommando sein. Aus diesem Grund sollte man niemals einen find von einem Verzeichnis aus starten, das weit oben in der Verzeichnishierarchie steht wie etwa "/" oder "/home". In solch einem Fall würde sich find durch sämtliche Verzeichnisse unterhalb dieses weit oben angesiedelten Verzeichnisses durcharbeiten, um alle Dateien in allen Unterverzeichnissen auf die Kriterien von Ausdruck hin zu überprüfen. Je nach Grösse und Organisation der betroffenen Filesysteme kann ein solcher find mehrere Stunden dauern und die entsprechenden Maschinen unbenutzbar machen.

Die Syntax von ln:

	ln <file> <link>
erzeugt einen sog. harten Verweis (Link) zu einer existierenden Datei, d.h. diese Datei kann jetzt mit zwei Namen aufgerufen werden: mit dem ursprünglichen Namen und mit dem soeben geschaffenen Verweisnamen. Beide haben denselben Status. Wird einer der beiden Namen gelöscht, so ist die Datei noch immer unter dem anderen Namen zugänglich.

	ln -s <file> <link> 
Auf modernen Systemen (z.B. AIX) können auch sog. symbolische Verweise mit Hilfe der "-s" Option erzeugt werden. Dieser Verweis hat nicht denselben Status wie der ursprüngliche Dateiname. Der symbolische Verweis ist eine eigene Datei, die den Namen der Datei enthält, auf die der Verweis zeigt. Wird daher das ursprüngliche File gelöscht, so zeigt der symbolische Verweis auf ein nicht mehr existierendes File und auf die Daten kann nicht mehr zugegriffen werden. Im Gegensatz zum harten Verweis können symbolische Verweise jedoch auch auf ein Verzeichnis erfolgen.

5.1 Struktur
5.2 Dateinamen
5.3 Automatische Ergänzung von Dateinamen
5.4 Löschen und Umbenennen von Dateien
5.5 Zugriffsrechte
5.6 Datensicherung und tar
5.7 Ueberblick: Kommandos für das File-Handling

UNIX-Lehrtext - 23 SEP 94
[Next] [Previous] [Top]

Generated with WebMaker