staging.inyokaproject.org

Von „Shell/chattr“ weitergeleitet.

chattr

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/terminal.png Einige Dateisysteme[2] stellen für jede Datei einige Bits (flags) für Attribute bereit, dies gilt insbesondere für das Dateisystem ext2 und dessen Nachfolger ext3 und ext4. Zur Anzeige dieser Attribute dient das im Zuge von ext2 mit entwickelte Programm lsattr, und chattr ermöglicht die Änderung dieser Flags. Das funktioniert auch für weitere bei Linux übliche Typen von Dateisystemen lt. Tabelle 1:

  1. 12 Bits werden für Dateiberechtigungen verwendet. ▶ Dateirechte

  2. Weitere Bits werden für spezielle Aufgaben verwendet und dienen zur Steuerung des Dateisystemtreibers. Nur diese behandelt dieser Artikel. Dabei kennen die einzelnen Typen von Dateisystemen unterschiedlich viele Attribute und teilweise auch mit unterschiedlicher Bedeutung. Dieser Artikel fokussiert sich auf das Dateisystem ext4.

  3. Manche Dateisysteme, beispielsweise FAT, exFAT und NTFS kennen konzeptionell ähnliche Dateiattribute (RHSDVA in Tabelle 1, z.B. READONLY, HIDDEN, ARCHIVE u.a.), die aber mit den Attributen aus Sicht von Linux nicht kompatibel sind und daher in diesem Artikel auch nicht weiter behandelt werden. Sie sind teilweise über Optionen für die Dateisystemtreiber zugänglich. Das alte Programm fatattr aus dem gleichnamigen Paket kann bei Dateisystemen vom Typ FAT mit ihnen umgehen.

Es gibt auch noch sogenannte „erweiterte Attribute“ in Form von Paaren der Form Name=Wert. Diese werden nicht hier besprochen, sondern z.B. in diesem Artikel 🇩🇪 vorgestellt. Leider wird im Sprachgebrauch der Ausdruck „erweiterte Attribute“ sehr uneinheitlich verwendet, manchmal versteht man darunter doch die hier besprochenen Attribute oder auch zusätzliche Attribute bei Dateisystemen von MS WIndows lt. obigem Punkt 3.

Installation

Die Programme chattr und lsattr sind im essentiellen Paket

  • e2fsprogs

von Ubuntu enthalten und deshalb auf jedem System installiert.

Aufruf lsattr

Des Programm lsattr (list attributes) zeigt die (nur Unix-) Attribute von regulären Dateien; bei Ordnern werden entweder die Attribute der darin enthaltenen Dateien oder die Attribute des Ordners selbst angezeigt. Das funktioniert abhängig vom Typ des Dateisystems lt. Tabelle 1 unterschiedlich gut oder auch gar nicht. Attribute von anderen Dateitypen wie beispielsweise symbolische Links oder Gerätedateien kann das Programm nicht anzeigen, statt dessen erscheint eine Fehlermeldung auf dem Standard-Fehlerkanal.

Man startet das Programm im Terminal[1] mit dieser generellen Syntax:

