ubuntu 如何在GOlang程序中检测Linux发行版?

sqougxex  于 2022-11-22  发布在  Go
关注(0)|答案(4)|浏览(207)

我想写Linux发行版独立的Golang代码。我需要检测哪个Linux发行版,并需要在程序中运行特定于发行版的命令。比如Ubuntu中的dpkg和RHEL中的rpm -q。

h43kikqp

h43kikqp1#

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

gwo2fgha

gwo2fgha2#

如果你想使用Go语言模块,这里有Sysinfo
它收集所有的系统信息(没有任何依赖关系),并提供JSON,其中包含您要查找的内容。

"os": {
    "name": "CentOS Linux 7 (Core)",
    "vendor": "centos",
    "version": "7",
    "release": "7.2.1511",
    "architecture": "amd64"
  },
6ss1mwsb

6ss1mwsb3#

包含可执行文件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)
zbdgwd5y

zbdgwd5y4#

这里有一个由go库支持的方便的命令行工具:dekobon/distro-detect
下面是如何在命令行的main函数中调用该库

linux.FileSystemRoot = fsRoot
distro := linux.DiscoverDistro()

它解析os-release文件和lsb-release文件声明。

相关问题