xattr(7) 手册页

名称

xattr — 扩展属性(Extended Attributes)

描述

扩展属性是与文件和目录永久关联的名称:值(name:value)对,类似于与进程关联的环境变量。属性可以是已定义(defined)或未定义(undefined)状态。如果已定义,其值可以为空或非空。

扩展属性是系统内所有 inode 的正常属性(即 stat(2) 数据)的扩展。它们通常用于为文件系统提供额外功能——例如,访问控制列表(ACL)等额外的安全功能可以使用扩展属性来实现。

对文件或目录具有搜索权限的用户可以使用 listxattr(2) 检索为该文件或目录定义的所有属性名称列表。

扩展属性以原子对象的方式访问。读取(getxattr(2))会获取属性的完整值并将其存储到缓冲区中。写入(setxattr(2))会用新值替换之前的任何值。

扩展属性所占用的空间可能会计入文件所有者和文件所属组的磁盘配额。

扩展属性命名空间

属性名称是以 null 结尾的字符串。属性名称始终以完全限定形式 命名空间.属性名 指定,例如 user.mime_typetrusted.md5sumsystem.posix_acl_accesssecurity.selinux

命名空间机制用于定义不同类别的扩展属性。这些不同类别的存在有多个原因;例如,操作一个命名空间的扩展属性所需的权限和能力可能不同于另一个命名空间。

当前定义了 securitysystemtrusteduser 扩展属性类别,如下所述。未来可能会添加更多类别。

扩展安全属性

安全属性命名空间由内核安全模块(如 Security Enhanced Linux)使用,也用于实现文件能力(参见 capabilities(7))。对安全属性的读写访问权限取决于安全模块为每个安全属性实施的策略。当未加载安全模块时,所有进程都可以读取扩展安全属性,而写入权限仅限于具有 CAP_SYS_ADMIN 能力的进程。

系统扩展属性

系统扩展属性由内核用于存储系统对象,如访问控制列表。对系统属性的读写访问权限取决于文件系统在内核中为每个系统属性实施的策略。

可信扩展属性

可信扩展属性仅对具有 CAP_SYS_ADMIN 能力的进程可见和可访问。此类中的属性用于在用户空间(即内核外部)实现机制,这些机制将信息存储在普通进程不应访问的扩展属性中。

用户扩展属性

用户扩展属性可以分配给文件和目录,用于存储任意附加信息,如文件的 mime 类型、字符集或编码。用户属性的访问权限由文件权限位定义:读取权限是获取属性值所必需的,写入权限是更改属性值所必需的。

普通文件和目录的文件权限位与特殊文件和符号链接的文件权限位的解释方式不同。对于普通文件和目录,文件权限位定义了对文件内容的访问权限,而对于设备特殊文件,它们定义了对特殊文件所描述设备的访问权限。符号链接的文件权限不用于访问检查。这些差异将允许用户以磁盘配额无法控制的方式消耗文件系统资源,例如对组可写或世界可写的特殊文件和目录。

因此,用户扩展属性仅允许用于普通文件和目录,且对设置了粘滞位(sticky bit)的目录的用户扩展属性的访问仅限于所有者和具有适当能力的用户(参见 chmod(1) 手册页中关于粘滞位的说明)。

文件系统差异

内核和文件系统可能会对与文件关联的扩展属性的最大数量和大小施加限制。VFS 对属性名称和值的限制分别为 255 字节和 64 kB。可返回的属性名称列表也限制为 64 kB(参见 listxattr(2) 中的 BUGS 部分)。

某些文件系统(如 Reiserfs(以及历史上的 ext2 和 ext3))要求文件系统以 user_xattr 挂载选项挂载,才能使用用户扩展属性。

在当前 ext2、ext3 和 ext4 文件系统实现中,文件所有扩展属性的名称和值所使用的总字节数必须适合单个文件系统块(1024、2048 或 4096 字节,具体取决于创建文件系统时指定的块大小)。

在 Btrfs、XFS 和 Reiserfs 文件系统实现中,与文件关联的扩展属性数量没有实际限制,用于在磁盘上存储扩展属性信息的算法是可伸缩的。

在 JFS、XFS 和 Reiserfs 文件系统实现中,EA 值中使用的字节限制由 VFS 施加的上限决定。

在 Btrfs 文件系统实现中,名称、值和实现开销字节所使用的总字节数限制为文件系统的 nodesize 值(默认为 16 kB)。

标准

扩展属性未在 POSIX.1 中指定,但其他一些系统(如 BSD 和 Solaris)提供了类似的功能。

备注

由于存储扩展属性的文件系统也可能用于具有不同字节顺序和机器字长的架构,因此应注意以与架构无关的格式存储属性值。

本手册页以前命名为 attr(5)。

参见

attr(1), getfattr(1), setfattr(1), getxattr(2), FS_IOC_GETFLAGS(2const), FS_IOC_SETFLAGS(2const), listxattr(2), removexattr(2), setxattr(2), acl(5), capabilities(7), selinux(8)

版本信息

本手册页属于 man-pages 项目(Linux 内核和 C 库用户空间接口文档)。有关该项目的信息,请访问 https://www.kernel.org/doc/man-pages/ 。如果您对此手册页有 bug 报告,请访问 https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING 。本手册页从 https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/ 获取的 tarball man-pages-6.18.tar.gz 中取得,获取日期为 2026-05-24。如果您发现此 HTML 版本页面存在任何渲染问题,或认为有更好的或更最新的页面来源,或您对本版本信息(不属于原始手册页的一部分)有更正或改进意见,请发送邮件至 man-pages@man7.org。

Linux man-pages 6.18 | 2026-02-08 | xattr(7)


另外,为了方便查阅,以下是扩展属性命名空间的汇总表格:

命名空间 说明
security 由内核安全模块(如 SELinux)使用,也用于实现文件能力。读写权限由安全模块策略决定;未加载安全模块时,所有进程可读,仅 CAP_SYS_ADMIN 可写。
system 由内核用于存储系统对象(如 ACL)。读写权限取决于文件系统在内核中实施的具体策略。
trusted 仅对具有 CAP_SYS_ADMIN 能力的进程可见和可访问。用于在用户空间实现需要保护扩展属性的机制。
user 可用于存储任意附加信息(如 mime 类型、字符集)。访问权限由文件权限位控制,仅允许普通文件和目录,设置了粘滞位的目录仅限所有者和有能力的用户访问。
posted @ 2026-08-18 18:18  LoftyAmbition  阅读(7)  评论(0)    收藏  举报