
UbuntuとCentOSディストリビューションで実行できるシンプルなbashスクリプトを開発しています(DebianとFedora / RHELのサポートは利点です)。スクリプトが実行されているディストリビューションの名前とバージョンを知る必要があります。 (ストアの作成などの特定のタスクトリガーで始まります)私がこれまでに得たものは次のとおりです。
OS=$(awk '/DISTRIB_ID=/' /etc/*-release | sed 's/DISTRIB_ID=//' | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m | sed 's/x86_//;s/i[3-6]86/32/')
VERSION=$(awk '/DISTRIB_RELEASE=/' /etc/*-release | sed 's/DISTRIB_RELEASE=//' | sed 's/[.]0/./')
if [ -z "$OS" ]; then
OS=$(awk '{print $1}' /etc/*-release | tr '[:upper:]' '[:lower:]')
fi
if [ -z "$VERSION" ]; then
VERSION=$(awk '{print $3}' /etc/*-release)
fi
echo $OS
echo $ARCH
echo $VERSION
これ〜らしい仕事、復帰、またはubuntu
(centos
他は試していません)、公開名として使用します。しかし、この問題を見つけるためのより簡単で信頼できる方法があるべきだと思います。それは本当ですか?
Red Hatでは動作しません。 /etc/redhat-releaseには以下が含まれています。Redhat Linux Entrepriseバージョン5.5
したがって、バージョンを3番目の単語として使用する代わりに、次のものを使用することをお勧めします。
OS_MAJOR_VERSION=`sed -rn 's/.*([0-9])\.[0-9].*/\1/p' /etc/redhat-release`
OS_MINOR_VERSION=`sed -rn 's/.*[0-9].([0-9]).*/\1/p' /etc/redhat-release`
echo "RedHat/CentOS $OS_MAJOR_VERSION.$OS_MINOR_VERSION"
答え1
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
しかし、もちろんそれはあなた次第です。
答え2
私はこれを最初のステップにします。
ls /etc/*release
/etc/gentoo-release
Gentoo、RedHat、Arch、およびSuSEには次のファイルがあります。とても人気があるようです。このウェブサイトをチェックしてください。ファイルの公開。
/etc/lsb-release
DebianとUbuntuにはバージョン情報も含まれており、前のコマンドで表示されるファイルが必要です。
もう一つの速い方法はuname -rv
。インストールされているカーネルが純正配布カーネルの場合、通常はそのカーネルにこの名前を見つけることができます。
答え3
lsb_release -a
。 Debianで動作し、Ubuntuのようですが、残りはよくわかりません。通常、これはLSB(Linux Standard Base)に関連しているため、すべてのGNU / Linuxディストリビューションに存在する必要があります。
答え4
python -m platform
サンプル出力:
Ubuntu:
Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic
ダーバン:
Linux-4.14.117-grsec-grsec+-x86_64-with-debian-buster-sid
セントース:
Linux-3.10.0-957.1.3.el7.x86_64-x86_64-with-centos-7.6.1810-Core
Mac OS X:
Darwin-17.7.0-x86_64-i386-64bit
バラよりプラットフォームモジュール文書その行に特定の値が必要な場合。たとえば、Linuxディストリビューション名のみが必要な場合は、次のようにします。
python -c "import platform;print(platform.linux_distribution()[0])"