- Files Directories and Inodes
- INODES
- Hardlink Count : Hardlinks
- Symbolic Links : Softlinks
- Inode Timestamps
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,
wodie 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?
-
Du tippst z. B.
cat [[[[test]]]].txt. -
Das Dateisystem schaut im Verzeichnis nach
[[[[test]]]].txtund findet:→ „Name
[[[[test]]]].txt→ Inode-Nummer 12345“ -
OS liest Inode 12345:
- Sieht, dass der Besitzer
user, Rechterw-, Größe 512 Bytes, Blöcke[8, 9, 10].
- Sieht, dass der Besitzer
-
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 -lmuss 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:
| Permission | Binary | Octal value |
|---|---|---|
r (read) | 100 | 4 |
w (write) | 010 | 2 |
x (exec) | 001 | 1 |
A full set of rights for one user category (owner, group, others) is:
-
rwx→111(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
chmodvorne 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
chmodmit 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
denselbenInode. -
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
Verzeichnissezeigen.
-
| Merkmal | Hardlinks | Softlinks |
|---|---|---|
| command | ln | ln -s |
| performance | schneller | langsamer |
| have a file type | nein | ja |
| reach across filesystems | nein | ja |
| to directories | nein | ja |
| distinguish original/link | nein | ja |
| traceable | nein | ja |
| may be broken | nein | ja |
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