在我的shell上,我有一个文件,我使用sudo chmod 4755 <file>
更改了此文件的权限。在这个文件上调用lstat
后,我看到了有关其权限的正确信息,特别是它有4755作为其权限模式。
在我的golang程序中,有没有理由我没有获得正确的权限模式位?难道我只是格式化我从FileInfo()得到的结果.Mode()。Perm()错误?可能是高3位是“特殊”吗?
感谢您的帮助!
答案 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
,导致最初的三位被忽略。
ModeSetuid
,ModeSetgid
和ModeSticky
位(分别为4,2和1)必须分别作为FileMode
类型的常量进行访问。通过执行自己的面具来做到这一点。
例如,为了确定是否设置了粘滞位
(FileInfo().Mode() & ModeSticky) != 0
。这同样适用于ModeSetuid
和ModSetgid
。