lsb_release -a
이 정보를 찾고 일관된 방식으로 수행 할 수있는 최선의 선택이 될 것입니다.
LSB의 역사
이 lsb
명령은 Linux Foundations 가 후원 하는 다양한 프로젝트 인 Linux Standards Base 프로젝트를 나타내며 다양한 Linux 배포판에서 기본적인 작업을 수행하는 일반적인 방법을 제공합니다.
이 프로젝트는 자발적이며 벤더는 사용자로서 그리고 다른 Linux 배포판 내에서 표준화를 추진하는 데 도움이되는 다양한 모듈에 대한 다양한 사양의 촉진자로서 프로젝트에 참여할 수 있습니다.
헌장 에서 발췌
LSB 작업 그룹은이 두 가지 관심사를 해결하기위한 핵심 목표입니다. 주요 배포 공급 업체와상의하여 배포에서 지원해야하는 최소 API 세트를 설명하는 표준을 게시합니다. 또한 표준에 대한 지원을 측정하는 테스트 및 도구를 제공하고 응용 프로그램 개발자가 공통 집합을 대상으로 할 수 있습니다. 마지막으로, 우리의 테스트 작업을 통해 배포판 사이에 불필요한 발산을 방지하려고합니다.
LSB와 관련된 유용한 링크
비판
LSB에는 데비안과 같은 배포판에 문제를 일으키는 여러 가지 문제가 있습니다. RPM의 강제 사용은 하나입니다. 이 문제에 대한 자세한 내용은 Wikipedia 기사를 참조하십시오 .
노벨
검색하면 Novell에서 기본 Linux 배포판 감지 라는 제목의 상당히 오래된 페이지가 표시 될 수 있습니다 . 이것은 몇 가지 주요 배포판과 사용중인 기본 배포판을 감지하는 방법을 보여주는 실제 목록을 보았던 몇 가지 장소 중 하나입니다.
발췌
Novell SUSE /etc/SUSE-release
Red Hat /etc/redhat-release, /etc/redhat_version
Fedora /etc/fedora-release
Slackware /etc/slackware-release, /etc/slackware-version
Debian /etc/debian_release, /etc/debian_version,
Mandrake /etc/mandrake-release
Yellow dog /etc/yellowdog-release
Sun JDS /etc/sun-release
Solaris/Sparc /etc/release
Gentoo /etc/gentoo-release
UnitedLinux /etc/UnitedLinux-release
ubuntu /etc/lsb-release
이 페이지에는 바닐라 uname
명령 만 사용하여 위의 코드를 작성하려고 시도하는 편리한 스크립트 와 위의 파일 중 하나가 포함되어 있습니다.
참고 : 이 목록은 날짜가 있지만 Mandrake와 같은 날짜가 지정된 배포판을 목록에서 쉽게 삭제하고 다른 것으로 대체 할 수 있습니다. 이 유형의 스크립트는 방대한 양의 Solaris 및 Linux 변형을 지원하려는 경우 접근 방식 중 하나 일 수 있습니다.
리눅스 마피아
더 많은 검색은 Linuxmafia.com에서 다음과 같은 페이지를 유지합니다. 제목은 sundry Linux (및 기타 Unix) 배포판에 해당하는 / etc / release와 같습니다 . 이것은 내가 본 것 중 가장 철저한 목록 일 것입니다. case / switch 문으로이 목록을 체계화하고이를 소프트웨어 배포의 일부로 포함시킬 수 있습니다.
실제로 해당 페이지의 맨 아래에는 정확히 그렇게하는 스크립트가 있습니다. 따라서 소프트웨어 배포판의 타사로 스크립트를 다운로드하여 사용할 수 있습니다.
스크립트
#!/bin/sh
# Detects which OS and if it is Linux then it will detect which Linux
# Distribution.
OS=`uname -s`
REV=`uname -r`
MACH=`uname -m`
GetVersionFromFile()
{
VERSION=`cat $1 | tr "\n" ' ' | sed s/.*VERSION.*=\ // `
}
if [ "${OS}" = "SunOS" ] ; then
OS=Solaris
ARCH=`uname -p`
OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
elif [ "${OS}" = "AIX" ] ; then
OSSTR="${OS} `oslevel` (`oslevel -r`)"
elif [ "${OS}" = "Linux" ] ; then
KERNEL=`uname -r`
if [ -f /etc/redhat-release ] ; then
DIST='RedHat'
PSUEDONAME=`cat /etc/redhat-release | sed s/.*\(// | sed s/\)//`
REV=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//`
elif [ -f /etc/SuSE-release ] ; then
DIST=`cat /etc/SuSE-release | tr "\n" ' '| sed s/VERSION.*//`
REV=`cat /etc/SuSE-release | tr "\n" ' ' | sed s/.*=\ //`
elif [ -f /etc/mandrake-release ] ; then
DIST='Mandrake'
PSUEDONAME=`cat /etc/mandrake-release | sed s/.*\(// | sed s/\)//`
REV=`cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//`
elif [ -f /etc/debian_version ] ; then
DIST="Debian `cat /etc/debian_version`"
REV=""
fi
if [ -f /etc/UnitedLinux-release ] ; then
DIST="${DIST}[`cat /etc/UnitedLinux-release | tr "\n" ' ' | sed s/VERSION.*//`]"
fi
OSSTR="${OS} ${DIST} ${REV}(${PSUEDONAME} ${KERNEL} ${MACH})"
fi
echo ${OSSTR}
참고 : 이 스크립트는 익숙해 보일 것입니다. Novell의 최신 버전입니다!
레그룸 스크립트
내가 본 또 다른 방법은 위의 Novell 방법과 비슷하지만 LSB를 대신 사용하여 자신의 스크립트를 롤링하는 것입니다. 이 기사 제목 : Linux (또는 UNIX) 배포 이름을 결정하는 일반적인 방법 은 이러한 방법 중 하나를 보여줍니다.
# Determine OS platform
UNAME=$(uname | tr "[:upper:]" "[:lower:]")
# If Linux, try to determine specific distribution
if [ "$UNAME" == "linux" ]; then
# If available, use LSB to identify distribution
if [ -f /etc/lsb-release -o -d /etc/lsb-release.d ]; then
export DISTRO=$(lsb_release -i | cut -d: -f2 | sed s/'^\t'//)
# Otherwise, use release info file
else
export DISTRO=$(ls -d /etc/[A-Za-z]*[_-][rv]e[lr]* | grep -v "lsb" | cut -d'/' -f3 | cut -d'-' -f1 | cut -d'_' -f1)
fi
fi
# For everything else (or if above failed), just use generic identifier
[ "$DISTRO" == "" ] && export DISTRO=$UNAME
unset UNAME
이 코드 덩어리는 시스템 /etc/bashrc
이나 그와 같은 파일에 포함되어 환경 변수를 설정할 수 있습니다 $DISTRO
.
gcc
믿거 나 말거나 다른 방법을 사용하는 것입니다 gcc
. 명령을 쿼리하면 gcc --version
gcc가 빌드 된 배포판을 얻습니다. 이것은 실행중인 시스템과 거의 동일합니다.
페도라 14
$ gcc --version
gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4)
Copyright (C) 2010 Free Software Foundation, Inc.
CentOS 5.x
$ gcc --version
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54)
Copyright (C) 2006 Free Software Foundation, Inc.
CentOS 6.x
$ gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)
Copyright (C) 2010 Free Software Foundation, Inc.
우분투 12.04
$ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
TL; DR;
어떤 것을 사용해야합니까? lsb_release -a
자주 사용하는 Linux 배포판 (RedHat, Debian, Ubuntu 등)을 사용 하는 경향이 있습니다. 제공하지 않는 시스템을 지원하는 상황에서는 lsb_release
위의 스크립트 중 하나와 비슷하게 내가 제공하는 소프트웨어 배포의 일부로 나 자신을 굴려야합니다.
업데이트 # 1 : SuSE 후속 조치
아래의 의견에서 @Nils와 이야기하면서 SLES11은 LSB가 기본적으로 설치되지 않는 것으로 나타났습니다. 이것은 선택적 설치 일 뿐이며, 이러한 유형의 주요 기능을 제공하는 패키지와 반대되는 것으로 보입니다.
그래서 OpenSuSE 프로젝트에서 누군가에게 연락하여 그 이유를 알 수있는 기회를 얻었습니다.
이메일 발췌
Hi Rob,
I hope you don't mind me contacting you directly but I found your info here:
https://en.opensuse.org/User:Rjschwei. I participate on one of the StackExchange
sites, Unix & Linux and a question recently came up regarding the best option
for determining the underlying OS.
http://unix.stackexchange.com/questions/92199/how-can-i-reliably-get-the-operating-systems-name/92218?noredirect=1#comment140840_92218
In my answer I suggested using lsb_release, but one of the other users mentioned
that this command wasn't installed as part of SLES11 which kind of surprised me.
Anyway we were looking for some way to confirm whether this was intentionally
dropped from SLES or it was accidental.
Would you know how we could go about confirming this one way or another?
Thanks for reading this, appreciate any help and/or guidance on this.
-Sam Mingolelli
http://unix.stackexchange.com/users/7453/slm
Rob의 답변입니다
Hi,
On 10/01/2013 09:31 AM, Sam Mingo wrote:
- show quoted text -
lsb_release was not dropped in SLES 11. SLES 11 is LSB certified. However, it
is not installed by default, which is consistent with pretty much every other
distribution. The lsb_release command is part of the lsb-release package.
At present almost every distribution has an entry in /etc such as
/etc/SuSE-release for SLES and openSUSE. Since this is difficult for ISVs and
others there is a standardization effort going on driven by the convergence to
systemd. The standard location for distribution information in the future will
be /etc/os-release, although Ubuntu will probably do something different.
HTH,
Robert
-- Robert Schweikert MAY THE SOURCE BE WITH YOU
SUSE-IBM Software Integration Center LINUX
Tech Lead
Public Cloud Architect
uname -s
리눅스 외부에 충분해야한다 (BSD에 대한 예상).