扩展属性是Linux文件系统的名称-值对元数据,用于存储SELinux、ACL等信息,通过getfattr命令可查看,支持user、security、system、trusted命名空间,常用选项包括-d、-m、-n等,适用于ext4、XFS等文件系统。

在 Linux 中,文件除了常规的权限、所有者、时间戳等属性外,还可以拥有扩展属性(Extended Attributes,简称 xattr)。扩展属性允许用户或系统为文件附加额外的元数据。要查看这些扩展属性,可以使用 getfattr 命令。
什么是扩展属性
扩展属性是与文件或目录关联的名称-值对,存储在文件系统的元数据中。它们通常用于存储安全策略(如 SELinux)、访问控制列表(ACL)、用户自定义标签等信息。不同命名空间下的属性用途不同,常见的命名空间包括:
- user.*:用户自定义属性,普通用户可读写
- security.*:用于安全模块,如 SELinux
- system.*:系统级属性,如 ACL 或能力(capabilities)
- trusted.*:仅 root 可访问的受信任属性
使用 getfattr 查看扩展属性
getfattr 是专门用于读取文件扩展属性的命令。基本语法如下:
getfattr [选项] 文件名
常用选项包括:
- -n name:只获取指定名称的属性
- -d:显示文件的所有扩展属性
- -m pattern:匹配特定命名空间的属性(如 "user")
- -e enc:指定属性值的编码方式(如 text、hex、base64)
- -R:递归查看目录中所有文件的属性
示例:
查看某个文件的所有扩展属性:
getfattr -d example.txt
输出可能如下:
# file: example.txt user.author="alice" user.description="This is a test file" security.selinux="unconfined_u:object_r:user_home_t:s0"
只查看 user 命名空间下的属性:
getfattr -d -m user example.txt
查看特定属性的值:
getfattr -n user.author example.txt
常见使用场景
扩展属性在实际中有很多用途:
- SELinux 使用 security.selinux 属性存储文件的安全上下文
- 文件加密或完整性校验工具可能使用扩展属性存储密钥或哈希值
- 用户可以自定义标签用于文件分类,如 user.tags="work,urgent"
- 某些备份或同步工具利用扩展属性保存额外状态信息
注意:不是所有文件系统都支持扩展属性。常见支持的文件系统包括 ext4、XFS、Btrfs 等。挂载时需要启用相关选项(如 user_xattr)。
查看属性但不显示文件名
使用 --only-values 选项可以只输出属性值,适合脚本处理:
getfattr -n user.description --only-values example.txt
这将直接输出属性值,不包含属性名或文件名。
基本上就这些。getfattr 是查看 Linux 文件扩展属性的核心工具,结合 setfattr 可实现完整管理。理解命名空间和编码方式有助于正确读取属性内容。










