উবুন্টু বিতরণের সম্পূর্ণ কোডের নাম কীভাবে পাবেন?


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) দেখায় । আমি কীভাবে আমার ইনস্টল করা উবুন্টু সিস্টেমের পূর্ণ কোডনাম ( বিশ্বস্ত তাহর ) পাব?


1
দেখে মনে হচ্ছে যে ফাইলটি সসোর্স করার ক্ষেত্রে একটি অভিজাত প্রক্রিয়া রয়েছে /etc/os-release। হতে পারে আপনি যা বোঝাতে চেয়েছেন তা আপনার নির্দিষ্ট করে দেওয়া উচিত আমি কীভাবে আমার ইনস্টল করা উবুন্টু সিস্টেমের সম্পূর্ণ কোডনাম (বিশ্বস্ত তাহর) পাব? । আপনি কি কেবল এটি টার্মিনালে প্রতিধ্বনিত করতে চান, বা আপনার কোনও ভেরিয়েবলের জন্য বরাদ্দ করা দরকার? এটি কি কিছু অ-উবুন্টু, ডেবিয়ান} সিস্টেমে ব্যবহার করা যাচ্ছে?
gniourf_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
(প্রতিধ্বনি হয় builtin) কিন্তু ঠিক আছে, এই কিভাবে সম্পর্কে: . /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

যেমনটি মাস্টার @ ইটারডনের কাছ থেকে প্রত্যাশা করা হবে :)
রিঞ্জউইন্ড

1
একটি সরল subshell পাশাপাশি কাজ হবে: ( . /etc/os-release && echo ${VERSION/*, /} )
gniourf_gniourf

5

grep:

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

ব্যাখ্যা:

  • lsb_release -rs -> আপনার ইনস্টল করা উবুন্টু সংস্করণ মুদ্রণ করে।

  • grep $(lsb_release -rs) /usr/share/python-apt/templates/Ubuntu.info -> আপনার মুক্তির সংস্করণ ধারণ করে এমন সমস্ত লাইন ধরুন, আমার ক্ষেত্রে এটি 14.04।

  • grep -m 1 "Description: Ubuntu "-> আবার শুধুমাত্র মিলেছে প্রথম লাইন (কারণ grabs -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অর্থ লাইনটির 3 ডি এবং 4 তম ক্ষেত্রগুলি 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প্রতিটি মুদ্রণ কল (এবং কিছু অন্যান্য কাপড় যা relevevant এখানে নেই) একটি newline অক্ষর যোগ করা হয়েছে। রেগুলার এক্সপ্রেশনের সাথে মেলে গত দুটি শব্দ ( \bএকটি শব্দ সীমানা হয়) এবং তাদের ছাপে লাইন থাকে VERSION=

  5. coreutils

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

    এখানে আমরা কেবল grepপ্রাসঙ্গিক লাইনটি ব্যবহার করি cutএবং ক্ষেত্রের বিভাজকটি সেট করতে space( -d ' ') এবং ২ য় ক্ষেত্র থেকে রেখার শেষ পর্যন্ত সমস্ত কিছু মুদ্রণ করি। 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 । তারপরে এটি একটি ক্রমান্বয়ে দুটি শব্দ খুঁজে পেয়ে যায় যা একটি স্পেস দ্বারা পৃথক করা হয় (পার্ল রেজেক্স)। -ও পতাকাটি কেবল অনুসন্ধানের সাথে মিলে যায়।

[a-zA-Z]সংখ্যাগুলি এড়ানোর জন্য আপনাকে `w` এর পরিবর্তে ব্যবহার করতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.