[[Vorlage(getestet, general)]] {{{#!vorlage Wissen [:Terminal:Ein Terminal öffnen] [:Dateisystem:Dateisysteme] [:Root-Rechte:] }}} [[Inhaltsverzeichnis()]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] Einige Dateisysteme[2] stellen für jede Datei einige Bits (''flags'') für Attribute bereit, dies gilt insbesondere für das Dateisystem [:ext:ext2] und dessen Nachfolger ext3 und ext4. Zur Anzeige dieser Attribute dient das im Zuge von ext2 mit entwickelte Programm [#Aufruf-lsattr lsattr], und [#Aufruf-chattr chattr] ermöglicht die Änderung dieser Flags. Das funktioniert auch für weitere bei Linux übliche Typen von Dateisystemen lt. [#Tabelle-1 Tabelle 1]: 1. 12 Bits werden für Dateiberechtigungen verwendet. :arrow: [:Rechte:Dateirechte] 1. 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 [:ext:ext4]. 1. Manche Dateisysteme, beispielsweise [:Windows-Partitionen_unter_Linux:FAT, exFAT und NTFS] kennen konzeptionell ähnliche Dateiattribute (RHSDVA in [#Tabelle-1 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 [https://gnulinux.ch/dateien-mit-attributen diesem Artikel] {de} 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 ('''l'''i'''s'''t '''attr'''ibutes) 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 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: {{{#!vorlage Befehl 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. :arrow: [#RTFM 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. :arrow: [#Beispiele Beispiele] = Aufruf chattr = Das Programm chattr ('''ch'''ange '''attr'''ibutes} ändert (nur Unix-) Attribute von Dateien oder Ordnern in unterstützten Dateisystemen lt. folgender Tabelle. ## aAcCdDeFijmPsStTux [[Anker( Tabelle-1 ) ]] ||Tabelle 1: Unterstützte Dateisysteme || ||Dateisystem||<-2:>Unterstützung durch||<-2:>Attribute|| ||Typ||<:>Treiber||<:>lsattr||<:>chattr||Unix||Windows||Bemerkungen|| ||ext2 ||ext4 ||<:>ja||<:>ja||aA dD i Su || || ||ext3 ||ext4 ||<:>ja||<:>ja||aA dD ij Su || || ||ext4 ||ext4 ||<:>ja||<:>ja||aA dDeij Su || || ||Btrfs||btrfs||<:>ja||<:>ja||aAcCdD i mS V|| || ||XFS || xfs ||<:>ja||<:>ja||aA d i S || || ||JFS || jfs ||<:>ja||<:>ja||a i || || ||FAT12/16/32|| vfat||<:>nein||<:>nein|| ||<:>RHSVDA|| ||exFAT ||exfat||<:>nein||<:>nein|| ||<:>RHSVDA|| ||<|2>NTFS ||ntfs3||<:> ja ||<:>nein|| ||<|2:>RHSVDA[[BR]]&[[BR]]weitere 9|| lsattr zeigt zwar etwas an, es ist aber völlig unklar, wie die Attribute gesetzt werden können.|| || ntfs-3g|| ||<-7>Weitere siehe [#RTFM Dokumentation].|| Man startet das Programm im Terminal[1] mit dieser generellen Syntax: {{{#!vorlage Befehl 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. :arrow: [#RTFM Dokumentation] * MODUS ist eine Zeichenfolge aus einem Vorzeichen (`+`, `-` `=`) und einer nicht leeren Folge von [#Attribute 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. :arrow: [#Beispiele 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 || ||Attribut||Bedeutung|| || 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. [#Anmerkung 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. [#Anmerkung 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. [#Anmerkung Anm. 1] [[BR]]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. [#Anmerkung 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. [#Anmerkung 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. [#Anmerkung Anm. 3] || || T || Nur sinnvoll bei Ordnern. Ein gesetztes Attribut markiert den Ordner als Wurzel einer Hierarchie für den [http://en.wikipedia.org/wiki/Orlov_block_allocator Orlov block allocator] {en}. 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. [#Anmerkung Anm. 3] || || x || Schaltet [https://www.kernel.org/doc/html/latest/filesystems/dax.html DAX (''direct access'')] {en} 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.|| [[Anker( Anmerkung ) ]] Anmerkungen: 1. Attribut verändern erfordert Root-Rechte[3]. 1. Bei einer bereits geöffneten Datei bewirkt Setzen des Attributs nichts. 1. 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 || ||Attribut||Bedeutung|| || 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. [[BR]] 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 = ## [[Vorlage(Befehl, '' ) ]] * [[Vorlage(Befehl, 'lsattr' ) ]] entspricht [[Vorlage(Befehl, 'lsattr .' ) ]] und zeigt die Attribute der Dateien im aktuellen Arbeitsverzeichnis an, und [[Vorlage(Befehl, 'lsattr . 2>/dev/null' ) ]] macht das gleiche, aber ohne Fehlermeldungen. * [[Vorlage(Befehl, 'lsattr DATEI' ) ]] zeigt die Attribute der Datei DATEI im aktuellen Arbeitsverzeichnis an. * [[Vorlage(Befehl, 'lsattr ORDNER' ) ]] zeigt die Attribute der im ORDNER enthaltenen Dateien, aber nicht die Attribute des Ordners selbst an. * [[Vorlage(Befehl, 'lsattr -d ORDNER' ) ]] zeigt die Attribute des ORDNERs als Datei an, aber nicht die der in ihm enthaltenen Dateien. * [[Vorlage(Befehl, '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. * [[Vorlage(Befehl, '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: [[Vorlage(Befehl, 'chattr -R +d /tmp/test-chattr/' ) ]] * Datei unveränderbar zu machen, damit sie nicht gelöscht oder geändert werden kann: [[Vorlage(Befehl, 'sudo chattr +i DATEI' ) ]] * Eine unveränderbar gemachte Datei wieder veränderbar machen: [[Vorlage(Befehl, 'sudo chattr -i DATEI' ) ]] [[Anker( RTFM ) ]] = Dokumentation = Die Programme lsattr und chattr haben jeweils eine eigene [:man:Manpage]: {{{#!vorlage Befehl man lsattr man chattr }}} = Links = * [:Benutzer_und_Gruppen:] {Übersicht} Grundlagenartikel * [:Rechte:] {Übersicht} Besitz- und Zugriffsrechte für Ordner und Dateien in Linux * [wikipedia_en:File_attribute:] * [http://e2fsprogs.sourceforge.net Projektseite] {en} von e2fsprogs, welche auch lsattr und chattr enthalten 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. # tag: Shell, System