Différence entre xattr et chattr

9

Quelle est la relation et la différence entre xattret chattr? Je veux savoir quand j'ai défini un chattrattribut sous Linux ce qui se passe à l'intérieur du noyau Linux et des métadonnées d'inode.

Cerberuzs
la source
J'ai écrit une longue réponse sur une question connexe hier qui pourrait être utile - unix.stackexchange.com/questions/118840/… . Notez que la attrcommande est destinée aux systèmes de fichiers XFS, la commande équivalente indépendante du système de fichiers estsetfattr
Graeme

Réponses:

13

Les attributs tels que gérés par lsattr/ chattrsous Linux et certains d'entre eux peuvent être stockés par un bon nombre de systèmes de fichiers (ext2 / 3/4, reiserfs, JFS, OCFS2, btrfs, XFS, nilfs2, hfsplus ...) et même interrogés via CIFS / SMB (avec les extensions POSIX) sont des indicateurs. Juste des bits qui peuvent être activés ou désactivés pour désactiver ou activer un attribut (comme immuable ou archive ...). La façon dont ils sont stockés est spécifique au système de fichiers, mais généralement en tant qu'enregistrement 16/32/64 bits dans l'inode.

La liste complète des drapeaux se trouve sur les systèmes de fichiers natifs Linux (ext2 / 3/4, btrfs ...) bien que tous les drapeaux ne s'appliquent pas à tous les FS, et pour les autres FS non natifs, Linux essaie de les mapper à des équivalents dans le système de fichiers correspondant. Par exemple, l' indicateur simmutable tel qu'il est stocké par OSX sur les systèmes de fichiers HFS + est mappé à l'indicateur immuable correspondant sous Linux chattr. Quel indicateur est pris en charge par quel système de fichiers est à peine documenté. Souvent, la lecture du code source du noyau est la seule option.

Les attributs étendus, d'autre part, tels qu'ils sont définis avec setfattrou attrsur Linux stockent plus que des indicateurs. Ils sont également attachés à un fichier et sont des paires clé / valeur qui peuvent être (à la fois clé et valeur) des tableaux arbitraires d'octets (mais avec une limitation de taille sur certains systèmes de fichiers).

La clé peut être par exemple: system.posix_acl_accessou user.rsync.%stat. L' systemespace de noms est réservé au système (vous ne changeriez pas les ACL POSIX avec setfattr, mais plus avec setfacl, les ACL POSIX se trouvent juste être stockées en tant qu'attributs étendus au moins sur certains systèmes de fichiers), tandis que l' userespace de noms peut être utilisé par les applications (ici rsyncl'utilise pour son --fake-superoption, pour stocker des informations sur la propriété ou les autorisations lorsque vous n'êtes pas superutilisateur).

Encore une fois, la façon dont ils sont stockés est spécifique au système de fichiers. Voir WikiPedia pour plus d'informations .

Stéphane Chazelas
la source
Fonctionne lsattr/ chattrfonctionne pour les non- extsystèmes de fichiers? Sinon, comment changeriez-vous les drapeaux sur les non- extsystèmes sous Linux? La attrpage de manuel indique également qu'elle est écrite pour XFS (même si elle fonctionne pour moi ext4). En fait, j'ai passé beaucoup de temps à étudier cela hier, il est difficile de trouver de bonnes informations. Veuillez voir - unix.stackexchange.com/questions/118840/…
Graeme
@Graeme, les réponses à ces questions sont dans ma réponse. lsattr/chattrsont pour les drapeaux de fichiers. Tous les indicateurs ne sont pas pris en charge par tous les systèmes de fichiers, par exemple, certains comme la compression ne fonctionneront pas sur ext4 mais fonctionneront sur btrfs.
Stéphane Chazelas
Si vous êtes intéressé, j'ai écrit un script pour tester ces drapeaux sur quelques systèmes de fichiers et mettre les résultats sur ma réponse liée ci-dessus. Je n'ai eu aucun succès à configurer / lire aucun d'entre eux reiserfs.
Graeme
-1

Tout a été caressé inode. Lorsque vous changez un fichier, en effet vous changez son inode.pour les scripts, vous avez une bonne commande:

stat --format=%a yourfile

Vous pouvez utiliser %variableet renvoyer uninode

Mais votre réponse:

xattrest sur MacOS et chattrsur Linux Box.

Golfe Persique
la source