cd 的“-@”参数如何工作?

cd 的“-@”参数如何工作?

bash的手册页(和help cd)提到cd支持-@参数(“在支持它的系统上”)以“将具有扩展属性的文件呈现为包含文件属性的目录”

有使用这个的例子吗? (理想情况下使用常见的文件,或者使用创建示例的设置(我对 currnelt 不太熟悉xattr))

哪里支持?到处都支持xattrs,还是需要更多内核支持? (即我可以将其与xattrOS X、Solaris、FreeBSD、Linux 等支持版本一起使用吗)

我的猜测是,如果一个文件/path/f具有xattr我可以执行的操作cd -@ /path/fls然后会将 xattrs 显示为模拟“目录”中的(模拟)“文件” /path/f? (为此,我假设内核需要对此模拟提供某种支持,因为诸如lslive Outside之类的东西bash,这意味着bash无法进行模拟)

答案1

我认为-@仅在 Solaris(以及基于 Solaris 的系统,例如 Illumos)上受支持。在 Solaris 上,扩展属性可以被视为正交名称空间中的文件;理论上,任何文件(一般意义上,包括目录等)都可以具有扩展属性,这些属性本身也可以具有扩展属性等。为了探索这个属性森林,有一些 API 允许将它们作为文件树,这就是cd -@使用的(以及-@其他命令)。看fsattr(5)了解详情。这可能会受到支持文件系统的限制;例如,UFS 不允许将目录用作属性,并且不允许属性本身具有属性。

在 Solaris 上,向用户显示的内容正如您所建议的那样:

~$ touch test
~$ cd -@ test
/proc/1604/fd/6$ ls
SUNWattr_ro  SUNWattr_rw
/proc/1604/fd/6$ touch attribute

这将创建附加到“test”文件的“attribute”扩展属性文件。cd -@ attribute在属性树内部也可以工作,并且可以继续深入兔子洞。

最近(2019 年 1 月)针对 Linux 推出了类似的扩展属性 API,特别是作为讨论fs-verity

相关内容