Określ dystrybucję systemu Linux


11

Próbuję ustalić, jaki smak działa serwer linux. Nie próbuję ustalić wersji jądra - ale oceniam dystrybutora.

gcc jest zainstalowany, a na wyjściu wersji jest napisane RedHat

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

Czy to oznacza, że ​​mogę bezpiecznie założyć, że mój serwer to serwer RedHat. Czy jest lepsza - w 100% kuloodporna - metoda, aby się tego dowiedzieć? Także dla innych smaków linuksowych - nie tylko tego serwera?

Edycja: zawartość /etc/na wypadek, gdyby to pomogło - ale chciałbym rozwiązania, które działa również dla innych wersji Linuksa.

# 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

Nie mam plików *releaseani *versionplików/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

Próbowałem LSB

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

Poza tym - chyba jestem w środku chroot jail(nie jestem do końca pewien, co to jest), co może być przyczyną tego problemu.


Zaktualizowano:

Myślę, że to dla mnie to robi. Myślę, że mogę bezpiecznie założyć, że używam cent-os.

# cat /proc/version
Linux version 2.6.9-103.plus.c4smp (mockbuild@builder10.centos.org) (gcc version 3.4.6 20060404 (Red Hat 3.4.6-11)) #1 SMP Wed Dec 21 16:17:23 EST 2011

Po co ci to wiedzieć? Być może zamiast tego testowanie popularnych narzędzi specyficznych dla dystrybucji (na przykład menedżerów pakietów) zrobi to, co chcesz?
Daniel Pryden,

1
Cóż, tak naprawdę chcę wiedzieć, czy mogę replikować serwer jako maszynę wirtualną lokalnie, a następnie zainstalować rzeczy na lokalnej maszynie wirtualnej, a następnie skopiować pliki binarne na maszynę zdalną. Pomyślałem, że znalezienie właściwej platformy będzie dobrym punktem wyjścia.
Billy Moon,

2
Powyższa lista katalogów jest niekompletna (np. Brakuje hostów, init.d, rc *). Czy to test?

Jak uzyskujesz dostęp do tego serwera? Czy to możliwe, że nie masz bezpośredniego dostępu do systemu plików serwera, ale zamiast tego znajdujesz się w więzieniu chroot?
Daniel Pryden,

Chyba mógłbym być w więzieniu chroot - czy to oznacza, że ​​nie mogę dowiedzieć się, na czym polega system?
Billy Moon,

Odpowiedzi:


4
cat /proc/version

Przykłady:

  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 (mockbuild@c6b6.bsys.dev.centos.org) \
    (gcc version 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC) ) #1 SMP Tue Apr 17 23:56:34 BST 2012
    

Zobacz także Jak się dowiedzieć, której dystrybucji Linux używasz?


To pokazuje, gdzie jądro zostało skompilowane, a nie jakiej dystrybucji używasz. W wielu przypadkach jądro jest kompilowane w tej samej dystrybucji, ale w starszej wersji.
pabouk

13

W większości współczesnych dystrybucji Linuksa następujące polecenie poda ci informacje:

lsb_release -a

1
Nie, to nie jest prawda. Działa to tylko w przypadku Debiana i pochodnych
MariusMatutiae,

1
To polecenie nie jest domyślnie instalowane w Red Hat i pochodnych (tj. CentOS). Musisz zainstalować go bezpośrednio przed użyciem: yum install redhat-lsb-core.
pabouk

@MariusMatutiae w rzeczywistości jest znacznie bardziej rozpowszechniony, ale nie zawsze jest instalowany domyślnie.
terdon

@terdon dziękuję, nie wiedziałem o tym.
MariusMatutiae

@MariusMatutiae zobacz tutaj, aby uzyskać więcej informacji, wydaje się, że nie ma go w SuSe, ale powinien być zainstalowany na RH.
terdon

9

/etc/issue może być dobrym punktem wyjścia.

Więcej można znaleźć, sprawdzając pliki informacyjne dla różnych dystrybucji:

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

Zobacz forum Unixa po więcej szczegółów.


1
niestety nie mam żadnych plików kończących się releaseani versionw moim etckatalogu
Billy Moon,

4

