Где я могу найти список разных /etc/*release
файлы различных дистрибутивов и версий Linux / Unix / MacOS?
То же самое касается uname -a
командные выходы.
В большинстве дистрибутивов есть инструмент под названием 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
Не все системы имеют /etc/*release*
файлы, поэтому, если вы действительно хотите, чтобы это было кросс-Unix, вы не можете их использовать.
Благословенное POSIX решение: uname
- Если все, что вам нужно, это грубый идентификатор ОС uname -s
наверное хватит.
Мне неизвестен какой-либо канонический список вывода uname, но В Википедии есть таблица, которая может быть хорошей отправной точкой (и, предположительно, у вас есть доступ к платформам, которые вы пытаетесь обнаружить, чтобы вы могли проверить, что они возвращают).
Иногда uname
не раскрывает всей истории (например, дистрибутивы Linux, которые сильно различаются). При необходимости вы можете получить более конкретную информацию (например, "Который Дистрибутив Linux? ") Со вторым проходом, который использует специфичный для системы инструмент (например, lsb_release
в Linux или oslevel
в AIX)
Вот отрывок из библиотеки 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;
}