我需要在 linux 上以 root 身份 mkdir,所以我使用 sudo
运行 may app elevated。但是使用此目录的应用程序作为不同的用户 postgres
运行,因此它会出错并显示权限被拒绝的错误消息。
dir: = "/srv/tablepspaces/psql96/client"
err := os.MkdirAll(dir, os.FileMode(0775))
(由于某些原因,当我 stat
linux 上的目录时,上述结果为 755)
所以我想 chown 目录:
我需要使用os.Chown(name string, uid, gid int) error
如何获取用户的 uid 和 gid,而不需要提取并获取 id
的返回和解析
最佳答案
err := os.MkdirAll(dir, os.FileMode(0775))
if err != nil {
return fmt.Errorf("error creating tabelspace folders: %v ", err.Error())
}
if runtime.GOOS != "windows" {
group, err := user.Lookup("postgres")
if err != nil {
return fmt.Errorf("error looking up postgres user user info")
}
uid, _ := strconv.Atoi(group.Uid)
gid, _ := strconv.Atoi(group.Gid)
err = syscall.Chown(dir, uid, gid)
}
关于go - os.mkdirall 并使用 os.chown 将所有权更改为用户,但如何获取用户的 uid、gid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51863849/