Redian新闻
>
在 Linux 文件系统中使用 attr 添加扩展属性 | Linux 中国

在 Linux 文件系统中使用 attr 添加扩展属性 | Linux 中国

科技
 
导读:我使用开源的 XFS 文件系统是为了其扩展属性带来的小小便利。扩展属性是一种为我的数据添加上下文的独特方式。
本文字数:3193,阅读时长大约:4分钟

我使用开源的 XFS 文件系统是为了其扩展属性带来的小小便利。扩展属性是一种为我的数据添加上下文的独特方式。

“文件系统” 是一个描述你的计算机怎样跟踪你创建的所有文件的完美词语。你的计算机存储有大量的数据,无论是文档、配置文件还是数以千计的照片。这需要一种对人和机器都友好的方式。诸如 Ext4、XFS、JFS、BtrFS 的文件系统是你的计算机用来跟踪文件的“语言”。

你的桌面或终端可以帮助你快速查找文件。例如,你的文件管理器可能有过滤功能,以便让你可以快速查看家目录内的图片,它也可能带有搜索功能以让你使用文件名定位文件。这些特性被称作文件属性,正如其名,它们是由文件头或者文件系统代码定义的文件对象的属性。大多数的文件系统记录了标准的文件属性,例如文件名、文件大小、文件类型、创建时间、上次访问时间等。

我在我的计算机上使用开源的 XFS 文件系统,不是为了其稳定性和高性能,而是为了其扩展属性带来的小小便利。

常见的文件属性

当你保存一个文件,文件相关的数据也会随同保存。常见的属性会告诉操作系统是否更新访问时间,什么时间同步数据到硬盘等逻辑细节。哪些属性被保存取决于底层文件系统的功能和特性。

在标准文件属性(如果有标准属性的话)之外,XFS、Ext4 和 BtrFS 文件系统都可以使用扩展属性。

扩展属性

XFS、Ext4 和 BtrFs 允许你创建自己的任意文件属性。由于是自己创建的,操作系统不会有内建支持,不过我以“标签”的方式使用它们,就像图片的 EXIF 数据一样。开发者们也许会选择使用扩展属性去开发应用内的自定义的功能。

XFS 中的属性有两个“命名空间”:用户(user)和根(root)。当创建属性时,你必须将其加入其中一个命名空间。要将属性添加到根命名空间,必须使用 sudo 命令或以 root 身份登录。

增加一个属性

你可以使用 attr 和 setfattr 命令在 XFS 文件系统中为文件增加属性。

attr 命令默认在 user 命名空间下进行,所以你只需要为属性设置一个名字(-s)和值(-V)。

  1. $ attr -s flavor -V vanilla example.txt
  2. Attribute "flavor" set to a 7 byte value for example.txt:
  3. vanilla

setfattr 命令需要你指定目标命名空间:

  1. $ setfattr --name user.flavor --value chocolate example.txt

列出扩展文件属性

使用 attr 或者 getfattr 命令可以看已添加到文件上的扩展属性。attr 命令默认使用 user 空间,使用 -g 以获取扩展属性:

  1. $ attr -g flavor example.txt
  2. Attribute "flavor" had a 9 byte value for example.txt:
  3. chocolate

getfattr 命令需要属性的命名空间和名字:

  1. $ getfattr --name user.flavor example.txt
  2. # file: example.txt
  3. user.flavor="chocolate"

列出所有扩展属性

要看一个文件的所有扩展属性,你可以使用 attr -l

  1. $ attr -l example.txt
  2. Attribute "md5sum" has a 32 byte value for example.txt
  3. Attribute "flavor" has a 9 byte value for example.txt

或者,你也可以使用 getfattr -d

  1. $ getfattr -d example.txt
  2. # file: example.txt
  3. user.flavor="chocolate"
  4. user.md5sum="969181e76237567018e14fe1448dfd11"

扩展文件属性可以使用 attr 和 setfattr 更新,就像你创建这些属性一样:

  1. $ setfattr --name user.flavor --value strawberry example.txt
  2. $ getfattr -d example.txt
  3. # file: example.txt
  4. user.flavor="strawberry"
  5. user.md5sum="969181e76237567018e14fe1448dfd11"

其他文件系统上的属性

使用扩展属性最大的风险是忘记这些属性是特定于某个文件系统的。这意味着当你从一个磁盘或分区复制文件到另外一个磁盘或分区时,这些属性都会丢失,即使目标位置的文件系统也支持扩展属性。

