Время для прочтения: 4 мин. 34 сек.

Определить дистрибутив Linux

Идентификация дистрибутива дело не сложное, для этого есть несколько способов, представленных ниже.

Через компилятор GCC

Самый простой и эффективный способ (работает для большинства систем) это спросить у компилятора GCC (GNU Compiler Collection)

[code]
$ gcc -v
[/code]

Для своего хостера я получил:

[code]
Using built-in specs.
Target: amd64-undermydesk-freebsd
Configured with: FreeBSD/amd64 system compiler
Thread model: posix
gcc version 4.2.1 20070831 patched [FreeBSD]
[/code]

Используя lsb_release (Ubuntu)

[code]
$ lsb_release -a
[/code]

Для своей настольной Ubuntu я получил:

[code]
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu quantal (development branch)
Release: 12.10
Codename: quantal
[/code]

Либо через uname

[code]
$ uname -a
[/code]

В настольной Ubuntu:

[code]
Linux mihdan-ubuntu 3.2.0-27-generic-pae #43-Ubuntu SMP Fri Jul 6 15:06:05 UTC 2012 i686 i686 i686 GNU/Linux
[/code]

Через issue (OpenSUSE/Debian)

[code]
$ cat /etc/issue
$ cat /etc/issue.net
[/code]

Через *version (Slackware/Ubuntu)

[code]
$ cat /etc/*version
[/code]

Через *release (Debian/RedHat/Gentoo/Fedora/Ubuntu)

[code]
$ cat /etc/*release
[/code]

Для справки

Дистрибутив Путь
Annvix /etc/annvix-release
Arch Linux /etc/arch-release
Arklinux /etc/arklinux-release
Aurox Linux /etc/aurox-release
BlackCat /etc/blackcat-release
Cobalt /etc/cobalt-release
Conectiva /etc/conectiva-release
Debian /etc/debian_version
/etc/debian_release (редко)
Fedora Core /etc/fedora-release
Gentoo Linux /etc/gentoo-release
Immunix /etc/immunix-release
Knoppix knoppix_version
Linux-From-Scratch /etc/lfs-release
Linux-PPC /etc/linuxppc-release
Mandrake /etc/mandrake-release
Mandriva/Mandrake Linux /etc/mandriva-release
/etc/mandrake-release
/etc/mandakelinux-release
MkLinux /etc/mklinux-release
Novell Linux Desktop /etc/nld-release
PLD Linux /etc/pld-release
Red Hat /etc/redhat-release
/etc/redhat_version (редко)
Slackware /etc/slackware-version
/etc/slackware-release (редко)
SME Server (Formerly E-Smith) /etc/e-smith-release
Solaris SPARC /etc/release
Sun JDS /etc/sun-release
SUSE Linux /etc/SuSE-release
/etc/novell-release
SUSE Linux ES9 /etc/sles-release
Tiny Sofa /etc/tinysofa-release
TurboLinux /etc/turbolinux-release
Ubuntu Linux /etc/lsb-release
UltraPenguin /etc/ultrapenguin-release
UnitedLinux /etc/UnitedLinux-release (covers SUSE SLES8)
VA-Linux/RH-VALE /etc/va-release
Yellow Dog /etc/yellowdog-release

Автоматизируем процесс

Из всего вышесказанного пробуем собрать скрипт

[code collapse=»true»]
#!/bin/sh

OS=`uname -s`
REV=`uname -r`
MACH=`uname -m`

GetVersionFromFile()
{
VERSION=`cat $1 | tr "\n" ‘ ‘ | sed s/.*VERSION.*=\ // `
}

if [ "${OS}" = "SunOS" ] ; then
OS=Solaris
ARCH=`uname -p`
OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
elif [ "${OS}" = "AIX" ] ; then
OSSTR="${OS} `oslevel` (`oslevel -r`)"
elif [ "${OS}" = "Linux" ] ; then
KERNEL=`uname -r`
if [ -f /etc/redhat-release ] ; then
DIST=’RedHat’
PSUEDONAME=`cat /etc/redhat-release | sed s/.*\(// | sed s/\)//`
REV=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//`
elif [ -f /etc/SuSE-release ] ; then
DIST=`cat /etc/SuSE-release | tr "\n" ‘ ‘| sed s/VERSION.*//`
REV=`cat /etc/SuSE-release | tr "\n" ‘ ‘ | sed s/.*=\ //`
elif [ -f /etc/mandrake-release ] ; then
DIST=’Mandrake’
PSUEDONAME=`cat /etc/mandrake-release | sed s/.*\(// | sed s/\)//`
REV=`cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//`
elif [ -f /etc/debian_version ] ; then
DIST="Debian `cat /etc/debian_version`"
REV=""

fi
if [ -f /etc/UnitedLinux-release ] ; then
DIST="${DIST}[`cat /etc/UnitedLinux-release | tr "\n" ‘ ‘ | sed s/VERSION.*//`]"
fi

OSSTR="${OS} ${DIST} ${REV}(${PSUEDONAME} ${KERNEL} ${MACH})"

fi

echo ${OSSTR}
[/code]

Ссылки

Для вставки кода используйте HTML-теги
<pre><code class="php">ваш код</code></pre>

  • Во Фрюхе uname -r

  • ostin

    Единственный проверенный способ на Linux-дистрибутивах, которй я знаю — это

    $ cat /etc/issue

    Результат:

    Debian GNU/Linux 6.0

  • ostin

    Увы, способы не самые надежные. Тем не менее, на большинстве дистрибутивов подсказку получить можно.

    Например, в Cent OS следующие результаты:
    lsb-release не существует:

    $ lsb-release -a

    -bash: lsb-release: команда не найдена

    Едиинственная подсказка из gcc — это ключевое слово «redhat», исходя из которого можно уже поискать информации в /etc/redhat-release

    $ gcc --v

    Используются внутренние спецификации.
    Целевая архитектура: i686-redhat-linux
    Параметры конфигурации: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch=i686 --build=i686-redhat-linux
    Модель многопоточности: posix
    gcc версия 4.4.6 20120305 (GCC)

    uname -a вообще очень редко отображает информацию о дистрибутиве:
    $ uname -a
    Linux host 2.6.32-279.9.1.el6.i686 #1 SMP Tue Sep 25 20:26:47 UTC 2012 i686 i686 i386 GNU/Linux

    Тут на поиск истины может натолкнуть окончание «el6.i686», по которому легко гуглится RedHat, а дальше см. предыдущий пункт.

    В Debian все тоже не очень гладко: lsb-release нету, gcc сейчас нету под рукой на Debian-дистрибутиве (кстати, это тоже вариант развития событий — компилятор просто не установлен в бинарном дистрибутиве по умолчанию), а uname показывает следующее:
    $ uname -a
    Linux host 2.6.32-5-amd64 #1 SMP Mon Oct 3 05:12:50 UTC 2011 x86_64 GNU/Linux