मैं भरोसेमंद रूप से ऑपरेटिंग सिस्टम का नाम कैसे प्राप्त कर सकता हूं?


69

कहो मैं एक दूरस्थ प्रणाली में लॉग इन हूं, मुझे कैसे पता चलेगा कि यह क्या चल रहा है? अधिकांश आधुनिक लिनक्स (लाइनस?) पर, आपके पास lsb_releaseकमांड है:

$ lsb_release -ic    
Distributor ID: LinuxMint
Codename:       debian

जहाँ तक मैं बता सकता हूँ बस के रूप में एक ही जानकारी देता है /etc/lsb-release। क्या होगा अगर वह फ़ाइल मौजूद नहीं है? मुझे याद है कि lsb_releaseकमांड अपेक्षाकृत नया है, अगर मुझे पुराने सिस्टम का ओएस प्राप्त करना है तो क्या होगा?

किसी भी मामले में, lsbके लिए खड़ा है Linux Standard Baseतो मैं उस पर गैर लिनक्स Unices काम नहीं करेगा संभालने कर रहा हूँ। जहां तक ​​मुझे पता है, इस जानकारी को प्राप्त करने का कोई तरीका नहीं है unameतो मैं इसे उन प्रणालियों पर कैसे प्राप्त कर सकता हूं जो उपयोग नहीं करते हैं lsb_release?


1
लिनक्स के लिए unix.stackexchange.com/questions/6345/…uname -sलिनक्स के बाहर पर्याप्त होना चाहिए (संभवतः बीएसडी के लिए)।
मैट

क्या आपने जाँच की है facter? facter operatingsystemआपको उन सभी प्रणालियों facterपर काम करना चाहिए जो आपके साथ काम करने के लिए बनाई गई थीं।
जोसेफ आर।

@JosephR। अच्छा लग रहा है लेकिन डिफ़ॉल्ट रूप से स्थापित नहीं है।
टेराडो

1
मैंने उस facterकोड को चिपकाया है जो पास्टबिन पर ऑपरेटिंग सिस्टम का नाम देता है। इसे यहां खोजें । यह मज़बूती से नाम पाने के लिए कई अलग-अलग फ़ाइलों की जाँच करता है।
जोसेफ आर।

@JosephR। वाह, यह बहुत सारी फाइलें हैं। जब मुझे मौका मिलेगा, तो मैं इसे पोर्ट करूँगा, जो कि काफी पोर्टेबल होना चाहिए। धन्यवाद!
terdon

जवाबों:


72

lsb_release -a इस जानकारी को खोजने के लिए, और सुसंगत तरीके से ऐसा करने में सक्षम होने के लिए आपका सबसे अच्छा विकल्प होने की संभावना है।

एलएसबी का इतिहास

lsbकि आदेश में इस परियोजना के लिए खड़ा है लिनक्स मानक बेस है, जो एक छाता परियोजना द्वारा प्रायोजित लिनक्स फाउंडेशन विभिन्न Linux distros पर चीजों की बुनियादी प्रकार के कर के लिए सामान्य तरीकों प्रदान करने के लिए।

यह परियोजना स्वैच्छिक है और विक्रेता केवल एक उपयोगकर्ता के रूप में और विभिन्न मॉड्यूलों के आसपास विभिन्न विशिष्टताओं के सुविधा के रूप में परियोजना में भाग ले सकते हैं जो विभिन्न लिनक्स वितरण के भीतर मानकीकरण को चलाने में मदद करते हैं।

चार्टर से अंश

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

एलएसबी से संबंधित उपयोगी लिंक

आलोचनाओं

एलएसबी के साथ कई समस्याएं हैं जो इसे डिब्रोस जैसे डिस्ट्रोस के लिए समस्याग्रस्त बनाती हैं। आरपीएम का जबरन उपयोग एक हो रहा है। मामले पर अधिक जानकारी के लिए विकिपीडिया लेख देखें ।

नोवेल

यदि आप खोजते हैं, तो आप संभवतः एक काफी दिनांकित खोज पृष्ठ पर आएंगे जिसका शीर्षक होगा: नोवेल से लिनक्स डिस्ट्रो का पता लगाना । यह उन कुछ स्थानों में से एक है, जिन्हें मैंने एक वास्तविक सूची के रूप में देखा है, जो कई प्रमुख विकृतियों को दिखाता है और आप यह पता लगा सकते हैं कि आप जो उपयोग कर रहे हैं वह अंतर्निहित है।

