Установка прав доступа к файлам в Ruby с помощью File.open

Я написал это, чтобы просмотреть разрешения файлов, созданных с различными значениями perm.

[0644, 0664, 0755, 0775].each do |perm|
  filename = "file#{perm}"
  File.open(filename, 'wb', perm) { |f| f.puts 'test' }
  puts '%o' % File::Stat.new(filename).mode
end

При запуске это выведет:

100644
100644
100755
100755

Это не то, что я ожидал. Почему для группы не установлено разрешение на запись во 2-й и 4-й файл?


person branch14    schedule 12.08.2014    source источник


Ответы (1)


Согласно http://www.ruby-doc.org/core-2.1.2/File.html#method-c-new, Ruby просто использует системный вызов open(2). Это соответствует настройкам umask (удаление любых битов, установленных в umask, до фактической установки битов разрешений).

Таким образом, вы можете добиться групповой записи, установив umask для очистки бита групповой записи. Например. установите его на 0002. Подробнее здесь.

person Jordan Samuels    schedule 12.08.2014