Unix.mkdir 是否正确设置了 umask?
Does Unix.mkdir set umask correctly?
我调用了 Unix.mkdir "test" 0o000
并希望目录具有 rwxrwxrwx
权限,但具有 -------w-
。
调用后 Unix.mkdir "test" (Unix.umask 0o000)
我得到了相同的结果。
我不明白为什么。
如何使用 OCaml Unix
模块创建具有 rwx
权限的目录?
您指定给 Unix.mkdir
的值是您希望目录拥有的权限,由您当前的 umask
修改。如果您指定 0o000
,您应该期望创建一个没有任何权限的目录。由于 umask
只能 拒绝 一些额外的权限,您报告的结果是不可能的,至少在 Unix 中是这样。
请注意 Unix.mkdir
的第二个参数不是 umask 值,它是权限值。 OCaml 文档说查看 umask
的原因是让您意识到指定的值将被您的 umask
修改。它是这样工作的:目录将使用您指定的权限创建,除了 set 在您的 umask
中的任何位将 clear 在生成的权限中。换句话说,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
生成的目录具有所有允许的权限,除了 umask 的 0o022 权限。 (组或其他没有写入权限。)
如果在创建目录之前将 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
.
时指定的权限完全相同
我调用了 Unix.mkdir "test" 0o000
并希望目录具有 rwxrwxrwx
权限,但具有 -------w-
。
调用后 Unix.mkdir "test" (Unix.umask 0o000)
我得到了相同的结果。
我不明白为什么。
如何使用 OCaml Unix
模块创建具有 rwx
权限的目录?
您指定给 Unix.mkdir
的值是您希望目录拥有的权限,由您当前的 umask
修改。如果您指定 0o000
,您应该期望创建一个没有任何权限的目录。由于 umask
只能 拒绝 一些额外的权限,您报告的结果是不可能的,至少在 Unix 中是这样。
请注意 Unix.mkdir
的第二个参数不是 umask 值,它是权限值。 OCaml 文档说查看 umask
的原因是让您意识到指定的值将被您的 umask
修改。它是这样工作的:目录将使用您指定的权限创建,除了 set 在您的 umask
中的任何位将 clear 在生成的权限中。换句话说,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
生成的目录具有所有允许的权限,除了 umask 的 0o022 权限。 (组或其他没有写入权限。)
如果在创建目录之前将 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
.