对我来说,他们似乎做了一些非常相似的事情,我不明白为什么有两个不同的命令。
答案 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
$
所以系统将这些元数据存储在某个地方(它可能会使用某些文件系统支持这个或一些普通文件的适当名称,曾经看过那些奇怪的._
前缀文件?)但数据对文件系统没有任何意义。因此,有些工具可以用来做一些特别的事情......