c++ 如何获取Linux发行版名称和版本?

mrwjdhj3  于 2023-04-08  发布在  Linux
关注(0)|答案(9)|浏览(189)

在Windows中,我读取注册表项SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName以获取操作系统的全名和版本。
在Linux中,代码

struct utsname ver;
uname(&ver);
retVal = ver.sysname;

返回字符串linux,而不是Ubuntu 9.04
如何获取Linux发行版名称和版本?

vhmi4jdf

vhmi4jdf1#

尝试:

cat /etc/lsb-release

你也可以试试

lsb_release -a

或者:

cat /proc/version
nwnhqdif

nwnhqdif2#

lsb_release -ds ; uname -mr

在我的系统上,从bash(终端)提示符中产生以下结果:

Ubuntu 10.04.4 LTS
2.6.32-41-generic x86_64
4uqofj5v

4uqofj5v3#

尝试这种方式是一种有趣的方式,并且比LSB释放限制更少。

$ cat /etc/*-release
bkhjykvo

bkhjykvo4#

得到这些信息的目的是什么?
如果你试图检测系统的一些特性或属性(例如,它是否支持一些系统调用或它是否有一些库),而不是依赖于lsb_release的输出,你应该:

  • 尝试使用给定的功能并优雅地失败(例如,对于库使用dlopen,对于系统调用使用syscall(2)等)
  • 如果适用的话,将其作为./configure检查的一部分(自动识别系统功能/属性的标准FOSS方式)

请注意,即使您的软件是纯二进制的,上面的第一种方法也适用。
一些代码示例:

dl = dlopen(module_path, RTLD_LAZY);
  if (!dl) {
    fprintf(stderr, "Failed to open module: %s\n", module_path);
    return;
  }

  funcptr = dlsym(dl, module_function);
  if (!funcptr) {
    fprintf(stderr, "Failed to find symbol: %s\n", module_function);
    return;
  }
  funcptr();

  dlclose(dl);

您甚至可以优雅地测试CPU操作码支持,例如http://neugierig.org/software/chromium/notes/2009/12/flash-lahf.htmlhttp://code.google.com/p/chromium/issues/detail?id=29789

wz8daaqr

wz8daaqr5#

不确定我是否完全遵循了您的要求,但我认为您只是想要uname上的“所有”标志:

uname -a
eqzww0vc

eqzww0vc6#

/etc/os-release至少在CentOS 7和Ubuntu 16.04上都可用,这使得它比lsb_release(不在CentOS上)或/etc/system-release(不在Ubuntu上)更具跨平台性。

$ cat /etc/os-release

示例:

NAME=Fedora
VERSION="17 (Beefy Miracle)"
ID=fedora
VERSION_ID=17
PRETTY_NAME="Fedora 17 (Beefy Miracle)"
ANSI_COLOR="0;34"
CPE_NAME="cpe:/o:fedoraproject:fedora:17"
HOME_URL="https://fedoraproject.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
bqucvtff

bqucvtff7#

通常:

cat /etc/issue
pgpifvop

pgpifvop8#

1.cat release file用于显示Linux发行版版本

$ cat /etc/*-release

1.lsb_release将返回Linux发行版名称和版本

$ lsb_release -a

1.hostnamectl将返回Linux发行版名称和版本

$ hostnamectl

1.打印某些系统信息

$ uname -a
or 
  -s, --kernel-name        print the kernel name
  -n, --nodename           print the network node hostname
  -r, --kernel-release     print the kernel release
  -v, --kernel-version     print the kernel version
  -m, --machine            print the machine hardware name
  -p, --processor          print the processor type (non-portable)
  -i, --hardware-platform  print the hardware platform (non-portable)
  -o, --operating-system   print the operating system

1.了解静态主机名、机箱、机器ID、虚拟化、操作系统、内核、体系结构

$ cat /proc/version
d8tt03nd

d8tt03nd9#

此命令只过滤保留发行版名称的一行:

cat /etc/*-release | grep ID | head -n1 | cut -d '=' -f2

相关问题