在Mac上,xattr和chflags之间有什么区别

时间:2018-06-06 12:16:44

标签: macos

对我来说,他们似乎做了一些非常相似的事情,我不明白为什么有两个不同的命令。

2 个答案:

答案 0 :(得分:1)

chflags管理操作系统已知的少量特定标志(例如“隐藏”)。它们存储在位掩码中,类似于chmod值。这是相当古老的,回到BSD 4.4(1994)。

xattr管理通用键值元数据,来自HFS +文件系统。任何应用程序都可以附加任意元数据,并可以以任何方式对其进行解释。我相信这个功能是在10.4(2005)中添加的。

答案 1 :(得分:1)

chflags是一个BSD-subsystem命令,允许更改文件系统本身可能支持的其他标志。从历史上看,这是BSD系统中的一种基本文件模式扩展支持,通过在元数据本机文件系统中使用未使用的位。由于MacOS是基于BSD风格构建的,因此支持chflags(但支持一些扩展)。您可以通过chflags操纵的值是预先确定的。

xattr是一种处理与文件关联的用户元数据的工具。这些元数据可以比简单的开/关设置更丰富。即使许多文件系统对此有特殊支持,实现也是免费的。历史HFS + mac文件系统在所谓的命名叉中对此有特殊支持。对可以与给定文件关联的元数据的种类/数量没有限制。文件系统不知道这些元数据内容,它只是另一种存储。这可能是在某些情况下需要访问这些的操作系统或工具。例如,我可以将任何我想要的元数据添加到给定文件中:

$ ls -ail myfile
8607162443 -rw-r--r--  1 yunes  staff  0  6 jui 16:50 myfile
$ xattr -w mydata myvalue myfile %now my file is associated with some metadata
$ ls -ail myfile
8607162443 -rw-r--r--@ 1 yunes  staff  0  6 jui 16:50 myfile
$ xattr -l myfile %let me know which are the metadata associated to a given file
mydata : myvalue
$

所以系统将这些元数据存储在某个地方(它可能会使用某些文件系统支持这个或一些普通文件的适当名称,曾经看过那些奇怪的._前缀文件?)但数据对文件系统没有任何意义。因此,有些工具可以用来做一些特别的事情......