अंश

Novell SUSE         /etc/SUSE-release
Red Hat             /etc/redhat-release, /etc/redhat_version
Fedora              /etc/fedora-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
UnitedLinux         /etc/UnitedLinux-release
ubuntu              /etc/lsb-release

इसी पृष्ठ में एक आसान स्क्रिप्ट भी शामिल है, जो सिर्फ वनिला unameकमांड का उपयोग करके उपरोक्त के लिए कोडित करने का प्रयास करती है , और उपरोक्त फ़ाइलों में से एक की उपस्थिति।

नोट: यह सूची दिनांकित है लेकिन आप सूची से मैनड्रैक जैसे दिनांकित विकृतियों को आसानी से छोड़ सकते हैं और उन्हें विकल्पों के साथ बदल सकते हैं। यदि आप Solaris और Linux वैरिएंट के एक बड़े स्वाथ का समर्थन करने का प्रयास कर रहे हैं तो इस प्रकार की स्क्रिप्ट एक दृष्टिकोण हो सकती है।

लिनक्स माफिया

अधिक खोज Linuxmafia.com पर बनाए गए निम्न पृष्ठ को चालू कर देगी, जिसका शीर्षक है: / etc / sधन लिनक्स (और अन्य यूनिक्स) वितरणों के लिए रिलीज़ समकक्ष । यह शायद अब तक की सबसे थकाऊ सूची है जो मैंने देखी है। आप इस सूची को केस / स्विच स्टेटमेंट के साथ कोड कर सकते हैं और इसे अपने सॉफ़्टवेयर वितरण के हिस्से के रूप में शामिल कर सकते हैं।

वास्तव में उस पृष्ठ के निचले भाग में एक स्क्रिप्ट होती है जो ठीक यही करती है। तो आप बस 3 पार्टी के रूप में स्क्रिप्ट को अपने सॉफ़्टवेयर वितरण में डाउनलोड और उपयोग कर सकते हैं।

लिपि

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

नोट: यह स्क्रिप्ट परिचित दिखनी चाहिए, यह नोवेल वन के अप टू डेट वर्जन है!

लेगरूम लिपि

एक और तरीका जो मैंने नियोजित देखा है, वह है कि अपनी स्वयं की स्क्रिप्ट को रोल करना, उपरोक्त नोवेल विधि के समान लेकिन इसके बजाय एलएसबी का उपयोग करना। इस लेख का शीर्षक: जेनेरिक विधि निर्धारित करने के लिए लिनक्स (या UNIX) वितरण नाम , एक ऐसी विधि दिखाता है।

# Determine OS platform
UNAME=$(uname | tr "[:upper:]" "[:lower:]")
# If Linux, try to determine specific distribution
if [ "$UNAME" == "linux" ]; then
    # If available, use LSB to identify distribution
    if [ -f /etc/lsb-release -o -d /etc/lsb-release.d ]; then
        export DISTRO=$(lsb_release -i | cut -d: -f2 | sed s/'^\t'//)
    # Otherwise, use release info file
    else
        export DISTRO=$(ls -d /etc/[A-Za-z]*[_-][rv]e[lr]* | grep -v "lsb" | cut -d'/' -f3 | cut -d'-' -f1 | cut -d'_' -f1)
    fi
fi
# For everything else (or if above failed), just use generic identifier
[ "$DISTRO" == "" ] && export DISTRO=$UNAME
unset UNAME

कोड का यह हिस्सा एक सिस्टम /etc/bashrcया कुछ ऐसी फाइल में शामिल किया जा सकता है जो तब पर्यावरण चर को निर्धारित करेगा $DISTRO

जीसीसी

मानो या न मानो एक और विधि का उपयोग करना है gcc। यदि आप कमांड को क्वेरी करते हैं gcc --versionतो आपको वह डिस्ट्रो मिलेगा जो gcc के लिए बनाया गया था, जो कि वास्तव में उसी सिस्टम के समान है जिस पर वह चल रहा है।

फेडोरा १४

$ gcc --version
gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4)
Copyright (C) 2010 Free Software Foundation, Inc.

सेंटोस 5.x

$ gcc --version
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54)
Copyright (C) 2006 Free Software Foundation, Inc.

सेंटोस 6.x

$ gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)
Copyright (C) 2010 Free Software Foundation, Inc.

उबुन्टु 12.04

$ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.

टी एल; डॉ;