lsattr OPTIONen DATEIen 
  • OPTIONen ist eine möglicherweise leere Liste aus folgenden Angaben:

    • -a Mit dieser Option werden auch die normalerweise ignorierten versteckten Dateien (Dateiname beginnt mit „.“ untersucht.

    • -d zeigt die eigenen Attribute von Ordnern anstatt der Attribute der in ihnen enthaltenen regulären Dateien.

    • -l zeigt die Namen der gesetzten Attribute statt deren Kennbuchstaben.

    • -R zeigt rekursiv auch die Dateien in gefundenen Ordnern.

    • Es gibt noch weitere Optionen. ▶ Dokumentation

  • DATEIen ist eine möglicherweise leere Liste von Dateinamen. Wenn man keinen Dateinamen angibt, wird der Ordner „.“ bearbeitet. Nicht existierende Dateien zu angegebenen Dateinamen erzeugen Fehlermeldungen, sinnvoll sind nur Namen von existierenden regulären Dateien oder Ordnern.

Beispiele

Aufruf chattr

Das Programm chattr (change attributes} ändert (nur Unix-) Attribute von Dateien oder Ordnern in unterstützten Dateisystemen lt. folgender Tabelle.

⚓︎

Tabelle 1: Unterstützte Dateisysteme
DateisystemUnterstützung durchAttribute
TypTreiberlsattrchattrUnixWindowsBemerkungen
ext2 ext4 jajaaA dD i Su
ext3 ext4 jajaaA dD ij Su
ext4 ext4 jajaaA dDeij Su
BtrfsbtrfsjajaaAcCdD i mS V
XFS xfs jajaaA d i S
JFS jfs jajaa i
FAT12/16/32 vfatneinnein RHSVDA
exFAT exfatneinnein RHSVDA
NTFS ntfs3 ja nein RHSVDA
&
weitere 9
lsattr zeigt zwar etwas an, es ist aber völlig unklar, wie die Attribute gesetzt werden können.
ntfs-3g
Weitere siehe Dokumentation.

Man startet das Programm im Terminal[1] mit dieser generellen Syntax:

chattr OPTIONen MODUS DATEIen 
  • OPTIONen ist eine möglicherweise leere Liste aus folgenden Angaben:

    • -R ändert rekursiv die Attribute von angegebenen Ordnern und der darin enthaltenen Dateien.

    • -V schaltet in den geschwätzigen Modus. Das Programm verrät seine Version und ddie Ergebnisse seiner Arbeit.

    • -f unterdrückt die meisten Fehlermeldungen.

    • Es gibt noch weitere Optionen. ▶ Dokumentation

  • MODUS ist eine Zeichenfolge aus einem Vorzeichen (+, - =) und einer nicht leeren Folge von Kennbuchstaben für die zu bearbeitenden Attribute.

    • + steht für „zusätzlich setzen“, d.h. angegebene Attribute werden gesetzt und nicht angegebene nicht verändert.

    • -“ steht für „selektiv löschen“, d.h. angegebene Attribute werden gelöscht und nicht angegebene nicht verändert.

    • =“ steht für „genau diese Setzen“, d.h. angegebene Attribute werden gesetzt und nicht angegebene gelöscht.

  • DATEIen ist eine nicht leere Liste von Dateinamen. Nicht existierende Dateien zu angegebenen Dateinamen erzeugen Fehlermeldungen, sinnvoll sind nur Namen von existierenden regulären Dateien oder Ordnern.

Beispiele

Attribute

Die Attribute lt. folgender Tabelle 2 können vom Besitzer der Datei mit chattr verändert werden, sofern nicht extra etwas anderes gesagt wird:

Tabelle 2: Kennbuchstaben von änderbaren Attributen und deren Bedeutung
AttributBedeutung
a Datei kann nur im append-Modus zum Schreiben geöffnet werden. Es kann also neuer Inhalt nur am Ende der Datei angefügt, aber vorhandener Inhalt nicht gelöscht oder überschrieben werden. Anm. 1, 2
A Zeitstempel atime für den Zeitpunkt des letzten Zugriffes wird nicht gepflegt.
c Datei wird vom Kernel beim Schreiben automatisch komprimiert und beim Lesen automatisch wieder entpackt. Anm. 3
C Schaltet in Dateisystemen mit Copy-on-write dieses für einzelne Dateien aus. Man sollte dieses Attribut nur für leere reguläre Dateien und Ordner setzen. Bei Ordnern erben es alle zukünftig darin abgelegten Dateien.
d Das Programm dump ignoriert die Datei.
D Nur sinnvoll bei Ordnern. Änderungen werden synchron auf den Datenträger geschrieben.
F Nur sinnvoll bei Ordnern. Jede Suche nach Dateien in einem so markierten Ordner ignoriert Groß-/Kleinschreibung. Das Attribut kann nur für leere Ordner geändert werden und natürlich nur in einem Dateisystem, welches es unterstützt und in dem es auch aktiviert wurde.
i Dies ist ein erweiterter Schreibschutz, der neben dem Inhalt auch die Verwaltungsdaten im Inode und im Ordner unveränderlich (immutable) macht. Dateien mit diesem Attribut können nicht umbenannt, nicht gelöscht und nicht modifiziert werden und man kann auch keinen weiteren Dateinamen (Hardlink) vergeben. Der Dateiinhalt kann auch nicht an eine andere Stelle im Dateisystem verlagert werden. Auch root kann vorgenannte Veränderungen nicht durchführen. Anm. 1
Kopieren und symbolische Links (Softlinks) sind weiterhin möglich.
j Nur relevant bei Dateisystemen mit Journal (wie z.B. ext3 oder ext4) bei Verwendung der Mount-Optionen date=ordered oder data=writeback. Bei Dateien mit diesem Attribut wird bei Änderungen des Dateiinhalts der vollständige neue Dateiinhalt zuerst in das Journal geschrieben und danach in die Datei selbst. Bei Verwendung der Mount-Option data=journal werden ohnehin alle Dateien so behandelt, und das Attribut bewirkt nichts. Anm. 1, 2
m In Dateisystemen, die Dateien automatisch komprimieren, dies für diese Datei abschalten.
P Nur sinnvoll bei Ordnern in Dateisystemen, welche eine Zuordnung von Datei zu Projekten unterstützen. Bei gesetztem Attribut werden die Restriktionen dieser Projektverwaltung beachtet.
s Beim Löschen einer Datei mit diesem Attribut wird ihr Inhalt mit Nullen überschrieben und nicht nur als überschreibbar markiert. Anm. 3
S Nicht sinnvoll bei Ordnern. Änderungen werden synchron auf den Datenträger geschrieben.
t Schaltet tail-merging ab. "Tail merging" bedeutet, dass freier Platz im letzten Cluster einer Datei für eine andere Datei verwendet werden kann. Das Dateisystem ext4 benutzt diese Technik generell nicht. Anm. 3
T Nur sinnvoll bei Ordnern. Ein gesetztes Attribut markiert den Ordner als Wurzel einer Hierarchie für den Orlov block allocator 🇬🇧. Unterschiedliche Hierarchien werden nach Möglichkeit in unterschiedlichen Blockgruppen, jedenfalls möglichst weit entfernt voneinander gespeichert; das kann Zugriffe beschleunigen.
u Beim Löschen der Datei wird ihr Inhalt ins Journal verschoben; aus diesem kann eine so gelöschte Datei wieder hergestellt werden. Anm. 3
x Schaltet DAX (direct access) 🇬🇧 ein, sofern der Kernel es unterstützt und es nicht per Mount-Option dax=never abgeschaltet wurde. Bei Ordnern gilt eine Aktivierung auch rekursiv für seinen Inhalt, aber nur für neue Einträge nach den Setzen des Attributs.

⚓︎ Anmerkungen:

  1. Attribut verändern erfordert Root-Rechte[3].

  2. Bei einer bereits geöffneten Datei bewirkt Setzen des Attributs nichts.

  3. Das Attribut ist zwar bei Dateisystemen ext2/3/4 implementiert, aber die Funktionalität selbst ist noch nicht freigegeben (Stand 2023) und funktioniert höchstens in experimentellen Versionen.

Die Attribute lt. folgender Tabelle 3 werden bei Bedarf automatisch vom Kernel gesetzt und können nicht mit chattr verändert werden.

Tabelle 3: Kennbuchstaben von abfragbaren Attributen und deren Bedeutung
AttributBedeutung
e Teile des Dateiinhalts sind in sog. extends gespeichert, das sind Gruppen von aufeinander folgenden Clustern, die als Gruppe und nicht als einzelne Cluster verwaltet werden.
E Veraltet: Vom Kernel komprimierte Datei mit Fehler.
Aktuell: Verschlüsselte (encrypted) reguläre Datei, Ordner oder symbolischer Link
I Nur sinnvoll bei Ordnern. Attribut gibt an, wie die Namen der im Ordner enthalten Dateien organisiert sind: Bei gelöschten Bit wird eine Liste der Namen (Klartext) sequentiell gelesen; bei gesetztem Bit wird in einem Baum Prüfsummen (hashes) der Dateinamen gesucht.
N Teile des Dateiinhaltes sind im Inode gespeichert.
V Die Datei ist schreibgeschützt und verifiziert, d.h. bei jedem Lesen des Inhalts wird dieser mit Hilfe einer Prüfsumme auf Veränderungen geprüft.
X Veraltet: Diese vom Kernel automatisch komprimierte Datei kann auch als solche, also ohne automatische Inflation gelesen werden.
Z Veraltet: Vom Kernel komprimierte Datei mit Fehler.

Beispiele

  • lsattr 

    entspricht

    lsattr . 

    und zeigt die Attribute der Dateien im aktuellen Arbeitsverzeichnis an, und

    lsattr . 2>/dev/null 

    macht das gleiche, aber ohne Fehlermeldungen.

  • lsattr DATEI 

    zeigt die Attribute der Datei DATEI im aktuellen Arbeitsverzeichnis an.

  • lsattr ORDNER 

    zeigt die Attribute der im ORDNER enthaltenen Dateien, aber nicht die Attribute des Ordners selbst an.

  • lsattr -d ORDNER 

    zeigt die Attribute des ORDNERs als Datei an, aber nicht die der in ihm enthaltenen Dateien.

  • lsattr -d /etc/ /tmp/test-chattr/{,*} 

    zeigt

    -----------I--e------- /etc/
    ------d------Te------- /tmp/test-chattr/
    ------d-----t-e------- /tmp/test-chattr/t1

    mit den gesetzten Attributen I und e für den Ordner /etc/ sowie der Attribute eines testweise angelegten Ordners und dessen Inhalt.

  • lsattr -l -d /etc/ /tmp/test-chattr/{,*} 

    zeigt dieselbe Information anders formatiert:

    /etc/                        Indexed_directory, Extents
    /tmp/test-chattr/            No_Dump, Top_of_Directory_Hierarchies, Extents
    /tmp/test-chattr/t1          No_Dump, No_Tailmerging, Extents
  • Attribute rekursiv für (auch mehrere) Ordner und deren Inhalt setzen, hier im Beispiel das Attribut d:

    chattr -R +d /tmp/test-chattr/ 
  • Datei unveränderbar zu machen, damit sie nicht gelöscht oder geändert werden kann:

    sudo chattr +i DATEI 
  • Eine unveränderbar gemachte Datei wieder veränderbar machen:

    sudo chattr -i DATEI 

⚓︎

Dokumentation

Die Programme lsattr und chattr haben jeweils eine eigene Manpage:

man lsattr
man chattr 

Verwandte Befehle sind:

  • chown legt den Besitzer und die Gruppenzugehörigkeit von Dateien fest.

  • chgrp legt die Gruppenzugehörigkeit von Dateien fest.

  • chmod verändert die Zugriffsrechte von Dateien.

Diese Revision wurde am 31. August 2025 11:02 von kB erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Shell, System