【问题标题】:MkdirAll permission does not fit with linux permissions [duplicate]MkdirAll 权限不适合 linux 权限 [重复]
【发布时间】:2020-06-28 15:34:30
【问题描述】:

我在 Ubuntu 18.04 上使用 Go (golang) 1.14

文件排列如下: parent/ ,它是工作目录。

当我使用时

os.MkdirAll("dir/subdir", 0777)

它确实使文件看起来像 父目录/目录/子目录

但是dir的文件权限是 drwxrwxr-x 而不是drwxrwxrwx,正如我所料。 使用 0666 权限,我的权限被拒绝。

【问题讨论】:

    标签: linux go permissions filesystems


    【解决方案1】:

    Ubuntu 的默认umask 是:

    # umask
    
    0002
    

    因此它会从您的mkdirs 权限中删除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 执行此操作,请使用子 shell 技术:

    # (umask 0 && ./mkd)
    

    或通过包装脚本启动:

    #!/bin/bash
    cd `dirname "$0"`
    umask 0
    ./mkd $*      # <- passes along any arguments
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 2013-06-01
    • 2011-11-15
    相关资源
    最近更新 更多