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.
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 .
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
attr
Befehl für XFS-Dateisysteme vorgesehen ist. Der entsprechende dateisystemunabhängige Befehl lautetsetfattr
Antworten:
Die Attribute, wie sie von
lsattr
/chattr
unter 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
setfattr
oderattr
unter 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_access
oderuser.rsync.%stat
. Dersystem
Namespace ist für das System reserviert (Sie würden die POSIX-ACLs nicht ändernsetfattr
, sondern eher mitsetfacl
POSIX-ACLs, die zumindest in einigen Dateisystemen als erweiterte Attribute gespeichert werden), während deruser
Namespace von Anwendungen verwendet werden kann (hier)rsync
verwendet es für seine--fake-super
Option, 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 .
quelle
lsattr
/chattr
Arbeit für Nicht -ext
Dateisysteme? Wenn nicht, wie würden Sie die Flags auf Nicht-ext
Systemen unter Linux ändern ? Auch dieattr
Manpage sagt, dass es für XFS geschrieben ist (obwohl es für mich funktioniertext4
). Ich habe mich gestern lange damit beschäftigt, gute Informationen sind schwer zu bekommen. Bitte sehen Sie - unix.stackexchange.com/questions/118840/…lsattr/chattr
sind für Dateiflaggen. Nicht alle Flags werden beispielsweise von allen Dateisystemen unterstützt. Einige davon wie Komprimierung funktionieren nicht in ext4, aber in btrfs.reiserfs
.Alles wurde eingegeben.
inode
Wenn Sie eine Datei ändern, ändern Sie tatsächlich ihre. Fürinode
Skripte haben Sie einen guten Befehl:Sie können
%variable
ein nützliches von verwenden und zurückgebeninode
Aber deine Antwort:
xattr
ist auf dem MacOS undchattr
auf Linux-Box.quelle