文章插图
“文件系统” 是一个描述你的计算机怎样跟踪你创建的所有文件的完美词语 。你的计算机存储有大量的数据 , 无论是文档、配置文件还是数以千计的照片 。这需要一种对人和机器都友好的方式 。诸如 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.txtAttribute "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.txtAttribute "flavor" had a 9 byte value for example.txt:chocolate
getfattr
命令需要属性的命名空间和名字:$ getfattr --name user.flavor example.txt # file: example.txtuser.flavor="chocolate"
列出所有扩展属性要看一个文件的所有扩展属性,你可以使用 attr -l
:$ attr -l example.txtAttribute "md5sum" has a 32 byte value for example.txtAttribute "flavor" has a 9 byte value for example.txt
【在 Linux 文件系统中使用 attr 添加扩展属性】或者,你也可以使用 getfattr -d
:$ getfattr -d example.txt# file: example.txtuser.flavor="chocolate"user.md5sum="969181e76237567018e14fe1448dfd11"
扩展文件属性可以使用 attr
和 setfattr
更新,就像你创建这些属性一样:$ setfattr --name user.flavor --value strawberry example.txt$ getfattr -d example.txt# file: example.txtuser.flavor="strawberry"user.md5sum="969181e76237567018e14fe1448dfd11"
其他文件系统上的属性使用扩展属性最大的风险是忘记这些属性是特定于某个文件系统的 。这意味着当你从一个磁盘或分区复制文件到另外一个磁盘或分区时,这些属性都会丢失,即使目标位置的文件系统也支持扩展属性 。为了避免丢失扩展属性,你需要使用支持保留这些属性的工具,例如
rsync
命令 。$ rsync --archive --xattrs ~/example.txt /tmp/
但无论你使用什么工具,如果你传输文件到一个不知道如何处理扩展属性的文件系统,这些属性都会被丢弃 。
推荐阅读
- HashMap的底层数据结构
- 机器学习如何帮助企业应对网络威胁?
- 花儿与少年5开录,热巴稳站C位,首次在沙特阿拉伯,嘉宾阵容强大
- 恭喜!TVB三知名男星在内地卖鸡蛋仔,半年不到成功开五家分店
- 十一出游,粉色套装穿搭优雅迷人,成为旅途中的一道亮丽风景线
- 隐藏在水果背后的秘密
- 春天如何保“肾”
- 大蒜的功用
- 春天要讲究饮食科学
- 板栗,每天几粒就滋补