hadoop文件系统mkdirs()在传递777时创建具有755权限的目录

xkftehaa  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(727)

下面代码段中使用的文件系统对象是通过 org.apache.hadoop.fs.FileSystem.get(Configuration conf) .
下面传递的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。
这里有什么不对劲?

owfi6suc

owfi6suc1#

过程 umask 几乎可以肯定的是 022 并掩盖了一些细节。
根据维基百科上的条目 umask :
在计算中,umask是一个命令,用于确定掩码的设置,掩码控制如何为新创建的文件设置文件权限。它还可以引用设置掩码的函数,也可以引用掩码本身,其形式上称为文件模式创建掩码。掩码是一组位,每个位限制如何为新创建的文件设置相应的权限。可以通过调用umask命令来改变掩码中的位。
在unix中,每个文件都有一组属性,这些属性控制谁可以读、写或执行它。程序创建文件时,unix要求将文件权限设置为初始设置。掩码限制权限设置。如果掩码的位设置为“1”,则表示相应的初始文件权限将被禁用。掩码中的位设置为“0”意味着相应的权限将由程序和系统确定。换句话说,掩码充当最后一级过滤器,在创建文件时除去权限;设置为“1”的每个位都会去掉相应的权限。以后用户和程序可以使用chmod更改权限。
每个程序(技术上称为进程)都有自己的掩码,并且可以使用函数调用更改其设置。。。
umask 设置为 022 (八进制),创建具有请求的权限的内容 0777 将导致的最终权限 0755 .

相关问题