lsb_release -a
この情報を見つけるための最良の選択肢になる可能性が高く、一貫した方法でそうすることができます。
LSBの歴史
lsb
そのコマンドでは、プロジェクトの略Linuxの標準ベース主催の傘のプロジェクトであるLinux FoundationのさまざまなLinuxディストリビューションで物事の基本的な種類を行うための一般的な方法を提供します。
このプロジェクトは任意であり、ベンダーはユーザーとしてだけでなく、さまざまなLinuxディストリビューション内の標準化を促進するさまざまなモジュールに関するさまざまな仕様のファシリテーターとしてプロジェクトに参加できます。
憲章からの抜粋
LSBワークグループは、これらの2つの懸念に対処することを中核目標としています。主要なディストリビューションベンダーと相談して、ディストリビューションがサポートする必要のある最小限のAPIを記述する標準を公開しています。また、標準のサポートを測定するテストとツールを提供し、アプリケーション開発者が共通セットをターゲットにできるようにします。最後に、テスト作業を通じて、ディストリビューション間の不必要な相違を防ぐよう努めています。
LSBに関連する便利なリンク
批判
LSBには、Debianなどのディストリビューションにとって問題となる多くの問題があります。RPMの強制使用は1つです。詳細については、ウィキペディアの記事を参照してください。
ノベル
検索すると、「NovellからUnderlying Linux Distroを検出する」というタイトルのかなり古いページが表示される可能性があります。これは、いくつかの主要なディストリビューションと、使用している基礎となるものを検出する方法を示す実際のリストを見た数少ない場所の1つです。
抜粋
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
コマンドだけを使用して上記を成文化しようとする便利なスクリプトと、上記のファイルの1つが含まれています。
注:このリストは日付が付けられていますが、Mandrakeなどの日付が付けられたディストリビューションをリストから簡単に削除して、それらを代替品に置き換えることができます。このタイプのスクリプトは、SolarisおよびLinuxのバリエーションの大部分をサポートしようとしている場合の1つのアプローチです。
Linux Mafia
さらに検索すると、Linuxmafia.comで管理されている次のページが表示されます。タイトルは、 / etc / releaseと同等のsundry Linux(およびその他のUnix)ディストリビューションです。これはおそらく私が見た中でこれまでで最も包括的なリストです。このリストを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)ディストリビューション名を決定する一般的な方法というタイトルの記事で、そのような方法の1つを示しています。
# 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が構築されたディストリビューションが取得されます。これは、実行中のシステムと常に同じです。
Fedora 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.
Ubuntu 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つと同様に、提供しているソフトウェアの配布の一部として自分でロールバックします。
更新#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
ロブの回答はこちら
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
Linux以外では十分です(おそらくBSDに期待してください)。