तो मुझे कौन सा उपयोग करना चाहिए? मैं lsb_release -aकिसी भी लिनक्स डिस्ट्रीब्यूशन के लिए जाना चाहूंगा जो कि मैं अक्सर (रेडहैट, डेबियन, उबंटू, आदि) करूंगा। उन स्थितियों के लिए जहां आप सिस्टम का समर्थन कर रहे हैं जो मुझे प्रदान नहीं करता है lsb_releaseमैं अपने सॉफ़्टवेयर के वितरण के हिस्से के रूप में रोल कर रहा हूं जो मैं प्रदान कर रहा हूं, उपरोक्त लिपियों में से एक के समान।

अद्यतन # 1: SuSE के साथ अनुवर्ती

@ निल्स के साथ नीचे टिप्पणी में यह निर्धारित किया गया था कि जो भी कारण के लिए, एसएलईएस 11 डिफ़ॉल्ट रूप से स्थापित होने से एलएसबी को छोड़ने के लिए दिखाई दिया। यह केवल एक वैकल्पिक स्थापना थी, जो एक पैकेज के लिए काउंटर लगती थी जो इस प्रकार की प्रमुख विशेषता प्रदान करती है।

इसलिए मैंने OpenSuSE प्रोजेक्ट के किसी व्यक्ति से संपर्क करने का अवसर लिया कि क्यों।

ईमेल का अंश

Hi Rob,

I hope you don't mind me contacting you directly but I found your info here: 
https://en.opensuse.org/User:Rjschwei. I participate on one of the StackExchange 
sites, Unix & Linux and a question recently came up regarding the best option 
for determining the underlying OS.

http://unix.stackexchange.com/questions/92199/how-can-i-reliably-get-the-operating-systems-name/92218?noredirect=1#comment140840_92218

In my answer I suggested using lsb_release, but one of the other users mentioned 
that this command wasn't installed as part of SLES11 which kind of surprised me. 
Anyway we were looking for some way to confirm whether this was intentionally 
dropped from SLES or it was accidental.

Would you know how we could go about confirming this one way or another?

Thanks for reading this, appreciate any help and/or guidance on this.

-Sam Mingolelli
http://unix.stackexchange.com/users/7453/slm

यहां रोब की प्रतिक्रिया है

Hi,

On 10/01/2013 09:31 AM, Sam Mingo wrote:
- show quoted text -

lsb_release was not dropped in SLES 11. SLES 11 is LSB certified. However, it 
is not installed by default, which is consistent with pretty much every other
distribution. The lsb_release command is part of the lsb-release package.

At present almost every distribution has an entry in /etc such as 
/etc/SuSE-release for SLES and openSUSE. Since this is difficult for ISVs and 
others there is a standardization effort going on driven by the convergence to 
systemd. The standard location for distribution information in the future will 
be /etc/os-release, although Ubuntu will probably do something different.

HTH,    
Robert

--  Robert Schweikert                           MAY THE SOURCE BE WITH YOU    
SUSE-IBM Software Integration Center                   LINUX    
Tech Lead    
Public Cloud Architect 

1
नोट: बस AIX और SunOS के साथ मशीनों पर एक त्वरित जांच की। उन्हें lsb_release स्थापित नहीं लगता (और आखिरकार, यह यूनिक्स नहीं लिनक्स स्टैक है)। जीसीसी के साथ समस्या यह है कि कुछ पीपीएल अब क्लैंग का उपयोग करना शुरू करते हैं। इसके अलावा, आप कभी भी यह सुनिश्चित नहीं कर सकते हैं कि निर्माण के लिए किस gcc का उपयोग किया गया था (सिस्टम पर मैं वहां काम करता हूं प्रत्येक पर कम से कम कुछ संस्करण हैं)। इसलिए मेरा वोट पाइथन समाधान में जाता है क्योंकि ऐसा लगता है कि यह अब डिफ़ॉल्ट रूप से हर जगह स्थापित है।
एल्मो

@elmo - हां एलएसबी लिनक्स स्टैंडर्ड बेस है, इसलिए मुझे इसके लिए एआईसीसी या सनोस की उम्मीद नहीं होगी। सनोस के साथ मेरा अनुभव 15+ वर्ष का है, और उन विक्रेताओं के बहुमत जिनके सॉफ्टवेयर से मैंने निपटा है, आमतौर पर स्वयं शेल स्क्रिप्ट प्रदान करते हैं जो मैं ऊपर संदर्भित करता हूं। सोलारिस 11 तक, पायथन एक विकल्प नहीं था। और यही वह है जो इसे दरार करने के लिए एक कठिन अखरोट बनाता है। यदि आप सोलारिस 9, 10, 11, AIX, और लिनक्स डिस्ट्रोस (SUSE, Ubntu, और RHEL) के एक जोड़े को चलाने के लिए आवश्यक सॉफ़्टवेयर प्रदान करते हैं तो आप क्या करते हैं? पायथन एक विकल्प नहीं है, इसलिए आपको हाथ से कोडेड शेल स्क्रिप्ट के साथ छोड़ दिया जाता है।
SLM

