Determina a distribuição do Linux

11

Eu estou tentando determinar o sabor do servidor Linux em execução. Eu não estou tentando determinar a versão do kernel - mas avalie o distribuidor.

o gcc é instalado e, na saída da versão, diz RedHat

# gcc --version
gcc (GCC) 3.4.6 20060404 (Red Hat 3.4.6-11)

Isso significa que posso assumir com segurança que meu servidor é um servidor RedHat. Existe um método melhor - 100% à prova de balas para descobrir isso? Também para outros tipos de linux - não apenas este servidor?

Edit: conteúdo de /etc/ caso isso ajude - mas eu gostaria de uma solução que funciona para outras versões do Linux também.

# ls /etc/
./              backupmxhosts  domainusers     host.conf     localdomains  mailips        pam.d/      relayhosts               shadow              trustedmailhosts
../             bashrc*        exim.conf       inputrc       localtime     man.config     passwd      resolv.conf              skipsmtpcheckhosts  userdomains
DIR_COLORS      cron.deny      exim.pl         ld.so.cache   lynx.cfg      mtab           profile     secondarymx              spammeripblocks     vimrc
aliases         demodomains    exim.pl.local*  ld.so.conf    mail/         my.cnf         profile.d/  senderverifybypasshosts  sudoers
antivirus.exim  demouids       group           localaliases  mailhelo      nsswitch.conf  protocols   services                 termcap

Não tenho arquivos *release ou *version em /etc/

# ls /etc*release; ls /etc/*version
/bin/ls: /etc/*release: No such file or directory
/bin/ls: /etc/*version: No such file or directory

Eu tentei LSB

# lsb_release -a
LSB Version:
Distributor ID: n/a
Description:    (none)
Release:        n/a
Codename:       n/a

Além disso, acho que estou dentro de um chroot jail (não sei bem o que é isso), o que provavelmente poderia ser a causa desse problema.

Atualizado:

Eu acho que isso faz isso por mim. Eu acho que posso seguramente assumir que eu estou usando cent-os.

# cat /proc/version
Linux version 2.6.9-103.plus.c4smp ([email protected]) (gcc version 3.4.6 20060404 (Red Hat 3.4.6-11)) #1 SMP Wed Dec 21 16:17:23 EST 2011
    
por Billy Moon 07.10.2011 / 23:12

10 respostas

4
cat /proc/version

Exemplos:

  1. Ubuntu:

    $ cat /proc/version
    Linux version 3.11.0-13-generic (buildd@roseapple) (gcc version 4.8.1 \
    (Ubuntu/Linaro 4.8.1-10ubuntu8) ) #20-Ubuntu SMP Wed Oct 23 07:38:26 UTC 2013
    
  2. Red Hat / CentOS:

    $ cat /proc/version
    Linux version 2.6.32-220.13.1.el6.x86_64 ([email protected]) \
    (gcc version 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC) ) #1 SMP Tue Apr 17 23:56:34 BST 2012
    

Veja também Como saber qual distribuição Linux você está usando?

    
por 19.11.2013 / 19:20
13

Na maioria das distribuições Linux modernas, o seguinte comando fornecerá as seguintes informações:

lsb_release -a
    
por 07.10.2011 / 23:46
9

/etc/issue pode ser um bom ponto de partida.

Mais pode ser encontrado inspecionando os arquivos info para diferentes distribuições:

Novell SuSE    /etc/SuSE-release
OpenSuSE       /etc/SuSE-release, /etc/os-release
Red Hat,CentOS /etc/redhat-release, /etc/redhat_version
Fedora         /etc/fedora-release, /etc/redhat-release, /etc/os-release
Slackware      /etc/slackware-release, /etc/slackware-version
Debian         /etc/debian_release, /etc/debian_version
Mandrake       /etc/mandrake-release
Yellow dog     /etc/yellowdog-release
Sun JDS        /etc/sun-release 
Solaris/Sparc  /etc/release 
Gentoo         /etc/gentoo-release
Amazon Linux   /etc/system-release
PLD Linux      /etc/pld-release, /etc/os-release
ArchLinux      /etc/arch-release, /etc/os-release

Veja fórum do Unix para mais detalhes.

    
por 07.10.2011 / 23:18
4

Se /etc/issue estiver faltando, pode haver um ou mais arquivos /etc/*_release .

Por exemplo, meu sistema Ubuntu tem /etc/lsb-release :

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=11.04
DISTRIB_CODENAME=natty
DISTRIB_DESCRIPTION="Ubuntu 11.04"

O sistema CentOS de um amigo (baseado no Red Hat) tem /etc/redhat-release :

CentOS release 5.6 (Final)

Eu não sei como isso é universal.

    
por 07.10.2011 / 23:21
2

cat / etc / issue pode responder sua pergunta.

Os fabricantes de distros não são amigáveis para você aqui. Primeiro, cada um pensa que é o único caminho verdadeiro.

O mais provável é que, em vez de tentar identificar a distro, você deva analisar com mais detalhes a questão específica que realmente precisa responder. Concentre-se na funcionalidade que você está procurando, não na distro que a fornece. Afinal, uma nova versão de uma distro pode se virar e ir na direção oposta em qualquer eixo particular.

    
por 07.10.2011 / 23:13
1

Use facter (sim é assim que é escrito).

O Facter é um companheiro do fantoche, ele fornece variáveis que podem ser consultadas que contêm informações sobre o sistema.

Por exemplo, aqui estão apenas algumas das dezenas de variáveis que o fator pode retornar

$ facter
...
operatingsystem => CentOS
operatingsystemmajrelease => 6
operatingsystemrelease => 6.4
osfamily => RedHat
...

Você pode simplesmente consultar o fato da osfamily para ver se o servidor está executando RedHat

$ facter osfamily
RedHat

Confira a documentação: link

    
por 20.11.2013 / 08:12
0

uname -a

Funciona sempre para qualquer Tux

    
por 09.10.2011 / 02:43
0

Não há uma única maneira segura de fazer isso. Pedi uma pergunta semelhante sobre < um href="http://unix.stackexchange.com"> unix.se e a melhor maneira de obter essa informação é um script que verifica uma variedade de fontes:

#!/bin/sh
# Detects which OS and if it is Linux then it will detect which Linux
# Distribution.

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}

A outra opção é usar gcc --version , já que gcc é sempre compilado para uma distro em particular, isso será relativamente portátil. Eu recomendo que você leia a resposta aceita na minha pergunta no U & L que explica a situação muito bem.

    
por 19.12.2013 / 18:12
0

Este comando funcionou para distribuições baseadas em Debian e baseadas em Redhat: Usando o filtro tr, você converte o documento para o formato de uma palavra por linha e depois conta a primeira linha que contém o nome da distribuição.

tr -s ' 1' '2' < /etc/issue | head -n 1
    
por 18.12.2014 / 17:14
-1

Thos é o melhor método

cat /etc/*release
    
por 20.11.2013 / 10:09

Tags