2017-02-02 46 views
1

已通過org.apache.hadoop.fs.FileSystem.get(Configuration conf)獲取以下片段中使用的fileSystem對象。下面通過Hadoop FileSystem mkdirs()在通過時創建具有755權限的目錄777

FsPermission對象已通過FsPermission.getDefault()獲得這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允許通過777

可能是什麼不對勁這裏,即使?

回答

0

process umask幾乎可以肯定設置爲022並屏蔽這些位。

Per the Wikipedia entry on umask

在計算中,umask是確定一個 掩模控制文件權限如何爲新創建的文件 設置的設置的命令。它也可能指的是設置掩碼的函數,或者它可能指的是掩碼本身,它在形式上被稱爲文件模式 創建掩碼。掩碼是一組比特,其中每個限制 如何爲新創建的文件設置相應的權限。通過調用umask命令可以更改掩碼中的 位。

在UNIX中,每個文件都有一組屬性控制誰可以讀取, 寫入或執行它。當程序創建文件時,UNIX要求將文件權限設置爲初始設置。掩碼限制了 權限設置。如果掩碼設置爲「1」,則表示 對應的初始文件權限將被禁用。在掩碼中設置爲 「0」的位表示相應的許可將由程序和系統確定的 。換句話說,掩碼 充當最後階段過濾器,當創建文件 時剝離權限;每個設置爲「1」的位剝離相應的 權限。用戶和程序 可能會稍後使用chmod更改權限。

每個程序(技術上稱爲進程)都有自己的掩碼,並且可以使用函數調用更改其設置。 ...

隨着umask設置爲022(八進制),創建與0777請求的權限東西會導致0755最終權限。

+0

小小的說明:在向HDFS寫入文件時,客戶端在OS層處理umask並不是一個因素。相反,配置屬性'fs.permissions.umask-mode'控制着umask。它的行爲與傳統的POSIX umask類似,默認值設置爲022,所以這個答案是正確的。謝謝! –

相關問題