@elmo - हालांकि, एक विकल्प, मेरे लिए भी अपील करने वाला प्रतीत नहीं होता है। यह बहुत सारी समस्याओं से ग्रस्त है, मैं इसे केवल एक विकल्प के रूप में प्रदर्शित कर रहा था।
स्लम

@elmo - उस फ़ंक्शन के पीछे के कोड को देखें, hg.python.org/cpython/file/2.7/Lib/platform.py#l259 । बड़ा आश्चर्य यह LSB का उपयोग कर रहा है!
slm

@ एसएलएम: मेरे पास सनोस 5.10 के साथ मशीन तक पहुंच है (जो मुझे लगता है कि आपकी सूची में 10 है - मैं सूर्य के संस्करण संख्या / सम्मेलनों से परिचित नहीं हूं) और इसमें पायथन है। मेरे पास AIX 7 के साथ मशीन तक पहुंच है और इसमें पायथन है। लिनक्स मशीनों में स्पष्ट रूप से यह भी है। तो अभी भी पायथन सबसे पोर्टेबल पसंद की तरह दिखता है। 10 से नीचे के सूर्य के लिए मुझे यकीन नहीं है कि यह पायथन को स्थापित करने की अनुमति क्यों नहीं देगा (वर्तमान में स्थापित वर्तमान में कमी है ncurses और ctypes, जो जानता है)। एलएसबी का उपयोग करते हुए पायथन के लिए यह लिनक्स के लिए बिल्कुल भी आश्चर्यजनक नहीं है अगर यह डिफ़ॉल्ट दृष्टिकोण है।
एल्मो

16

चूंकि आप शायद facterरिमोट सर्वर पर इंस्टॉल नहीं कर पाएंगे , आप ओएस नाम खोजने के लिए यह क्या कर सकते हैं। इस operatingsystemतथ्य के लिए रूबी कोड पास्टबिन पर यहां पाया जा सकता है । मूल रूप से, यह *-releaseओएस नाम निर्धारित करने के लिए विभिन्न फाइलों और अन्य के माध्यम से दिखता है ।

फ़ाइलों में से कुछ इस पर दिखता है:

/etc/debian_version
/etc/gentoo-release
/etc/fedora-release
/etc/mandriva-release
/etc/mandrake-release
/etc/meego-release
/etc/arch-release
/etc/oracle-release
/etc/enterprise-release
/etc/ovs-release
/etc/vmware-release
/etc/redhat-release
/etc/SuSE-release
/etc/bluewhite64-version
/etc/slamd64-version
/etc/slackware-version
/etc/alpine-release
/etc/system-release
/etc/centos-release

मुझे खेद है कि अगर आपको इस सूची में डुप्लिकेट मिले, तो मैंने इसे जल्दी से तैयार किया grep। POSIX शेल स्क्रिप्ट में इसे पोर्ट करने के लिए काफी आसान (थोड़ा थकाऊ) होना चाहिए।


5
"मुझे खेद है कि अगर आप इस सूची में डुप्लिकेट पाते हैं, तो मैंने इसे जल्दी से grep के साथ निर्मित किया।" ... | uniq?
new123456

@ new123456 अधिकार। धन्यवाद। यहाँ मुख्य शब्द "जल्दी" है :)
जोसेफ आर।

इसे अस्वीकार करने के बारे में खेद है, लेकिन @ स्लम का उत्तर केवल उपेक्षा करने के लिए व्यापक है :)।
terdon

3
/ etc / os-release के बारे में क्या?
योहान याकिमोविच

1
@ new123456 तकनीकी रूप से, यह होना चाहिए ... | sort -uuniqकेवल आसन्न अद्वितीय तत्व पाता है।
पार्थियन शॉट

9

यदि आपने pythonस्थापित किया है (कोई फर्क नहीं पड़ता कि पायथन 3 या पायथन 2), तो आप पहिए को फिर से लगाए बिना वितरण नाम का पता लगा सकते हैं :

