Dağıtım adını etkili bir şekilde belirleyen bir komut dosyası nasıl yazılır?


13

Bu dağıtımı hangi dağıtımın yüklü olduğunu bulmak için tüm farklı yollarda gördüm , bu yüzden hepsini deneyen bir komut dosyası yazmaya çalışıyorum. Olası komutlar şunları içerir:

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

Böyle bir şey yazmaya çalıştım (normalde İspanyolca konuşuyorum, bu yüzden İspanyolcada):

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"
}

Birisi bir dağıtımın adını almanın diğer tüm yollarını birleştirmeme yardımcı olabilir mi?

Yanıtlar:


13

Her dağıtım (lsb çabalarına rağmen) adının ve sürümünün ne olduğunu bildirmek için / etc / dosyasında farklı bir dosya kullanabilir veya kullanabilir (hatta eksik olabilir).

Senaryonuza her biri için bir koşul eklemelisiniz. Ayrıca, bazı dağıtımların diğer büyüklerden türetildiğini ve sürüm dosyalarını uyarlayıp uyarlamayabileceğini de dikkate alın.

Tekerleği yeniden icat etmek istemiyorsanız, aradığınız şeyi başarmak için diğer insanları kullanabilirsiniz. Örneğin, modül platformundaki python'da dağılımı tahmin etmek için bir yöntem vardır:

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.

Örneğin:

In [1]: import platform

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

3

Linux Standard Base bunun için bir komut belirtir:

lsb_release -si

Her zaman varsayılan kurulumun bir parçası değildir, bu nedenle komut dosyanızın her sistemde çalışmasını istiyorsanız, bak ve tahmin yoluna geri dönmeniz gerekir.


lsb_release -si "Arch Linux, Slackware & Türevleri" Bu do not eser, sonuç "boş" olduğunu altında, tüm linux ile Bazı dağıtımlarda ile çalışır, ancak
inukaze

1

Bu, şeyleri başarmak için bir "kaba kuvvet" yöntemidir, ancak hızlıdır ve bash kullanarak çoğu dağıtımın üzerinde çalışmalıdır.

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

Ek bağımlılıklardan korkmuyorsanız, bunun için facter kullanabilirsiniz . Lsb_release kurulu olmasa bile dağıtım adı ve sürümü hakkında bilgi verir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.