os.mkdirall并使用os.chown将所有权更改为用户,但如何获取用户的uid和gid

时间:2018-08-15 17:47:14

标签: go

我需要在Linux上以root用户的身份运行mkdir,因此我可以运行sudo升级的应用程序。但是使用此目录的应用程序以不同的用户postgres的身份运行,因此它出错并显示权限被拒绝的错误消息。

dir: = "/srv/tablepspaces/psql96/client"
err := os.MkdirAll(dir, os.FileMode(0775))

(由于某些原因,当我stat在Linux上的目录时,上面的结果为755)

所以我想整理目录:

我需要使用os.Chown(name string, uid, gid int) error

如何获取用户的uid和gid而不进行炮击,并且获取id的返回和解析

1 个答案:

答案 0 :(得分:0)

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)
}