2017-01-10 16 views
1

我试图用os.Mkdir创建具有特定权限的目录,但由于某种原因,我无法使其工作。设置os.Mkdir permssions

我的测试程序是:

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 

从壳在chmod工作得很好,所以我不知道为什么Go程序不起作用。

+1

运行'umask'命令时会出现什么? –

+0

0022是什么说 – siritinga

+0

与umask 0022为我创建后,当创建文件添加permision'os.Chmod(“testdir”,0777)',但我不知道这是不错的解决方案。 – Iwan

回答

2

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

对于umask的值0022,将创建最多具有权限0755的新目录。新文件的权限最多为0644

如果你想创建一个新的目录,其权限为0775,那么你必须设置你的umask值为0002

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

+0

感谢您的回复,但是在我的Go程序中,我指定我想为创建的文件创建0775权限,但它不起作用。也许它不起作用,我不得不在稍后改变它,但看起来很尴尬,有非功能选项。 – siritinga

+0

'os.Mkdir'不能创建大于mask的permision文件,但'os.Chmod'可以吗? – Iwan

+1

@siritinga这正是你的问题:操作系统阻止你创建一个权限为0775的目录。我刚刚尝试在我的笔记本电脑上修改从0022到0002的umask(运行'umask 0002'),我向你保证它能正常工作。这是一件Unix事情,而不是Go的错。 –