Beruflich Dokumente
Kultur Dokumente
Betriebssysteme (GBS)
Tafelübung 3: Dateisystem
Daniel Lohmann, Björn Fiedler
03t-datei 2018-11-13
Wintersemester 2018
https://sra.uni-hannover.de/Lehre/WS18/V_GBS
Überblick: Tafelübung 3: Dateisystem
3 Tafelübung 3: Dateisystem
3.1 Beispiellösung Aufgabe 1
3.2 Aufgabe 3
3.3 Argumentparser
3.4 Wildcards
3.5 Reguläre Ausdrücke
3.6 Aufbau eines Dateisystems
3.7 Rechteverwaltung im Dateisystem
3.8 Dateisystem-Interaktion
03t-datei 2018-11-13
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.1 Beispiellösung Aufgabe 1 3–3
Aufgabe 3 - Dateisystem Interaktion
Aufgabenteile
Theoriefragen
crawl - Durchsuche das Dateisystem
ArgumentParser - Parser für Kommandozeilen Argumente
03t-datei 2018-11-13
bjoe.fiedler@gbs:~$ ls -a -l /etc
bjoe.fiedler@gbs:~$ ls -a -l /etc
argc 4
Argument.
Erlaubte Verwendung:
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.5 Reguläre Ausdrücke 3–11
Reguläre Ausdrücke
2. Anwenden
int regexec(const regex_t *preg, const char *string, size_t nmatch,
regmatch_t pmatch[], int eflags);
03t-datei 2018-11-13
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.5 Reguläre Ausdrücke 3–12
Dateien und Verzeichnisse (UNIX)
Systemsicht: Datenstrukturen Dateisystem (file system)
<name> i
Text &
i Daten
…
Indexknoten
Die Indexknotentabelle (inode table) ist ein statisches Feld (array ) von
Indexknoten (inodes) und die zentrale Datenstruktur.
Indexknoten: Deskriptor des Objektes (Datei)
Indexknotennummer: Eindeutige Referenz des Objektes
Ein Verzeichnis (directory ) ist eine Abbildungstabelle, es übersetzt
04-Dateisysteme 2018-10-16
© dl GBS (WS 18) 4 Dateien und Dateisysteme | 4.4 Systemsicht – Dateibaum 4–15
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.6 Aufbau eines Dateisystems 3–13
Dateien und Verzeichnisse (UNIX)
Dateiattibute (file attributs
© dl GBS (WS 18) 4 Dateien und Dateisysteme | 4.4 Systemsicht – Dateibaum 4–17
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.6 Aufbau eines Dateisystems 3–14
Rechte auf Verzeichniseinträgen
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.6 Aufbau eines Dateisystems 3–15
Wofür brauchen wir Rechte?
Auf einem Mehrbenutzersystem wie dem GBS Server mit über 300
Anwendern sind sinnvolle Restriktionen essenziell:
Man will seine privaten Dokumente vor fremden Augen schützen.
Nur Administratoren sollen die Konfiguration der Rechner verändern
können.
Kryptografie setzt die bedingungslose Geheimhaltung der verwendeten
Schlüssel voraus!
rechte 2018-11-13
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–16
Wofür brauchen wir Rechte?
Auf einem Mehrbenutzersystem wie dem GBS Server mit über 300
Anwendern sind sinnvolle Restriktionen essenziell:
Man will seine privaten Dokumente vor fremden Augen schützen.
Nur Administratoren sollen die Konfiguration der Rechner verändern
können.
Kryptografie setzt die bedingungslose Geheimhaltung der verwendeten
Schlüssel voraus!
Objekt zugreifen.
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–16
Ein paar Grundlagen
Gruppenkonzept
Jeder Benutzer ist in mindestens einer Gruppe (hier: student).
Man kann in mehr als einer Gruppe sein.
rechte 2018-11-13
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–17
Ein paar Grundlagen
Gruppenkonzept
Jeder Benutzer ist in mindestens einer Gruppe (hier: student).
Man kann in mehr als einer Gruppe sein.
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–17
Rechte auf Dateien
$ ls -l
- rw- r-- r-- 1 bjoe.fiedler student 97 Oct 7 14:38 datei
- rwx r-x --- 1 bjoe.fiedler student 84 Oct 12 14:39 programm
rechte 2018-11-13
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–18
Rechte auf Dateien
$ ls -l
- rw- r-- r-- 1 bjoe.fiedler student 97 Oct 7 14:38 datei
- rwx r-x --- 1 bjoe.fiedler student 84 Oct 7 14:39 programm
d rwx r-x r-x 2 bjoe.fiedler student 40 Oct 7 14:37 verzeichnis
Und die verbleibenden drei Zeichen die Rechte für den Rest der Welt
(Others).
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–19
Rechte auf Dateien
$ ls -l
- rw- r-- r-- 1 bjoe.fiedler student 97 Oct 7 14:38 datei
- rwx r-x --- 1 bjoe.fiedler student 84 Oct 7 14:39 programm
d rwx r-x r-x 2 bjoe.fiedler student 40 Oct 7 14:37 verzeichnis
r? w? x?
r = lesbar (read)
w = schreibbar (write)
x = ausführbar (execute)
ausführbare Dateien
rechte 2018-11-13
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–19
Rechte ändern
Rechte ändern
chmod <mode> <Datei|Verzeichnis>
chmod -R <mode> <Datei|Verzeichnis> (rekursiv)
$ chmod foo.bar
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–20
Rechte ändern
Rechte ändern
chmod <mode> <Datei|Verzeichnis>
chmod -R <mode> <Datei|Verzeichnis> (rekursiv)
$ chmod g foo.bar
o Rest
a alle
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–20
Rechte ändern
Rechte ändern
chmod <mode> <Datei|Verzeichnis>
chmod -R <mode> <Datei|Verzeichnis> (rekursiv)
$ chmod g+ foo.bar
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–20
Rechte ändern
Rechte ändern
chmod <mode> <Datei|Verzeichnis>
chmod -R <mode> <Datei|Verzeichnis> (rekursiv)
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–20
Änderungen im Rechtesystem
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–21
Änderungen im Rechtesystem
Kein Problem:
rwx r-x --- Symbolische Notation
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–22
Rechte auf Verzeichnissen
$ ls -l
- rw- r-- r-- 1 bjoe.fiedler student 97 Oct 7 14:38 datei
d rwx r-x r-x 2 bjoe.fiedler student 40 Oct 7 14:37 verzeichnis
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–23
Rechte auf Verzeichnissen
$ ls -l verzeichnis/
- rw- --- --- 1 bjoe.fiedler student 97 Oct 7 14:38 dokument
d rwx --- --- 1 bjoe.fiedler student 97 Oct 7 14:38 ordner
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–24
Rechte auf Verzeichnissen
$ ls -l verzeichnis/
- rw- --- --- 1 bjoe.fiedler student 97 Oct 7 14:38 dokument
d rwx --- --- 1 bjoe.fiedler student 97 Oct 7 14:38 ordner
$ ls -l verzeichnis/
- rwx r-x r-x 1 bjoe.fiedler student 97 Oct 7 14:38 dokument
d rwx r-x r-x 1 bjoe.fiedler student 97 Oct 7 14:38 ordner
rechte 2018-11-13
Ups…
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–24
Rechte auf Verzeichnissen
Stattdessen:
$ ls -l verzeichnis/
- rw- --- --- 1 bjoe.fiedler student 97 Oct 7 14:38 dokument
d rwx --- --- 1 bjoe.fiedler student 97 Oct 7 14:38 ordner
$ ls -l verzeichnis/
- rw- r-- r-- 1 bjoe.fiedler student 97 Oct 7 14:38 dokument
d rwx r-x r-x 1 bjoe.fiedler student 97 Oct 7 14:38 ordner
chmod -R +X
Setzt das x-Recht nur dort, wo schon für irgendeinen Benutzer
rechte 2018-11-13
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–25
Verzeichnis abdichten
Neu erstellte Verzeichnisse sind standardmäßig für alle Nutzer les- und
betretbar. Dies kann dies problematisch sein.
$ mkdir /tmp/he29heri
$ ls -ld /tmp/he29heri
drwxr-xr-x 2 he29heri student 4096 Oct 5 15:35 /proj/ciptmp/he29heri
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–26
Verzeichnis abdichten
Neu erstellte Verzeichnisse sind standardmäßig für alle Nutzer les- und
betretbar. Dies kann dies problematisch sein.
$ mkdir /tmp/he29heri
$ ls -ld /tmp/he29heri
drwxr-xr-x 2 he29heri student 4096 Oct 5 15:35 /proj/ciptmp/he29heri
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–26
Änderungen im Rechtesystem
Eigentümer ändern
chown <login> <Datei|Verzeichnis>
chown -R <login> <Datei|Verzeichnis> (rekursiv)
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–27
Änderungen im Rechtesystem
Eigentümer ändern
chown <login> <Datei|Verzeichnis>
chown -R <login> <Datei|Verzeichnis> (rekursiv)
Eigentümergruppe ändern
rechte 2018-11-13
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–27
Access Control Lists (ACLs)
Aber geht’s nicht etwas feingranularer?
Mein Test Verzeichnis soll nur mein Übungspartner lesen können!
$ setfacl -R -m u:uh95nhbq:rX aclverzeichnis
$ setfac l -R -d -m u:uh95nhbq:rX aclverzeichnis
$ ls -l
drwxr-xr-x+ 1 bjoe.fiedler student 0 2009-10-
11 10:45 aclverzeichnis
$ getfacl aclverzeichnis
# file: aclverzeichnis
# owner: bjoe.fiedler
# group: student
user::rwx default:user::rwx default:mask::r-x
rechte 2018-11-13
user:uh95nhbq:r-x default:user:uh95nhbq:r-x
group::r-x default:group::r-x
other::r-x default:other::r-x
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–28
Access Control Lists (ACLs)
Aber geht’s nicht etwas feingranularer?
Mein Test Verzeichnis soll nur mein Übungspartner lesen können!
$ setfacl -R -m u:uh95nhbq:rX aclverzeichnis
$ setfac l -R -d -m u:uh95nhbq:rX aclverzeichnis
$ ls -l
drwxr-xr-x+ 1 bjoe.fiedler student 0 2009-10-
11 10:45 aclverzeichnis
$ man getfacl
$ getfacl aclverzeichnis
# file: aclverzeichnis
# owner: bjoe.fiedler
# group: student
user::rwx default:user::rwx default:mask::r-x
rechte 2018-11-13
user:uh95nhbq:r-x default:user:uh95nhbq:r-x
group::r-x default:group::r-x
other::r-x default:other::r-x
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.7 Rechteverwaltung im Dateisystem 3–28
Wie Interagiere ich mit dem Dateisystem?
rmdir, rm
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.9 Dateisystem interaktion aus C 3–30
Dateiinformationen auslesen
path: Dateiname
buf: Zeiger auf Puffer zum Speichern der Dateiinformationen
03t-datei 2018-11-13
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.9 Dateisystem interaktion aus C 3–31
Dateiinformationen auslesen
path: Dateiname
buf: Zeiger auf Puffer zum Speichern der Dateiinformationen
Für uns relevante Strukturkomponenten der struct stat:
03t-datei 2018-11-13
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.9 Dateisystem interaktion aus C 3–32
Elementaroperationen auf Verzeichnisse
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.9 Dateisystem interaktion aus C 3–33
Verzeichnisinhalte auslesen
Die DIR-Struktur ist ein Iterator und speichert die jeweils aktuelle Position
03t-datei 2018-11-13
opendir
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.9 Dateisystem interaktion aus C 3–34
Verzeichnisinhalte auslesen
Die DIR-Struktur ist ein Iterator und speichert die jeweils aktuelle Position
readdir(3) liefert einen Verzeichniseintrag und setzt den DIR-Iterator auf
den Folgeeintrag
03t-datei 2018-11-13
opendir e = readdir
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.9 Dateisystem interaktion aus C 3–34
Verzeichnisinhalte auslesen
Die DIR-Struktur ist ein Iterator und speichert die jeweils aktuelle Position
readdir(3) liefert einen Verzeichniseintrag und setzt den DIR-Iterator auf
den Folgeeintrag
Rückgabewert NULL im Fehlerfall oder wenn EOF erreicht wurde
bei EOF bleibt errno unverändert, im Fehlerfall wird errno entsprechend gesetzt
03t-datei 2018-11-13
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.9 Dateisystem interaktion aus C 3–34
Verzeichnisinhalte auslesen
Die DIR-Struktur ist ein Iterator und speichert die jeweils aktuelle Position
readdir(3) liefert einen Verzeichniseintrag und setzt den DIR-Iterator auf
den Folgeeintrag
Rückgabewert NULL im Fehlerfall oder wenn EOF erreicht wurde
bei EOF bleibt errno unverändert, im Fehlerfall wird errno entsprechend gesetzt
Eintrag e
nein
bearbeiten
03t-datei 2018-11-13
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.9 Dateisystem interaktion aus C 3–34
Verzeichnisinhalte auslesen
Die DIR-Struktur ist ein Iterator und speichert die jeweils aktuelle Position
readdir(3) liefert einen Verzeichniseintrag und setzt den DIR-Iterator auf
den Folgeeintrag
Rückgabewert NULL im Fehlerfall oder wenn EOF erreicht wurde
bei EOF bleibt errno unverändert, im Fehlerfall wird errno entsprechend gesetzt
closedir(3) gibt die belegten Ressourcen nach Ende der Bearbeitung frei
Eintrag e
nein
bearbeiten
03t-datei 2018-11-13
ja
opendir e = readdir e == NULL? closedir
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.9 Dateisystem interaktion aus C 3–34
Diskussion der Schnittstelle von readdir(3)
Der Speicher für die zurückgelieferte struct dirent wird von den
Bibliotheksfunktionen selbst angelegt und beim nächsten readdir-Aufruf
auf dem gleichen DIR-Iterator potentiell wieder verwendet!
werden Daten aus der dirent-Struktur länger benötigt, müssen sie vor dem
nächsten readdir-Aufruf kopiert werden
Konzeptionell schlecht
aufrufende Funktion arbeitet mit Zeiger auf internen Speicher der
readdir-Funktion
In nebenläufigen Programmen nur bedingt einsetzbar
man weiß evtl. nicht, wann der nächste readdir-Aufruf stattfindet
03t-datei 2018-11-13
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.9 Dateisystem interaktion aus C 3–35
Vergleich: readdir(3) und stat(2)
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.9 Dateisystem interaktion aus C 3–36
Vergleich: readdir(3) und stat(2)
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.9 Dateisystem interaktion aus C 3–36
Vergleich: readdir(3) und stat(2)
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.9 Dateisystem interaktion aus C 3–36
Anzeige von Textdateien
Typische Verwendung
cat <Datei>
$ cat elementare-befehle.tex
\begin{frame}
\frametitle{manpages -- das Hilfesystem unter Unix}
...
cat-less 2018-09-18
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.10 Dateisystem interaktion aus der Shell 3–37
Anzeige von Textdateien (2)
Typische Verwendung
less <Datei>
Achtung!
cat und less können nur Textdateien sinnvoll anzeigen.
cat-less 2018-09-18
Falls nach der Ausgabe einer Binärdatei nur noch seltsame Zeichen
dargestellt werden, hilft der Befehl reset.
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.10 Dateisystem interaktion aus der Shell 3–38
rm – Löschen
rm
rm löscht Dateien und Verzeichnisse
Beispiele
rm foo.pdf – löscht die Datei ’foo.pdf’
rm -r Mails/ – löscht das Verzeichnis ’Mails’ und alle darin
enthaltenen Dateien und Unterverzeichnisse
rm -rf wichtig/ – löscht das Verzeichnis ’wichtig’ mit allen darin
enthaltenen Dateien und Unterverzeichnissen,
ohne nachzufragen – auch falls diese
schreibgeschützt sind!
loeschen 2018-09-18
Achtung!
rm löscht ohne Nachfrage und ohne Umweg über den Papierkorb!
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.10 Dateisystem interaktion aus der Shell 3–39
mkdir, rmdir – Verzeichnisse erstellen und entfernen
mkdir
mkdir foo legt ein Verzeichnis ’foo’ im aktuellen Verzeichnis an
rmdir
rmdir foo löscht das Verzeichnis ’foo’ aus dem aktuellen Verzeichnis
(’foo’ muss leer sein)
loeschen 2018-09-18
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.10 Dateisystem interaktion aus der Shell 3–40
mv – Verschieben
Aufbau
mv <Quelle> <Ziel>
Beispiele
mv alt neu – benennt die Datei ’alt’ in ’neu’ um
(geht auch für Verzeichnisse)
mv foo dinge/ – verschiebt die Datei ’foo’ aus dem aktuellen
Verzeichnis in das Verzeichnis ’dinge’
mv 2018-09-18
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.10 Dateisystem interaktion aus der Shell 3–41
cp – Kopieren
Aufbau
cp <Quelle> <Ziel>
Beispiele
cp bsp bspkopie – kopiert die Datei ’bsp’ nach ’bspkopie’
(im aktuellen Verzeichnis)
cp bsp test/ – kopiert die Datei ’bsp’ in das Verzeichnis
’test’
cp -v bsp test/ – …mit Ausgabe der einzelnen
Kopieraktionen
cp -a test/ test2 – erstellt eine Kopie des Verzeichnisses
’test’ mit dem Namen ’test2’
mv 2018-09-18
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.10 Dateisystem interaktion aus der Shell 3–42
find – Suche nach Dateien
Aufruf
$ find [dir] <filter1> <filter2> ...
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.10 Dateisystem interaktion aus der Shell 3–43
find – Suche nach Dateien
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.10 Dateisystem interaktion aus der Shell 3–44
grep – Suchen in Dateien
Sucht in der Standard-Eingabe (stdin) oder in Dateien nach Zeilen, die auf
einen regulären Ausdruck passen, und gibt passende Zeilen auf der
Standard-Ausgabe (stdout) aus.
Der einfachste reguläre Ausdruck umfasst nur das Suchwort selbst.
Aufruf
grep <pattern> [file1 file2 ...]
Tipp
grep 2018-09-18
grep -i <pattern>
Option -i zum Suchen ohne Beachtung der Groß-/Kleinschreibung.
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.10 Dateisystem interaktion aus der Shell 3–45
sort – Sortieren
Sortiert die Standard-Eingabe (stdin) und gibt die sortierte Liste auf der
Standard-Ausgabe (stdout) aus.
Aufruf
sort [options] < infile
<andererbefehl> | sort [options]
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.10 Dateisystem interaktion aus der Shell 3–46
uniq – Nur Unikate
foo
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.10 Dateisystem interaktion aus der Shell 3–47
cut – Spalten ausschneiden
Filtert bestimmte Spalten aus der Standard-Eingabe (stdin) und gibt sie
auf der Standard-Ausgabe (stdout) aus.
Aufruf
cut [-d <delimiter>] -f <fields>
delimiter ist ein einzelnes Zeichen das zur Trennung der Spalten
benutzt wird. Standardwert ist TAB.
fields bezeichnet welche Spalten ausgegeben werden sollen,
separiert durch Komma (1,2,3) oder Bereiche (1-3).
cut 2018-09-18
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.10 Dateisystem interaktion aus der Shell 3–48
cut – Spalten ausschneiden
© dl,bf GBS (WS 18) 3 Tafelübung 3: Dateisystem | 3.10 Dateisystem interaktion aus der Shell 3–49