2

我想编写独立于 Linux 发行版的 Golang 代码。我需要检测哪个 linux 发行版并需要在程序中运行特定于发行版的命令。就像 dpkg 在 Ubuntu 的情况下和 rpm -q 在 RHEL 的情况下一样。

4

3 回答 3

3

您可以使用exec.Cmd运行lsb_release -auname -a解析输出以找出分布。

参考

于 2017-02-22T09:05:42.167 回答
2

如果你想使用 Go 模块,可以使用Sysinfo

它收集所有系统信息(没有任何依赖关系)并为您提供 JSON,其中包括您正在寻找的内容。这是该数据的片段:

"os": {
    "name": "CentOS Linux 7 (Core)",
    "vendor": "centos",
    "version": "7",
    "release": "7.2.1511",
    "architecture": "amd64"
  },
于 2020-12-08T22:02:41.830 回答
0

包含可执行文件的包lsb_release可能安装在系统上,也可能不安装。

您可以使用该文件/etc/os-release,该文件可以使用库 go-ini 轻松解析。参见示例:

import (
    "fmt"
    "github.com/go-ini/ini"
)

func ReadOSRelease(configfile string) map[string]string {
    cfg, err := ini.Load(configfile)
    if err != nil {
        log.Fatal("Fail to read file: ", err)
    }

    ConfigParams := make(map[string]string)
    ConfigParams["ID"] = cfg.Section("").Key("ID").String()

    return ConfigParams
}

OSInfo := ReadOSRelease("/etc/os-release")
OSRelease := OSInfo["ID"]

fmt.Print(OSRelease)
于 2020-11-22T21:48:58.923 回答