배포판 이름을 효과적으로 결정하는 스크립트를 작성하는 방법은 무엇입니까?


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 노력에도 불구하고)은 / etc /에있는 다른 파일을 사용하거나 이름이없는 버전을 선언하기 위해 다른 파일을 사용할 수도 있습니다.

당신은 각각의 조건을 스크립트에 추가 할 수 있습니다. 또한 일부 배포판은 다른 주요 배포판에서 파생되었으며 해당 버전 파일을 조정할 수도 있고 그렇지 않을 수도 있습니다.

휠을 재발 명하고 싶지 않으면 다른 사람들이 원하는 것을 달성하기 위해 노력할 수 있습니다. 예를 들어 모듈 플랫폼의 파이썬 에서는 분포를 추측하는 방법이 있습니다.

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

항상 기본 설치의 일부는 아니므로 모든 시스템에서 스크립트가 작동하게하려면 look-and-guess 경로로 돌아 가야합니다.


lsb_release -si은 "아치 리눅스, 슬랙웨어 제품 및 유도체"이 그나마 작업이 결과가 "빈"입니다 아래, 모든 리눅스와 일부 배포판에서 작동,하지만
inukaze

1

이것은 약간의 "브 루트 포스 (brute-force)"방법으로 달성 할 수 있지만 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

1

추가 종속성을 두려워하지 않으면 팩터 를 사용할 수 있습니다 . lsb_release를 설치하지 않아도 배포판 이름과 버전에 대한 정보를 제공합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.