আমি কীভাবে একটি সাধারণ শেল স্ক্রিপ্টে বিতরণ নাম এবং সংস্করণ নম্বর পেতে পারি?


191

আমি একটি সরল বাশ স্ক্রিপ্ট নিয়ে কাজ করছি যা উবুন্টু এবং সেন্টোস বিতরণে চলতে সক্ষম হওয়া উচিত (দেবিয়ান এবং ফেডোরা / আরএইচএল সমর্থন একটি প্লাস হতে পারে) এবং আমার স্ক্রিপ্টটি যে বিতরণে চলছে তার নাম এবং সংস্করণ জানতে হবে ( নির্দিষ্ট ক্রিয়াকলাপ ট্রিগার করার জন্য, উদাহরণস্বরূপ সংগ্রহস্থল তৈরি)। এখন পর্যন্ত আমি যা পেয়েছি তা হ'ল:

OS=$(awk '/DISTRIB_ID=/' /etc/*-release | sed 's/DISTRIB_ID=//' | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m | sed 's/x86_//;s/i[3-6]86/32/')
VERSION=$(awk '/DISTRIB_RELEASE=/' /etc/*-release | sed 's/DISTRIB_RELEASE=//' | sed 's/[.]0/./')

if [ -z "$OS" ]; then
    OS=$(awk '{print $1}' /etc/*-release | tr '[:upper:]' '[:lower:]')
fi

if [ -z "$VERSION" ]; then
    VERSION=$(awk '{print $3}' /etc/*-release)
fi

echo $OS
echo $ARCH
echo $VERSION

এটি রিলিজের নাম হিসাবে কাজ করে, ফিরে আসছে বা (আমি অন্যদের চেষ্টা করিনি) বলে মনে হচ্ছে । যাইহোক, আমার একটি অনুভূতি আছে যে এটি খুঁজে পাওয়ার আরও সহজ এবং নির্ভরযোগ্য উপায় থাকতে হবে - এটি কি সত্য?ubuntucentos

এটি রেডহ্যাটের পক্ষে কাজ করে না। / ইত্যাদি / redhat- রিলিজ অন্তর্ভুক্ত: Redhat লিনাক্স এন্টারপ্রাইজ রিলিজ 5.5

সুতরাং, সংস্করণটি তৃতীয় শব্দ নয়, আপনি আরও ভাল ব্যবহার করতে চাইবেন:

OS_MAJOR_VERSION=`sed -rn 's/.*([0-9])\.[0-9].*/\1/p' /etc/redhat-release`
OS_MINOR_VERSION=`sed -rn 's/.*[0-9].([0-9]).*/\1/p' /etc/redhat-release`
echo "RedHat/CentOS $OS_MAJOR_VERSION.$OS_MINOR_VERSION"

আপনি কি নিশ্চিতভাবে +-releaseকাজ করছেন? কার্যকরভাবে আপনি ধরে নিচ্ছেন এটি ধরে নিচ্ছেন /etc/lsb-release, তাই সম্ভবত এটি কল করুন।
মাইকেল

@Mikel: আমি প্রতিস্থাপিত *সঙ্গে +মন্তব্য formating এড়াতে, এটি হওয়া উচিত etc/*-release, এটা কাজ বলে মনে হয়।
অ্যালিক্স অ্যাক্সেল

8
ফর্ম্যাটিংটি সঠিক পেতে কখনই কোনও সিনট্যাক্স ত্রুটি প্রবর্তন করবেন না। এছাড়াও, কেবল পূর্বরূপে ফর্ম্যাট করা ভুল, চূড়ান্ত দর্শন ট্যাগগুলি থেকে বাক্য গঠনটিকে তুলে ধরে।
গিলস 21

কেন কেউ এই ফে'র উল্লেখ uname -rv | grep -i "name_of_distro"এবং প্রস্থান কোড ব্যবহার করবেন না?
পলাতক

উত্তর:


182

পেতে OSএবং VER, সর্বশেষতম মানটি মনে হচ্ছে /etc/os-release। তার আগে, ছিল lsb_releaseএবং /etc/lsb-release। তার আগে, আপনাকে প্রতিটি বিতরণের জন্য আলাদা আলাদা ফাইল সন্ধান করতে হবে।

আমি যা পরামর্শ দিচ্ছি তা এখানে

if [ -f /etc/os-release ]; then
    # freedesktop.org and systemd
    . /etc/os-release
    OS=$NAME
    VER=$VERSION_ID
elif type lsb_release >/dev/null 2>&1; then
    # linuxbase.org
    OS=$(lsb_release -si)
    VER=$(lsb_release -sr)
elif [ -f /etc/lsb-release ]; then
    # For some versions of Debian/Ubuntu without lsb_release command
    . /etc/lsb-release
    OS=$DISTRIB_ID
    VER=$DISTRIB_RELEASE
elif [ -f /etc/debian_version ]; then
    # Older Debian/Ubuntu/etc.
    OS=Debian
    VER=$(cat /etc/debian_version)
elif [ -f /etc/SuSe-release ]; then
    # Older SuSE/etc.
    ...
elif [ -f /etc/redhat-release ]; then
    # Older Red Hat, CentOS, etc.
    ...
else
    # Fall back to uname, e.g. "Linux <version>", also works for BSD, etc.
    OS=$(uname -s)
    VER=$(uname -r)
fi

আমি মনে করি unameপেতে ARCHএখনও ভাল উপায়। আপনি যে উদাহরণটি দিয়েছেন তা কেবল ইনটেল সিস্টেমকেই পরিচালনা করে। আমি হয় এটির BITSমতো ডাকতাম :

case $(uname -m) in
x86_64)
    BITS=64
    ;;
i*86)
    BITS=32
    ;;
*)
    BITS=?
    ;;
esac

বা ARCHআরও সাধারণ, তবুও দ্ব্যর্থহীন সংস্করণগুলিতে পরিবর্তন করুন: x86এবং x64বা অনুরূপ:

case $(uname -m) in
x86_64)
    ARCH=x64  # or AMD64 or Intel64 or whatever
    ;;
i*86)
    ARCH=x86  # or IA32 or Intel32 or whatever
    ;;
*)
    # leave ARCH as-is
    ;;
esac

তবে অবশ্যই এটি আপনার উপর নির্ভর করে।


2
আমি lsb_re দয়া করে পরীক্ষা করে দেখি এবং উপলভ্য হলে এটি ব্যবহার করব তবে এটি সর্বত্র উপলব্ধ নয়। উদাহরণস্বরূপ, এটি ফেডোরা 14
স্টিভেন ডি

সত্যি? আপনার সাথে এটি বানান চেষ্টা করেছেন -এবং _? হতে পারে এটি এর মধ্যে /lib/lsbবা অন্য কোথাও। কী rpm -qa "lsb*"ছাপবে?
মাইকেল

1
rpm -qa "lsb*কিছুই মুদ্রণ। মতে yum provides */lsb_releaseএটি redhat-lsb নামক একটি প্যাকেজে রয়েছে যা আমার ধারণা ডিফল্টরূপে ইনস্টল করা হয়নি। তবে আমি কোনও ফেডোরা বিশেষজ্ঞ নই, এগুলি কেবল আমার কাছে এলোমেলো ফেডোরা ভিএম এর ফলাফল এবং এটি খুব ভুল হতে পারে।
স্টিভেন ডি

3
সবেমাত্র একটি ভিএম-এ ফেডোরা 14 ইনস্টল করা হয়েছে, এবং lsb-releaseআপনি যেমন বলেছিলেন তেমন নেই ।
মাইকেল

5
ব্যবহার করবেন না $OS, $VERSION, ইত্যাদি - কনভেনশন দ্বারা, আমরা বিভিন্ন পরিবেশের (পেজার, সম্পাদক, শেল, ...) এবং অভ্যন্তরীণ শেল ভেরিয়েবল পুঁজিতে (BASH_VERSION, র্যান্ডম, ...)। অন্যান্য সমস্ত পরিবর্তনশীল নামের কমপক্ষে একটি ছোট হাতের অক্ষর থাকা উচিত। এই কনভেনশনটি দুর্ঘটনাক্রমে পরিবেশগত এবং অভ্যন্তরীণ ভেরিয়েবলগুলি অগ্রাহ্য করে avo
ক্রিস ডাউন

58

আমি প্রথম পদক্ষেপ হিসাবে এটি সঙ্গে যেতে হবে:

ls /etc/*release

জেন্টু, রেডহ্যাট, আর্ক এবং স্যুসের একটি উদাহরণ রয়েছে যাকে বলা হয় /etc/gentoo-release। জনপ্রিয় বলে মনে হচ্ছে, রিলিজ-ফাইলগুলি সম্পর্কে এই সাইটটি দেখুন ।

ডেবিয়ান এবং উবুন্টুর একটি /etc/lsb-releaseপ্রকাশিত তথ্য থাকতে হবে এবং এটি পূর্ববর্তী কমান্ডটি প্রদর্শন করবে।

অন্য একটি দ্রুত uname -rv। যদি ইনস্টল করা কার্নেলটি স্টক ডিস্ট্রো কার্নেল হয় তবে আপনি সাধারণত মাঝে মাঝে নামটি খুঁজে পাবেন।


দেবিয়ান, এটাই uname -a
tshepang

2
uname -rvযদিও তথ্য থাকে না ? uname -aপ্রসেসর এবং হোস্টনামের মতো জিনিসগুলি এখানে অপ্রাসঙ্গিকভাবে মুদ্রণ করবে। (তবে কার্নেল রিলিজ ( -r) এবং সংস্করণ ( -v) উভয়ই প্রয়োজনীয়, সমস্ত ডিস্ট্রোজই এটি একইভাবে করেন না)
ম্যাট

uname -r দেবিয়ান 6. এ দেয় 2.6.32-5-686-bigmemএবং uname -v দেয় uname -a OTOH দেয় । #1 SMP Tue Mar 8 22:14:55 UTC 2011Linux debian 2.6.32-5-686-bigmem #1 SMP Tue Mar 8 22:14:55 UTC 2011 i686 GNU/Linux
tshepang

এর দ্বিতীয় অংশটি uname -aহ'ল -nনোডনাম == হোস্টনাম। সুতরাং আমি বলতে চাই যে unameদেবিয়ান সম্পর্কে আকর্ষণীয় হবে না। এটি ভাবতে আসুন, আমি নিশ্চিত না যে এটি রেডহ্যাটটিতেও এতটা কার্যকর।
মাদুর

ওহ ঠিক আছে. সুতরাং এটি ভাগ্যক্রমে যে আমি আমার হোস্টনামটি ডিফল্ট হিসাবে সেট করেছি debian
tshepang

36

lsb_release -a। ডেবিয়ান নিয়ে কাজ করে এবং আমি উবুন্টুকে অনুমান করি তবে আমি বাকিগুলি সম্পর্কে নিশ্চিত নই। সাধারণত এটি সমস্ত জিএনইউ / লিনাক্স বিতরণে থাকা উচিত কারণ এটি এলএসবি (লিনাক্স স্ট্যান্ডার্ড বেস) সম্পর্কিত।


3
এটি জেন্টুতে ডিফল্টরূপে ইনস্টল করা হয়নি। ফেডোরায় এটি কোনও সময় ডিফল্টরূপে ছিল না (সম্ভবত এখন যদিও)
মাদুর

2
এটি ডেবিয়ান স্কিজেড, ফেডোরা 14 এবং ওপেনসুস 11.3 এ কাজ করেছে। ডেবিয়ান এবং সস-এ প্যাকেজটি lsb_release ছিল lsb- রিলিজ, ফেডোরায় এটি redhat-lsb ছিল। এটি ইতিমধ্যে ডেবিয়ান এবং সুসে ইনস্টল করা হয়েছিল, তবে ফেডোরায় নয়। আমি মনে করি এটি এখন পর্যন্ত সেরা উত্তর। +1 টি।
ফাহিম মিঠা

3
lsb_release CentOS 6 ন্যূনতম ইনস্টলের অংশ নয়।
একটি কোডার

1
lsb_release -a আয় "-bash: lsb_release: COMMAND পাওয়া যায়নি" সঙ্গে রাস্পবেরী উপর Raspbian ( ডেবিয়ান 7.1 উদ্ভূত)।
পিটার মর্টেনসেন

lsb_release- একটি রেড হ্যাট এন্টারপ্রাইজ লিনাক্স সার্ভার রিলিজ 6.6 (সান্টিয়াগো) এ কাজ করে
jwilleke

21

ওয়ান-লাইনার, ফ্যালব্যাকস, আউটপুটের এক লাইন, কোনও ত্রুটি নেই।

lsb_release -ds 2>/dev/null || cat /etc/*release 2>/dev/null | head -n1 || uname -om

সুন্দর আপনাকে ধন্যবাদ. মনে রাখবেন এটি ম্যাক ওএস এক্সে এখনও কাজ করে না, তবে এটি উবুন্টু এবং সেন্টোস (যা আমি তিনটি কাজে লাগিয়েছি) তে ভাল কাজ করে।
ওয়াইল্ডকার্ড

2
উজ্জ্বল! কেন এই ধরণের উত্তর দেয় না?
নিও


9
  1. lsb- * ইনস্টল করা নেই / বেস সেন্টস বা ডেবিয়ান সিস্টেমে বিদ্যমান নেই
  2. ওএসএক্স / প্রোক / * বিদ্যমান নেই

জাভাস্ক্রিপ্ট বিকাশকারীদের কাছ থেকে একটি পরামর্শ নিন। সংস্করণের জন্য পরীক্ষা করবেন না, সক্ষমতার জন্য পরীক্ষা করুন। এটি সুন্দর নয়, তবে এটি কার্যকর। প্রয়োজনীয় হিসাবে প্রসারিত করুন।

function os_type
{
case `uname` in
  Linux )
     LINUX=1
     which yum && { echo centos; return; }
     which zypper && { echo opensuse; return; }
     which apt-get && { echo debian; return; }
     ;;
  Darwin )
     DARWIN=1
     ;;
  * )
     # Handle AmgiaOS, CPM, and modified cable modems here.
     ;;
esac
}  

6
ইয়াম খুব ভালভাবে রেড হ্যাট, বৈজ্ঞানিক লিনাক্স বা ফেডোরা হতে পারে। ফেডোরার দেবিয়ানকে মিমিক করার জন্য একটি উপযুক্ত কমান্ড ছিল। ইত্যাদি। সেন্টস হিসাবে আপনি ইয়ামের সাথে যে কোনও কিছুর বিভাজক করা আপনাকে Red Hat 4 থেকে ফেডোরা 18 পর্যন্ত একাধিক সমর্থিত সিস্টেম দেয়, এটি লিনাক্সের ইতিহাসের প্রায় 8 বছরের। আপনার যদি <foo> সমর্থিত হয় তা জানতে প্রয়োজন, বিশেষত (অবিশ্বস্ত) বিতরণ সনাক্তকরণের ভিত্তিতে অনুমান করার পরিবর্তে <foo> দেখুন! অবশ্যই, এটি অটটুলগুলির মধ্যে কিছুটা বাড়ে, তবে এটি সাহায্য করা যায় না (ইউনিক্স যুদ্ধ শেষ হয়ে গেছে বলে কেবল ধন্যবাদ $ ডিআইটি)।
ভোনব্র্যান্ড

@ ভনব্রান্ড প্রকৃতপক্ষে, আপনি যা বলছেন ঠিক তেমনই। আমি সাব-স্বাদের মধ্যে পার্থক্য করার চেষ্টা করি না। এবং আমি যে আদেশটি পরীক্ষা করে দেখি (আশা করি) বেশিরভাগ কৃপণ পরিস্থিতি সরিয়ে দেয় (অ্যাপ্লিকেশন সহ RHEL ইনস্টল করা হবে), যদিও আমি খুব বেশি গবেষণা করিনি। যদি আরএইচইএল অ্যাপটি-ইনস্টল করতে পারে এবং উবুন্টু ব্যবহারকারীরা হুম ... ভাল, আপনি কেবল ভাগ্যের বাইরে চলে যান।
অরওয়েলফিল

6

সবচেয়ে সম্ভাব্য সাফল্যের জন্য, এই:

cat /etc/*version
cat /proc/version #linprocfs/version for FreeBSD when "linux" enabled
cat /etc/*release
uname -rv

বেশিরভাগ কেস কভার করে (এএফাইক): দেবিয়ান, উবুন্টু, স্ল্যাকওয়ার, সুস, রেডহ্যাট, জেন্টু, * বিএসডি এবং সম্ভবত অন্যান্য others


cat /etc/*versionCentOS এ (এমন কোনও ফাইল নেই) কাজ করে না (কমপক্ষে
.4.৪-

আপনি যদি কোনও ধারকটিতে কমান্ডটি চালনা করেন তবে / proc / সংস্করণে HOST বিতরণ সংস্করণ থাকবে, এবং ধারক বিতরণ নয়।
ডেরিকসন

5

বেশিরভাগ আধুনিক লিনাক্স ওএস সিস্টেমের জন্য, ফাইলটি /etc/os-releaseসত্যই স্ট্যান্ডার্ড হয়ে উঠছে এবং বেশিরভাগ ওএসে অন্তর্ভুক্ত হচ্ছে। সুতরাং আপনার বাশ স্ক্রিপ্টের ভিতরে আপনি কেবল ফাইলটি অন্তর্ভুক্ত করতে পারবেন এবং আপনার এখানে বর্ণিত সমস্ত ভেরিয়েবলের অ্যাক্সেস থাকবে (উদাহরণস্বরূপ: NAME, ভার্সন, ...)

সুতরাং আমি এটি আমার বাশ স্ক্রিপ্টে ব্যবহার করছি:

if [ -f /etc/os-release ]
then
        . /etc/os-release
else
        echo "ERROR: I need the file /etc/os-release to determine what my distribution is..."
        # If you want, you can include older or distribution specific files here...
        exit
fi

3

যদি ফাইলটি /etc/debian_versionবিদ্যমান থাকে তবে বিতরণটি হ'ল ডেবিয়ান বা ডেবিয়ান ডেরাইভেটিভ। এই ফাইলে একটি রিলিজ নম্বর থাকতে পারে; আমার মেশিনে এটি বর্তমানে 6.0.1। যদি এটি পরীক্ষা করা হয় বা অস্থির হয় তবে এটি টেস্টিং / অস্থিরতা বলতে পারে বা এটি আসন্ন প্রকাশের সংখ্যা থাকতে পারে। আমার ধারণাটি হ'ল উবুন্টুতে কমপক্ষে, এই ফাইলটি সর্বদা পরীক্ষামূলক / অস্থির হয় এবং তারা এতে প্রকাশের নম্বরটি দেয় না তবে আমি ভুল হলে কেউ আমাকে সংশোধন করতে পারে।

ফেডোরা (সাম্প্রতিক প্রকাশগুলি কমপক্ষে), একই ধরণের ফাইল রয়েছে /etc/fedora-release


এর পরিবর্তে আরও নতুন দেবিয়ান সংস্করণগুলি / ইত্যাদি / ওএস-রিলিজ ব্যবহার করে।
ডেরিকসন

1
@Dereckson আমি আমার হুইজি মেশিন চেক করা, এবং এটি উভয় হয়েছে /etc/debian_versionএবং /etc/os-release
ফাহিম মিঠা

ডেস্কট্রেট দিয়ে তৈরি জেসি ক্রুটে পরীক্ষিত। তবে প্রকৃতপক্ষে, জেসির অধীনে একটি স্থানীয় মেশিন, এই সময় আরও প্রচলিত উপায় ইনস্টল করেছে, এতে একটি /etc/debian_versionফাইল রয়েছে । সুতরাং আমরা যেভাবে দেবিয়ান ইনস্টলেশন প্রস্তুত করি তা উপলভ্য রিলিজ ফাইলগুলিকে প্রভাবিত করতে পারে, এটি আকর্ষণীয়।
ডেরিকসন

দেবিয়ান এর os-releaseসম্পূর্ণ সংস্করণ নম্বর অন্তর্ভুক্ত করে না debian_versionUnix.stackexchange.com/questions/382531 দেখুন ।
JdeBP

2

আপনি যদি এলএসবি রিলিজ ফাইলটি ব্যবহার করতে না চান বা না চান (প্যাকেজটি আনছে নির্ভরতার কারণে), আপনি ডিস্ট্রো-নির্দিষ্ট রিলিজ ফাইলগুলি সন্ধান করতে পারেন। Bcfg2 : ডিস্ট্রো জন্য প্রোবের আপনি ব্যবহার করতে সক্ষম হতে পারেন হয়েছে http://trac.mcs.anl.gov/projects/bcfg2/browser/doc/server/plugins/probes/group.txt


1

অনেকের কাছ থেকে 2 টি উপায়:

1) ব্যবহার

lsb_release -a

আমি এটি CentOS 5.5 এবং উবুন্টু 10.04 এ পরীক্ষা করেছি

CentOS এর আউটপুট হল:

LSB Version:    :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch 
Distributor ID: CentOS
Description:    CentOS release 5.5 (Final)
Release:        5.5
Codename:       Final

এবং উবুন্টুর জন্য:

LSB Version:    :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: CentOS
Description:    CentOS release 5.5 (Final)
Release:        5.5
Codename:       Final

2) নিম্নলিখিত কমান্ড লিখুন:

cat /etc/*-release

আমি এটি CentOS 5.5 এবং উবুন্টু 10.04 এ পরীক্ষা করেছি এবং এটি দুর্দান্ত কাজ করে।


lsb_release CentOS 6 এ নেই (মিনিট ইনস্টল করুন fww)
একটি কোডার

lsb_release -a আয় "-bash: lsb_release: COMMAND পাওয়া যায়নি" সঙ্গে রাস্পবেরী উপর Raspbian ( ডেবিয়ান 7.1 উদ্ভূত)।
পিটার মর্টেনসেন

0

এই স্ক্রিপ্টটি দেবিয়ান-তে কাজ করে, (উবুন্টুতে কিছুটা টুইটের প্রয়োজন হতে পারে)

#!/usr/bin/env bash

echo "Finding Debian/ Ubuntu Codename..."

CODENAME=`cat /etc/*-release | grep "VERSION="`
CODENAME=${CODENAME##*\(}
CODENAME=${CODENAME%%\)*}

echo "$CODENAME"
# => saucy, precise, lucid, wheezy, squeeze

0

এখানে আমার সহজ চেচ_ডিসট্রো সংস্করণ। ^^;

#!/usr/bin/env bash
check_distro2(){
    if [[ -e /etc/redhat-release ]]
    then
      DISTRO=$(cat /etc/redhat-release)
    elif [[ -e /usr/bin/lsb_release ]]
    then
      DISTRO=$(lsb_release -d | awk -F ':' '{print $2}')
    elif [[ -e /etc/issue ]]
    then
      DISTRO=$(cat /etc/issue)
    else
      DISTRO=$(cat /proc/version)
    fi
    }

    check_distro2
    echo $DISTRO

0

সংস্করণ ছাড়াই, কেবলমাত্র দূ:

cat /etc/issue | head -n +1 | awk '{print $1}'

এক বছর আগে ইয়াহিয়া ইয়াহিয়াউইয়ের একটি উত্তর একই কথা বলেছিল। এই দুটি উত্তরই বাস্তবে মুছে ফেলা হয়েছে এমন উত্তরগুলিতে ২০১১ সালে সম্বোধন করা হয়েছিল। সেগুলি যে কারণে ভুল তা এখনও প্রয়োগ করে।
JdeBP

0

এটি উবুন্টু 14 এবং সেন্টস 7 এ পরীক্ষা করা হয়েছিল

cat /etc/os-release | grep "PRETTY_NAME" | sed 's/PRETTY_NAME=//g' | sed 's/["]//g' | awk '{print $1}'

@ don_crissti আপনি কিভাবে এটি করবেন?
বিএসডিহেল্পার

sed -n -e '/PRETTY_NAME/ s/^.*=\|"\| .*//gp' /etc/os-release
ক্যাস

@ কাস খুব সুন্দর! এটি আমার টুলবক্সে যুক্ত করা হচ্ছে। ভাগ করার জন্য আপনাকে ধন্যবাদ।
বিএসডিহেল্পার

0

আমি এখান থেকে একটি ভাল স্ক্রিপ্ট পেয়েছি যা বেশিরভাগ সাধারণ লিনাক্স ডিস্টের জন্য কাজ করে:

#! /bin/bash
# return an awkable string consisting of
#    unix OS type, or
#    Linux dist, or
#    a long guess (based on /proc), or
#    no clue

giveUp () {
   echo "Unknown"
   exit 0
}

# keep this easily awkable, prepending an initial clue
versionGuess () {
   if [ -e /proc/version ]; then
      echo -n "Unsure "
      cat /proc/version
      exit 0
   fi
   return 1
}

# if we have ignition, print and exit
gotDist () {
   [ -n "$1" ] && echo "$1" && exit 0
}

# we are only interested in a single word "dist" here
# various malformations can occur; admin will have to code appropately based on output
linuxRelease () {
   if [ -r /etc/lsb-release ]; then
      dist=$(grep 'DISTRIB_ID' /etc/lsb-release | sed 's/DISTRIB_ID=//' | head -1)
      gotDist "$dist"
   fi

   dist=$(find /etc/ -maxdepth 1 -name '*release' 2> /dev/null | sed 's/\/etc\///' | sed 's/-release//' | head -1)
   gotDist "$dist"

   dist=$(find /etc/ -maxdepth 1 -name '*version' 2> /dev/null | sed 's/\/etc\///' | sed 's/-version//' | head -1)
   gotDist "$dist"

   return 1
}

# start with uname and branch the decision from there
dist=$(uname -s 2> /dev/null)
if [ "$dist" = "Linux" ]; then
   linuxRelease
   versionGuess
   giveUp
elif [ -n "$dist" ]; then
   echo "$dist"
   exit 0
else
   versionGuess
   giveUp
fi

# we shouldn't get here
giveUp
# done


0

একটি ফ্যাক্টর রুবি রত্ন রয়েছে, যা আপনাকে ওএস ওএস সম্পর্কে কিছু তথ্য দেয়, এটি ওএস রিলিজ ফাইল, অন্যান্য ডেটা এবং টার্মিনাল স্ক্রিনে মুদ্রণের বিশ্লেষণ করে। আপনি চেষ্টা করতে পারেন নীচের হিসাবে, রুবিজেমস ইনস্টলেশন সাথে অনুরোধ:

# apt-get install rubygems

দয়া করে উপরের কেসটি ব্যবহার করুন যা আপনার ওএসের জন্য উপযুক্ত। তারপরে রত্নটি নিজেই ইনস্টল করুন।

# gem install facter

তারপরে ব্যবহার করুন:

$ facter

দ্রষ্টব্য: ইনস্টলেশন সংক্রান্ত আরও তথ্যের জন্য ফ্যাক্টর রত্ন উত্সগুলি দেখুন।


0

কারও যদি ডিস্ট্রোও প্রয়োজন হয়:

#!/usr/bin/env bash

LINUX_VERSION_NAME=`lsb_release -sr`


# Distribution specific installation
if [[ ${LINUX_VERSION_NAME} == "18.04" ]]
then
    echo "It is: ${LINUX_VERSION_NAME}"

else
    echo "It is not ${LINUX_VERSION_NAME}"
fi

আউটপুট:

It is: 18.04

ডিস্ট্রো পেতে lsb_re দয়া করে এসএসএস করুন:

LINUX_VERSION_NAME=`lsb_release -sc`


# Distribution specific installation
if [[ ${LINUX_VERSION_NAME} == "bionic" ]]
then
    echo "It is: ${LINUX_VERSION_NAME}"

else
    echo "It is not ${LINUX_VERSION_NAME}"
fi

আউটপুট:

It is: bionic

-3

এই কমান্ডটি দেবিয়ান ভিত্তিক এবং রেডহাট ভিত্তিক বিতরণগুলির জন্য কাজ করে: trফিল্টার ব্যবহার করে আপনি নথিকে এক-শব্দের-প্রতি-লাইন ফর্ম্যাটে রূপান্তর করেন এবং তারপরে বিতরণের নাম সম্বলিত প্রথম লাইনটি গণনা করুন।

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

২০১১ সালের এখন থেকে মুছে ফেলা উত্তরের মন্তব্যগুলিতে একই কথা বলেছিল, এখনও প্রয়োগ হয়। ভুল-উত্তর দেওয়া উত্তর হিসাবে, আবার এখন মুছে ফেলা হয়েছে, যেটি বলে যে /etc/issueজেনওয়াকের কোনও সংস্করণ বা নাম নেই। এই একজন প্রশাসক-সংশোধনযোগ্য ধারণকারী কোন গ্যারান্টী আছে যে মানুষের কাছে তুলে ধরা একটি বার্তা ধারণকারী ফাইল কিছু যে programatically টেনে বের করা যেতে পারে।
JdeBP
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.