为了避免丢失扩展属性,你需要使用支持保留这些属性的工具,例如 rsync 命令。

  1. $ rsync --archive --xattrs ~/example.txt /tmp/

但无论你使用什么工具,如果你传输文件到一个不知道如何处理扩展属性的文件系统,这些属性都会被丢弃。

搜索属性

与扩展属性交互的机制并不多,所以使用这些添加的文件属性的方法也有限。我使用扩展属性作为标签机制,这让我可以将没有明显关系的文件联系起来。例如,假设我需要在一个项目中用“知识共享”的图形。假如我预见性地将 license 属性添加到了我的图形库中,我就可以使用 find 和 getfattr 在图形文件夹中寻找:

  1. find ~/Graphics/ -type f \
  2. -exec getfattr \
  3. --name user.license \
  4. -m cc-by-sa {} \; 2>/dev/null
  5. # file: /home/tux/Graphics/Linux/kde-eco-award.png
  6. user.license="cc-by-sa"
  7. user.md5sum="969181e76237567018e14fe1448dfd11"

文件系统的秘密

文件系统一般不会引起你的注意。它们实际是定义文件的系统。这不是计算机做的最让人兴奋的任务,也不是用户应该关心的东西。但是有些文件系统可以给你有趣、安全的特殊能力,扩展文件属性就是一个好例子。它的用途可能有限,但是扩展属性是你为数据增加上下文的独特方法。

(题图:MJ/06c0c478-7af7-49e4-836b-a9923db9dc0c)


via: https://opensource.com/article/22/6/linux-attr-command

作者:Seth Kenlon 选题:lkxed 译者:wznmickey 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

LCTT 译者 :wznmickey
🌟
翻译: 1.0 篇
|
贡献: 2 天
2023-09-12
2023-09-13
https://linux.cn/lctt/wznmickey
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
NVIDIA全面升级Omniverse,扩展OpenUSD生态系统如何在 Linux 中扩展 Veritas 文件系统(VxFS) | Linux 中国教你如何在 Bash 脚本中使用强大的 Linux test 命令Bash 基础知识系列 #5:在 Bash 中使用数组 | Linux 中国使用 Btrfs 快照方便升级 Fedora Linux 且易于回退 | Linux 中国终端基础:在 Linux 中复制文件和目录 | Linux 中国朱老四中使馆提醒中国公民注意冰岛申根签证有效期问题!墨西哥格雷罗州全境停电、航班停飞!中使馆发布安全提醒科学家在美国95%人口使用的供水系统中发现至少六种毒素!在 Linux 中使用 cp 命令 | Linux 中国时尚秀场与追梦女子一文读懂|Linux 虚拟文件系统(VFS)将 Linux 终端与 Nautilus 文件管理器结合起来 | Linux 中国Linus亲自review代码,希望平息关于Bcachefs文件系统的 “内斗”人去楼不空Linux 中的 ls 命令使用教程 | Linux 中国安装 Linux 的 6 种最佳文件系统你的旧电脑是 “过时” 了,还是使用 Linux 的机会? | Linux 中国宾州长木公园,天天好心情FATFS文件系统详解:关于SD卡、SD nand、spi nor flash等众多flashLinus 亲自 review 代码,希望平息关于 Bcachefs 文件系统的 “内斗”在 Linux 中使用 cat 命令 | Linux 中国如何高效实现文件传输:小文件用零拷贝、大文件用异步io+直接io如何在 Linux 主机和 KVM 中的 Windows 客户机之间共享文件夹 | Linux 中国Linux 游戏的下一个秘密武器:Bottles Next | Linux 中国任务中心:一款流畅的 Linux 系统监控应用 | Linux 中国如何高效实现文件传输:小文件采用零拷贝、大文件采用异步io+直接io如何在 Linux 中映射 SAN LUN、磁盘和文件系统 | Linux 中国在 Arch Linux 上安装和使用 Yay | Linux 中国UPS南加扩招1万名季节性员工 起薪$21/小时 有机会获得永久职位那一刻如何在 GitLab 执行器中使用 Podman | Linux 中国你好,我是筚(bì)篥( lì)!Arch Linux 下全面使用 Wayland 的配置指南 | Linux 中国开放与集成:酷家乐云设计工具插件系统的秘密
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。