我想写Linux发行版独立的Golang代码。我需要检测哪个Linux发行版,并需要在程序中运行特定于发行版的命令。比如Ubuntu中的dpkg和RHEL中的rpm -q。
h43kikqp1#
您可以使用exec.cmd运行lsb_release -a或uname -a并解析输出以找出分布。Reference
lsb_release -a
uname -a
gwo2fgha2#
如果你想使用Go语言模块,这里有Sysinfo。它收集所有的系统信息(没有任何依赖关系),并提供JSON,其中包含您要查找的内容。
"os": { "name": "CentOS Linux 7 (Core)", "vendor": "centos", "version": "7", "release": "7.2.1511", "architecture": "amd64" },
6ss1mwsb3#
包含可执行文件lsb_release的软件包可能已安装在系统上,也可能未安装在系统上。你可以使用文件/etc/os-release,它可以很容易地用库go-ini解析。
lsb_release
/etc/os-release
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)
zbdgwd5y4#
这里有一个由go库支持的方便的命令行工具:dekobon/distro-detect下面是如何在命令行的main函数中调用该库
linux.FileSystemRoot = fsRoot distro := linux.DiscoverDistro()
它解析os-release文件和lsb-release文件声明。
4条答案
按热度按时间h43kikqp1#
您可以使用exec.cmd运行
lsb_release -a
或uname -a
并解析输出以找出分布。Reference
gwo2fgha2#
如果你想使用Go语言模块,这里有Sysinfo。
它收集所有的系统信息(没有任何依赖关系),并提供JSON,其中包含您要查找的内容。
6ss1mwsb3#
包含可执行文件
lsb_release
的软件包可能已安装在系统上,也可能未安装在系统上。你可以使用文件
/etc/os-release
,它可以很容易地用库go-ini解析。zbdgwd5y4#
这里有一个由go库支持的方便的命令行工具:dekobon/distro-detect
下面是如何在命令行的main函数中调用该库
它解析os-release文件和lsb-release文件声明。