Как узнать название и версию дистрибутива Linux? - PullRequest
14 голосов
/ 24 августа 2009

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

Но в Linux код

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

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

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

Ответы [ 7 ]

32 голосов
/ 24 августа 2009

Попробуйте:

cat /etc/lsb-release

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

lsb_release -a

Или:

cat /proc/version
5 голосов
/ 26 июня 2012
lsb_release -ds ; uname -mr

в моей системе выдает следующее из командной строки (терминала):

Ubuntu 10.04.4 LTS
2.6.32-41-generic x86_64
4 голосов
/ 28 декабря 2011

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

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

4 голосов
/ 24 августа 2009

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

uname -a
3 голосов
/ 27 ноября 2013

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

$ cat /etc/*-release
2 голосов
/ 24 августа 2009

Обычно:

cat /etc/issue
1 голос
/ 04 января 2018

/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/"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...