2017-01-10 36 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的錯。 –