/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;
}