Правильно ли настроен umask для Unix.mkdir?
Я звонил Unix.mkdir "test" 0o000
и ожидаемый каталог с rwxrwxrwx
разрешения, но имели -------w-
, После звонка Unix.mkdir "test" (Unix.umask 0o000)
У меня такой же результат.
Я не могу понять почему.
Как создать каталог с rwx
разрешения для всех с OCaml Unix
модуль?
1 ответ
Значение, которое вы указываете для Unix.mkdir
это разрешения, которые вы хотите иметь в каталоге, в соответствии с вашими текущими umask
, Если вы укажете 0o000
вы должны ожидать создания каталога без разрешений никому. Так как umask
может только отрицать некоторые дополнительные разрешения, ваш заявленный результат невозможен, по крайней мере, в Unix.
Обратите внимание, что второй параметр Unix.mkdir
это не значение umask, это значение разрешений. Причина, по которой документация OCaml гласит: umask
так что вы понимаете, что указанное значение будет изменено вашим umask
, Это работает так: каталог будет создан с указанными вами разрешениями, за исключением того, что любой бит, установленный в вашем umask
будет понятно в результирующих разрешениях. Другими словами, umask
определяет доступы, которые вы хотите запретить по умолчанию.
Если вы действительно хотите создать каталог со всеми разрешениями, доступными для всех, вам необходимо убедиться, что ваш umask
это 0. Вот что происходит с разумным umask
ценность 0o022
:
$ umask
0022
$ ocaml
OCaml version 4.02.1
# #load "unix.cma";;
# Unix.mkdir "testing1" 0o777;;
- : unit = ()
# ^D
$ ls -ld testing1
drwxr-xr-x 2 jeffsco staff 68 Jul 30 13:43 testing1
Полученный каталог имеет все разрешенные разрешения, кроме 0o022 разрешений umask. (Нет разрешения на запись для группы или другого.)
Вот что произойдет, если вы установите umask
до 0 до создания каталога:
$ ocaml
OCaml version 4.02.1
# #load "unix.cma";;
# Unix.umask 0o000;;
- : int = 18
# Unix.mkdir "testing2" 0o777;;
- : unit = ()
# ^D
$ ls -ld testing2
drwxrwxrwx 2 jeffsco staff 68 Jul 30 13:45 testing2
Когда umask
установлено в 0, разрешения созданного каталога будут точно такими, как указано в вызове Unix.mkdir
,