Unterschied zwischen xattr und chattr

9

Was ist die Beziehung und der Unterschied zwischen xattrund chattr? Ich möchte wissen, wann ich unter chattrLinux ein Attribut setze, was im Linux-Kernel und in den Inode-Metadaten passiert.

Cerberuzs
quelle
Ich habe gestern eine lange Antwort auf eine verwandte Frage geschrieben, die hilfreich sein könnte - unix.stackexchange.com/questions/118840/… . Beachten Sie, dass der attrBefehl für XFS-Dateisysteme vorgesehen ist. Der entsprechende dateisystemunabhängige Befehl lautetsetfattr
Graeme

Antworten:

13

Die Attribute, wie sie von lsattr/ chattrunter Linux verarbeitet werden und von denen einige von einigen Dateisystemen (ext2 / 3/4, reiserfs, JFS, OCFS2, btrfs, XFS, nilfs2, hfsplus ...) gespeichert und sogar über CIFS abgefragt werden können / SMB (bei POSIX-Erweiterungen) sind Flags. Nur Bits, die ein- oder ausgeschaltet werden können, um ein Attribut zu deaktivieren oder zu aktivieren (wie unveränderlich oder archiviert ...). Wie sie gespeichert werden, ist dateisystemspezifisch, im Allgemeinen jedoch als 16/32/64-Bit-Datensatz im Inode.

Die vollständige Liste der Flags befindet sich auf nativen Linux-Dateisystemen (ext2 / 3/4, btrfs ...), obwohl nicht alle Flags für alle FS gelten. Bei anderen nicht nativen FS versucht Linux, sie gleichwertig zuzuordnen Funktionen im entsprechenden Dateisystem. Beispielsweise wird das von OSX auf HFS + -Dateisystemen gespeicherte simmutable- Flag dem entsprechenden unveränderlichen Flag unter Linux zugeordnet chattr. Welches Flag von welchem ​​Dateisystem unterstützt wird, ist kaum dokumentiert. Oft ist das Lesen des Kernel-Quellcodes die einzige Option.

Erweiterte Attribute hingegen, wie sie mit setfattroder attrunter Linux festgelegt wurden, speichern mehr als Flags. Sie werden ebenfalls an eine Datei angehängt und sind Schlüssel / Wert-Paare, die (sowohl Schlüssel als auch Wert) beliebige Arrays von Bytes sein können (bei einigen Dateisystemen jedoch mit Größenbeschränkung).

Der Schlüssel kann zum Beispiel sein: system.posix_acl_accessoder user.rsync.%stat. Der systemNamespace ist für das System reserviert (Sie würden die POSIX-ACLs nicht ändern setfattr, sondern eher mit setfaclPOSIX-ACLs, die zumindest in einigen Dateisystemen als erweiterte Attribute gespeichert werden), während der userNamespace von Anwendungen verwendet werden kann (hier) rsyncverwendet es für seine --fake-superOption, Informationen über Besitz oder Berechtigungen zu speichern, wenn Sie kein Superuser sind).

Auch hier ist die Art und Weise, wie sie gespeichert werden, dateisystemspezifisch. Weitere Informationen finden Sie in WikiPedia .

Stéphane Chazelas
quelle
Do lsattr/ chattrArbeit für Nicht - extDateisysteme? Wenn nicht, wie würden Sie die Flags auf Nicht- extSystemen unter Linux ändern ? Auch die attrManpage sagt, dass es für XFS geschrieben ist (obwohl es für mich funktioniert ext4). Ich habe mich gestern lange damit beschäftigt, gute Informationen sind schwer zu bekommen. Bitte sehen Sie - unix.stackexchange.com/questions/118840/…
Graeme
@ Graeme, Antworten auf diese Fragen sind in meiner Antwort. lsattr/chattrsind für Dateiflaggen. Nicht alle Flags werden beispielsweise von allen Dateisystemen unterstützt. Einige davon wie Komprimierung funktionieren nicht in ext4, aber in btrfs.
Stéphane Chazelas
Wenn Sie interessiert sind, habe ich ein Skript geschrieben, um diese Flags auf einigen Dateisystemen zu testen und die Ergebnisse auf meine oben verlinkte Antwort zu setzen. Ich hatte keinen Erfolg damit, einen von ihnen einzustellen / zu lesen reiserfs.
Graeme
-1

Alles wurde eingegeben. inodeWenn Sie eine Datei ändern, ändern Sie tatsächlich ihre. Für inodeSkripte haben Sie einen guten Befehl:

stat --format=%a yourfile

Sie können %variableein nützliches von verwenden und zurückgebeninode

Aber deine Antwort:

xattrist auf dem MacOS und chattrauf Linux-Box.

Persischer Golf
quelle