Files Directories and Inodes

Files - 1

Für den Nutzer ist eine Datei eine Abstraktion, dieser sieht nur den Namen und ein icon

Darunter : Hardware in Blöcken, Pages, und Reiehen organisiert

  • Schreiben passiert nur in Pages - 4KB

  • Löschen passiert nur in Blöcken : 256KB - 64 Pages

Warum ist das wichtig?

  • BetriebsSysteme tun so, als ob eine Datei einfach eine lineare Folge von Bytes ist.

  • In Wirklichkeit liegt sie zerstückelt in Hardwareblöcken.

  • Das **Dateisystem** kümmert sich darum, die physischen Speicherblöcke den logischen Dateiinhalten zuzuordnen.

Files - 2

Programme benötigen eine referenz zu den Files - nicht immer der Name

system level: file descriptor= int
C library level: file pointer= FILE *
C++ library level: file stream class= fstream
Java : file stream class= FileReader/Writer

Standard File Descriptors

Processes ans STDIN / STDOUT

STDIN (0,Keyboard) → PROCESS → STDOUT(1,terminal) || STDERR(2,terminal)

Important

Mit dem Pipe Symbol : | können wir Standard Inputs / Outputs umleiten >> / > / 2>

INODES

Index = Index Node

Important

DatenStruktur die Alle MetaDaten über eine Datei enthält, abern icht den Datei Namen

Jede Datei, und jedes Verzeichnis hat genau eine Inode.

💡 Stell dir den Inode wie einen „Personalausweis“ für die Datei vor:

  • Er hat eine Nummer (Inode-Nummer)

  • Er speichert Eigenschaften (Größe, Besitzer, Rechte)

  • Er sagt, wo die Datei physisch auf der Platte liegt

Important

⚠️ Der Dateiname steht ==nicht== im Inode!

Der Name wird in einem Verzeichnis gespeichert, das auf die Inode-Nummer zeigt.

Wie benutzt das OS einen Inode?

  1. Du tippst z. B. cat [[[[test]]]].txt.

  2. Das Dateisystem schaut im Verzeichnis nach [[[[test]]]].txt und findet:

    → „Name [[[[test]]]].txt → Inode-Nummer 12345

  3. OS liest Inode 12345:

    • Sieht, dass der Besitzer user, Rechte rw-, Größe 512 Bytes, Blöcke [8, 9, 10].
  4. OS lädt die Daten aus diesen Blöcken und gibt sie dir aus.

Warum ist das wichtig?

  • Hardlinks: Mehrere Dateinamen können auf denselben Inode zeigen.

  • Schnelles Metadatenlesen: ls -l muss nur Inodes lesen, nicht den Dateiinhalt.

  • Rechteprüfung: Beim Öffnen prüft das OS Rechte im Inode.

  • Platzfreigabe: Datei wird erst gelöscht, wenn nlink = 0 und keine Prozesse sie geöffnet haben.

struct stat {
ino_t st_ino;  // inode 
dev_t st_dev; // device of this file 
mode_t st_mode; // protection + file type 
nlink_t st_nlink; // number of hard links 
uid_t st_uid; // user ID of owner 
gid_t st_gid; // group ID of owner 
dev_t st_rdev; // device type (if inode device) 
off_t st_size; // total size, in bytes 
blksize_t st_blksize; // blocksize for filesystem I/O 
blkcnt_t st_blocks; // number of blocks allocated 
time_t st_atime; // time of last access 
time_t st_mtime; // time of last modification 
time_t st_ctime; // time of last change 
 
}

The File Type

umask

Die Standard Rechte-Maske für das erstellen neuer Files / Directories

Wie funktionieren die Zahlen

Each permission (read/write/execute) is one bit:

PermissionBinaryOctal value
r (read)1004
w (write)0102
x (exec)0011

A full set of rights for one user category (owner, group, others) is:

  • rwx111 (binary) → 7 (octal)

Important

Sticky Bit : if the Sticky Bit is set, files or directories may be unlinked or renamed ==ONLY== by root or their owner.

Setting the ==Sticky Bit== : chmod 1777 testdir

Important

SETUID (Set User ID) ist ein spezielles Dateirecht unter Unix/Linux, das bewirkt, dass ein ==Programm beim Start mit den Rechten des Dateibesitzers== läuft – nicht mit den Rechten des Benutzers, der es startet.

Deshalb gibt es für jeden Prozess zwei User ID’s :

  • RUID - Real User ID

  • EUID - Effecive User ID

Normalerweise sind diese zwi gleich, falls aber das ==SETUID Bit gesetzt ist, dann ist EUID ID des Programm Owners

Somit kann passwd von einem regular User gestartet werden → Wechsel des Passwords, aber mit Rechten von root arbeiten.

Important

  • Für SETUID setzt man im chmod vorne eine 4 (chmod 4755 file).

Important

  • RGID the real GID

  • EGID the effective GID

  • SETGID funktioniert analog zu SETUID für Gruppenrechte: RGID/EGID und chmod mit einer führenden 2.

Hardlink Count : Hardlinks

Ein Hardlink Count ist ein Referenz Zähler, bei null: Datei wird gelöscht

  • Verhalten: Mehrere Dateinamen (Links) zeigen direkt auf denselben Inode.

  • Folge: Alle Links sind gleichwertig — es gibt kein „Original“.

  • Löschen: Die Datei wird erst physisch gelöscht, wenn der Hardlink-Zähler (Reference Count) auf 0 fällt.

  • Einschränkungen:

    • Nur innerhalb desselben Dateisystems möglich.

    • Meist nicht für Verzeichnisse erlaubt (außer . und ..).

Symbolic Links : Softlinks

  • Verhalten: Ein Softlink ist eine **eigene Datei** mit eigenem Inode, der nur den Pfad zum Ziel speichert.

  • Folge: Wenn das Ziel verschoben oder gelöscht wird, „bricht“ der Link (Broken Link).

  • Flexibilität:

    • Kann auf Dateien **in anderen Dateisystemen** verweisen.

    • Kann auch auf Verzeichnisse zeigen.

MerkmalHardlinksSoftlinks
commandlnln -s
performanceschnellerlangsamer
have a file typeneinja
reach across filesystemsneinja
to directoriesneinja
distinguish original/linkneinja
traceableneinja
may be brokenneinja

Important

. and .. are hardlinks for the current and parent directories respectively.

Inode Timestamps

  • atime - access time

  • ctime - time of last change of inode info

  • mtime - time of last modification of the file’s data