Linux dağıtımını belirleme


11

Linux sunucusunun hangi lezzetinin çalıştığını belirlemeye çalışıyorum. Çekirdek sürümünü belirlemeye çalışmıyorum - ama dağıtıcıyı değerlendiriyorum.

gcc kurulur ve sürüm çıktısında RedHat diyor

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

Bu, sunucumun RedHat sunucusu olduğunu güvenle varsayabileceğim anlamına mı geliyor? Bunu bulmak için daha iyi -% 100 kurşun geçirmez bir yöntem var mı? Ayrıca diğer linux lezzetleri için - sadece bu sunucu değil?

Düzenleme: /etc/yardımcı olması durumunda içeriği - ama ben de linux diğer sürümleri için çalışan bir çözüm istiyorum.

# 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

Dosyam yok *releaseveya *versiondosyam var/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

LSB'yi denedim

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

Ayrıca - Sanırım chroot jailbu sorunun nedeni olabilecek bir (gerçekten ne olduğundan emin değilim) içindeyim .


Güncellenmiş:

Bunun benim için yaptığını düşünüyorum. Sanırım cent-os kullandığımı güvenle varsayabilirim.

# 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

Neden bilmen gerekiyor? Bunun yerine, yaygın dağıtıma özgü araçlar (örneğin paket yöneticileri) için test yapmak istediğinizi yapar mı?
Daniel Pryden

1
Gerçekten bilmek istediğim, sunucuyu yerel olarak bir sanal makine olarak çoğaltabilir ve daha sonra yerel sanal makineye bir şeyler yükleyebilir, ardından ikili dosyaları uzak makineye kopyalayabilir miyim. Doğru platformu bulmanın iyi bir başlangıç ​​noktası olacağını düşündüm.
Billy Moon

2
Yukarıdaki dizin listesi eksik (örn. Ana bilgisayarlar eksik, init.d, rc *). Bu bir test mi?

Bu sunucuya nasıl erişiyorsunuz? Sunucunun dosya sistemine doğrudan erişiminiz olmayabilir, ancak bunun yerine bir chroot hapishanesinde bulunmanız mümkün mü?
Daniel Pryden

Sanırım bir chroot hapishanesinde olabilirim - bu altta yatan sistemin ne olduğunu bulamadığım anlamına mı geliyor?
Billy Moon

Yanıtlar:


4
cat /proc/version

Örnekler:

  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. Kırmızı Şapka / 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
    

Ayrıca bkz. Hangi Linux Dağıtımını Kullandığınızı Nasıl Öğrenebilirsiniz?


Bu, çekirdeğin hangi dağıtımda çalıştığınızı değil, nerede derlendiğini gösterir. Birçok durumda çekirdek aynı dağıtımda ancak daha eski bir sürümde derlenmektedir.
pabouk

13

Çoğu modern Linux dağıtımında, aşağıdaki komut size bilgi verecektir:

lsb_release -a

1
Hayır, bu doğru değil. Bu sadece Debian ve türevleri için geçerlidir
MariusMatutiae

1
Bu komut varsayılan olarak Red Hat ve türevlerine (örn. CentOS) yüklenmez. Sen Kullanmadan önce açıkça yüklemek zorunda: yum install redhat-lsb-core.
pabouk

@MariusMatutiae aslında bundan çok daha yaygındır, ancak her zaman varsayılan olarak yüklenmez.
terdon

@terdon teşekkür ederim, bunu bilmiyordum.
MariusMatutiae

@MariusMatutiae daha fazla bilgi için buraya bakın, SuSe'de yok gibi görünüyor, ancak RH'ye kurulması gerekiyor.
terdon

9

/etc/issue iyi bir başlangıç ​​noktası olabilir.

Bilgi dosyaları farklı dağıtımlar için incelenerek daha fazlası bulunabilir:

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

Daha fazla bilgi için Unix forumuna bakın.


1
ne yazık ki herhangi bir dosya biten yok releaseya versionbenim de etcdizindeki
Billy Ay'ı

4

