设置 os.Mkdir 权限

huangapple go评论72阅读模式
英文:

Setting os.Mkdir permissions

问题

我正在尝试使用os.Mkdir创建具有特定权限的目录,但是出现了问题,无法使其正常工作。

我的测试程序如下:

package main

import (
        "log"
        "os"
)

func main() {                 
    err := os.Mkdir("testdir", 0775)
    if err != nil {              
        log.Print(err)
    }
}

然而,创建的目录具有默认的0755权限:

drwxr-xr-x 2 user user 4096 Jan 10 10:14 testdir

从shell中执行chmod命令可以正常工作,所以我不确定为什么Go程序无法正常工作。

英文:

I'm trying to create directories with certain permissions using os.Mkdir but I cannot make it work, for some reason.

My test program is:

package main

import (
        "log"
        "os"
)

func main() {                 
    err := os.Mkdir("testdir", 0775)
    if err != nil {              
        log.Print(err)
    }
}

However, the created directory has the default 0755 permissions:

drwxr-xr-x 2 user user 4096 Jan 10 10:14 testdir

A chmod from the shell works just fine, so I'm not sure why the Go program is not working.

答案1

得分: 4

创建文件时,类Unix系统使用权限掩码(umask)来创建默认权限。

如果umask值为0022,则新目录的最大权限为0755。新文件的最大权限为0644

如果您想要创建具有权限0775的新目录,则必须将umask值设置为0002

另一种解决方法是在创建文件后修改权限:使用os.Mkdir以默认权限创建文件,然后使用os.Chmod修改这些权限。

英文:

When creating a file, Unix-like system use a permission mask (umask) to create the default permissions.

With a umask value of 0022, new directories will be created with permissions 0755 at most. New files will have permissions 0644 at most.

If you want to create a new directory with permissions 0775, then you have to set your umask value to 0002.

An other way of working this around is to modify the permissions after creating the file : Create it with default permissions with os.Mkdir, then modify those permissions with os.Chmod.

huangapple
  • 本文由 发表于 2017年1月10日 17:18:30
  • 转载请务必保留本文链接:https://go.coder-hub.com/41565192.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定