/etc/* примеры файлов релизов

Где я могу найти список разных /etc/*release файлы различных дистрибутивов и версий Linux/Unix/MacOS?

То же самое относится и к uname -a выходы команды.

2 ответа

Решение

Не все системы имеют /etc/*release* файлы, поэтому, если вы действительно хотите, чтобы это был кросс-Unix, вы не можете их использовать.

POSIX-благословенное решение uname - Если все, что вам нужно, это грубый идентификатор ОС uname -s вероятно будет достаточно.
Я не знаю ни одного канонического списка вывода uname, но в Википедии есть таблица, которая может быть хорошей отправной точкой (и, вероятно, у вас есть доступ к платформам, которые вы пытаетесь обнаружить, чтобы вы могли проверить, что они возвращают).

Иногда uname не рассказывает всю историю (например, дистрибутивы Linux, которые имеют существенную изменчивость) - если это необходимо, вы можете выяснить более конкретную информацию (например, " Какой дистрибутив Linux?") со вторым проходом, в котором используется специфический для системы инструмент (например, lsb_release в Linux или oslevel в AIX)

В большинстве дистрибутивов есть инструмент под названием lsb_release,

Gentoo:

$ lsb_release -a
LSB Version:    n/a
Distributor ID: Gentoo
Description:    Gentoo Base System release 2.0.3
Release:    2.0.3
Codename:   n/a

CentOS:

$ lsb_release -a
LSB Version:    :core-4.0-ia32:core-4.0-noarch:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-ia32:printing-4.0-noarch
Distributor ID: CentOS
Description:    CentOS release 5.7 (Final)
Release:    5.7
Codename:   Final

Другие *nix дистрибутивы: http://linuxmafia.com/faq/Admin/release-files.html

Вот отрывок из библиотеки C, которую я пишу:

const char* dist = dist_from_os_release();
if (strlen(dist) != 0)
    return dist;
else if (exists("/etc/arch-release"))
    return "arch";
else if (exists("/etc/altlinux-release"))
    return "altlinux";
else if (exists("/etc/angstrom-version"))
    return "angstrom";
else if (exists("/etc/annvix-release"))
    return "annvix";
else if (exists("/etc/arklinux-release"))
    return "arklinux";
else if (exists("/etc/aurox-release"))
    return "aurox";
else if (exists("/etc/blackcat-release"))
    return "blackcat";
else if (exists("/etc/cobalt-release"))
    return "cobalt";
else if (exists("/etc/conectiva-release"))
    return "conectiva";
else if (exists("/etc/debian_version") || exists("/etc/debian_release"))
    return "debian";
else if (exists("/etc/fedora-release"))
    return "fedora";
else if (exists("/etc/eos-version"))
    return "FreeEOS";
else if (exists("/etc/frugalware-release"))
    return "frugalware";
else if (exists("/etc/gentoo-release"))
    return "gentoo";
else if (exists("/etc/hlfs-release") || exists("/etc/hlfs_release"))
    return "HLFS";
else if (exists("/etc/immunix-release"))
    return "immunix";
else if (exists("knoppix_version"))
    return "knoppix";
else if (exists("/etc/lfs-release") || exists("/etc/lfs_version"))
    return "LFS";
else if (exists("/etc/linuxppc-release"))
    return "Linux-PPC";
else if (exists("/etc/mageia-release"))
    return "mageia";
else if (exists("/etc/mandrake-release"))
    return "mandrake";
else if (exists("/etc/mandriva-release") || exists("/etc/mandakelinux-release"))
    return "mandriva";
else if (exists("/etc/meego-release"))
    return "meego";
else if (exists("/etc/mklinux-release"))
    return "MkLinux";
else if (exists("/etc/nld-release"))
    return "Novell Linux Desktop";
else if (exists("/etc/pld-release"))
    return "PLD Linux";
else if (exists("/etc/redhat-release") || exists("/etc/redhat_version"))
    return "RHEL";
else if (exists("/etc/rubix-version"))
    return "rubix";
else if (exists("/etc/slackware-version") || exists("/etc/slackware-release"))
    return "slackware";
else if (exists("/etc/e-smith-release"))
    return "SME Server";
else if (exists("/etc/release"))
    return "Solaris SPARC";
else if (exists("/etc/sun-release"))
    return "Sun JDS";
else if (exists("/etc/SuSE-release") || exists("/etc/novell-release") || exists("/etc/sles-release"))
    return "SuSE";
else if (exists("/etc/synoinfo.conf"))
    return "Synology";
else if (exists("/etc/tinysofa-release"))
    return "tinysofa";
else if (exists("/etc/trustix-release") || exists("/etc/trustix-version"))
    return "trustix";
else if (exists("/etc/turbolinux-release"))
    return "TurboLinux";
else if (exists("/etc/ultrapenguin-release"))
    return "ultrapenguin";
else if (exists("/etc/UnitedLinux-release"))
    return "UnitedLinux";
else if (exists("/etc/va-release"))
    return "VA-Linux/RH-VALE";
else if (exists("/etc/yellowdog-release"))
    return "yellowdog";
else {
    struct utsname unameD;
    uname(&unameD);
    return strlen(unameD.nodename) > 0 ? unameD.nodename : unameD.sysname;
}

https://github.com/offscale/osbuild/commit/49200888e717907bb3dc36021f725b7e668274b7#diff-cc898028570115949c889ad5b8266020R34

Другие вопросы по тегам