Jeśli go /etc/issuebrakuje, może być jeden lub więcej /etc/*_releaseplików.

Na przykład mój system Ubuntu ma /etc/lsb-release:

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

System CentOS znajomego (oparty na Red Hat) ma /etc/redhat-release:

CentOS release 5.6 (Final)

Nie wiem jak uniwersalna to jest.


nie releaselub versionpliki w moim/etc/
Billy Moon

@BillyMoon Wierzę, że dopiero od niedawna dystrybucje Linuksa zaczęły dodawać narzędzie lsb_release do swojej dystrybucji. lsb_release -a
Alpha01

Dzięki za wskazówkę - tym razem mi nie pomaga
Billy Moon

2

cat / etc / issue może odpowiedzieć na twoje pytanie.

Twórcy dystrybucji nie są tu dla ciebie przyjaźni. Po pierwsze, każdy uważa, że ​​jest to jedyny prawdziwy sposób.

Najprawdopodobniej zamiast próbować wąchać dystrybucję, powinieneś bardziej szczegółowo przyjrzeć się konkretnemu pytaniu, na które naprawdę musisz odpowiedzieć. Skoncentruj się na funkcjonalności, na którą patrzysz, a nie na dystrybucji. W końcu nowa wersja dystrybucji może się odwrócić i iść w przeciwnym kierunku na dowolnej osi.


3
nie ma /etc/issuena moim serwerze
Billy Moon

Tak. Zauważ, że /etc/issuemogą zawierać sekwencje specjalne, takie jak \ni \l. Aby zobaczyć, co to znaczy, man 5 issuei man getty( /etc/issueplik jest przeznaczony głównie do użytku przez getty). Oczywiście właściciel systemu mógł edytować /etc/issuez jakiegoś nikczemnego powodu.
Keith Thompson,

Nie sądzę, /etc/issueaby istniało jakiekolwiek wymaganie, aby zawierać jakiekolwiek informacje o dostawcy dystrybucji. Często się zdarza, ale nie sądzę, żebyś mógł na tym polegać.
Daniel Pryden,

@DanielPryden dobrze się uczy każdego dnia. Nigdy wcześniej nie spotkałem się z jego brakiem.
bmargulies,

1

Użyj facter(tak to się pisze).

Facter jest towarzyszem marionetek, zapewnia zmienne, które można przeszukiwać, które zawierają informacje o systemie.

Na przykład, oto tylko kilka z kilkudziesięciu zmiennych, które czynnik może zwrócić

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

Możesz po prostu zapytać o fakt rodziny osfamily, aby zobaczyć, czy na serwerze działa RedHat

$ facter osfamily
RedHat

Sprawdź dokumentację: http://puppetlabs.com/facter


0

uname -a

Działa zawsze dla każdego Tuxa


1
Zgłasza to ciąg wersji jądra , co może być bardzo niepoprawne, jeśli Twój host uruchamia jądro z innej dystrybucji - na czystym metalu lub z powodu narzędzia takiego jak OpenVZ lub VServers.
Sarnold

Tak, ale przypuszczam, że w tym przypadku autor Q będzie wiedział coś. o sytuacji. Jądro „obce” jest raczej dziwnym przypadkiem
Lazy Badger

0

Nie ma jednego, pewnego, ognistego sposobu na zrobienie tego. Zadałem podobne pytanie na unix.se, a najlepszym sposobem na uzyskanie tych informacji jest skrypt, który sprawdza różne źródła:

#!/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}

Rzeczywiście używa się innego wyboru gcc --version, ponieważ gcczawsze jest on kompilowany dla określonej dystrybucji, będzie on względnie przenośny. Gorąco polecam przeczytanie zaakceptowanej odpowiedzi na moje pytanie w U&L, która bardzo ładnie wyjaśnia sytuację.


0

To polecenie działało w przypadku dystrybucji opartych na Debianie i Redhat: Używając filtru tr, konwertujesz dokument do formatu jednego słowa na linię, a następnie zliczasz pierwszy wiersz zawierający nazwę dystrybucji.

tr -s ' \011' '\012' < /etc/issue | head -n 1

-1

Thos jest najlepszą metodą

cat /etc/*release

Wymieniłem mój /etckatalog w pytaniu. Jak omówiono w innych odpowiedziach, to rozwiązanie nie działa dla mnie.
Billy Moon,

U wypróbowałem wersję ls / etc *; . To jest złe. Wypróbuj wersję ls / etc / *. To zadziała. Jestem całkiem pewien
Unnikrishnan

Zrobiłem też ls w /etc/katalogu i widać, że nie ma tam żadnych plikówrelease
Billy Moon
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.