xattr
とchattr
の関係と違いは何ですか? Linuxでchattr
属性を設定すると、Linuxカーネルとiノードメタデータ内で何が起こっているのかを知りたいです。
Linuxでlsattr
/ chattr
によって処理される属性であり、その一部はかなりの数のファイルシステム(ext2/3/4、reiserfs、JFS)で保存できます。 、OCFS2、btrfs、XFS、nilfs2、hfsplus ...)であり、CIFS/SMB(POSIX拡張機能を使用している場合)でさえ照会されるフラグです。属性を無効または有効にするためにオンまたはオフにできるビット数(immutableまたはarchive...など)。それらがどのように格納されるかはファイルシステム固有ですが、一般的にはiノード内の16/32/64ビットレコードとしてです。
フラグの完全なリストはLinuxネイティブファイルシステム(ext2/3/4、btrfs ...)にありますが、すべてのフラグがすべてのFSに適用されるわけではなく、他の非ネイティブFSの場合、Linuxはそれらを同等のものにマップしようとします。対応するファイルシステムの機能。たとえば、OSXによってHFS +ファイルシステムに保存されている simmutable フラグは、Linux chattr
の対応する不変フラグにマップされます。どのファイルシステムがどのフラグをサポートしているかは、ほとんど文書化されていません。多くの場合、カーネルソースコードを読み取ることが唯一のオプションです。
一方、Linuxでsetfattr
またはattr
で設定されている拡張属性は、フラグ以上のものを格納します。これらはファイルにも添付され、キーと値のペアであり(キーと値の両方)、バイトの任意の配列(一部のファイルシステムではサイズに制限があります)になります。
たとえば、キーはsystem.posix_acl_access
またはuser.rsync.%stat
。 system
名前空間はシステム用に予約されています(POSIXACLをsetfattr
で変更することはありませんが、setfacl
を使用すると、POSIXACLは拡張属性として保存されます。少なくとも一部のファイルシステムでは)、user
名前空間はアプリケーションで使用できます(ここでは、rsync
はそれを--fake-super
オプション。スーパーユーザーでない場合の所有権や権限に関する情報を保存します)。
繰り返しになりますが、それらがどのように格納されるかはファイルシステム固有です。 詳細 についてはWikiPediaを参照してください。