bash
的手册页(和help cd
)提到cd
支持-@
参数(“在支持它的系统上”)以“将具有扩展属性的文件呈现为包含文件属性的目录”
有使用这个的例子吗? (理想情况下使用常见的文件,或者使用创建示例的设置(我对 currnelt 不太熟悉xattr
))
哪里支持?到处都支持xattr
s,还是需要更多内核支持? (即我可以将其与xattr
OS X、Solaris、FreeBSD、Linux 等支持版本一起使用吗)
我的猜测是,如果一个文件/path/f
具有xattr
我可以执行的操作cd -@ /path/f
,ls
然后会将 xattrs 显示为模拟“目录”中的(模拟)“文件” /path/f
? (为此,我假设内核需要对此模拟提供某种支持,因为诸如ls
live 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
。