【发布时间】:2020-02-12 15:13:11
【问题描述】:
我正在尝试使用os.Mkdir() 创建一个目录,然后在其中创建文件,类似于此脚本:
package main
import (
"log"
"os"
"path"
)
func main() {
dir := "test_dir"
os.Mkdir(dir, os.ModeDir)
fileName := path.Join(dir, "file.txt")
_, err := os.Create(fileName)
if err != nil {
log.Fatalf("create file: %v", err)
}
}
但是,如果我运行它,我会得到
> go run fileperms.go
2019/10/15 14:44:02 create file: open test_dir/file.txt: permission denied
exit status 1
我从https://golang.org/pkg/os/#FileMode 不清楚如何指定FileMode 以允许相同的脚本在新创建的目录中创建文件。我怎样才能做到这一点?
【问题讨论】:
-
几乎所有对
os.Mkdir的调用都应将0777作为第二个参数传递。你不需要os.ModeDir,因为它是由 make-directory 函数暗示的。低 3 位是 Unix 风格的权限;由操作系统将它们转换为操作系统使用的任何内容。在类 Unix 系统上,当前的 umask 将带走任何不需要的权限,因此您通常应该将所有权限授予所有人以启动。 -
此规则的例外情况包括,例如,邮件消息处理程序,您可能会假设用户级隐私和使用模式
0700:rwx 用于用户,不用于组或其他。一个典型的 umask 是002或022,用来剥夺其他的,也许是组的写权限。
标签: go file-permissions