扩展属性
摘自 xattr(7):“扩展属性是与文件和目录永久关联的名称:值对”。扩展属性分为四个类别:security(安全)、system(系统)、trusted(受信任)和 user(用户)。
扩展属性还用于设置 Capabilities(功能权限)。
用户扩展属性
用户扩展属性可用于存储关于文件的任意信息。要创建属性:
$ setfattr --name=user.checksum --value="3baf9ebce4c664ca8d9e5f6314fb47fb" file.txt
使用 getfattr 显示扩展属性
$ getfattr --encoding=text --dump file.txt
# file: file.txt user.checksum="3baf9ebce4c664ca8d9e5f6314fb47fb"
要删除扩展属性:
$ setfattr --remove=user.checksum file.txt
要查找具有特定扩展属性的文件,请使用 rawhideAUR
$ rh /path/to/dir '"XATTR_REGEX".reea'
一些其他常见的用户扩展属性包括:
user.mime_type:帮助程序识别 MIME 类型,减少猜测。user.charset:由 Apache httpd 模块 mod_mime_xattr 使用。user.creator:创建该文件的应用程序名称。
XDG 还提出了一套供程序使用的标准化扩展属性:
user.xdg.comment:由 Dolphin 和其他文件管理器支持。user.xdg.origin.url:用于从 URL 下载的文件。user.xdg.robots.index:如果文件包含在索引中则为 "true",否则为 "false"user.xdg.robots.backup:如果文件包含在备份中则为 "true",否则为 "false"user.xdg.languageuser.xdg.creatoruser.xdg.publisheruser.xdg.origin.email.subjectuser.xdg.origin.email.fromuser.xdg.origin.email.message-id
user.xdg.tags 不属于官方标准,但由于许多流行程序都实现了对其的支持(见 #软件),它已成为一种“事实标准”。它被实现为每个文件由用户指定的 CSV 标签列表。
保留扩展属性
| 命令 | 默认保留?/所需标志 |
|---|---|
cp |
--archive/--preserve=all/--preserve=xattr |
mv |
是1 |
tar |
创建时使用 --xattrs,解压时使用 --xattrs-include='*' |
bsdtar |
解压时使用 -p |
| rsync | -X, --xattrs
|
| cpio | 否 |
| gzip | 否 |
| pax | 否 |
| syncthing | 通过启用 syncXattrs |
- 当目标文件系统不支持扩展属性时,mv 会静默丢弃它们。
要在 文本编辑器 中保留扩展属性,您需要将其配置为在保存时截断(truncate)文件,而不是使用 rename(2)。[1]
就像处理任何不想丢失的数据一样,您应该定期为扩展属性创建 备份。要对当前目录下所有文件的扩展属性进行完整备份(递归):
$ getfattr --dump --recursive . > backup.txt
还原备份:
$ setfattr --restore=backup.txt
支持
文件系统
所有主流 Linux 文件系统,包括 Ext4、Btrfs、ZFS 和 XFS 均支持扩展属性。内核允许扩展属性名称最长 255 字节,值最高 64 KiB,但 Ext4 和 Btrfs 可能会施加更小的限制,要求扩展属性必须在单个“文件系统块”内。
NTFS 使用替代数据流(Alternative Data Streams)来存储 user 属性。默认应使用挂载选项 user_xattr 或 streams_interface=xattr。然而,如果使用挂载选项 streams_interface=windows,则可能不支持。ntfs-3g 支持在 FUSE 中将替代数据流映射到扩展属性。
NFS 自 Linux 5.9 起支持扩展属性。
软件
| 应用程序 | 支持扩展属性的软件 | 备注 |
|---|---|---|
| baloo | user.xdg.tags user.baloo.rating |
|
| caja | 是 | 由 caja-xattr-tags 和 caja.eiciel 扩展支持。 |
| Chromium | 否 | 曾用于支持来源(referrer)和 URL,但由于隐私和安全顾虑而被禁用。另见 CVE-2018-20483。 |
| brave-binAUR | 否 | |
| CURL | user.xdg.origin.url user.xdg.referrer.url |
通过 --xattr 标志启用。 |
| Dolphin | user.baloo.rating user.xdg.comment user.xdg.tags user.kde.fm.viewproperties#1 |
Dolphin 提供了全面的文件标记支持,包括通过右键菜单为文件添加标记以及支持按标记搜索。标记以 CSV 格式存储在 user.xdg.tags 属性中。另见 Dolphin#文件标记。
|
| Dropbox | user.com.dropbox.attributes
|
|
| emacs-vm | 否 | 重置 mbox 扩展属性。 |
| Epiphany | 否 | |
| Exiftool | 否 | |
| fd | 否 | |
| findutils | 否 | |
| Firefox | 否 | |
| gallery-dlAUR | 否 | |
| Gwenview | user.xdg.tags
|
|
| kfind | 否 | |
| konqueror | 否 | |
| kio | [4] | |
| Nautilus | 否 | 可以通过来自 eicielAUR 的 Nautilus 扩展来增加完整的扩展文件属性支持。 |
| rclone | 否 | |
| recoll | user.xdg.tags
|
|
| tagspacesAUR | 否 | |
| tmsuAUR | 否 | |
| Thunar | 否 | |
| youtube-dlAUR, yt-dlp | user.xdg.referrer.url user.dublincore.title user.dublincore.date user.dublincore.description user.dublincore.contributor user.dublincore.format |
通过 --xattrs 标志启用。 |
| Wget | user.xdg.origin.url user.xdg.referrer.url |
通过 --xattrs 标志启用。 |
| webkit | 否 |
其他标记系统
由于文件系统或软件缺乏支持,可能无法使用扩展属性。因此,许多媒体格式将元数据直接存储在文件格式内部,可以使用 Exiftool 等通用程序或如针对音频的 id3AUR 等专用程序进行查看。
- 通用文件:Exiftool
- 音频文件:音频标签编辑器
- 视频文件:来自 FFmpeg 的 ffprobe(1)
gvfs
另一种独立于文件系统的权宜之计是 Gnome 虚拟文件系统:gvfs,它用于存储元数据 (gvfsd-metadata)。例如,Firefox 以这种方式存储元数据,且可以通过以下方式查看:
$ gio info --attributes=metadata:: downloaded.html
使用此方法的其他程序包括:
- Thunar:用于保存文件的颜色高亮。