2017-02-02 15 views
1

Объект fileSystem, используемый в нижеприведенном фрагменте, получен через org.apache.hadoop.fs.FileSystem.get(Configuration conf).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 клиентский процесс umask на уровне ОС не является фактором. Вместо этого свойство конфигурации 'fs.permissions.umask-mode' управляет umask. Он ведет себя аналогично традиционному POSIX 'umask', а его значение по умолчанию установлено на' 022', поэтому этот ответ в остальном правильный. Благодаря! –

 Смежные вопросы

  • Нет связанных вопросов^_^