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

标签 go

我需要在 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/

相关文章:

mutex - 如何等待低延迟的线程?

go - Go : unable to authenticate, 中的 SSH 尝试了方法 [无],没有支持的方法

arrays - golang中自定义类型数组的替换方法

go - go 中的快捷方式分配不包括空值/零值

go - 为什么 golang 将类型说明符 "after"放在变量名中?

go - 为什么 Go 没有计算整数绝对值的函数?

去构建多个/嵌套包?

go - ctx超时时,如何完全终止正在运行的go func()?

go - 是否可以使用golang作为后端在graphql union中返回objectType和objectType列表

parsing - yacc shift-reduce 用于不明确的 lambda 语法