我试图在我的程序开始时创建一个日志文件。如果没有创建目录,则需要检查是否存在“ / log”目录,然后继续创建日志文件。好吧,我尝试使用os.Mkdir(以及os.MkDirAll),但是无论我在第二个参数中输入什么值,我都会得到一个没有权限的锁定文件夹。为了获得对用户文件夹的读/写,这应该是什么值?我以为会是0x700,但似乎无法正常工作。
3 回答
白衣非少年
TA贡献1155条经验 获得超0个赞
在他的答案中的说法并不是真的正确,而且它谈论的是十进制数字,然后使用八进制数字,正如@SashaCrofter在其评论中正确指出的那样。
实际上,您的权限值采用什么形式都没有关系,只要它表示明智的Unix权限即可。
由于对POSIX文件系统权限位进来位的三元组-所有者,组和其他人访问三位,加上调节剂(如粘滞位)的三位, -这是习惯使用八进制数来表示权限,因为每个数字在八进制数表示一个三位值。
因此,当您在Go代码中使用0700时,前导0会被剥夺,只是在告诉解析器它看到一个八进制数字文字,而以下三个字母依次代表所有者,组和其他权限。例如,如果您还想设置组粘性位以及使文件系统对象组可读和可执行,则应指定02750,依此类推。
请注意,文件系统对象获取的实际许可权会通过umask
创建对象的进程的活动进行进一步调制。
为了更好地掌握这些主题,最好阅读chmod
类Unix操作系统的手册页和一般文献。
慕慕森
TA贡献1856条经验 获得超17个赞
您可以将umask重置为0。我将其称为主文件中的第一件事
syscall.Umask(0)
例子
_ = os.MkdirAll("/tmp/dirs/1", 0664)
syscall.Umask(0)
_ = os.MkdirAll("/tmp/dirs/2", 0664)
结果
/tmp/dirs$ stat -c '%A %a %n' *
drw-r--r-- 644 1
drw-rw-r-- 664 2
- 3 回答
- 0 关注
- 272 浏览
添加回答
举报
0/150
提交
取消