24
bs-6 1 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet sind, alle ab einem Wurzelverzeichnis (root directory) direkt oder indirekt erreichbar. M.a.W.: Dateien bilden einen gerichteten Graphen, meist zyklenfrei, häufig „Dateibaum“

Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

Embed Size (px)

Citation preview

Page 1: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 1

6.1.5 Verzeichnisdateien

Anstelle eines zentralen Verzeichnisses:

Menge von Verzeichnisdateien (directory files),die selbst in Verzeichnissen verzeichnet sind,

alle ab einem Wurzelverzeichnis (root directory) direkt oder indirekt erreichbar.

M.a.W.: Dateien bilden einen gerichteten Graphen,

meist zyklenfrei, häufig „Dateibaum“

Page 2: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 2

Vorteile:

strukturierter statt flacher Namensraum, mit effizienter Implementierung:

Dateien werden über Wegnamen im Graphen (Pfadnamen, path names) identifiziert, d.h.

Folgen von verzeichneten Namen, z.B. /b/23/x

Page 3: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 3

Vorteile:

strukturierter statt flacher Namensraum, mit effizienter Implementierung:

Dateien werden über Wegnamen im Graphen (Pfadnamen, path names) identifiziert, d.h.

Folgen von verzeichneten Namen, z.B. /b/23/x

Wurzel:

in Unix verboten (um Zyklen zuvermeiden, die die Dateispeicher-verwaltung erschweren)

aal

bx

b

x

123

blay

fritz

Page 4: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 4

Verzeichnisdateien sind Dateien –

und haben daher die normalen Attribute von Dateien:

differenzierter Zugriffsschutz

auf Teilbereiche des Namensraums

Verwaltung von Zugriffszeiten

für Teilbereiche des Namensraums

Page 5: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 5

Modell: Abbildung Zeichenkette Dateiverweis (6.1.3 )

Operationen: Einträge einfügen, suchen, ändern, löschen

(6.1.1 )

und auflisten ( = interner Iterator),

aber ohne dass dabei Dateiverweise

in die Hände des Benutzerprogramms

geraten (6.1.1.1).

Page 6: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 6

6.1.5.1 Aktuelle Verzeichnisse

(Unix:) Jedes Verzeichnis hat grundsätzlich

einen selbstbezüglichen Eintrag mit Namen "."

einen Eintrag für das Elternverzeichnis mit Namen ".."

(Unix:) Jeder Prozess hat Attribute

aktuelles Arbeitsverzeichnis (current working directory),

aktuelles Wurzelverzeichnis (current root directory),

Page 7: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 7

absoluter Wegname: beginnt mit '/' und wird relativ zum aktuellen Wurzelverzeichnis interpretiert

relativer Wegname: beginnt ohne '/' und wird relativ zumaktuellen Verzeichnis interpretiert,

z.B. aktuelles Verzeichnis:

/usr/lohr

Wegname tmp/bla.txt

bedeutet /usr/lohr/tmp/bla.txt

Page 8: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 8

chdir(path)

macht das Verzeichnis path zum aktuellen Verzeichnis

chroot(path)

macht das Verzeichnis path zum aktuellen Wurzelverzeichnis

(diese Systemfunktion ist dem

super-user root vorbehalten)

Page 9: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 9

6.1.5.2 Erzeugen eines Verzeichnisses

mkdir(path,mode)

erzeugt ein Verzeichnis path mit Schutzstatus mode;

das Verzeichnis ist leer – bis auf Einträge für

"." und ".."

Page 10: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 10

6.1.5.3 Einträge einfügen/löschen

link (path,..)creat(path,..) mkdir(path,..) ...

bewirken das Einfügen eines Eintrags (name,.)

in das Verzeichnis dir, wenn der angegebene

Wegname path so aussieht: "dir/name„

Page 11: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 11

unlink("dir/name")

löscht den Eintrag (name,.) im Verzeichnis dir

sofern name kein Verzeichnis ist

rmdir("dir/name")

löscht den Eintrag (name,.) im Verzeichnis dir

sofern name ein leeresVerzeichnis ist

(bis auf "." und ".." )

Zur Erinnerung: Ein Verzeichnis ist grundsätzlich nur über

einen Eintrag erreichbar.

Page 12: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 12

6.1.5.4 Einträge suchen/auflisten

file = lookup(path)

liefert Verweis auf die Datei path.

Achtung: diese Operation steht dem Benutzer nicht

zur Verfügung; sie wird nur innerhalb des

Betriebssystems benutzt,

insbesondere zum Auflösen von Wegnamen !

Page 13: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 13

list(path)

zur Auflistung der Einträge müsste als interner Iterator

konzipiert werden – ist aber nicht vorgesehen.

Stattdessen:

Verzeichnisdatei wird wie sequentielle Datei geöffnetund gelesen durch Dienstprogramm ls;

ls kennt die interne Repräsentation der Datei (!) undweiß daher, wo die Namen zu finden sind;

