GNU/Linux >> Linux の 問題 >  >> Linux

簡単なシェルスクリプトでディストリビューション名とバージョン番号を取得するにはどうすればよいですか?

OS を取得するには と VER 、最新の標準は /etc/os-release のようです .その前は lsb_release でした と /etc/lsb-release .それ以前は、ディストリビューションごとに異なるファイルを探す必要がありました。

これが私が提案するものです

if [ -f /etc/os-release ]; then
    # freedesktop.org and systemd
    . /etc/os-release
    OS=$NAME
    VER=$VERSION_ID
elif type lsb_release >/dev/null 2>&1; then
    # linuxbase.org
    OS=$(lsb_release -si)
    VER=$(lsb_release -sr)
elif [ -f /etc/lsb-release ]; then
    # For some versions of Debian/Ubuntu without lsb_release command
    . /etc/lsb-release
    OS=$DISTRIB_ID
    VER=$DISTRIB_RELEASE
elif [ -f /etc/debian_version ]; then
    # Older Debian/Ubuntu/etc.
    OS=Debian
    VER=$(cat /etc/debian_version)
elif [ -f /etc/SuSe-release ]; then
    # Older SuSE/etc.
    ...
elif [ -f /etc/redhat-release ]; then
    # Older Red Hat, CentOS, etc.
    ...
else
    # Fall back to uname, e.g. "Linux <version>", also works for BSD, etc.
    OS=$(uname -s)
    VER=$(uname -r)
fi

unameだと思います ARCH を取得する はまだ最善の方法です。しかし、あなたが示した例は明らかにIntelシステムのみを扱います。 BITS と呼ぶか このように:

case $(uname -m) in
x86_64)
    BITS=64
    ;;
i*86)
    BITS=32
    ;;
*)
    BITS=?
    ;;
esac

または ARCH を変更してください より一般的でありながら明確なバージョン:x86 および x64 または類似:

case $(uname -m) in
x86_64)
    ARCH=x64  # or AMD64 or Intel64 or whatever
    ;;
i*86)
    ARCH=x86  # or IA32 or Intel32 or whatever
    ;;
*)
    # leave ARCH as-is
    ;;
esac

もちろんそれはあなた次第です。


最初のステップとしてこれを使用します:

ls /etc/*release

Gentoo、RedHat、Arch、および SuSE には、たとえば、. /etc/gentoo-release .人気があるようです。リリース ファイルについては、このサイトを確認してください。

Debian と Ubuntu には /etc/lsb-release が必要です これにはリリース情報も含まれており、前のコマンドで表示されます。

もう 1 つの簡単な例は uname -rv です。 .インストールされているカーネルがストック ディストリビューション カーネルの場合、通常 時々そこに名前が見つかります。


lsb_release -a . Debian で動作し、Ubuntu だと思いますが、残りについてはわかりません。通常、これは LSB (Linux Standard Base) 関連であるため、すべての GNU/Linux ディストリビューションに存在するはずです。


Linux
  1. シェルスクリプトでUbuntuのバージョン、コードネーム、OSアーキテクチャを見つける方法

  2. 簡単なシェルスクリプトで配布名とバージョン番号を取得するにはどうすればよいですか?

  3. シェルスクリプトで外部IPアドレスを取得する方法は?

  1. 現在のgitブランチの名前をシェルスクリプトの変数に取得する方法は?

  2. シェル スクリプトで外部 IP アドレスを取得するにはどうすればよいですか?

  3. 使用している Linux のバージョンを確認するにはどうすればよいですか?

  1. Linuxシェルスクリプトで数値と文字列を比較する方法

  2. iwlwifi のマイクロコード (ucode) を解析してバージョン番号を取得するにはどうすればよいですか?

  3. プロセスの pid を取得し、シェル スクリプトで kill -9 を呼び出す方法は?