Ubuntu वितरण का पूरा कोड नाम कैसे प्राप्त करें?


33
$ lsb_release -c
Codename:   trusty

$ cat /etc/issue
Ubuntu 14.04 LTS \n \l

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04 LTS"

उपरोक्त आदेशों का आउटपुट केवल आंशिक कोड नाम (यानी, trusty) दिखाता है । मुझे अपने स्थापित Ubuntu सिस्टम का पूरा कोडनेम ( भरोसेमंद तहर ) कैसे मिलेगा ?


1
ऐसा लगता है कि फ़ाइल के सोर्सिंग की दिशा में एक अभिसरण प्रक्रिया है /etc/os-release। शायद आपको यह निर्दिष्ट करना चाहिए कि मेरे द्वारा स्थापित उबंटू प्रणाली का पूरा कोडनेम (भरोसेमंद तहर) कैसे प्राप्त करें? । क्या आप केवल इसे टर्मिनल पर प्रतिध्वनित करना चाहते हैं, या क्या आपको इसे एक चर को सौंपा जाना चाहिए? क्या यह कुछ गैर-उबंटू, डेबियन} सिस्टम पर इस्तेमाल होने वाला है?
gourourf_gniourf

जवाबों:


43

कोई बाहरी उपकरण का उपयोग करना:

आप बस स्रोत कर सकते हैं (स्रोत कमांड एक डॉट है .) /etc/os-releaseऔर आपके पास वहां परिभाषित सभी चर तक पहुंच होगी:

$ . /etc/os-release
$ echo "$VERSION"
14.04, Trusty Tahr

संपादित करें। यदि आप 14.04,भाग को निकालना चाहते हैं (जैसा कि टेराडन द्वारा पूछा गया है), आप कर सकते हैं:

$ . /etc/os-release
$ read _ UBUNTU_VERSION_NAME <<< "$VERSION"
$ echo "$UBUNTU_VERSION_NAME"
Trusty Tahr

ध्यान दें कि यह थोड़ा क्लंकी है, क्योंकि अन्य वितरणों पर, VERSIONफ़ील्ड का अलग प्रारूप हो सकता है। जैसे, मेरे डेबियन पर,

$ . /etc/os-release
$ read _ UBUNTU_VERSION_NAME <<< "$VERSION"
$ echo "$UBUNTU_VERSION_NAME"
(wheezy)

तब, आप कुछ इस तरह की कल्पना कर सकते हैं (एक स्क्रिप्ट में):

#!/bin/bash

if [[ -r /etc/os-release ]]; then
    . /etc/os-release
    if [[ $ID = ubuntu ]]; then
        read _ UBUNTU_VERSION_NAME <<< "$VERSION"
        echo "Running Ubuntu $UBUNTU_VERSION_NAME"
    else
        echo "Not running an Ubuntu distribution. ID=$ID, VERSION=$VERSION"
    fi
else
    echo "Not running a distribution with /etc/os-release available"
fi

