オペレーティングシステムの名前を確実に取得するにはどうすればよいですか?


69

リモートシステムにログインしているとしたら、どのように実行されているかを知るにはどうすればよいですか?最新のLinux(Linuces?)には、lsb_release次のコマンドがあります。

$ lsb_release -ic    
Distributor ID: LinuxMint
Codename:       debian

私が知る限り、これは単にと同じ情報を提供し/etc/lsb-releaseます。そのファイルが存在しない場合はどうなりますか?lsb_releaseコマンドが比較的新しいことを思い出すようですが、古いシステムのOSを取得する必要がある場合はどうなりますか?

いずれにせよ、というlsb意味なLinux Standard Baseので、Linux以外のUnicesでは動作しないと思います。私の知る限り、この情報unameを取得する方法はないので、使用しないシステムでこれを取得するにはどうすればよいlsb_releaseですか?


1
unix.stackexchange.com/questions/6345/…Linuxの場合。uname -sLinux以外では十分です(おそらくBSDに期待してください)。
マット

チェックアウトしましたfacterか?facter operatingsystem動作するようfacterに作られたすべてのシステムであなたが望むことをすべきです。
ジョセフR.

@JosephR。見栄えは良いが、デフォルトではインストールされない
テルドン

1
facterpastebinにオペレーティングシステム名を取得するコードを貼り付けました。ここで見つけてください。さまざまなファイルをチェックして、確実に名前を取得します。
ジョセフR.

@JosephR。うわー、それは多くのファイルです。機会があれば、それをbashに移植します。ありがとう!
テルドン

回答:


72

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 

1
注:AIXおよびSunOSを搭載したマシンで簡単なチェックを行いました。lsb_releaseがインストールされていないようです(結局、これはLinuxスタックではなくUnixです)。gccの問題は、一部のpplがclangの使用を開始することです。また、どのgccがビルドに使用されたかを確認することはできません(私が使用しているシステムでは、それぞれに少なくともいくつかのバージョンがあります)。ですから、私のソリューションは、デフォルトでどこにでもインストールされるように見えるので、Pythonソリューションに行きます。
エルモ

@elmo-はい SunOSでの私の経験は15年以上で、私が扱ったソフトウェアの大部分のベンダーは通常、上記で参照したものと同様の独自のシェルスクリプトを提供します。Solaris 11まで、Pythonはオプションではありませんでした。そして、これはそれをクラックするのが難しいナットにします。Solaris 9、10、11、AIX、およびいくつかのLinuxディストリビューション(SUSE、Ubntu、およびRHEL)で実行する必要があるソフトウェアを提供する場合、どうしますか?Pythonはオプションではないため、手作業でコーディングされたシェルスクリプトが残っています。
slm

@elmo-gccはオプションですが、私にとっても魅力的ではないようです。それはあまりにも多くの問題を抱えているように思われ、私はそれを単なる選択肢として示していました。
slm

@elmo-その関数の背後にあるコードhg.python.org/cpython/file/2.7/Lib/platform.py#l259を見てください。LSBを使用しているのは大きな驚きです!
slm

@slm:私はSunOS 5.10を使用してマシンにアクセスできます(リストでは10であると想定しています-Sunのバージョン番号/慣習にそれほど詳しくありません)。Pythonがあります。AIX 7を搭載したマシンにアクセスできますが、Pythonがあります。Linuxマシンにも明らかにあります。したがって、Pythonは最もポータブルな選択肢のように見えます。10未満のSunについては、なぜPythonをインストールできないのかわかりません(確かに、現在のインストールにはncursesとctypesが欠けているので、誰もが知っています)。LSBを使用するPythonに関しては、デフォルトのアプローチであればLinuxにとってまったく驚くことではありません。
エルモ

16

facterリモートサーバーにインストールすることはおそらくできないので、OS名を見つけるために行うことを模倣できます。operatingsystem事実のRubyコードは、pastebinにあります。基本的に、さまざまな*-releaseファイルなどを調べてOS名を決定します。

それが見るファイルのいくつか:

/etc/debian_version
/etc/gentoo-release
/etc/fedora-release
/etc/mandriva-release
/etc/mandrake-release
/etc/meego-release
/etc/arch-release
/etc/oracle-release
/etc/enterprise-release
/etc/ovs-release
/etc/vmware-release
/etc/redhat-release
/etc/SuSE-release
/etc/bluewhite64-version
/etc/slamd64-version
/etc/slackware-version
/etc/alpine-release
/etc/system-release
/etc/centos-release

