배포 이름을 효율적으로 결정하는 스크립트를 어떻게 작성합니까?

배포 이름을 효율적으로 결정하는 스크립트를 어떻게 작성합니까?

나는 보았다이 게시물어떤 배포판이 설치되어 있는지 알아내는 방법은 다양하기 때문에 모두 시도해 보기 위해 스크립트를 작성해 보았습니다. 가능한 명령은 다음과 같습니다:

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

누군가가 배포판의 이름을 얻기 위해 다른 모든 방법을 함께 모을 수 있도록 도와줄 수 있습니까?

답변1

각 배포판은 (lsb의 노력에도 불구하고) 이름과 버전을 선언하기 위해 /etc/에 있는 다른 파일을 사용하거나 사용할 수 있습니다(또는 없을 수도 있습니다).

스크립트의 각 조건에 대해 조건을 추가해야 합니다. 또한 일부 배포판은 다른 주요 배포판에서 분기되어 버전 파일이 조정될 수도 있고 조정되지 않을 수도 있다는 점을 고려하십시오.

바퀴를 재발명하고 싶지 않다면 다른 사람의 작업을 활용하여 원하는 것을 달성할 수 있습니다. 예를 들어 Python의 모듈에서플랫폼분포를 추측하는 방법이 있습니다.

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')

답변2

이것리눅스 표준 라이브러리이에 대한 명령을 지정하십시오.

lsb_release -si

항상 기본 설치의 일부는 아니므로 모든 시스템에서 스크립트를 실행하려면 "보기 및 추측" 경로로 돌아가야 합니다.

답변3

이것은 작업을 완료하는 약간의 "무차별적인" 방법이지만 빠르며 bash를 사용하는 대부분의 배포판에서 작동합니다.

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

답변4

추가 종속성을 두려워하지 않으면 다음을 사용할 수 있습니다.요인그런 이유로. lsb_release가 설치되지 않은 경우에도 릴리스 이름과 버전에 대한 정보를 제공합니다.

관련 정보