下面的代码段中使用的文件系统对象是通过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;
}
但是,即使传递了777,创建的结果目录也具有755权限。
这可能有什么不妥之处?
答案 0 :(得分:1)
process umask
几乎肯定会设置为022
并屏蔽这些位。
Per the Wikipedia entry on umask
:
在计算中,umask是一个确定a的设置的命令 掩码,用于控制如何为新创建的文件权限设置 文件。它也可以指设置掩码的功能,或者它可以 引用掩码本身,正式称为文件模式 创作面具。掩码是一组位,每个位都受到限制 如何为新创建的文件设置相应的权限。该 可以通过调用umask命令来更改掩码中的位。
在UNIX中,每个文件都有一组控制谁可以阅读的属性, 写或执行它。当程序创建文件时,UNIX需要这样做 文件权限设置为初始设置。面具限制 权限设置。如果掩码的位设置为" 1",则表示该掩码 相应的初始文件权限将被禁用。有点设置为 " 0"在掩码中意味着相应的权限将是 由程序和系统决定。换句话说,面具 充当最后阶段的过滤器,剥离文件所需的权限 创建;每个位设置为" 1"脱掉它的相应的 允许。用户和程序稍后可能会更改权限 使用chmod。
每个程序(技术上称为进程)都有自己的掩码,并且是 能够使用函数调用更改其设置。 ...
将umask
设置为022
(八进制),创建具有0777
请求权限的内容将导致0755
的最终权限。