このリストに重複が見つかった場合は申し訳ありませんが、ですばやく作成しましたgrep。これをPOSIXシェルスクリプトに移植するのは(少し面倒ですが)かなり簡単です。


5
「このリストで重複を見つけた場合は申し訳ありませんが、grepですばやく作成しました。」... | uniq
new123456

@ new123456そうです。ありがとう。ここでのキーワードは「迅速」です:)
ジョセフR.

これを受け入れないことは残念ですが、@ slmの答えは包括的すぎて無視できません:)。
テルドン

3
/ etc / os-releaseはどうですか?
ヤウヘンヤキモビッチ14

1
@ new123456技術的には、である必要があります... | sort -uuniq隣接する一意の要素のみを検索します。
パルティアショット

9

pythonインストール済みの場合(Python 3でもPython 2でも構いません)、ホイールを再発明せずにディストリビューション名見つけることができます。

python -c "import platform;print(platform.linux_distribution()[0])"

このオプションを使用するように誘惑されている場合は、あなたのOSがサポートされていることを確認してください:hg.python.org/cpython/file/2.7/Lib/platform.py#l259を。そうでない場合は、リストにさらに追加できます。coderwall.com
slm

1
これは古代のLinuxディストリビューションでは機能しません。たとえば、SuSE 7.0にはPython 1.5.2があり、プラットフォームモジュールは2003年にPython 2.3が登場する前に追加されました
;

6

/etc/issueリリース情報を含める必要があります。Solarisシステムで見たことはかなりあります。以下は、最新のDebianシステムからのファイルです。

$ cat /etc/issue
Debian GNU/Linux 7 \n \l

$ 

/ etc / issueはFHSでも言及されています(Linuxシステム専用ではありません)が、「オプション」です。


ああ、それは良い提案です、+ 1。常に機能するとは限りませんがThe file /etc/issue is a text file which contains a message or system identification to be printed before the login prompt.、システム管理者が望むものを書くのはシステム管理者次第のようです。
テルドン

2
/etc/issue完全に信頼できない。(バージョンXYのシステムでは、/etc/issueパッチ管理が不適切であるためYZ であるとのバナーが表示されています。これには絶対に何でも含めることができます。)
Mat

そのファイルを埋めることをお勧めします。誰がログインを許可されているかなどの法的事項。
ニルス

セキュリティガイドラインと監査人が推奨します。WELCOMEは、/ etc /問題であったため、ハッカーは罰なしに離れて来て、法律の場合には、かつてありました
ニルス・

@drewbennのマニュアルページには、最初のコメントで引用した内容が記載されていますが、システム情報を含める必要はありません。よくあることです。
テルドン

6

すべてのディストリビューションで単一のコマンドからディストリビューション名を確実に取得することはできません。いくつかは/ etc / *-releaseを介して利用でき、他は「lsb-release」コマンドを介して利用できます。


感謝しますが、Unixやその他のLinux以外の* nixに関しては、どちらも役に立ちません。
テルドン

3

このシェルコマンドを使用して、Linuxディストリビューションを示す文字列を取得しました。

