लिनक्स वितरण का निर्धारण करें


11

मैं यह निर्धारित करने की कोशिश कर रहा हूं कि लिनक्स सर्वर का स्वाद क्या चल रहा है। मैं कर्नेल संस्करण को निर्धारित करने की कोशिश नहीं कर रहा हूं - लेकिन वितरक को रोटर करता हूं।

gcc स्थापित है, और संस्करण आउटपुट में, यह RedHat कहता है

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

क्या इसका मतलब है कि मैं अपने सर्वर को रेडहैट सर्वर मान सकता हूं। क्या इसका पता लगाने के लिए कोई बेहतर - 100% बुलेटप्रूफ तरीका है? इसके अलावा अन्य लिनक्स जायके के लिए - न केवल इस सर्वर?

संपादित करें: /etc/यदि यह मदद करता है तो सामग्री - लेकिन मैं एक समाधान चाहूंगा जो अन्य संस्करणों के लिए भी काम करता है।

# 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

मुझे पता नहीं है *releaseया *versionमें फाइल/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_release -a
LSB Version:
Distributor ID: n/a
Description:    (none)
Release:        n/a
Codename:       n/a

इसके अलावा - मुझे लगता है कि मैं अंदर हूँ chroot jail(वास्तव में निश्चित नहीं है कि वह क्या है) जो इस मुद्दे का कारण हो सकता है।


अपडेट किया गया:

मुझे लगता है कि यह मेरे लिए है। मुझे लगता है कि मैं सुरक्षित रूप से मान सकता हूं कि मैं सेंट-ओएस का उपयोग कर रहा हूं।

# 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

तुम क्यों जानना चाहते हो? शायद सामान्य वितरण-विशिष्ट उपकरणों (उदाहरण के लिए पैकेज प्रबंधक) के परीक्षण के बजाय, आप क्या चाहते हैं?
डैनियल प्राइडेन

1
खैर, जो मैं वास्तव में जानना चाहता हूं वह यह है कि क्या मैं सर्वर को स्थानीय रूप से एक वर्चुअल मशीन के रूप में दोहरा सकता हूं, और फिर स्थानीय वर्चुअल मशीन पर सामान स्थापित कर सकता हूं, फिर रिमोट मशीन पर बायनेरिज़ को कॉपी कर सकता हूं। मुझे लगा कि सही प्लेटफॉर्म का पता लगाना एक अच्छा शुरुआती बिंदु होगा।
बिली मून

2
उपरोक्त निर्देशिका सूची अपूर्ण है (जैसे होस्ट गायब है, init.d, rc *)। क्या यह एक परीक्षा है?

आप इस सर्वर तक कैसे पहुंच रहे हैं? क्या यह संभव है कि आपके पास सर्वर के फाइल सिस्टम तक सीधे पहुंच नहीं है, लेकिन इसके बजाय चेरोट जेल के अंदर हैं?
डैनियल प्राइडेन

मुझे लगता है कि मैं चेरोट जेल के अंदर हो सकता हूं - क्या इसका मतलब यह नहीं है कि मुझे पता नहीं चल सकता है कि अंतर्निहित प्रणाली क्या है?
बिली मून

जवाबों:


4
cat /proc/version

उदाहरण:

  1. उबंटू:

    $ 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
    

यह भी देखें कि आप किस लिनक्स वितरण का उपयोग कर रहे हैं?


इससे पता चलता है कि कर्नेल को संकलित नहीं किया गया था कि आप किस वितरण पर चलते हैं। कई मामलों में कर्नेल को समान वितरण पर संकलित किया जा रहा है लेकिन पुराने संस्करण पर।
पाबौक

13

अधिकांश आधुनिक लिनक्स डिस्ट्रोस पर, निम्न कमांड आपको इसकी जानकारी देगा:

lsb_release -a

1
नहीं, यह सच नहीं है। यह केवल डेबियन और डेरिवेटिव के लिए काम करता है
Mar48Matutiae

1
यह कमांड Red Hat और डेरिवेटिव (यानी CentOS) पर डिफ़ॉल्ट रूप से संस्थापित नहीं है। आप उपयोग करने से पहले स्पष्ट रूप से इसे स्थापित किया है: yum install redhat-lsb-core
पाबौक

@MariusMatutiae वास्तव में यह उससे कहीं अधिक व्यापक है लेकिन हमेशा डिफ़ॉल्ट रूप से स्थापित नहीं होता है।
टेराडन

@terdon धन्यवाद, मुझे नहीं पता था कि।
MariusMatutiae

@MariusMatutiae अधिक जानकारी के लिए यहाँ देखें , यह SuSe से अनुपस्थित लगता है, लेकिन आरएच पर स्थापित होना चाहिए।
टेराडन

9

/etc/issue एक अच्छा प्रारंभिक बिंदु हो सकता है।

विभिन्न वितरणों के लिए जानकारी फ़ाइलों का निरीक्षण करके अधिक पाया जा सकता है:

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

देखें यूनिक्स मंच अधिक जानकारी के लिए।


1
दुर्भाग्य से मेरे पास कोई भी फाइल समाप्त releaseया versionमेरी etcनिर्देशिका में नहीं है
बिली मून

4

