否,这些标志是使用设置FC_IOC_SETFLAGS ioctl()(也称为EXT2_IOC_SETFLAGS对ext*文件系统,以及相应的一个为其它文件系统)。
在支持它的大多数文件系统中,这会转换为 inode 结构的一个位图。
例如,在ext4和其他几个文件系统中,这是i_flagsinode 结构成员(一个 32 位整数)。
一些外国(非 Linux)文件系统,如 Apple 的 HFS+ 具有类似的概念,带有等效标志,FC_IOC_SETFLAGSioctl 在那里进行翻译。
在文件系统中使用stat命令(转储 inode 结构)时,这是输出中的数字:debugfsext*Flags:
$ sudo debugfs /dev/vda
debugfs: stat /tmp/file
Inode: 1835209 Type: regular Mode: 0644 Flags: 0x80010
[...]
Run Code Online (Sandbox Code Playgroud)
0x80000 是FS_EXTENT_FL(e在lsattr输出中),0x10 是FS_IMMUTABLE_FL(i)。
新statx()系统调用还可以返回(部分)该信息(目前(2019 年初)并非所有系统都具有足够新的 GNU libc(2.28 或更高版本)版本,以便能够轻松调用它)。
在最近的系统上,您可以使用xfs_io'sstatx命令作为statx()系统调用的接口:
$ xfs_io -rc 'statx -r' /tmp/a
[...]
stat.attributes = 0x10
[...]
Run Code Online (Sandbox Code Playgroud)
(这里 0x10 是STATX_ATTR_IMMUTABLE,那个FS_EXTENT_FL没有相应的statx()标志)。