猿问

os.MkDir和os.MkDirAll权限值?

我试图在我的程序开始时创建一个日志文件。

如果没有创建目录,则需要检查是否存在“ / log”目录,然后继续创建日志文件。

好吧,我尝试使用os.Mkdir(以及os.MkDirAll),但是无论我在第二个参数中输入什么值,我都会得到一个没有权限的锁定文件夹。为了获得对用户文件夹的读/写,这应该是什么值?我以为会是0x700,但似乎无法正常工作。


Cats萌萌
浏览 273回答 3
3回答

白衣非少年

在他的答案中的说法并不是真的正确,而且它谈论的是十进制数字,然后使用八进制数字,正如@SashaCrofter在其评论中正确指出的那样。实际上,您的权限值采用什么形式都没有关系,只要它表示明智的Unix权限即可。由于对POSIX文件系统权限位进来位的三元组-所有者,组和其他人访问三位,加上调节剂(如粘滞位)的三位, -这是习惯使用八进制数来表示权限,因为每个数字在八进制数表示一个三位值。因此,当您在Go代码中使用0700时,前导0会被剥夺,只是在告诉解析器它看到一个八进制数字文字,而以下三个字母依次代表所有者,组和其他权限。例如,如果您还想设置组粘性位以及使文件系统对象组可读和可执行,则应指定02750,依此类推。请注意,文件系统对象获取的实际许可权会通过umask创建对象的进程的活动进行进一步调制。为了更好地掌握这些主题,最好阅读chmod类Unix操作系统的手册页和一般文献。

慕慕森

您可以将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 1drw-rw-r-- 664 2
随时随地看视频慕课网APP

相关分类

Go
我要回答