2017-02-02 4 views
1

以下のスニペットで使用されるfileSystemオブジェクトは、org.apache.hadoop.fs.FileSystem.get(Configuration conf)で取得されています。以下渡さHadoop FileSystem mkdirs()は、渡されたときに755パーミッションのディレクトリを作成します。777

FsPermissionオブジェクトは、ここで間違って何ができるか777

を通過した場合でも、作成された777

public int mkdirs(Path f, FsPermission permission) { 
    try { 
     return fileSystem.mkdirs(f, permission) ? 0 : 1; 
    } catch (IOException e) { 
     LOG.error("Failed to execute 'mkdirs': " + e.getMessage()); 
    } 
    return 1; 
} 

しかし結果ディレクトリは755許可を持っているであるFsPermission.getDefault()を介して取得されましたか?

答えて

0

process umaskはほぼ確実に022に設定され、ビットをマスキングします。

Per the Wikipedia entry on umask:コンピューティングで

、umaskがファイルのパーミッションが新しく作成された ファイルに設定されている方法を制御 マスクの設定を決定するコマンドです。また、マスクを設定する関数を参照するか、または というマスク自体を参照することもできます。これは、正式にはファイルモード 作成マスクと呼ばれます。マスクはビットのグループであり、それぞれが対応するパーミッションが新しく作成されたファイルにどのように設定されるかを制限します( )。マスクの ビットは、umaskコマンドを呼び出すことによって変更できます。

UNIXでは、各ファイルには、誰が読むことができるかを制御する一連の属性があり、 の書き込みまたは実行を行います。プログラムがファイルを作成するとき、UNIXはファイルのアクセス許可を に初期設定する必要があります。マスクは のパーミッション設定を制限します。マスクのビットが "1"に設定されている場合は、対応する初期ファイルのアクセス許可が無効になることを意味します( )。マスク内で "0"に設定されたビットは、対応する許可がプログラムおよびシステムによって決定される になることを意味する。言い換えれば、マスク は、ファイルが として作成されたときにパーミッションを除去する最後の段階のフィルタとして機能します。 "1"に設定されている各ビットは対応する パーミッションを除去します。許可は、ユーザとプログラムによって後で変更される可能性があります。 chmodを使用してください。

各プログラム(技術的にプロセスと呼ばれる)には独自のマスクがあり、関数呼び出しを使用してその設定を変更できる です。 022からumaskセット(8進数)と...

0777の要求された権限を持つ何かが0755の最終権限になります作成します。

+0

小さな明確化:HDFSにファイルを書き込むとき、OS層のクライアントプロセスのumaskは要素ではありません。代わりに、設定プロパティ 'fs.permissions.umask-mode'がumaskを制御します。これは従来のPOSIXの 'umask'と同様に動作し、デフォルト値は' 022 'に設定されています。ありがとう! –

関連する問題