ioutils.WriteFile()不尊重权限

时间:2018-05-09 16:23:06

标签: go file-permissions

我试图使用ioutils.WriteFile(),但出于某种原因,它忽略了我给予它的0777权限。

package main

import (
    "io/ioutil"
    "os"
)

func main() {

    // normal permissions
    if err := ioutil.WriteFile("cant-touch-this-0644", []byte{}, 0644); err != nil {
            panic(err)
    }


    // full permissions
    if err := ioutil.WriteFile("cant-touch-this-0777", []byte{}, 0777); err != nil {
            panic(err)
    }


    // normal permissions + chmod to full
    if err := ioutil.WriteFile("cant-touch-this-mixed", []byte{}, 0755); err != nil {
            panic(err)
    }

    if err := os.Chmod("cant-touch-this-mixed", 0777); err != nil {
            panic(err)
    }
}

我得到的输出是:

$ ls -l
-rw-r--r--  1 edson edson    0 May  9 17:19  cant-touch-this-0644
-rwxr-xr-x  1 edson edson    0 May  9 17:19  cant-touch-this-0777
-rwxrwxrwx  1 edson edson    0 May  9 17:19  cant-touch-this-mixed

这意味着:

  • 第一个场景(0644)正常工作
  • 第二个(0777)被忽略
  • 我可以获得完整0777权限的唯一方法是使用os.Chmod(就像在第三种情况中一样)

我做错了什么?

2 个答案:

答案 0 :(得分:0)

拒绝权限。

尝试:

sudo go run main.go

或将用户更改为root,然后执行。

如何将用户更改为root:

sudo su -

答案 1 :(得分:0)

正如对此问题的评论所说,这是因为umask起作用了。 Unmask控制如何为新创建的文件设置文件权限。当umask为022时,要创建为666的文件将为644(从组和其他权限中删除写许可权)。您可以使用umask命令检查目录的umask。