无法获得所有权限位

时间:2016-07-15 17:47:28

标签: go

在我的shell上,我有一个文件,我使用sudo chmod 4755 <file>更改了此文件的权限。在这个文件上调用lstat后,我看到了有关其权限的正确信息,特别是它有4755作为其权限模式。

在我的golang程序中,有没有理由我没有获得正确的权限模式位?难道我只是格式化我从FileInfo()得到的结果.Mode()。Perm()错误?可能是高3位是“特殊”吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

简答:三个高位特殊,需要单独访问。

长答案: documentation解释了9个(通常为12个)最低有效位被认为是标准的Unix权限。

文档还定义了您正在调用的Perm()函数的行为:

func (m FileMode) Perm() FileMode

Perm returns the Unix permission bits in m.

这意味着perm未定义为返回您要查找的任何其他位。

此外,source code显示Perm()函数正在屏蔽FileMode()返回的值0777,导致最初的三位被忽略。

ModeSetuidModeSetgidModeSticky位(分别为4,2和1)必须分别作为FileMode类型的常量进行访问。通过执行自己的面具来做到这一点。

例如,为了确定是否设置了粘滞位      (FileInfo().Mode() & ModeSticky) != 0。这同样适用于ModeSetuidModSetgid