1
(गूंज है निर्मित), लेकिन ठीक है, यह कैसे के बारे में: . /etc/os-release && echo ${VERSION//[0-9,. ]/ }?
terdon

1
@terdon एक बिल्ली की त्वचा के लिए एक से अधिक तरीके हैं ;D
gniourf_gniourf

यहां सभी टिप्पणियों का क्या हुआ?
gniourf_gniourf

2
वहाँ कई हैं और तुम्हारा एक विशेष रूप से अच्छा है! टिप्पणियां जो वास्तविक उत्तर के लिए अप्रासंगिक हैं, उन्हें चेतावनी के बिना हटाया जा सकता है।
terdon

8

जो पहले से ही पेश किया गया है उस पर मेरा संस्करण:

. /etc/os-release; echo ${VERSION/*, /}

अब तक का सबसे छोटा, बैशिएस्ट जवाब।

यदि आप /etc/os-releaseअपने वर्तमान परिवेश में सामग्री को लोड करने की परवाह नहीं करते हैं, तो आप यह सोचकर नकली बैश कर सकते हैं कि यह एक स्क्रिप्ट को आसानी से लोड कर रहा है:

bash <(cat /etc/os-release; echo 'echo ${VERSION/*, /}')

3
आप किसी और तारीख की तुलना में बशीर कहने की हिम्मत कैसे करते हैं ? यहाँ अन्य पूर्ण बैश उत्तर हैं :D
gniourf_gniourf

क्यों होता है पतन? यह एक अच्छा जवाब है (हालांकि इसके पहले दिए गए दूसरों से वैचारिक रूप से अलग नहीं है)।
gniourf_gniourf

2
हे, प्रक्रिया प्रतिस्थापन के चतुर उपयोग, +1।
terdon

एक मास्टर @terdon से :) उम्मीद करेंगे के रूप में
Rinzwind

1
एक साधारण उपधारा भी काम करेगी ( . /etc/os-release && echo ${VERSION/*, /} ):।
gourourf_gniourf

5

ग्रेप:

$ grep $(lsb_release -rs) /usr/share/python-apt/templates/Ubuntu.info | grep -m 1 "Description: Ubuntu " | cut -d "'" -f2
Trusty Tahr

स्पष्टीकरण:

  • lsb_release -rs -> अपने स्थापित Ubuntu संस्करण प्रिंट करता है।

  • grep $(lsb_release -rs) /usr/share/python-apt/templates/Ubuntu.info -> सभी लाइनों को पकड़ो जिसमें आपका रिलीज़ संस्करण है, मेरे मामले में यह 14.04 है।

  • grep -m 1 "Description: Ubuntu "-> फिर केवल मिलान वाली पहली पंक्ति ( -mध्वज के कारण ) को पकड़ लेता है जिसमें तार होता है Description: Ubuntu

  • cut -d "'" -f2 -> परिसीमन एकल उद्धरण के अनुसार क्षेत्र संख्या 2 को प्रिंट करता है '

awk:

$ awk -v var=$(lsb_release -rs) '$3~var {print $4" "$5;exit;}' /usr/share/python-apt/templates/Ubuntu.info | cut -d"'" -f2
Trusty Tahr

स्पष्टीकरण:

घोषणा और awk में चर बताए माध्यम से किया जाता -vparameter.So का मूल्य lsb_release -rs आदेश चर को सौंपा गया है varजो inturn लाइनों से क्षेत्र 4, क्षेत्र 5 मुद्रित करने के लिए स्ट्रिंग शामिल मदद करता है 14.04और मौजूद है अगर इसकी एक one.Finally पाया cutआदेश में मदद करता है एकल उद्धरण निकालें।


4

आप जिस आदेश को देख रहे हैं, वह है:

grep -oP '(?<=VERSION\=\"(\d\d)\.(\d\d)\,\ )(.*?)(?="$)' /etc/os-release

यह बहुत बदसूरत है और अनुकूलित नहीं है। मुझे यकीन है कि एक आसान तरीका होना चाहिए और इसके कुछ मुद्दे हैं।


1
. /etc/os-release 
echo $VERSION

3
आपको अभी भी संख्याओं को हटाने की आवश्यकता है, नीचे @ gniourf_gniourf का उत्तर देखें जो बिल्कुल उसी दृष्टिकोण का उपयोग करता है।
terdon

1

यहाँ कुछ और विकल्प हैं। वे सभी /etc/os-releaseफ़ाइल को पार्स करते हैं , जो मेरे 13.10 पर, इस तरह दिखता है:

NAME="Ubuntu"
VERSION="13.10, Saucy Salamander"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 13.10"
VERSION_ID="13.10"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

नीचे दिए गए सभी समाधान उत्पादन के लिए दूसरी पंक्ति को पार्स करेंगे Saucy Salamander

  1. grep

    grep -oP 'VERSION=.* \K\w* \w*' /etc/os-release
    

    इसका -oमतलब है "लाइन के केवल मिलान वाले भाग को प्रिंट करें" और -Pपर्ल कम्पेटिबल रेगुलर एक्सप्रेशंस को सक्षम करता है। यह हमें \Kउस बिंदु का उपयोग करने देता है , जो उस बिंदु तक मेल खाता था, जिसका -oअर्थ है "प्रिंट केवल उसी के बाद से मेल खाता है \K। इसलिए, उपयोग की जाने वाली वास्तविक नियमित अभिव्यक्ति एक पंक्ति के अंतिम दो शब्दों से मेल खाएगी VERSION=

  2. awk

    awk -F'[" ]' '/VERSION=/{print $3,$4}'  /etc/os-release
    

    फ़ील्ड विभाजक को इस पर सेट करना "और spaceइसका मतलब है कि लाइन के 3D और 4rth फ़ील्ड VERSION=वे स्ट्रिंग हैं जिनके बाद हम हैं।

  3. sed

    sed -nr '/VERSION=/{s/.* (\w* \w*)"/\1/;p}' /etc/os-release
    

    -nस्विच दबा सामान्य उत्पादन, कोई लाइनों प्रिंट किया जाएगा। -rविस्तारित नियमित अभिव्यक्ति की अनुमति देता है। फिर, मैच की तर्ज पर VERSION=, हम अंतिम दो शब्दों को छोड़कर सब कुछ हटा देंगे। pअंत साधन प्रिंट पर।

  4. perl

    perl -lne '/VERSION=.*\b(\w+ \w+)/ && print $1' /etc/os-release
    

    " -nस्क्रिप्ट द्वारा दी गई -e" के साथ हर इनपुट लाइन की प्रक्रिया का अर्थ है । "-l प्रत्येक प्रिंट कॉल में एक नई वर्ण जोड़ता है (और कुछ अन्य सामान जो यहां पुनः प्रकाशित नहीं होता है)। नियमित अभिव्यक्ति अंतिम दो शब्दों ( \bएक शब्द सीमा) से मेल खाती है। यदि रेखा सम्‍मिलित है तो उन्‍हें प्रिंट करता है VERSION=

  5. coreutils

    grep VERSION= /etc/os-release | cut -d ' ' -f 2-  | tr -d '"' 
    

    यहां, हम सिर्फ grepप्रासंगिक लाइन का उपयोग करते cutहैं और फ़ील्ड विभाजक space( -d ' ') को 2 डी फ़ील्ड से लाइन के अंत तक सब कुछ प्रिंट करने के लिए उपयोग करते हैं। tr -dआदेश को नष्ट करेगा "छोर से।

  6. शुद्ध खोल (बेशर्मी से @ gniourf_gniourf का चतुर sourceविचार चोरी करना ):

    . /etc/os-release && echo ${VERSION//[0-9,. ]/ }
    

    .सूत्रों फ़ाइल जो चर खोल और मैं उपयोग बैश के लिए उपलब्ध बनाता स्ट्रिंग परिवर्तन क्षमताओं संस्करण संख्याओं हटाने के लिए।


1

रेगेक्स का उपयोग करके आप ऐसा कर सकते हैं:

grep 'VERSION' /etc/os-release | grep -oP "[a-zA-Z]+ [a-zA-Z]+"

स्पष्टीकरण:

यह VERSIONफ़ाइल में मौजूद लाइन को खोजता है /etc/os-release। तब यह एक स्थान से अलग किए गए 2 क्रमिक शब्द (पर्ल रेगेक्स) पाता है। -O झंडा केवल वही रखता है जो खोज से मेल खाता है।

आपको [a-zA-Z]अंकों को शामिल करने से बचने के लिए `w` के बजाय उपयोग करना होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.