python -c "import platform;print(platform.linux_distribution()[0])"

यदि आप इस विकल्प का उपयोग करने के लिए लुभा रहे हैं, तो सुनिश्चित करें कि आपका OS समर्थित है: hg.python.org/cpython/file/2.7/Lib/platform.py#l259 । : यदि नहीं आप सूची में और जोड़ सकते हैं coderwall.com/p/cwrenq
SLM

1
यह प्राचीन लिनक्स वितरण के साथ काम नहीं करेगा। उदाहरण के लिए: SuSE 7.0 में Python 1.5.2 था और 2003 में Python 2.3 के आगमन से पहले प्लेटफ़ॉर्म मॉड्यूल नहीं जोड़ा गया; ;-)
pefu

6

/etc/issueरिलीज की जानकारी होनी चाहिए। मैं काफी निश्चित हूं कि मैंने इसे सोलारिस सिस्टम पर देखा है। यहाँ एक आधुनिक डेबियन प्रणाली से फ़ाइल है:

$ cat /etc/issue
Debian GNU/Linux 7 \n \l

$ 

/ etc / समस्या FHS (जो कि लिनक्स सिस्टम के लिए पूरी तरह से नहीं है) में भी उल्लिखित है , हालाँकि यह "वैकल्पिक" है।


आह, यह एक अच्छा सुझाव है, +1। यह हमेशा काम नहीं कर सकता है, हालांकि The file /etc/issue is a text file which contains a message or system identification to be printed before the login prompt.यह लगता है कि जो कुछ भी वह / उसकी इच्छा है, उसे लिखने के लिए sadadmin पर निर्भर है।
terdon

2
/etc/issueपूरी तरह से अविश्वसनीय है। (मैंने संस्करण XY में सिस्टम को एक /etc/issueबैनर के साथ देखा है, जिसमें कहा गया है कि वे खराब पैच मैनेजमेंट के बाद YZ थे। इसमें कुछ भी हो सकता है।)
Mat

यह उस फ़ाइल को भरने के लिए अनुशंसित है। कानूनी सामान जो लॉगिन करने की अनुमति है।
निल्स

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

@drewbenn मैन पेज कहता है कि मैंने अपनी पहली टिप्पणी में क्या उद्धृत किया है, सिस्टम जानकारी को शामिल करने की आवश्यकता के बारे में कुछ भी नहीं है। यह अक्सर करता है।
terdon

6

आप मज़बूती से सभी डिस्ट्रोस में एक कमांड से डिस्ट्रो नाम प्राप्त नहीं कर सकते हैं। कुछ / etc / * - रिलीज़ के माध्यम से उपलब्ध हैं और अन्य 'lsb-release' कमांड के माध्यम से उपलब्ध हैं।


धन्यवाद, लेकिन न तो यह एक सहायता है जब यह यूनिक्स या किसी अन्य गैर-लिनक्स * निक्स की बात आती है।
terdon

3

मैंने लिनक्स वितरण का संकेत देने वाली स्ट्रिंग प्राप्त करने के लिए इस शेल कमांड का उपयोग किया:

