英文:
How can I detect linux distribution within GOlang program?
问题
我想编写与Linux发行版无关的Golang代码。我需要检测当前的Linux发行版,并在程序中运行特定于该发行版的命令。例如,在Ubuntu中使用dpkg,在RHEL中使用rpm -q。
英文:
I want to write linux distribution independant Golang code. I need detect which linux distribution and need to run distribution specific commands within program. Like dpkg in case of Ubuntu and rpm -q in case of RHEL.
答案1
得分: 4
你可以使用exec.Cmd来运行lsb_release -a
或uname -a
命令,并解析输出结果以查找发行版信息。
英文:
You can use exec.Cmd to run lsb_release -a
or uname -a
and parse the output to find out the distribution.
答案2
得分: 3
如果你想使用一个Go模块,可以使用Sysinfo。
它会收集系统的所有信息(不依赖其他库),并以JSON格式返回包含你所需信息的数据。以下是其中一部分数据的示例:
"os": {
"name": "CentOS Linux 7 (Core)",
"vendor": "centos",
"version": "7",
"release": "7.2.1511",
"architecture": "amd64"
}
英文:
If you wanted to use a Go module, there's Sysinfo.
It collects all of the system info (without any dependencies) and gives you JSON which includes what you're looking for. Here's a snippet of that data:
"os": {
"name": "CentOS Linux 7 (Core)",
"vendor": "centos",
"version": "7",
"release": "7.2.1511",
"architecture": "amd64"
},
答案3
得分: 2
包含可执行文件 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)
英文:
The package containing the executable lsb_release
may or may not be installed on the system.
You could use the file /etc/os-release
, which can be easily parsed with the library go-ini. See example:
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)
答案4
得分: 1
这里有一个方便的命令行工具,由一个Go库支持:dekobon/distro-detect
linux.FileSystemRoot = fsRoot
distro := linux.DiscoverDistro()
它解析了os-release文件和lsb-release文件的声明。
英文:
There's a convenient command line tool backed by a go library here: dekobon/distro-detect
Here's how the library is called in the main function of the command line
linux.FileSystemRoot = fsRoot
distro := linux.DiscoverDistro()
It parses both the os-release file and the lsb-release file declarations.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论