for f in $(find /etc -type f -maxdepth 1 \( ! -wholename /etc/os-release ! -wholename /etc/lsb-release -wholename /etc/\*release -o -wholename /etc/\*version \) 2> /dev/null); do echo ${f:5:${#f}-13}; done;

このコマンドは、Joseph R.とslmの回答に基づいています。

/ etc / {osname} -releaseや/ etc / {osname} _versionなどのファイルを探し、特定のos名を出力します。

で働いた

  • CentOS(centos)
  • RedHat(レッドハット)
  • Debian(デビアン)
  • アーチ(アーチ)
  • OpenSUSE(OpenSUSE)
  • Fedora(フェドラ)
  • Ubuntu(debian)

for f in /etc/*{_version,...*-release}; do [ -f "$f" ] && echo ${f:5:${#f}-13} ; doneそれらすべてで等しくうまく機能しないでしょうか?で最初にfindすべてのファイルを選択する理由がわかりません/etc
テルドン

ご意見、terdonいただきありがとうございますが、あなたのコマンドは、少なくともセントOSとFedoraで0行を与える
scrutari


1

SNMPは、さまざまな種類のGNU / LinuxディストリビューションおよびUNIXシステムで使用できるように、広く普及しているプロトコルです。

SNMPv2-MIBsystem.sysDescr.0オブジェクトは、ターゲットシステムで実行されているSNMPデーモンがある場合、どのOSにアクセスしているかを見つけるのに役立ちます。

説明

エンティティのテキストによる説明。この値には、システムのハードウェアタイプ、ソフトウェアオペレーティングシステム、およびネットワークソフトウェアの完全な名前とバージョンIDを含める必要があります。

ステータス:現在

アクセス:読み取り専用

snmpget(1)マンページでは、例を挙げて、この値を取得する方法について説明します。


欠点は、これが自動的に維持されない静的な文字列であるということです。
ニルス

1

これを行う一般的な方法はないため、snmp execコマンドを使用してリリース文字列を定義しました。

このコマンドのタスクは、ディストリビューションとOSの現在のメジャー/マイナーバージョンを出力することです。

RHおよびクローンでは、/ etc / redhat-releaseを解析し、S​​uSe SuSe-releaseでは...


「私たち」とは誰ですか?そして、Unixはどうですか?
テルドン

@terdon私たちは職場のチームです。Unixでは、対応する拡張機能がsnmpdにコンパイルされている場合、同じことができます。
ニルス

ああ、私はあなたがいくつかの標準グループの一部だと思った:)
テルドン

@terdon 80を超えるサーバーを管理する必要があるときに、サイト標準の開発を開始します。OSは、(行末マイナーあるいはメジャー番号)古くなっている天気を、我々は監視することができるように、我々はこの方法を開発
ニルス

1

私がこのスレッドから収集したものから、次のものを使用して、ほとんどのシステムの近くから情報を取得できるはずです:

if which lsb_release &>> /dev/null; then
    lsb_release -a
elif [ -r /etc/issue ]; then
    cat /etc/issue
else
    ls /etc/ | grep -e '[_-]release$' -e '[_-]version$' | xargs -I % -n 1 cat /etc/%
fi

2
lsの出力を解析しないでください!
heinrich5991

@ heinrich5991どうして?
サミッチ

技術的には、彼はの出力を解析していませんls。彼はの出力を字句解析していますls。しかし、ええ...これは間違ってい/etc/issueます。完全に信頼できないからです。完全に、完全に、まったく信頼できません。また、 'release'または 'version'で終わるOSに関係のないファイルをだれも配置しないという仮定は賢明ではありません。
パルティアショット

だから、主にあなたがいる場合には、フォールバックの第二と第三のレベルに文句を言うしたい@ParthianShot より信頼性の高いオプションは使用できませんか?
サミッチ

@Sammitch more reliable optionsまあ、1 つには、選択肢が1つしかありません。したがって、信頼性が高いというあなたの仮定に同意したとしても(私はそうではありません)、物事を複数化することは始めません。第二に、誰かが実際にあなたのソリューションを使用し、それが半分の時間で完全に失敗した場合、「else if」で失敗していたという事実によって慰められません。私のシステムはどれもlsbデフォルトでインストールされていません。
パルティアショット

1

状況によっては、snmpwalk [または一般的なSNMPプロトコル]を使用してリモートで見つけることができます。以下に例を示します。

snmpwalk -Os -c <snmp community string> -v1 <hostname> sysDescr.0

OUPUT:sysDescr.0 = STRING:Linux example.hostname.com 2.6.32-358.23.2.el6.x86_64#1 SMP Sat Sep 14 05:32:37 EDT 2013 x86_64

信頼性の鍵は、環境内でSNMPが正しくセットアップされているかどうか、すべてのホストで適切なコミュニティストリングがセットアップされたsnmpが実行されているかどうかです。


なにsnpwalk?どこで見つけることができますか?また、それは単に「Linux」を出力するだけで、配布情報はありません(これは私が望むものunameですLinux)。非Linux OSで動作しますか?UNIXの場合、BSDまたはOSXですか?
テルドン

snmpwalkは、Linuxコマンドラインユーティリティです。「Linux」だけでなく、カーネルバージョンも表示されますが、実際に必要なのはこれだけです。SNMPが他のホストで構成されている場合、UNIX、BSD、OSXであるかどうかに関係なく、snmpwalkは標準(v1 | v2c | v3)として機能し、Windowsホストでも同様に機能します。snmpgetまたはsnmpgetnextも参照してください。
xpros 14年

良さそうに聞こえますが、答えを編集して、どこで見つけられるか説明してください たとえば、Debianリポジトリではありません。また、それが与えuname -aないものと、この質問の対象であるディストリビューションの名前をどのように伝えることができるかを説明してください。とにかく、この情報を返すことができると仮定しても、それが非標準のユーティリティであり、インストールする必要があるので、ここで役に立つかどうかはわかりません。考えは、リモートシステムにログオンし、OS(Linuxの場合はディストリビューションを含む)を見つけることです。
テルドン

it also prints the kernel version which is really the only thing you needしかし...それがこの質問の重要なポイントです。それが本当にあなたが必要とするすべてであったなら、あなたはただ使うことができたuname -a。カーネルはオペレーティングシステムの重要な部分ですが、オペレーティングシステム全体ではありません。ファイルシステムのレイアウトとユーザーランドユーティリティ(パッケージマネージャーなど)が重要です。
パルティアショット

1

使用/etc/os-release

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.10 (Cosmic Cuttlefish)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.10"
VERSION_ID="18.10"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=cosmic
UBUNTU_CODENAME=cosmic

理由は、このコメントで@weberjnによって無償で提供されたリンクhttp://0pointer.de/blog/projects/os-release.htmlによってFAQで詳しく説明されています。ここで、これを使用することに対する1つの引数をリストします。lsb_release

これにはすでにlsb_releaseツールがあります。なぜそれを使用しないのですか?さて、これは非常に奇妙なインターフェイスです。シェルスクリプトを呼び出す必要があり(したがって、Cコードから非同期的に生成されます)、拡張可能に書かれていません。これは多くのディストリビューションのオプションパッケージであり、ウェルカムメッセージを表示するために初期ブートの一部として呼び出すことはできません。(1秒未満のユーザー空間のブート時間では、ウェルカムメッセージを表示するような些細なことのために巨大なシェルスクリプトを呼び出したくありません)。lsb_releaseツールは、配布チェックの標準化が必要な配布チェックを抽象化する試みのようです。これは、単に設計が不適切なインターフェイスです。私たちの意見では、LSBバージョン自体を判別するためのインターフェースとして使用していますが、ディストリビューションまたはバージョンをチェックするためではありません。


感謝しますが、受け入れられた答えは、最後の引用ですでにこれに対処しており、/etc/os-releaseより標準になると説明しています。ただし、そのファイルはすべてのシステムに常に存在するとは限らないため、受け入れられた答えはより移植性の高い選択肢を提供します。また、なぜCコードに言及しているのかわかりません。質問はCから何かを呼び出すことではありません。
terdon

@terdon私はちょうど2018年にそれらのシステムが何に/etc/os-release欠けているのか興味がありますか?lsb_releaseデフォルトでは出荷されていないシステムと比較して、彼らのユーザーベースは悲惨だと思います。少なくとも私はあなたの受け入れられた答えをFedoraで使うことができませんでした。Cコメントに関しては、それは私のものではなく、私がsystemd提供した0pointer.deリンクからの引用です。
アナトリーテクトニック

はい、私はそれがあなたのものではないことを知っています、私はあなたがなぜCコードについての引用が関連していると感じたのか疑問に思っていました。そして私が知る限り、os-releaseほとんどまたは排他的にLinuxのことです。しているようで定義されたので、多分いくつかのUnixのフレーバーも、それを使用、FreeDesktop.orgによって、私はあなたが最後に、多くの場所ということを忘れないでくださいほとんどのかなどの組み込みシステムまたは任意の非GUIシステムでそれを見つけることができます疑います安定性の理由から、まだ非常に古いマシンを使用しています。
テルドン

引用は約でlsb_releaseあり、CをGoに置き換えて同じ引数を取得できます。実行のオーバーヘッドは、lsb_release静的ファイルを解析するよりもセキュリティとパフォーマンスの両方の点ではるかに高くなります。非常に古いマシンが安定性を提供するとは思わない。Heartbleedと友人はずっと前にそれらを取り去るべきだったので、ただ使用してください/etc/os-release
アナトリーtechtonik
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.