for f in $(find /etc -type f -maxdepth 1 \( ! -wholename /etc/os-release ! -wholename /etc/lsb-release -wholename /etc/\*release -o -wholename /etc/\*version \) 2> /dev/null); do echo ${f:5:${#f}-13}; done;

यह कमांड जोसेफ आर। और एसएलएम के उत्तरों पर आधारित है।

यह सिर्फ / etc / {osname} -release या / etc / {osname} _version और विशेष os नाम प्रिंट करता है।

इसमें काम किया

  • सेंटोस (सेंटो)
  • रेडहैट (रेडहैट)
  • डेबियन (डेबियन)
  • आर्क (आर्च)
  • OpenSUSE (OpenSUSE)
  • फेडोरा (फेडोरा)
  • उबंटू (डेबियन)

for f in /etc/*{_version,...*-release}; do [ -f "$f" ] && echo ${f:5:${#f}-13} ; doneउन सभी पर समान रूप से अच्छी तरह से काम नहीं करेगा? मुझे समझ में नहीं आता कि आप पहले findसभी फाइलों को क्यों देखेंगे /etc
terdon

आपकी प्रतिक्रिया के लिए धन्यवाद, टेर्डन, लेकिन आपकी कमांड कम से कम सेंट ओएस और फेडोरा में 0 लाइनें देती है
स्क्रूटरी

1
0pointer.de/blog/projects/os-release.html पूछे जाने वाले प्रश्न के लिए
weberjn

1

एसएनएमपी एक सर्वव्यापी पर्याप्त प्रोटोकॉल है ताकि कई अलग-अलग प्रकार के जीएनयू / लिनक्स वितरण और यूनिक्स प्रणालियों में पाया जा सके।

system.sysDescr.0में वस्तु SNMPv2-एमआईबी , आप पता लगा जो OS आपसे संपर्क कर रहे मदद कर सकते हैं वहाँ एक SNMP डेमॉन लक्ष्य प्रणाली में चल प्रदान की:

विवरण

इकाई का एक शाब्दिक विवरण। इस मान में सिस्टम के हार्डवेयर प्रकार, सॉफ़्टवेयर ऑपरेटिंग-सिस्टम और नेटवर्किंग सॉफ़्टवेयर का पूरा नाम और संस्करण पहचान शामिल होना चाहिए।

स्थिति: वर्तमान

प्रवेश: केवल-पढ़ने के लिए

snmpget(1)मैनपेज कैसे उदाहरण के साथ इस मान प्राप्त करने के लिए बताते हैं।


दोष यह है कि यह एक स्थिर स्ट्रिंग है जो स्वचालित रूप से बनाए नहीं रखी जाती है।
नील

1

चूंकि ऐसा करने का कोई सामान्य तरीका नहीं है, इसलिए हमने एक रिलीज़-स्ट्रिंग को snmp निष्पादन-कमांड के माध्यम से परिभाषित किया।

उस कमांड का कार्य डिस्ट्रो और ओएस के वर्तमान प्रमुख / लघु संस्करण को प्रिंट करना है।

आरएच और क्लोन पर हम पार्स / आदि / रिहाट-रिलीज, सुसे सुसे-रिलीज पर ...


हम कौन हैं'? और यूनिक्स के बारे में कैसे?
terdon

@terdon हम काम पर हमारी टीम है। यूनिक्स पर आप ऐसा ही कर सकते हैं अगर इसी विस्तार को स्नैम्प में संकलित किया जाए।
नील

आह, मैंने सोचा था कि आप कुछ मानकों समूह की :) एक हिस्सा थे
terdon

@terdon आप 80 से अधिक सर्वर का प्रबंधन करने के लिए साइट-मानक विकसित करना शुरू करते हैं। हमने इस विधि को विकसित किया ताकि हम देख सकें कि ओएस पुराना है (ईओएल नाबालिग या बड़ी संख्या में)
नील

1

इस धागे से जो चमक पाने में मैं कामयाब रहा हूँ, उससे आपको किसी भी प्रणाली के उपयोग के बारे में जानकारी प्राप्त करने में सक्षम होना चाहिए:

if which lsb_release &>> /dev/null; then
    lsb_release -a
elif [ -r /etc/issue ]; then
    cat /etc/issue
else
    ls /etc/ | grep -e '[_-]release$' -e '[_-]version$' | xargs -I % -n 1 cat /etc/%
fi

2
ls के आउटपुट को पार्स न करें!
Heinrich5991

@ heinrich5991 क्यों नहीं?
सैममाइच

तकनीकी रूप से, वह आउटपुट को पार्स नहीं कर रहा है ls। वह का उत्पादन लेक्सिंग है ls। लेकिन हाँ ... यह गलत है क्योंकि /etc/issueपूरी तरह से अविश्वसनीय है। पूरी तरह से, पूरी तरह से, पूरी तरह से अविश्वसनीय। इसके अलावा, आपकी धारणा यह है कि कोई भी 'रिलीज़' या 'संस्करण' में समाप्त होने वाली गैर-ओएस-संबंधित फ़ाइल नहीं डाल सकता है।
पार्थियन शॉट

@ParthianShot तो मुख्य रूप से आप इस मामले में दूसरे और तीसरे स्तर के कमबैक की शिकायत करना चाहते हैं कि अधिक विश्वसनीय विकल्प उपलब्ध नहीं हैं?
समिच

@Sammitch more reliable optionsखैर, एक बात के लिए, केवल एक ही विकल्प है। इसलिए यह मानकर भी कि मैं आपकी धारणा से सहमत हूं कि यह अधिक विश्वसनीय है (जो मैं नहीं करता), आइए चीजों का बहुवचन करना शुरू न करें। दूसरा, अगर कोई वास्तव में आपके समाधान का उपयोग करता है, और यह आधे समय में पूरी तरह से विफल हो जाता है, तो वे इस तथ्य से सहमत नहीं होंगे कि यह "और यदि" में विफल हो रहा था। मेरी कोई भी प्रणाली lsbडिफ़ॉल्ट रूप से स्थापित नहीं हुई है।
पार्थियन ने

1

यदि किसी स्थिति को इसके लिए बुलाया जाता है, तो आप स्नैम्पवॉक [या सामान्य रूप से एसएनएमपी प्रोटोकल] का उपयोग करके दूरस्थ रूप से पता लगा सकते हैं। एक उदाहरण नीचे है:

snmpwalk -Os -c <snmp community string> -v1 <hostname> sysDescr.0

OUPUT: sysDescr.0 = STRING: Linux example.hostname.com 2.6.32-358.23.2.el6.x86_64 # 1 एसएमपी सत 14 सितंबर 05:32:37 EDT 2013 x86_64

विश्वसनीयता की कुंजी यह है कि क्या SNMP आपके वातावरण में सही ढंग से सेटअप है, सभी होस्ट्स में समुचित कम्युनिटी स्ट्रिंग्स सेटअप के साथ स्नैम्प चल रहा है।


क्या है snpwalk? मैं इसे कहाँ पा सकता हूँ? इसके अलावा, यह सिर्फ "लिनक्स" प्रिंट करता है, कोई वितरण जानकारी (जो मुझे चाहिए, unameवह मुझे दे सकता है Linux)। क्या यह गैर-लिनक्स ओएस पर काम करता है? UNIX पर, या BSD या OSX?
terdon

snmpwalk एक लिनक्स कमांड लाइन उपयोगिता है। यह सिर्फ "लिनक्स" नहीं छापता है यह कर्नेल संस्करण को भी प्रिंट करता है जो वास्तव में केवल एक चीज है जिसकी आपको आवश्यकता है। यदि SNMP आपके अन्य होस्ट्स पर कॉन्फ़िगर किया गया है, चाहे वह UNIX, BSD, OSX, स्नैम्पवॉक काम करेगा क्योंकि यह एक मानक (v1 | v2c | v3) है, और यह विंडोज होस्ट पर भी पानी भर में काम करेगा। स्नैम्पेट या स्नम्पेटनेक्स्ट भी देखें।
xpros 16

अच्छा लगता है, लेकिन क्या आप अपना जवाब संपादित कर सकते हैं और समझा सकते हैं कि हम इसे कहां पा सकते हैं। उदाहरण के लिए यह डेबियन रेपो नहीं है। इसके अलावा, कृपया बताएं कि यह क्या देता है uname -aऔर यह मुझे वितरण का नाम नहीं बता सकता है कि यह प्रश्न क्या है। वैसे भी, यह मानते हुए भी कि यह जानकारी वापस कर सकता है, क्योंकि यह एक गैर-मानक उपयोगिता है और इसे स्थापित करने की आवश्यकता है, मुझे यकीन नहीं है कि यह यहाँ उपयोगी होगा। विचार एक दूरस्थ प्रणाली पर लॉग ऑन करना है और ओएस का पता लगाना है (यदि यह लिनक्स है तो वितरण सहित)।
terdon

it also prints the kernel version which is really the only thing you needलेकिन ... यह इस सवाल का पूरा बिंदु है। यदि वह वास्तव में आप की जरूरत थी, तो आप बस इस्तेमाल कर सकते हैं uname -a। कर्नेल एक ऑपरेटिंग सिस्टम का एक महत्वपूर्ण हिस्सा है, लेकिन यह संपूर्ण ऑपरेटिंग सिस्टम नहीं है। फाइलसिस्टम लेआउट और यूजरलैंड यूटिलिटीज (जैसे पैकेज मैनेजर) मामला।
पार्थियन शॉट

1

उपयोग करें /etc/os-release:

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.10 (Cosmic Cuttlefish)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.10"
VERSION_ID="18.10"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=cosmic
UBUNTU_CODENAME=cosmic

कारणों में अच्छी तरह से एक लिंक से एक सामान्य प्रश्न में समझाए जाते हैं http://0pointer.de/blog/projects/os-release.html अनावश्यक द्वारा प्रदान की @weberjn में इस टिप्पणी । मैं यहां केवल एक तर्क का उपयोग करता हूं, lsb_releaseजिसके उपयोग के खिलाफ 2013 से अब तक का सबसे ऊपर दिया गया उत्तर है।

इसके लिए पहले से ही lsb_release टूल मौजूद है, आप इसका उपयोग क्यों नहीं करते?खैर, यह एक बहुत ही अजीब इंटरफ़ेस है: एक शेल स्क्रिप्ट जिसे आपको आमंत्रित करना है (और इसलिए आपके सी कोड से एसिंक्रोनस रूप से स्पॉन करें), और यह एक्स्टेंसिबल होने के लिए नहीं लिखा है। यह कई वितरणों में एक वैकल्पिक पैकेज है, और कुछ भी नहीं जिसमें हम स्वागत संदेश दिखाने के लिए शुरुआती बूट के हिस्से के रूप में आमंत्रित करने में प्रसन्न होंगे। (उप-उप-उपयोगकर्ता के बूट समय के साथ कई बार हम वास्तव में स्वागत संदेश दिखाने जैसी तुच्छता के लिए एक विशाल शेल स्क्रिप्ट को लागू नहीं करना चाहते हैं)। हमारे लिए lsb_release टूल वितरण वितरण की जाँच का सार प्रतीत होता है, जहाँ वितरण जाँच के मानकीकरण की आवश्यकता होती है। यह केवल एक बुरी तरह से डिज़ाइन किया गया इंटरफ़ेस है। हमारी राय में, इसका उपयोग एलएसबी संस्करण को स्वयं निर्धारित करने के लिए एक इंटरफ़ेस के रूप में किया जाता है, लेकिन वितरण या संस्करण की जांच के लिए नहीं।


धन्यवाद, लेकिन स्वीकृत जवाब पहले ही अंत में इस उद्धरण में संबोधित करता है जो बताता है कि /etc/os-releaseअधिक मानक बनने जा रहा है। हालाँकि, वह फ़ाइल हमेशा सभी प्रणालियों पर नहीं होती है यही कारण है कि स्वीकृत उत्तर अधिक पोर्टेबल विकल्प देता है। इसके अलावा, मैं तुम क्यों सी कोड का उल्लेख कर रहे हैं पता नहीं है, सवाल सी से कुछ भी लागू बारे में नहीं है
terdon

@terdon मैं बस उत्सुक हूं कि 2018 में वे कौन से सिस्टम हैं जो /etc/os-releaseअनुपस्थित हैं? मुझे लगता है कि उनका उपयोगकर्ता आधार उन प्रणालियों की तुलना में दुखी है जहां lsb_releaseडिफ़ॉल्ट रूप से शिप नहीं किया गया है। कम से कम मैं फेडोरा पर आपके स्वीकृत उत्तर का उपयोग नहीं कर सका। सी टिप्पणी के लिए के रूप में, यह मेरा नहीं है, लेकिन systemd0pointer.de लिंक से एक उद्धरण जो मैंने प्रदान किया है।
अनातोली टेकटोनिक

हां, मुझे पता है कि यह आपका नहीं है, मैं सोच रहा था कि आपको ऐसा क्यों लगा कि सी कोड के बारे में एक उद्धरण प्रासंगिक था। और जहाँ तक मुझे पता है, os-releaseज्यादातर या विशेष रूप से एक लिनक्स चीज है। ऐसा लगता है कि FreeDesktop.org द्वारा परिभाषित किया गया है, इसलिए शायद कुछ यूनिक्स फ्लेवर्स भी इसका इस्तेमाल करते हैं, लेकिन मुझे संदेह है कि आप इसे ज्यादातर या एम्बेडेड सिस्टम या किसी गैर-जीयूआई सिस्टम आदि में पाएंगे। अंत में, यह मत भूलो कि कई जगह स्थिरता के कारणों के लिए अभी भी बहुत पुरानी मशीनों का उपयोग करें।
terdon

उद्धरण के बारे में है lsb_releaseऔर आप सी को गो के साथ बदल सकते हैं और एक ही तर्क प्राप्त कर सकते हैं। रनिंग lsb_releaseका ओवरहेड केवल स्थैतिक फ़ाइल पार्स करने की तुलना में सुरक्षा और प्रदर्शन दोनों बिंदुओं से बहुत अधिक है। मैं स्थिरता प्रदान करने वाली बहुत पुरानी मशीनों में विश्वास नहीं करता। हार्दिक और दोस्तों को उन्हें बहुत पहले ले जाना चाहिए था, इसलिए बस इस्तेमाल करें/etc/os-release
अनातोली टेकटोनिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.