我正在尝试使用 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
(如第三种情况)
我做错了什么?
最佳答案
正如这个问题的评论所说,这是因为 umask工作了。 unmask 控制如何为新创建的文件设置文件权限。当 umask 为 022 时,您要创建的文件为 666 将是 644(从组和其他权限中删除写权限)。您可以使用 umask
命令检查目录的 umask。
关于go - ioutils.WriteFile() 不尊重权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50257981/