尝试在新创建的目录中创建文件时转到 "permission denied"?
Go "permission denied" when trying to create a file in a newly created directory?
我正在尝试使用 os.Mkdir()
创建目录,然后在其中创建文件,类似于此脚本:
package main
import (
"log"
"os"
"path"
)
func main() {
dir := "test_dir"
os.Mkdir(dir, os.ModeDir)
fileName := path.Join(dir, "file.txt")
_, err := os.Create(fileName)
if err != nil {
log.Fatalf("create file: %v", err)
}
}
但是,如果我 运行 这个,我得到
> go run fileperms.go
2019/10/15 14:44:02 create file: open test_dir/file.txt: permission denied
exit status 1
从 https://golang.org/pkg/os/#FileMode 我无法立即清楚如何指定 FileMode
以允许相同的脚本在新创建的目录中创建文件。我怎样才能做到这一点?
我发现如果我将权限设置为 0777
:
我可以在目录中创建文件
package main
import (
"io/ioutil"
"os"
"path"
)
func main() {
dir := "test_dir"
os.Mkdir(dir, 0777)
fileName := path.Join(dir, "file.txt")
ioutil.WriteFile(fileName, []byte("foobar"), 0666)
}
现在创建的文件具有预期的内容:
> cat test_dir/file.txt
foobar⏎
在这里,Go 试图在 AUR 包安装期间创建 inside /tmp 目录。
所以我更改了 /tmp 中的权限:
chmod 0777 -R /tmp
但这还不够,所以我不得不更改 /tmp 所有权(它是 root 的):
sudo chown -R "$USER":wheel /tmp
我正在尝试使用 os.Mkdir()
创建目录,然后在其中创建文件,类似于此脚本:
package main
import (
"log"
"os"
"path"
)
func main() {
dir := "test_dir"
os.Mkdir(dir, os.ModeDir)
fileName := path.Join(dir, "file.txt")
_, err := os.Create(fileName)
if err != nil {
log.Fatalf("create file: %v", err)
}
}
但是,如果我 运行 这个,我得到
> go run fileperms.go
2019/10/15 14:44:02 create file: open test_dir/file.txt: permission denied
exit status 1
从 https://golang.org/pkg/os/#FileMode 我无法立即清楚如何指定 FileMode
以允许相同的脚本在新创建的目录中创建文件。我怎样才能做到这一点?
我发现如果我将权限设置为 0777
:
package main
import (
"io/ioutil"
"os"
"path"
)
func main() {
dir := "test_dir"
os.Mkdir(dir, 0777)
fileName := path.Join(dir, "file.txt")
ioutil.WriteFile(fileName, []byte("foobar"), 0666)
}
现在创建的文件具有预期的内容:
> cat test_dir/file.txt
foobar⏎
在这里,Go 试图在 AUR 包安装期间创建 inside /tmp 目录。
所以我更改了 /tmp 中的权限:
chmod 0777 -R /tmp
但这还不够,所以我不得不更改 /tmp 所有权(它是 root 的):
sudo chown -R "$USER":wheel /tmp