Как получить имя и версию дистрибутива Linux?

В Windows я прочитал раздел реестра SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName, чтобы получить полное имя и версию ОС.

Но в Linux код

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

возвращает строку linux, а не Ubuntu 9.04.

Как я могу получить имя и версию дистрибутива Linux?

Ответы

Ответ 1

Try:

cat /etc/lsb-release

Вы также можете попробовать

lsb_release -a

Или:

cat /proc/version

Ответ 2

lsb_release -ds ; uname -mr

в моей системе выдается следующее из приглашения bash (terminal):

Ubuntu 10.04.4 LTS
2.6.32-41-generic x86_64

Ответ 3

Не уверен, что я следил за тем, что вам нужно, но я думаю, что вы просто хотите, чтобы флаг "all" был uname:

uname -a

Ответ 4

Какова цель получения этой информации?

Если вы пытаетесь обнаружить некоторые функции или свойства системы (например, поддерживает ли она какой-либо syscall или имеет ли она какую-то библиотеку), вместо того, чтобы полагаться на вывод 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);

Вы можете даже изящно протестировать поддержку кодов процессора, прочитав, например. http://neugierig.org/software/chromium/notes/2009/12/flash-lahf.html, http://code.google.com/p/chromium/issues/detail?id=29789

Ответ 5

Обычно:

cat /etc/issue

Ответ 6

попытка этого способа интересна и менее ограничительна, чем lsb-release.

$ cat /etc/*-release

Ответ 7

/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/"