ls –l erfragt die Attribute der Dateien

Page 14: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 14

6.1.5.5 Einträge ändern

Unix: Jeder externe Datenträger enthält ein eigenes

Dateisystem mit eigener, „lokaler“ Wurzel

mount(device, path, readonly)

ersetzt den durch path identifizierten Dateiverweisdurch einen Verweis auf das Wurzelverzeichnisdes Dateisystems auf dem Gerät device

x y z

*

(aktuellesArbeitsverzeichnis:)

Page 15: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 15

6.1.5.5 Einträge ändern

Unix: Jeder externe Datenträger enthält ein eigenes

Dateisystem mit eigener, „lokaler“ Wurzel

mount(device, path, readonly)

ersetzt den durch path identifizierten Dateiverweisdurch einen Verweis auf das Wurzelverzeichnisdes Dateisystems auf dem Gerät device

x y z mount("/dev/fd0","z",0)

a b c

*

(aktuellesArbeitsverzeichnis:)

Page 16: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 16

! Der alte Dateiverweis geht nicht verloren:

umount(device)

macht mount(device,...) wieder rückgängig

! mount , umount stehen nur dem Super-User zur Verfügung !

In diesem Zusammenhang:

Bei link(path,alias)

müssen sich beide Argumente

auf das gleiche Dateisystem beziehen

Page 17: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 17

6.1.6 Indirekte Dateien

Indirekte Datei (soft link, symbolic link)

enthält statt regulärer Daten einen Wegnamen.Bezugnahme auf eine solche Datei wird alsBezugnahme auf die durch den Wegnamen benannte Datei interpretiert:

a

"x/a"

MyA

x

hard linksoft link

Page 18: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 18

symlink(path,alias)

erzeugt eine indirekte Datei mit Namen alias

und Inhalt path, z.B. symlink("x/a","MyA")– auch wenn path bereits eine indirekte Datei ist!

link(path,alias)

mit indirekter Datei path :erzeugt eine indirekte Datei mit Namen alias

und Inhalt von path

Bemerkungen:

Es gibt keine mehrfachen hard links auf soft links.

Es kann Ketten von indirekten Dateien geben.

Eine indirekte Datei kann auf eine nicht existierende Datei verweisen!

Page 19: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 19

Operationen auf einer indirekten Datei path selbst:

unlink(path)

wie unlink für normale Dateien; damit wird dieindirekte Datei gelöscht – denn es gibt keinemehrfachen hard links auf soft links

lstat(path,&buffer)

analog zu stat

readlink(path,&buffer,bufsize)

liefert den Wegnamen in der indirekten Datei

Page 20: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 20

6.1.7 Auflisten von Verzeichnissen

entweder mit Hilfe eines externen oder internen Iterators

oder durch ein Dienstprogramm (Unix: ls),

das das Verzeichnis als sequentielle Datei liest,

dessen interne Repräsentation kennt,

somit die Namen der Einträge auflisten kann

und mittels stat auch die Attribute der Dateien erfragen kann.

Page 21: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 21

jefe: ls -l

total 40

-rw------- 1 lohr institut 7342 Jun 16 20:50 Text

lrwxrwxrwx 1 lohr institut 4 Jun 16 21:00 alias -> Text

drwx------ 2 lohr institut 14 Jun 16 20:57 dir

-rw------- 3 lohr institut 266 Jun 16 21:18 foo

-rw------- 3 lohr institut 266 Jun 16 21:18 foo1

-rw------- 3 lohr institut 266 Jun 16 21:18 foo2

- sequentiell Eigner Eignergruppe Name Inhalt

l soft link letzte Änderungszeit

d Verzeichnis Größe in Bytes

Anzahl der hard links

Page 22: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 22

6.1.8 Dateisysteme in Programmiersprachen

sind ansprechbar über Modul/Klassen-Bibliotheken

Typische Leistung einer solchen Bibliothek:

Abstraktion von den spezifischen Systemaufrufendes unterliegenden Betriebssystems

Manipulation getypter Daten

Page 23: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 23

Java – einige wenige Beispiele aus java.io:

class File beinhaltet lediglich einen Wegnamenund erlaubt Abfragen über die sobenannte Datei – sofern vorhanden

abstract class InputStream

ist Oberklasse für diverse „ungetypte“– d.h. byteorientierte – Eingabeklassen

für sequentielles Lesen

class FileInputStream extends InputStream

ermöglicht das Lesen von Bytes und

Bytefolgen aus einer sequentiellen Datei

Page 24: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet

bs-6 24

class InputStreamReader extends Reader

liest Zeichenfolgen von einem

angegebenen InputStream

class DataOutputStream extends Writer

schreibt Daten aller primitivenTypen

in einen angegebenen OutputStream

class PrintWriter extends Writer

schreibt Daten aller Typen als

Zeichenketten in einen angegebenen

OutputStream