このchattr
コマンドは、ファイルの一部のプロパティを設定するために使用されます(例: 追加(a)のみ、変わらない(1)、等。 )。
これらのプロパティは拡張プロパティとして実装されていますか、それとも独自のプロパティクラスですか?
答え1
いいえ、これらのフラグは(ファイルシステムFS_IOC_SETFLAGS
ioctl()
とも呼ばれ、他のファイルシステムの場合はそのフラグ)を使用して設定されます。EXT2_IOC_SETFLAGS
ext*
これをサポートするほとんどのファイルシステムでは、inode構造のビットマップに変換されます。
たとえば、他の多くのファイルシステムでは、inode構造メンバー(32ビット整数)ext4
です。i_flags
一部の外部(Linuxではない)ファイルシステム(AppleのHFS +など)には、同等のフラグを持つ同様の概念があり、FS_IOC_SETFLAGS
ioctlがそこに変換されます。
ファイルシステムでこのコマンドを使用するとstat
(inode構造ダンプ)、出力される数字は次のとおりです。debugfs
ext*
Flags:
$ sudo debugfs /dev/vda
debugfs: stat /tmp/file
Inode: 1835209 Type: regular Mode: 0644 Flags: 0x80010
[...]
0x80000はFS_EXTENT_FL
(出力e
から)、0x10は()です。lsattr
FS_IMMUTABLE_FL
i
新しいstatx()
システムコールはこの情報(一部)を返すこともできます(現在(2019年初め)、すべてのシステムに簡単に呼び出すのに十分な新しいGNU libcバージョン(2.28以降)があるわけではありません)。
xfs_io
最新のシステムでは、このstatx
コマンドをシステムコールへのインターフェースとして使用できますstatx()
。
$ xfs_io -rc 'statx -r' /tmp/a
[...]
stat.attributes = 0x10
[...]
(ここで 0x10 はSTATX_ATTR_IMMUTABLE
、FS_EXTENT_FL
対応するフラグビットがありませんstatx()
)。