“chattr”命令设置的属性是否作为扩展属性实现?

“chattr”命令设置的属性是否作为扩展属性实现?

chattr命令用于设置文件的一些属性(例如: 仅附加 (a),不变(一), ETC。)。

这些属性是作为扩展属性实现的,还是它们自己的属性类别?

答案1

不,这些标志是使用FS_IOC_SETFLAGS ioctl()(也称为EXT2_IOC_SETFLAGS文件ext*系统,以及其他文件系统的相应标志)设置的。

在大多数支持它的文件系统中,它会转换为 inode 结构的一位图。

例如,在ext4其他几个文件系统中,这就是i_flagsinode 结构成员(32 位整数)。

一些外国(非 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_FLelsattr输出中),0x10 是FS_IMMUTABLE_FLi)。

新的statx()系统调用还可以返回(部分)该信息(尽管目前(2019 年初)并非所有系统都具有足够新的 GNU libc 版本(2.28 或更高版本),以便能够轻松调用它)。

在最近的系统上,您可以使用xfs_iostatx命令作为系统调用的接口statx()

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

(这里0x10是STATX_ATTR_IMMUTABLEFS_EXTENT_FL没有对应的statx()标志位)。

相关内容