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

Ger*_*erg 4 bash cd-command xattr

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

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

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

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

Ste*_*itt 6

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

\n\n

在 Solaris 上,向用户显示的方式如您所建议的:

\n\n
~$ touch test\n~$ cd -@ test\n/proc/1604/fd/6$ ls\nSUNWattr_ro  SUNWattr_rw\n/proc/1604/fd/6$ touch attribute\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n