কীভাবে কোনও স্ক্রিপ্ট লিখবেন যা কার্যকরভাবে ডিস্ট্রো নাম নির্ধারণ করে?


13

কী পোস্টটি ইনস্টল করা আছে তা অনুসন্ধান করার জন্য আমি এই পোস্টটি বিভিন্ন উপায়ে দেখেছি , তাই আমি এমন স্ক্রিপ্ট লেখার চেষ্টা করছি যা তাদের সকলকে চেষ্টা করে। সম্ভাব্য কমান্ডগুলির মধ্যে রয়েছে:

$ cat /etc/lsb-release 
$ cat /etc/issue 
$ dmesg | head -1
$ cat /proc/version 
$ cat /etc/slackware-version 
$ cat/etc/debian-verion 

আমি এই জাতীয় কিছু লেখার চেষ্টা করেছি (আমি সাধারনত স্প্যানিশ বলতে পারি তাই এটি স্প্যানিশ ভাষায়):

function Nombre_SO()
{

    DistroName="Linux"
    if [ $DistroName = Linux ] ;
    then

# Debian
    debian=`cat /etc/debian_version | cut -d " " -f01 | tr '[:upper:]' '[:lower:]'`
    if [ "$debian" = "debian" || "squeeze/sid" || "lenny" ]; 
        then
        DistroName="debian"
        else
        echo "Esto no es debian"
    fi

# Slackware
    slackware=`cat /etc/slackware-version | cut -d " " -f01` | tr '[:upper:]' '[:lower:]'`
    if [ "$slackware" = "slackware" || "slackware-x86_64" ];
    then
        DistroName="slackware" 
    else
    echo "Esto no es Slackware"
}

কেউ কি আমাকে ডিস্ট্রোর নাম পেতে অন্য সমস্ত উপায়ে অন্তর্ভুক্ত করতে সহায়তা করতে পারে?

উত্তর:


13

প্রতিটি বিতরণ (lsb প্রচেষ্টা সত্ত্বেও) এর নাম এবং সংস্করণটি কী তা ঘোষণা করতে / ইত্যাদি / এ একটি পৃথক ফাইল ব্যবহার করতে পারে (বা এমনকি এটির অভাবও হতে পারে)।

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

আপনি যদি চাকাটি পুনর্নবীকরণ করতে না চান তবে আপনি যা খুঁজছেন তা অর্জন করতে আপনি অন্য লোকদের কাজ করতে পারেন। উদাহরণস্বরূপ মডিউল প্ল্যাটফর্মের অজগরটিতে বিতরণ অনুমান করার একটি পদ্ধতি রয়েছে:

Help on function linux_distribution in module platform:

linux_distribution(distname='', version='', id='', supported_dists=('SuSE', 'debian', 'fedora', 'redhat', 'centos', 'mandrake', 'mandriva', 'rocks', 'slackware', 'yellowdog', 'gentoo', 'UnitedLinux', 'turbolinux'), full_distribution_name=1)
    Tries to determine the name of the Linux OS distribution name.

    The function first looks for a distribution release file in
    /etc and then reverts to _dist_try_harder() in case no
    suitable files are found.

    supported_dists may be given to define the set of Linux
    distributions to look for. It defaults to a list of currently
    supported Linux distributions identified by their release file
    name.

    If full_distribution_name is true (default), the full
    distribution read from the OS is returned. Otherwise the short
    name taken from supported_dists is used.

    Returns a tuple (distname,version,id) which default to the
    args given as parameters.

উদাহরণ স্বরূপ:

In [1]: import platform

In [2]: platform.linux_distribution()
Out[2]: ('Ubuntu', '11.10', 'oneiric')

3

লিনাক্স স্ট্যান্ডার্ড বেস যে জন্য একটি কমান্ড নির্দিষ্ট করে:

lsb_release -si

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


lsb_re कृपया - কিছু ডিস্ট্রোসের সাথে কাজ করে তবে সমস্ত লিনাক্সের সাথে নয়, "আর্চলিনাক্স, স্ল্যাকওয়্যার এবং ডেরিভেটস" এর অধীনে এই কাজটি নয়, ফলাফলটি "ফাঁকা"
ইনকাজ

1

জিনিসগুলি সম্পাদন করার এটি "ব্রুট-ফোর্স" পদ্ধতির কিছুটা হলেও এটি দ্রুত এবং উচিত, ব্যাশ ব্যবহার করে বেশিরভাগ ডিস্ট্রোতে কাজ করা

ver=$(cat /etc/*{issues,release,version} 2> /dev/null)
if [[ $(echo $ver | grep DISTRIB_ID) ]]; then
    lsb_release -si
else
    echo $ver | cut -d ' ' -f 1 | sort -u | head -1
fi

1

আপনি যদি অতিরিক্ত নির্ভরতা সম্পর্কে ভয় না পান তবে আপনি এটির জন্য বিভিন্ন দিক ব্যবহার করতে পারেন । এটি lsb_re দয়া করে ইনস্টল না করেও ডিস্ট্রো নাম এবং সংস্করণ সম্পর্কে তথ্য দেয়।

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