MkdirAll 权限不适合 linux 权限
MkdirAll permission does not fit with linux permissions
我在 Ubuntu 18.04
上使用 Go (golang) 1.14
文件排列如下:
parent/ ,它是工作目录。
当我使用
os.MkdirAll("dir/subdir", 0777)
它确实使文件看起来像
parent/dir/subdir
但是dir的文件权限是
drwxrwxr-x
而不是我预期的 drwxrwxrwx
。
使用 0666 权限,我的权限被拒绝。
Ubuntu 的默认 umask
是:
# umask
0002
因此它将从您的 mkdir
权限中删除 w
用户权限。
取消设置,您的程序应该获得您想要的权限:
# umask 0
# go build -o mkd ./main.go && ./mkd
$ ls -al dir/
drwxrwxrwx 3 me me 4096 Mar 17 10:27 .
drwxrwxr-x 7 me me 4096 Mar 17 10:27 ..
drwxrwxrwx 2 me me 4096 Mar 17 10:27 subdir
注意:如果您想确保不篡改 umask 并且只为您的 exe 执行此操作,请使用 sub-shell 技术:
# (umask 0 && ./mkd)
或通过封装脚本启动:
#!/bin/bash
cd `dirname "[=13=]"`
umask 0
./mkd $* # <- passes along any arguments
我在 Ubuntu 18.04
上使用 Go (golang) 1.14文件排列如下: parent/ ,它是工作目录。
当我使用
os.MkdirAll("dir/subdir", 0777)
它确实使文件看起来像 parent/dir/subdir
但是dir的文件权限是
drwxrwxr-x
而不是我预期的 drwxrwxrwx
。
使用 0666 权限,我的权限被拒绝。
Ubuntu 的默认 umask
是:
# umask
0002
因此它将从您的 mkdir
权限中删除 w
用户权限。
取消设置,您的程序应该获得您想要的权限:
# umask 0
# go build -o mkd ./main.go && ./mkd
$ ls -al dir/
drwxrwxrwx 3 me me 4096 Mar 17 10:27 .
drwxrwxr-x 7 me me 4096 Mar 17 10:27 ..
drwxrwxrwx 2 me me 4096 Mar 17 10:27 subdir
注意:如果您想确保不篡改 umask 并且只为您的 exe 执行此操作,请使用 sub-shell 技术:
# (umask 0 && ./mkd)
或通过封装脚本启动:
#!/bin/bash
cd `dirname "[=13=]"`
umask 0
./mkd $* # <- passes along any arguments