2017-01-10 6 views
1

os.Mkdirを使用して特定の権限でディレクトリを作成しようとしていますが、何らかの理由でそれを動作させることができません。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 

シェルからchmodコマンドが正常に動作しますので、私はなぜわからないんだけどGoプログラムが動作していません。

+1

'umask'コマンドを実行するとどうなりますか? –

+0

0022っていうのは – siritinga

+0

とumask 0022は、ファイル追加のパーミッションを追加したあと、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'はpermisionがmaskより大きいファイルを作成できませんが、' os.Chmod'はできますか? – Iwan

+1

@siritingaそれはまさにあなたの問題です:OSは許可0775のディレクトリを作成できないようにしています。私はちょうど0022からumaskを0002に変更しようとしました( 'umask 0002'を実行しています)。これは、Goのせいではなく、Unixのことです。 –

関連する問題