Eğer /etc/issueeksik bir veya daha fazla olabilir /etc/*_releasedosyaları.

Örneğin, Ubuntu sistemim şunları içeriyor /etc/lsb-release:

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

Bir arkadaşınızın CentOS sistemi (Red Hat tabanlı) /etc/redhat-release:

CentOS release 5.6 (Final)

Bunun ne kadar evrensel olduğunu bilmiyorum.


hayır releaseveya versiondosyalarım/etc/
Billy Moon

@BillyMoon Sadece Linux dağıtımlarının dağıtımlarına lsb_release yardımcı programını eklemeye başladığına inanıyorum. lsb_release -a
Alpha01

Teşekkürler bahşiş için - ne yazık ki bana bu sefer yardımcı olmaz
Billy Moon

2

kedi / vb / sorunu sorunuza cevap olabilir.

Dağıtım üreticileri burada sizin için uygun değil. Birincisi, her biri bunun tek doğru yol olduğunu düşünüyor.

Büyük olasılıkla, dağıtımı koklamak yerine, gerçekten cevaplamanız gereken soruya daha ayrıntılı bakmalısınız. Baktığınız dağıtım yerine, baktığınız işlevselliğe odaklanın. Sonuçta, bir dağıtımın yeni bir versiyonu dönebilir ve herhangi bir eksende ters yöne gidebilir.


3
Hiçbir yoktur /etc/issuebenim sunucuda
Billy Ay

Evet. Not /etc/issuegibi karakterlerini içerebilirler \nve \l. Bunların ne anlama geldiğini görmek man 5 issueve man getty( /etc/issuedosya öncelikle kullanım için tasarlanmıştır getty). Tabii ki sistemin sahibi /etc/issuehain bir nedenden dolayı düzenleme yapabilir .
Keith Thompson

/etc/issueVar olması veya dağıtım satıcısı hakkında herhangi bir bilgi içermesinin gerekli olduğunu düşünmüyorum . Genelde öyle, ama buna güvenebileceğinizi sanmıyorum.
Daniel Pryden

@ DanielPryden her gün bir şey öğrenir. Daha önce kendim olmadan hiç karşılaşmam.
bmargulies

1

Kullanın facter(evet bu şekilde yazılır).

Facter, kuklaya eşlik eder, sistem hakkında bilgi içeren sorgulanabilen değişkenler sağlar.

Örneğin, faktörün döndürebileceği düzinelerce değişkenten sadece birkaçı

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

Sunucunun RedHat çalıştırdığını görmek için osfamily gerçeğini sorgulayabilirsiniz

$ facter osfamily
RedHat

Dokümanlara göz atın: http://puppetlabs.com/facter


0

uname -a

Herhangi bir Tux için her zaman çalışır


1
Bu, çekirdek sürüm dizesini bildirir; bu, ana makineniz farklı bir dağıtımdan bir çekirdek çalıştırıyorsa çok yanlış olabilir - çıplak metalde veya OpenVZ veya VServers gibi bir araç nedeniyle.
sarnold

Evet, ama sanırım bu durumda Q'nun yazarı bir şey bilecek. durum hakkında. "Yabancı" çekirdek oldukça garip
Lazy Badger

0

Bunu yapmanın tek bir kesin ateş yolu yoktur. Ben benzer bir soru unix.se üzerinde sordum ve bu bilgi almak için en iyi yolu çeşitli kaynakları kontrol eden bir komut dosyasıdır:

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

Diğer seçenek gerçekten kullanmaktır gcc --version, çünkü gccher zaman belirli bir dağıtım için derlendiğinden, bu nispeten taşınabilir olacaktır. U & L'deki sorumun kabul edilen cevabını okumanızı şiddetle tavsiye ederim , durumu çok güzel açıklıyor.


0

Bu komut Debian tabanlı ve Redhat tabanlı dağıtımlar için çalıştı: tr filtresini kullanarak, belgeyi satır başına bir sözcük biçimine dönüştürür ve ardından dağıtım adını içeren ilk satırı sayarsınız.

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

-1

Thos en iyi yöntemdir

cat /etc/*release

Sorudaki /etcdizini listeledim . Diğer cevaplarda tartışıldığı gibi, bu çözüm benim için işe yaramıyor.
Billy Moon

U çalıştı ls / etc * release; . Bu yanlış. Ls / etc / * sürümünü deneyin. Kesinlikle çalışacaktır. Eminim
Unnikrishnan

Ben de /etc/dizinde ls yaptım ve orada hiçbir dosya sonunda görebilirsinizrelease
Billy Moon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.