我想将所有 ZFS ACL 从一个文件克隆到另一个文件。
使用 POSIX ACL,这可以通过管道输出getfacl
to 来完成setfacl
。
ZFS 中的 NFSv4 样式 ACL 是否有一种简单快捷的方法来执行此操作?我知道我可以读取 的输出,ls -lV
然后将其作为 a 的一部分输入chmod
,但我似乎找不到与复制 ACL 的 POSIX 方式等效的功能。
我想将所有 ZFS ACL 从一个文件克隆到另一个文件。
使用 POSIX ACL,这可以通过管道输出getfacl
to 来完成setfacl
。
ZFS 中的 NFSv4 样式 ACL 是否有一种简单快捷的方法来执行此操作?我知道我可以读取 的输出,ls -lV
然后将其作为 a 的一部分输入chmod
,但我似乎找不到与复制 ACL 的 POSIX 方式等效的功能。
ls -lV
您可以使用which代替使用ls -lv
,可以将其输入脚本以将其转换为chmod
命令序列以复制 ACL。例如,如果 ACl 看起来像这样:
它应该变成以下
chmod
命令序列:我最近发现自己遇到了一种情况,上面描述的脚本会很有用,所以这是我制作的一个小 Bash 脚本(也可以来自 shell 并作为函数运行)来打印必要的 chmod 命令列表将 ZFS ACL 从一个文件复制到另一个文件:
以下是上面file1的几个示例用法及其输出:
如果我们愿意,我们甚至可以直接评估这些 chmod,如果这两个文件都可以在此主机上访问并且我们希望立即将 ACL 从file1复制到file2:
我遇到了同样的问题。我的代码在这里:
https://gist.github.com/1021032
对我来说就像一个魅力。如果那里的其他人遇到这个问题,希望它很方便。
采用Martin的建议并应用一些 perl,您可能会得到类似的结果:
在取消注释系统(@out)行之前尝试一下。
令人讨厌的是,这似乎没有在外壳级别正确公开。在 C 语言中,有一些函数可用于从一个文件中获取 ACL 并将其应用于另一个文件(显然还有其他选项)
acl_get(3SEC)
。acl_set(3SEC)
他们还将有用地将 ACL 从 POSIX 草案转换为 NFSv4 类型;这就是系统命令喜欢mv
和cp
使用的。我曾经使用这种技术编写了一个将 acl 从源文件复制到目标文件的命令,但我目前找不到源代码。如果我找到它,我会将它附加到这个答案中。