# Dateiattribute

Selbst der erfahrene Linuxer ist vor Fehlern nicht gefeit. Man stelle sich nur vor, man wollte alle Dateien aus einem Unterverzeichnis löschen:

`user@sonne> rm -rf ~/DirToDelete/ *`

Das Beispiel sieht harmlos aus, birgt aber einen fatalen Fehler in sich: das Leerzeichen zwischen Pfadangabe und dem `*`. Verschwunden sind nicht die gewünschten Daten, sondern der komplette Inhalt des aktuellen Verzeichnisses (falls man die Berechtigung dazu besaß).

Linux bietet bekannterweise keine zuverlässige Methode des Wiederherstellens gelöschter Daten. Dafür ermöglicht das Linux-Dateisystem `ext2` die Vergabe von Attributen für Dateien und Verzeichnisse. Sicher wird man aus Bequemlichkeit meist auf diese verzichten, aber essentielle Daten lassen sich somit zuverlässig schützen. Zum Setzen von Attributen dient das Kommando `chattr`, anzeigen lassen sie sich mittels `lsattr`.

Attribut | Wirkung
a | Die Datei kann weder gelöscht noch deren bisheriger Inhalt verändert werden. Allerdings ist das Anhängen von Daten möglich. Dieses Attribut darf nur Root setzen.
`user@sonne> lsattr test.txt; ls test.txt -------- test.txt -rw-r--r-- 1 user users 32 Dec 19 19:52 test.txt root@sonne> chattr +a test.txt user@sonne> rm test.txt rm: Entfernen von »test.txt« nicht möglich: Die Operation ist nicht erlaubt user@sonne> cat < test2.txt >> test.txt; ls -l test.txt -rw-r--r-- 1 user users 64 Dec 19 19:53 test.txt`
d | Eine so gekennzeichnete Datei wird beim Sichern mit `dump` nicht berücksichtigt.
i | Die Datei kann weder umbenannt noch modifiziert noch gelinkt werden. Nur Root darf das Attribut setzen. Wird dieses Attribut für Verzeichnisse gesetzt, darf in diesem Verzeichnis keine Datei gelöscht werden, jedoch ist eine Änderung dieser und das Erzeugen neuer Dateien möglich.
s | Eine mit diesem Attribut versehene Datei wird beim Löschen mit 0-Bytes überschrieben.
S | Wird die Datei modifiziert, so wird sie unmittelbar auf die Festplatte zurückgeschrieben, also ohne Zwischenpufferung.

Es existieren weitere Attribute, die aber in der momentanen Implementierung des `ext2` nicht unterstützt werden.