यदि /etc/issueगुम है, तो एक या अधिक /etc/*_releaseफाइलें हो सकती हैं ।

उदाहरण के लिए, मेरे उबंटू प्रणाली में है /etc/lsb-release:

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

एक मित्र का CentOS सिस्टम (Red Hat पर आधारित) है /etc/redhat-release:

CentOS release 5.6 (Final)

मुझे नहीं पता कि यह कितना सार्वभौमिक है।


नहीं releaseया versionमेरे में फ़ाइलें/etc/
बिली मून

@BillyMoon मेरा मानना ​​है कि हाल ही में लिनक्स वितरण ने उनके वितरण पर lsb_release उपयोगिता जोड़ना शुरू किया है। lsb_release -a
अल्फा ०१

टिप के लिए धन्यवाद - दुर्भाग्य से इस समय मेरी मदद नहीं करता है
बिली मून

2

बिल्ली / आदि / समस्या आपके प्रश्न का उत्तर दे सकती है।

डिस्ट्रो निर्माता आपके यहाँ अनुकूल नहीं हैं। सबसे पहले, प्रत्येक को लगता है कि यह एकमात्र सही तरीका है।

सबसे अधिक संभावना है, डिस्ट्रो को सूँघने की कोशिश करने के बजाय, आपको उस विशेष प्रश्न पर अधिक विस्तार से देखना चाहिए जिसे आपको वास्तव में जवाब देने की आवश्यकता है। उस कार्यक्षमता पर ध्यान दें जो आप देख रहे हैं, न कि डिस्ट्रो इसे प्रदान कर रहे हैं। आखिरकार, एक डिस्ट्रो का एक नया संस्करण घूम सकता है और किसी विशेष अक्ष पर विपरीत दिशा में जा सकता है।


3
/etc/issueमेरे सर्वर पर कोई नहीं है
बिली मून

हाँ। ध्यान दें कि /etc/issueइस तरह के \nऔर के रूप में भागने के दृश्यों में हो सकता है \l। यह देखने के लिए कि इनका क्या मतलब है, man 5 issueऔर man getty( /etc/issueफ़ाइल प्राथमिक रूप से उपयोग के लिए अभिप्रेत है getty)। बेशक सिस्टम का मालिक /etc/issueकिसी नापाक कारण के लिए संपादन कर सकता है।
कीथ थॉम्पसन

मुझे नहीं लगता कि /etc/issueअस्तित्व के लिए, या वितरण विक्रेता के बारे में कोई जानकारी होना आवश्यक है। यह आमतौर पर होता है, लेकिन मुझे नहीं लगता कि आप इस पर भरोसा कर सकते हैं।
डैनियल प्राइडेन

@ डैनियलप्रीयन अच्छी तरह से हर दिन कुछ सीखता है। मैं पहले कभी खुद के अभाव में नहीं भागता।
bmgulies

1

का उपयोग करें facter(हाँ है कि यह कैसे वर्तनी है)।

फैक्टर कठपुतली का साथी है, यह वैरिएबल प्रदान करता है जिसे क्वियर किया जा सकता है जिसमें सिस्टम के बारे में जानकारी होती है।

उदाहरण के लिए, यहां दर्जनों वेरिएबल्स में से कुछ ही हैं जो फैक्टर वापस आ सकते हैं

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

आप सर्वर को RedHat चला रहे हैं यह देखने के लिए बस ऑसफैमिली तथ्य को क्वेरी कर सकते हैं

$ facter osfamily
RedHat

दस्तावेज़ीकरण देखें: http://puppetlabs.com/facter


0

uname -a

हमेशा किसी भी टक्स के लिए काम करता है


1
यह कर्नेल संस्करण स्ट्रिंग की रिपोर्ट करता है , जो बहुत गलत हो सकता है यदि आपका होस्ट एक अलग वितरण से कर्नेल चला रहा है - या तो नंगे धातु पर या OpenVZ या VServers जैसे उपकरण के कारण।
१:११ पर सरनॉल्ड

हां, लेकिन मुझे लगता है कि इस मामले में क्यू के लेखक को पता चल जाएगा। स्थिति के बारे में। "विदेशी" कर्नेल बल्कि अजीब मामला है
आलसी बेजर

0

ऐसा करने का एक भी पक्का तरीका नहीं है। मैंने unix.se पर एक समान प्रश्न पूछा और यह जानकारी प्राप्त करने का सबसे अच्छा तरीका एक स्क्रिप्ट है जो विभिन्न स्रोतों की जांच करता है:

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

अन्य विकल्प वास्तव में उपयोग कर रहा है gcc --version, क्योंकि gccहमेशा एक विशेष डिस्ट्रो के लिए संकलित किया जाता है, यह अपेक्षाकृत पोर्टेबल होगा। मैं आपको U & L में मेरे प्रश्न पर स्वीकृत उत्तर को पढ़ने की अत्यधिक सलाह देता हूं, यह स्थिति को बहुत अच्छी तरह से समझाता है।


0

इस कमांड ने डेबियन आधारित और रेडहैट आधारित वितरणों के लिए काम किया: ट्र फिल्टर का उपयोग करके, आप दस्तावेज़ को एक-शब्द-प्रति-पंक्ति प्रारूप में परिवर्तित करते हैं और फिर पहली पंक्ति की गणना करते हैं जिसमें वितरण नाम होता है।

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

-1

सबसे अच्छी विधि है

cat /etc/*release

मैंने अपनी /etcनिर्देशिका को प्रश्न में सूचीबद्ध किया । जैसा कि अन्य उत्तरों पर चर्चा की गई है, यह समाधान मेरे लिए काम नहीं करता है।
बिली मून

यू की कोशिश की एलएस / आदि * रिलीज; । यह गलत है। एलएस / आदि / * रिलीज की कोशिश करें। यह काम करेगा। बहुत यकीन है
उन्नीकृष्णन

मैंने /etc/डायरेक्टरी में भी ls किया और आप देख सकते हैं कि वहाँ कोई भी फाइलrelease
Billy Moon
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.