是否有更好的方法来读取Ruby中的ACL而不是解析ls输出?

Tim*_*Tim 5 ruby permissions macos

在Mac OS X上,ls并且chmod具有一些额外的功能,用于处理操作系统分层在默认posix权限之上的ACL权限.我有一些需要修复的权限问题,写了一个脚本来帮助解决这些问题,直到Apple修复了这个bug.这是解析ls获取ACL的代码:

result = `#{Escape.shell_command(["ls", "-led", file])}`
if result.empty?
    # ls error...
else
    @acl = result.split("\n")[1..-1].collect do |ace|
        ace = ace.split(": ", 2)
        ace[0] = ace[0].to_i
        ace
    end
    # acl processing code...
end
Run Code Online (Sandbox Code Playgroud)

我添加了escape gem,但它实际上仍然是相同的代码.

但是我知道解析ls脚本一般是个坏主意,那么是否有更好的方法从文件中读取ACL权限?

我需要在chmod以后的脚本中使用ACE及其索引:

system("chmod -a# #{index} \"#{file}\"")
Run Code Online (Sandbox Code Playgroud)

fen*_*lly 0

我正在查看 Ruby 1.8.7 File 类。如果我一分钟的阅读是正确的,我收集到的是,进程的权限将控制您从文件中看到的内容,这正是要做的事情ls

因此,如果 Ruby 脚本以 root 身份运行,它可以获取有关文件的各种信息,但如果它以用户身份运行,并且该用户不在该文件的组中,并且该文件不是世界可读的例如,那么脚本无法看到该文件。

看起来如果您以某个用户身份运行脚本,并且想要更改文件的权限,您可以收集它们并使用chmod上面链接中的 Ruby 1.8.7 进行更改,不是吗?