该chattr
命令用于设置文件的一些属性(例如: 仅附加 (a),不变(一), ETC。)。
这些属性是作为扩展属性实现的,还是它们自己的属性类别?
答案1
不,这些标志是使用FS_IOC_SETFLAGS
ioctl()
(也称为EXT2_IOC_SETFLAGS
文件ext*
系统,以及其他文件系统的相应标志)设置的。
在大多数支持它的文件系统中,它会转换为 inode 结构的一位图。
例如,在ext4
其他几个文件系统中,这就是i_flags
inode 结构成员(32 位整数)。
一些外国(非 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
在lsattr
输出中),0x10 是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()
标志位)。