您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

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

时间:2023-09-15 13:40:24  来源:  作者:Linux中国

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

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

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

常见的文件属性

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

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

扩展属性

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

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

增加一个属性

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

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

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

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

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

列出扩展文件属性

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

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

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

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

列出所有扩展属性

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

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

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

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

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

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

其他文件系统上的属性

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

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

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

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

搜索属性

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

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

文件系统的秘密

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



Tags:Linux   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除。
▌相关推荐
“文件系统” 是一个描述你的计算机怎样跟踪你创建的所有文件的完美词语。你的计算机存储有大量的数据,无论是文档、配置文件还是数以千计的照片。这需要一种对人和机器都友...【详细内容】
2023-09-15  Tags: Linux  点击:(0)  评论:(0)  加入收藏
Docker是一个开源的容器化平台,可以帮助用户快速创建、部署和管理应用程序的轻量级Linux容器。通过Docker,用户可以将应用程序及其所有依赖项打包成一个独立的容器镜像,并在各...【详细内容】
2023-09-14  Tags: Linux  点击:(3)  评论:(0)  加入收藏
在Linux上部署多节点Docker集群是一种常见的方式,可以提供高可用性和扩展性。下面将介绍如何在Linux上部署多节点Docker集群,并涵盖以下内容:1、选择适当的操作系统和版本2、安...【详细内容】
2023-09-11  Tags: Linux  点击:(9)  评论:(0)  加入收藏
Linux系统中的日志文件是一个非常重要的资源,可以提供关于系统运行状态、应用程序运行情况以及安全等方面的信息。为了方便用户查看日志文件,Linux系统提供了一些命令和工具...【详细内容】
2023-09-11  Tags: Linux  点击:(10)  评论:(0)  加入收藏
在Linux系统管理中,最常用的查看内存命令是'free -h'。准确理解内存使用情况是非常重要的。本文将详细解释Linux中“free”和“available”内存的概念,并阐述如何利用...【详细内容】
2023-09-10  Tags: Linux  点击:(6)  评论:(0)  加入收藏
前言虽然我们很多人都是在Linux系统上做应用程序开发,一般接触不到Linux内核代码,但是了解Linux内核的底层实现机制,对应用程序的开发,尤其是性能方面的优化提升会有很大的帮助...【详细内容】
2023-09-09  Tags: Linux  点击:(10)  评论:(0)  加入收藏
有时候我们常需要当文件变化的时候便触发某些脚本操作,比如说有文件更新了就同步文件到远程机器。在实现这个操作上,主要用到两个工具,一个是rsync,一个是inotifywait。inotifyw...【详细内容】
2023-09-09  Tags: Linux  点击:(9)  评论:(0)  加入收藏
在Linux系统中,文件和目录的管理是日常操作中的一个重要部分。随着时间的推移,您的计算机上可能会有许多重要的文件和目录。然而,误删除文件或目录可能会导致严重的数据丧失和...【详细内容】
2023-09-09  Tags: Linux  点击:(5)  评论:(0)  加入收藏
/ 通用块层 /通用块层是 Linux 中的一个重要组件,用于管理不同块设备的统一接口,减少不同块设备的差异带来的影响。它位于文件系统和磁盘驱动之间,类似于 Java 中的适配器模式,...【详细内容】
2023-09-08  Tags: Linux  点击:(3)  评论:(0)  加入收藏
如果有一天你们公司很重要的一台Linux服务器突然启动不了了,重装系统又浪费时间,如果是启动过程有问题,那么你知道启动过程可以快速定位系统问题,很快就可以解决。Linux 系统启...【详细内容】
2023-09-08  Tags: Linux  点击:(5)  评论:(0)  加入收藏
▌简易百科推荐
“文件系统” 是一个描述你的计算机怎样跟踪你创建的所有文件的完美词语。你的计算机存储有大量的数据,无论是文档、配置文件还是数以千计的照片。这需要一种对人和机器都友...【详细内容】
2023-09-15  Linux中国    Tags:Linux   点击:(0)  评论:(0)  加入收藏
Linux系统中的日志文件是一个非常重要的资源,可以提供关于系统运行状态、应用程序运行情况以及安全等方面的信息。为了方便用户查看日志文件,Linux系统提供了一些命令和工具...【详细内容】
2023-09-11  微技术之家  微信公众号  Tags:Linux日志   点击:(10)  评论:(0)  加入收藏
在Linux系统管理中,最常用的查看内存命令是'free -h'。准确理解内存使用情况是非常重要的。本文将详细解释Linux中“free”和“available”内存的概念,并阐述如何利用...【详细内容】
2023-09-10  微技术之家  微信公众号  Tags:Linux   点击:(6)  评论:(0)  加入收藏
前言虽然我们很多人都是在Linux系统上做应用程序开发,一般接触不到Linux内核代码,但是了解Linux内核的底层实现机制,对应用程序的开发,尤其是性能方面的优化提升会有很大的帮助...【详细内容】
2023-09-09  Linux编程之旅  微信公众号  Tags:Linux   点击:(10)  评论:(0)  加入收藏
有时候我们常需要当文件变化的时候便触发某些脚本操作,比如说有文件更新了就同步文件到远程机器。在实现这个操作上,主要用到两个工具,一个是rsync,一个是inotifywait。inotifyw...【详细内容】
2023-09-09  微技术之家  微信公众号  Tags:Linux   点击:(9)  评论:(0)  加入收藏
在Linux系统中,文件和目录的管理是日常操作中的一个重要部分。随着时间的推移,您的计算机上可能会有许多重要的文件和目录。然而,误删除文件或目录可能会导致严重的数据丧失和...【详细内容】
2023-09-09  王建立    Tags:chattr   点击:(5)  评论:(0)  加入收藏
/ 通用块层 /通用块层是 Linux 中的一个重要组件,用于管理不同块设备的统一接口,减少不同块设备的差异带来的影响。它位于文件系统和磁盘驱动之间,类似于 Java 中的适配器模式,...【详细内容】
2023-09-08  灵墨AI探索室  微信公众号  Tags:Linux   点击:(3)  评论:(0)  加入收藏
如果有一天你们公司很重要的一台Linux服务器突然启动不了了,重装系统又浪费时间,如果是启动过程有问题,那么你知道启动过程可以快速定位系统问题,很快就可以解决。Linux 系统启...【详细内容】
2023-09-08  微技术之家  微信公众号  Tags:Linux   点击:(5)  评论:(0)  加入收藏
我们过去写过几篇文章来查找映射到块设备/磁盘的 LUN ID,但是当你管理 VCS 集群时,在某些情况下你可能需要映射 LUN 用于 VxFS 文件系统扩展的 VxVM(Veritas 卷管理器)磁盘的 ID...【详细内容】
2023-09-07  Linux中国    Tags:Linux   点击:(7)  评论:(0)  加入收藏
Linux grep (global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指...【详细内容】
2023-09-07  微技术之家  微信公众号  Tags:Linux命令   点击:(4)  评论:(0)  加入收藏
站内最新
站内热门
站内头条