我试图使用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
这意味着:
os.Chmod
(就像在第三种情况中一样)我做错了什么?
答案 0 :(得分:0)
拒绝权限。
尝试:
sudo go run main.go
或将用户更改为root,然后执行。
如何将用户更改为root:
sudo su -
答案 1 :(得分:0)
正如对此问题的评论所说,这是因为umask起作用了。 Unmask控制如何为新创建的文件设置文件权限。当umask为022时,要创建为666的文件将为644(从组和其他权限中删除写许可权)。您可以使用umask
命令检查目录的umask。