"chattr"コマンドで設定された属性は拡張属性として実装されていますか?

"chattr"コマンドで設定された属性は拡張属性として実装されていますか?

このchattrコマンドは、ファイルの一部のプロパティを設定するために使用されます(例: 追加(a)のみ変わらない(1)、等。 )。

これらのプロパティは拡張プロパティとして実装されていますか、それとも独自のプロパティクラスですか?

答え1

いいえ、これらのフラグは(ファイルシステムFS_IOC_SETFLAGS ioctl()とも呼ばれ、他のファイルシステムの場合はそのフラグ)を使用して設定されます。EXT2_IOC_SETFLAGSext*

これをサポートするほとんどのファイルシステムでは、inode構造のビットマップに変換されます。

たとえば、他の多くのファイルシステムでは、inode構造メンバー(32ビット整数)ext4です。i_flags

一部の外部(Linuxではない)ファイルシステム(AppleのHFS +など)には、同等のフラグを持つ同様の概念があり、FS_IOC_SETFLAGSioctlがそこに変換されます。

ファイルシステムでこのコマンドを使用するとstat(inode構造ダンプ)、出力される数字は次のとおりです。debugfsext*Flags:

 $ sudo debugfs /dev/vda
 debugfs: stat /tmp/file
 Inode: 1835209   Type: regular    Mode:  0644   Flags: 0x80010
 [...]

0x80000はFS_EXTENT_FL(出力eから)、0x10は()です。lsattrFS_IMMUTABLE_FLi

新しいstatx()システムコールはこの情報(一部)を返すこともできます(現在(2019年初め)、すべてのシステムに簡単に呼び出すのに十分な新しいGNU libcバージョン(2.28以降)があるわけではありません)。

xfs_io最新のシステムでは、このstatxコマンドをシステムコールへのインターフェースとして使用できますstatx()

$ xfs_io -rc 'statx -r' /tmp/a
[...]
stat.attributes = 0x10
[...]

(ここで 0x10 はSTATX_ATTR_IMMUTABLEFS_EXTENT_FL対応するフラグビットがありませんstatx())。

関連情報